Quanto um ANALYZE VERBOSE pode ajudar em um PostgreSQL degradado?
O que ANALYZE VERBOSE realmente atualiza no PostgreSQL, como validar estatísticas antes e depois e por que melhora posterior não prova causa raiz.
Em um PostgreSQL degradado, ANALYZE VERBOSE costuma aparecer como uma ação relativamente simples: atualizar estatísticas e deixar o planner trabalhar com uma fotografia mais recente dos dados.
O problema começa quando essa ação vira uma explicação completa do incidente.
Em uma investigação real, ANALYZE VERBOSE foi executado em tabelas relevantes depois da coleta de sessões, waits, dead tuples e estatísticas. Após a execução, campos ligados a modificações desde o último analyze foram reduzidos e as estatísticas passaram a refletir a nova coleta.
Isso prova que o ANALYZE fez seu trabalho.
Não prova que ele era a causa raiz da degradação.
O que ANALYZE faz #
O PostgreSQL usa estatísticas para estimar cardinalidade e escolher planos.
Quando os dados mudam muito desde a última coleta, estimativas antigas podem contribuir para planos ruins.
A execução manual pode ser:
| |
ou:
| |
O VERBOSE adiciona informação sobre o trabalho executado; não muda a finalidade principal da operação.
Antes de executar, registre o estado #
Uma coleta útil:
| |
Isso ajuda a responder:
| |
Sem essa fotografia, depois é difícil demonstrar o que realmente mudou.
n_mod_since_analyze é uma pista, não um SLA universal #
Esse campo ajuda a mostrar quantas modificações foram registradas desde a última análise estatística.
Um valor alto pode justificar investigação.
Mas não existe um número universal em que:
| |
A relevância depende do tamanho da tabela, distribuição dos dados, consultas e thresholds do autovacuum/autoanalyze.
Depois do ANALYZE, valide o que mudou #
Repita a mesma consulta:
| |
O esperado é observar timestamp atualizado e queda nas modificações pendentes de análise para as tabelas processadas.
Essa é a evidência direta do efeito da ação.
O que não muda automaticamente #
ANALYZE não:
- cria índice;
- remove query duplicada da aplicação;
- aumenta IOPS;
- corrige lock;
- reduz conexão excessiva por si só;
- elimina dead tuples como um
VACUUMfaria; - resolve falta de memória;
- prova que um plano anterior estava errado.
É comum executar ANALYZE, observar melhora e atribuir todo o incidente à estatística desatualizada. Isso pode ser verdade, mas precisa ser demonstrado.
Para falar em causalidade, compare plano e comportamento #
Quando for seguro, uma comparação útil é:
| |
antes e depois da atualização de estatísticas.
Em produção, atenção: EXPLAIN ANALYZE executa a consulta real.
Quando isso não for aceitável, use apenas:
| |
E preserve os planos para comparação.
Correlacione com waits #
No caso que originou esta pauta, a investigação também tinha consultas esperando eventos como DataFileRead e BufferIO.
Isso significa que a análise não poderia parar no planner.
Era necessário correlacionar:
| |
Um banco pode ter estatísticas recém-atualizadas e ainda estar limitado por storage ou por workload concorrente.
ANALYZE VERBOSE é útil por ser observável #
A saída verbose ajuda a documentar quais relações foram efetivamente processadas.
Em um procedimento operacional, eu salvaria:
| |
Assim a ação deixa de ser “rodei analyze e parece melhor”.
Quando eu consideraria executar manualmente #
Faz sentido investigar um ANALYZE manual quando:
- houve carga ou importação relevante;
- tabela mudou muito desde a última coleta;
last_autoanalyzeestá antigo ou ausente;- plano parece incoerente com a cardinalidade real;
- autovacuum/autoanalyze pode não estar acompanhando;
- existe janela operacional para executar e medir.
A ação deve ser dirigida às tabelas relevantes, não um ritual genérico em toda a base sem necessidade.
O que a fonte deste artigo sustenta #
A coleta operacional recuperada registra uma investigação PostgreSQL com estatísticas de tabelas, dead tuples, atividade e waits, seguida de ANALYZE VERBOSE em relações selecionadas e nova verificação das estatísticas.
O texto não afirma que ANALYZE resolveu sozinho o incidente nem transforma correlação temporal em RCA.
Checklist #
| |
O principal aprendizado #
ANALYZE VERBOSE pode ser uma ação importante em um banco degradado, mas seu valor aumenta quando ele é tratado como mudança mensurável dentro de uma investigação, não como botão de correção genérico.
Atualizar estatísticas é fato. Explicar o incidente exige mais evidência.
Me chama.
Manda o contexto, os sintomas e o que já foi testado. Bora organizar as evidências antes de sair mexendo.