Categorias:

Funções do sistema (Informações do sistema)

SYSTEM$ESTIMATE_SEARCH_OPTIMIZATION_COSTS

Retorna os custos estimados para adicionar uma otimização de pesquisa a uma determinada tabela e configurar colunas específicas para a otimização de pesquisa.

Importante

Os cálculos de custo retornados pela função SYSTEM$ESTIMATE_SEARCH_OPTIMIZATION_COSTS são os melhores esforços. Os custos reais realizados podem variar significativamente (até 50% ou, em casos raros, várias vezes) dos custos estimados.

  • As estimativas de custo de criação e armazenamento são baseadas na amostragem de um subconjunto das linhas da tabela

  • As estimativas de custo de manutenção são baseadas em atividades recentes de criação, exclusão e atualização na tabela

Sintaxe

SYSTEM$ESTIMATE_SEARCH_OPTIMIZATION_COSTS('<table_name>' [ , '<search_method_with_target>' ])

Argumentos

Obrigatório:

table_name

Tabela para a qual você deseja estimar os custos de otimização de pesquisa.

Se o nome da tabela não for totalmente qualificado (na forma de db_name.schema_name.table_name ou schema_name.table_name), a função procura a tabela no esquema atual para a sessão.

O nome completo deve ser delimitado por aspas simples.

Opcional:

search_method_with_target

Especifica um método de pesquisa e um alvo para uma configuração de coluna semelhante ao que pode ser especificado na cláusula ON do comando ALTER TABLE … ADD SEARCH OPTIMIZATION.

Todo esse argumento deve ser colocado entre aspas simples. Nessa cadeia de caracteres, use aspas duplas ao redor dos nomes das colunas onde for necessário.

Saída

A função retorna um objeto JSON com as propriedades descritas abaixo:

Propriedade

Descrição

tableName

Nome da tabela.

searchOptimizationEnabled

true se a otimização de pesquisa estiver definida para a tabela ou qualquer coluna presente nela; caso contrário, false.

costPositions

Matriz de objetos que descrevem os custos previstos da adição de otimização de pesquisa à tabela ou suas colunas.

Cada objeto da matriz costPositions representa um tipo diferente de estimativa de custos:

...
"costPositions" : [
  {
    "name" : "BuildCosts",
    ...
  }, {
    "name" : "StorageCosts",
    ...
  }, {
    "name" : "Benefit",
    ...
  }, {
    "name" : "MaintenanceCosts",
    ...
  }
]
...

A propriedade name identifica o tipo de custo representado pelo objeto. O name pode ser um dos seguintes:

name de objeto em costPositions

Descrição

BuildCosts

Este objeto descreve os custos previstos para a criação do caminho de acesso de pesquisa para a tabela. Se a otimização de pesquisa já tiver sido adicionada à tabela ou a todas as colunas especificadas, este objeto não conterá informações sobre custos.

StorageCosts

Este objeto descreve a quantidade prevista de espaço de armazenamento (em TB) necessário para o caminho de acesso de pesquisa para a tabela.

Benefit

Este objeto aparece somente quando a tabela tem a otimização de pesquisa ativada. No momento, ele não contém informações.

MaintenanceCosts

Este objeto descreve os custos previstos para a manutenção do caminho de acesso de pesquisa para a tabela quando as linhas são inseridas, excluídas ou modificadas. Se a tabela tiver sido criada recentemente, nenhuma informação de custo será relatada.

Cada objeto da matriz costPositions pode ter as seguintes propriedades:

Propriedade

Descrição

name

Nome que identifica o tipo de informação de custo representado por este objeto.

costs

Objeto que descreve os custos previstos em termos das seguintes propriedades:

value

Montante do custo previsto.

unit

Unidade de medida do custo (por exemplo, “Créditos” para custos de computação, “TB” para custos de armazenamento etc.).

perTimeUnit

Para os custos de manutenção, a unidade de tempo que o custo estimado cobre (por exemplo, "MONTH" para o custo por mês).

computationMethod

Método usado para estimar os custos, caso haja vários métodos disponíveis.

comment

Informações adicionais sobre o custo estimado.

Notas de uso

  • A propriedade searchOptimizationEnabled é true quando a tabela ou qualquer coluna nela contida tem a otimização de pesquisa ativada.

  • Para o custo de criação, esta função retorna uma aproximação baseada na criação de caminhos de acesso de pesquisa para uma amostra dos dados na tabela especificada.

  • Para o custo de manutenção, esta função baseia as estimativas nas mudanças recentes feitas na tabela (as mudanças de bytes ao longo do tempo).

  • Para chamar a função, você deve ter um warehouse em uso. Se nenhum warehouse estiver em uso no momento, a função informa o seguinte erro:

    No active warehouse selected in the current session.
    Select an active warehouse with the 'use warehouse' command.
    

    O tamanho do warehouse não afeta o desempenho desta função, por isso você pode usar um warehouse X-Small.

  • Como a função usa um warehouse, você é cobrado pelo uso do warehouse dessa função.

  • A função pode demorar entre 20 segundos até 10 minutos para ser concluída. Usar um warehouse maior não resultará em uma execução mais rápida.

