O comando ANALYZE coleta estatísticas sobre o conteúdo das tabelas do banco de dados, e armazena os resultados na tabela do sistema pg_statistic. Posteriormente, o planejador de comandos utiliza estas estatísticas para ajudar a determinar o plano de execução mais eficiente para os comandos. [1] [2]
Sem nenhum parâmetro, o comando ANALYZE analisa todas as tabelas do banco de dados corrente. Com um parâmetro, o comando ANALYZE analisa somente esta tabela. É possível, também, fornecer uma lista de nomes de colunas e, neste caso, somente são coletadas estatísticas para estas colunas.
Ativa a exibição das mensagens de progresso.
O nome (possivelmente qualificado pelo esquema) da tabela a ser analisada. O padrão é analisar todas as tabelas do banco de dados corrente.
O nome de uma determinada coluna a ser analisada. O padrão é analisar todas as colunas.
Quando VERBOSE é especificado, o comando ANALYZE emite mensagens de progresso indicando qual tabela está sendo processada no momento, e também são mostradas várias estatísticas sobre as tabelas.
Aconselha-se executar o comando ANALYZE periodicamente, ou logo após realizar uma alteração importante no conteúdo de uma tabela. Estatísticas precisas auxiliam o planejador na escolha do plano de comando mais apropriado e, portanto, melhoram o tempo do processamento do comando. Uma estratégia habitual é executar VACUUM e ANALYZE uma vez por dia em hora de pouca utilização.
Ao contrário do comando VACUUM FULL, o comando ANALYZE requer somente um bloqueio de leitura na tabela podendo, portanto, ser executado em conjunto com outras atividades na tabela.
As estatísticas coletadas pelo comando ANALYZE geralmente incluem uma lista de alguns dos valores mais comuns de cada coluna, e um histograma mostrando a distribuição aproximada dos dados em cada coluna. Uma destas informações, ou as duas, podem ser omitidas se o comando ANALYZE considerá-las sem importância (por exemplo, em uma coluna de chave única não existem valores repetidos), ou se o tipo de dado da coluna não suportar os operadores apropriados. Existem informações adicionais sobre estatísticas no Capítulo 21.
Nas tabelas grandes o comando ANALYZE pega amostras aleatórias do conteúdo da tabela, em vez de examinar todas as linhas. Esta estratégia permite que mesmo tabelas muito grandes sejam analisadas em curto espaço de tempo. Entretanto, deve ser observado que as estatísticas são apenas aproximadas, e mudam um pouco cada vez que o comando ANALYZE é executado, mesmo que o conteúdo da tabela não se altere, podendo provocar pequenas mudanças no custo estimado pelo planejador mostrado pelo comando EXPLAIN. Em situações raras, este não determinismo faz o otimizador de consultas escolher planos diferentes entre execuções do comando ANALYZE. Para evitar esta situação, a quantidade de estatísticas coletada pelo comando ANALYZE deve ser aumentada, conforme descrito abaixo.
A extensão da análise pode ser controlada ajustando o valor da variável de configuração default_statistics_target, ou coluna por coluna definindo a quantidade de estatísticas por coluna através do comando ALTER TABLE ... ALTER COLUMN ... SET STATISTICS (consulte o comando ALTER TABLE). A quantidade especificada define o número máximo de entradas presentes na lista de valores com maior incidência, e o número máximo de barras no histograma. O valor padrão é 10, mas pode ser ajustado para mais, ou para menos, para balancear a precisão das estimativas do planejador contra o tempo gasto para executar o comando ANALYZE e a quantidade de espaço ocupado pela tabela pg_statistic. Em particular, especificar o valor zero desativa a coleta de estatísticas para a coluna, podendo ser útil em colunas que nunca são usadas como parte das cláusulas WHERE, GROUP BY ou ORDER BY nos comandos, porque as estatísticas para estas colunas nunca são utilizadas pelo planejador.
A quantidade máxima de estatísticas entre as colunas sendo analisadas determina o número de linhas amostradas para preparar as estatísticas. Aumentar a quantidade aumenta proporcionalmente o tempo e o espaço necessários para o comando ANALYZE.
[1] |
Oracle — Estatísticas do otimizador de comandos no dicionário de dados — As estatísticas utilizadas pelo otimizador de comandos são armazenadas no dicionário de dados. Através do uso do pacote DBMS_STATS podem ser coletadas estatísticas exatas ou estimadas sobre as características do armazenamento físico e distribuição dos dados nos objetos do esquema. Para manter a efetividade do otimizador de comandos devem existir estatísticas que são representativas dos dados. Para as colunas de tabela que contêm muita variação no número de valores idênticos, chamados de dados assimétricos, devem ser coletados histogramas. As estatísticas resultantes fornecem ao otimizador de comandos informações sobre a unicidade dos dados e a distribuição. Utilizando esta informação, o otimizador de comandos é capaz de computar os custos dos planos com alto grau de precisão. Isto permite ao otimizador de comandos escolher o melhor plano de execução baseado no menor custo. Se não existirem estatísticas disponíveis ao se utilizar a otimização do comando, o otimizador fará uma amostragem dinâmica dependendo da definição do parâmetro de inicialização OPTMIZER_DYNAMIC_SAMPLING. Isto pode causar tempos de análise mais lentos, portanto para um melhor desempenho o otimizador deve possuir estatísticas de otimização representativas. Oracle® Database Performance Tuning Guide 10g Release 1 (10.1) Part Number B10752-01 (N. do T.) |
[2] |
DB2 — Coletando estatísticas em uma amostra dos dados — As estatísticas da tabela são utilizadas pelo analisador de comandos para selecionar o melhor plano de acesso para um dado comando, portanto é importante que as estatísticas permaneçam atualizadas para refletir de forma precisa o estado da tabela a qualquer momento. Conforme a atividade na tabela aumenta, a freqüência da coleta de estatísticas deve aumentar também. Com o aumento do tamanho dos bancos de dados, está se tornando mais importante descobrir formas eficientes de coletar estatísticas. A amostragem aleatória dos dados da tabela onde são coletadas as estatísticas pode melhorar o desempenho do comando RUNSTATS. Nos sistemas com uso intensivo de E/S e de CPU os benefícios de desempenho podem ser enormes. Quanto menor a amostra, mais rápido o comando RUNSTATS termina. DB2 Version 9 for Linux, UNIX, and Windows (N. do T.) |