0Pricing
SQL Academy · Aula

ANALYZE e pg_statistic

Mantenha atualizadas as estatísticas do planejador com ANALYZE, inspecione pg_statistic e use estatísticas estendidas para colunas correlacionadas.

ANALYZE e pg_statistic é uma aula grátis de SQL Academy no CoddyKit. Esta é a aula 3 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de SQL Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de SQL Academy inclui 4 aulas no total.

Por que usar ANALYZE?

O planejador de consultas precisa estimar as contagens de linhas e as seletividades para escolher um bom plano. Essas estimativas vêm das estatísticas por coluna coletadas pelo ANALYZE.

Quando executar ANALYZE

O VACUUM automático executa ANALYZE automaticamente com base nos limites de alteração de linhas. Depois de cargas em massa ou de grandes operações de DELETE, execute-o manualmente para evitar a degradação dos planos:

ANALYZE orders;
ANALYZE (VERBOSE) orders;

Amostragem

ANALYZE faz uma amostragem de algumas centenas de linhas por coluna. Ajuste o alvo de estatísticas se os valores padrão produzirem estimativas ruins:

ALTER TABLE orders ALTER COLUMN customer_id SET STATISTICS 1000;
-- Up from default 100. ANALYZE will sample more rows.

pg_statistic

O catálogo do sistema onde as estatísticas ficam armazenadas (use a visão pg_stats para facilitar a leitura):

SELECT attname, n_distinct, most_common_vals, most_common_freqs, histogram_bounds
FROM pg_stats
WHERE schemaname = 'public' AND tablename = 'orders';

O que o planejador analisa

  • n_distinct — quantos valores distintos existem
  • most_common_vals — os valores mais frequentes e suas frequências
  • histogram_bounds — intervalos para consultas por faixa
  • correlation — ordem física versus lógica (afeta o custo da varredura)

Estatísticas estendidas

As estatísticas por coluna não capturam as correlações entre colunas. CREATE STATISTICS as captura:

CREATE STATISTICS orders_country_status (dependencies)
  ON country, status FROM orders;
ANALYZE orders;

-- Now the planner knows that  country='US' AND status='paid' is correlated
-- (e.g. most US orders happen to be 'paid').

Tipos de estatísticas multivariadas

  • dependencies — dependências funcionais (uma coluna prevê outra)
  • ndistinct — combinações de valores distintos
  • mcv — valores combinados mais frequentes (PG 12+)

Estimativas ruins → planos ruins

O motivo mais comum para a pergunta "por que minha consulta está lenta" são estimativas ruins de linhas. O planejador escolhe um laço aninhado porque espera 1 linha; na realidade, são 1.000.000.

EXPLAIN ANALYZE SELECT * FROM ... ;
-- Look at Plan rows vs actual rows. Big gap = run ANALYZE or add extended stats.

Forçando ANALYZE nas migrações

Depois de uma grande carga em massa:

COPY users FROM ... ;
ANALYZE users;
-- Without ANALYZE, the planner has no idea the table just grew.

As estatísticas não são atualizadas automaticamente quando os dados mudam de distribuição

Se os dados de hoje forem muito diferentes dos de ontem, as estatísticas ainda poderão estar desatualizadas até que o ANALYZE automático seja executado. Execute ANALYZE manualmente depois de mudanças no formato dos dados.

pg_class.reltuples

O planejador também usa uma contagem estimada de linhas de pg_class. Ela é atualizada por VACUUM/ANALYZE. É rápido consultá-la:

SELECT relname, reltuples FROM pg_class WHERE relname = 'orders';

Recapitulação

ANALYZE fornece dados ao planejador.

  • Execute-o depois de grandes alterações nos dados
  • Aumente o alvo de STATISTICS para colunas com distribuição desigual
  • Use CREATE STATISTICS para correlações entre colunas
  • Uma grande diferença entre a estimativa e o valor real é a primeira coisa a corrigir

Verificação rápida

EXPLAIN ANALYZE mostra linhas estimadas=1, mas linhas reais=500.000 em um WHERE de uma única coluna. Qual é a primeira correção?

Perguntas Frequentes

A aula “ANALYZE e pg_statistic” é grátis?

Sim — o texto completo de “ANALYZE e pg_statistic” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de SQL Academy, atualize para CoddyKit PRO. O curso de SQL Academy inclui 4 aulas no total.

O que vou aprender em “ANALYZE e pg_statistic”?

Mantenha atualizadas as estatísticas do planejador com ANALYZE, inspecione pg_statistic e use estatísticas estendidas para colunas correlacionadas. Você pratica SQL Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar SQL Academy?

Nenhuma experiência prévia é necessária. SQL Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 3 de 4.

Quanto tempo leva a aula “ANALYZE e pg_statistic”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de SQL Academy?

Sim. Cada aula de SQL Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. MVCC e causas da fragmentação
  2. VACUUM, autovacuum, vacuum_cost_delay
  3. ANALYZE e pg_statistic
  4. Varreduras somente por índice e mapa de visibilidade
← Voltar para SQL Academy