Exemplos

O exemplo a seguir mostra os custos estimados para adicionar a otimização de pesquisa a uma tabela:

SELECT SYSTEM$ESTIMATE_SEARCH_OPTIMIZATION_COSTS('table_without_search_opt')
  AS estimate_for_table_without_search_optimization;
+---------------------------------------------------------------------------+
| ESTIMATE_FOR_TABLE_WITHOUT_SEARCH_OPTIMIZATION                            |
|---------------------------------------------------------------------------|
| {                                                                         |
|   "tableName" : "TABLE_WITHOUT_SEARCH_OPT",                               |
|   "searchOptimizationEnabled" : false,                                    |
|   "costPositions" : [ {                                                   |
|     "name" : "BuildCosts",                                                |
|     "costs" : {                                                           |
|       "value" : 11.279,                                                   |
|       "unit" : "Credits"                                                  |
|     },                                                                    |
|     "computationMethod" : "Estimated",                                    |
|     "comment" : "estimated via sampling"                                  |
|   }, {                                                                    |
|     "name" : "StorageCosts",                                              |
|     "costs" : {                                                           |
|       "value" : 0.070493,                                                 |
|       "unit" : "TB"                                                       |
|     },                                                                    |
|     "computationMethod" : "Estimated",                                    |
|     "comment" : "estimated via sampling"                                  |
|   }, {                                                                    |
|     "name" : "MaintenanceCosts",                                          |
|     "costs" : {                                                           |
|       "value" : 30.296,                                                   |
|       "unit" : "Credits",                                                 |
|       "perTimeUnit" : "MONTH"                                             |
|     },                                                                    |
|     "computationMethod" : "Estimated",                                    |
|     "comment" : "Estimated from historic change rate over last ~11 days." |
|   } ]                                                                     |
| }                                                                         |
+---------------------------------------------------------------------------+

O exemplo a seguir mostra a saída desta função para uma tabela que já tem otimização de pesquisa ativada. Você pode ver que nenhuma informação de custo de criação está disponível nesse caso. Além disso, a propriedade Benefit está incluída (mas não contém nenhuma informação).

SELECT SYSTEM$ESTIMATE_SEARCH_OPTIMIZATION_COSTS('table_with_search_opt')
  AS estimate_for_table_with_search_optimization;
+---------------------------------------------------------------------------+
| ESTIMATE_FOR_TABLE_WITH_SEARCH_OPTIMIZATION                               |
|---------------------------------------------------------------------------|
| {                                                                         |
|   "tableName" : "TABLE_WITH_SEARCH_OPT",                                  |
|   "searchOptimizationEnabled" : true,                                     |
|   "costPositions" : [ {                                                   |
|     "name" : "BuildCosts",                                                |
|     "computationMethod" : "NotAvailable",                                 |
|     "comment" : "Search optimization is already enabled."                 |
|   }, {                                                                    |
|     "name" : "StorageCosts",                                              |
|     "costs" : {                                                           |
|       "value" : 0.052048,                                                 |
|       "unit" : "TB"                                                       |
|     },                                                                    |
|     "computationMethod" : "Measured"                                      |
|   }, {                                                                    |
|     "name" : "Benefit",                                                   |
|     "computationMethod" : "NotAvailable",                                 |
|     "comment" : "Currently not supported."                                |
|   }, {                                                                    |
|     "name" : "MaintenanceCosts",                                          |
|     "costs" : {                                                           |
|       "value" : 30.248,                                                   |
|       "unit" : "Credits",                                                 |
|       "perTimeUnit" : "MONTH"                                             |
|     },                                                                    |
|     "computationMethod" : "EstimatedUpperBound",                          |
|     "comment" : "Estimated from historic change rate over last ~11 days." |
|   } ]                                                                     |
| }                                                                         |
+---------------------------------------------------------------------------+

O exemplo a seguir mostra a saída dessa função para estimar a otimização de pesquisa em três colunas específicas de uma tabela usando o método de pesquisa EQUALITY (ou seja, a estimativa é para ativar a otimização da pesquisa somente para comparações de igualdade nessas colunas). Nem a tabela nem nenhuma de suas colunas já têm qualquer tipo de otimização de pesquisa ativada.

SELECT SYSTEM$ESTIMATE_SEARCH_OPTIMIZATION_COSTS('table_without_search_opt', 'EQUALITY(C1, C2, C3)')
  AS estimate_for_columns_without_search_optimization;
+---------------------------------------------------------------------------+
| ESTIMATE_FOR_COLUMNS_WITHOUT_SEARCH_OPTIMIZATION                          |
|---------------------------------------------------------------------------|
| {                                                                         |
|   "tableName" : "TABLE_WITHOUT_SEARCH_OPT",                               |
|   "searchOptimizationEnabled" : false,                                    |
|   "costPositions" : [ {                                                   |
|     "name" : "BuildCosts",                                                |
|     "costs" : {                                                           |
|       "value" : 10.527,                                                   |
|       "unit" : "Credits"                                                  |
|     },                                                                    |
|     "computationMethod" : "Estimated",                                    |
|     "comment" : "estimated via sampling"                                  |
|   }, {                                                                    |
|     "name" : "StorageCosts",                                              |
|     "costs" : {                                                           |
|       "value" : 0.040323,                                                 |
|       "unit" : "TB"                                                       |
|     },                                                                    |
|     "computationMethod" : "Estimated",                                    |
|     "comment" : "estimated via sampling"                                  |
|   }, {                                                                    |
|     "name" : "MaintenanceCosts",                                          |
|     "costs" : {                                                           |
|       "value" : 22.821,                                                   |
|       "unit" : "Credits",                                                 |
|       "perTimeUnit" : "MONTH"                                             |
|     },                                                                    |
|     "computationMethod" : "Estimated",                                    |
|     "comment" : "Estimated from historic change rate over last ~7 days."  |
|   } ]                                                                     |
| }                                                                         |
+---------------------------------------------------------------------------+

Se uma consulta semelhante for executada em uma tabela em que a otimização de pesquisa já esteja ativada para qualquer uma das colunas especificadas, o resultado incluirá uma estimativa de custo de criação que abranja a adição de otimização de pesquisa às colunas especificadas em que ela ainda não esteja ativada. Isso é diferente do exemplo anterior, em que estávamos estimando a otimização de pesquisa em uma tabela inteira em que a otimização de busca já estava ativada, o que resultou em nenhuma estimativa de custo de criação, pois não havia trabalho de criação a ser feito.

A estimativa de armazenamento aqui inclui apenas o tamanho real do caminho de acesso à pesquisa para as colunas em que a otimização de pesquisa já está ativada.

A estimativa de manutenção abrange todas as colunas especificadas, independentemente de elas já terem a otimização de pesquisa ativada.

SELECT SYSTEM$ESTIMATE_SEARCH_OPTIMIZATION_COSTS('table_with_search_opt', 'EQUALITY(C1, C2, C3)')
  AS estimate_for_columns_with_search_optimization;
+---------------------------------------------------------------------------+
| ESTIMATE_FOR_COLUMNS_WITH_SEARCH_OPTIMIZATION                             |
|---------------------------------------------------------------------------|
| {                                                                         |
|   "tableName" : "TABLE_WITH_SEARCH_OPT",                                  |
|   "searchOptimizationEnabled" : true,                                     |
|   "costPositions" : [ {                                                   |
|     "name" : "BuildCosts",                                                |
|     "costs" : {                                                           |
|       "value" : 8.331,                                                    |
|       "unit" : "Credits"                                                  |
|     },                                                                    |
|     "computationMethod" : "Estimated",                                    |
|     "comment" : "estimated via sampling"                                  |
|   }, {                                                                    |
|     "name" : "StorageCosts",                                              |
|     "costs" : {                                                           |
|       "value" : 0.040323,                                                 |
|       "unit" : "TB"                                                       |
|     },                                                                    |
|     "computationMethod" : "Estimated",                                    |
|     "comment" : "estimated via sampling"                                  |
|   }, {                                                                    |
|     "name" : "Benefit",                                                   |
|     "computationMethod" : "NotAvailable",                                 |
|     "comment" : "Currently not supported."                                |
|   }, {                                                                    |
|     "name" : "MaintenanceCosts",                                          |
|     "costs" : {                                                           |
|       "value" : 22.821,                                                   |
|       "unit" : "Credits",                                                 |
|       "perTimeUnit" : "MONTH"                                             |
|     },                                                                    |
|     "computationMethod" : "Estimated",                                    |
|     "comment" : "Estimated from historic change rate over last ~7 days."  |
|   } ]                                                                     |
| }                                                                         |
+---------------------------------------------------------------------------+