CodeGym /Cursos /SQL SELF /Análise Comparativa de EXPLAIN ANALYZE e <...

Análise Comparativa de EXPLAIN ANALYZE e pg_stat_statements

SQL SELF
Nível 42 , Lição 4
Disponível

Nessa altura, pode rolar aquela dúvida: por que a gente tem duas ferramentas diferentes pra análise? Qual delas é mais usada: EXPLAIN ANALYZE ou pg_stat_statements? Bora entender esses dois jeitos, os pontos fortes e fracos de cada um, e onde e quando usar cada um deles.

O que cada ferramenta resolve

EXPLAIN ANALYZE: é a ferramenta pra analisar a fundo uma query específica. Se tu quer saber como o PostgreSQL executa uma query, quais nodes ele usa, quantas linhas ele processa e quanto tempo cada operação leva, é essa aqui que tu vai usar. Ela responde à pergunta: "Por que essa query específica tá lenta?"

pg_stat_statements: é a ferramenta pra monitorar tudo de um jeito mais geral, mostrando info de performance de todas as queries que rolam no banco. Usa ela se tu quer ver o panorama geral: "Quais queries no meu banco são as mais lentas?" ou "Quais queries tão pesando mais no servidor?"

Quando usar EXPLAIN ANALYZE

EXPLAIN ANALYZE é tipo tua ferramenta de debug pra entender como o PostgreSQL executa uma query específica. Usa ela nesses casos:

Otimização pontual de query Se alguém reclamou que uma página do teu app tá demorando uma vida pra carregar, a primeira coisa é achar a query responsável e rodar um EXPLAIN ANALYZE. Isso vai te mostrar o plano de execução e as métricas reais, tipo tempo de execução e quantidade de linhas processadas.

Escolha do índice certo Quando tu cria um índice novo ou muda um já existente, usa EXPLAIN ANALYZE pra ver se o PostgreSQL tá usando esse índice. Se não tiver, talvez o índice não tá ajudando a otimizar as queries.

Debug de queries complexas Se tu tá escrevendo uma query cheia de JOIN ou WHERE, analisar o plano real com EXPLAIN ANALYZE vai te ajudar a achar gargalos, tipo aqueles Seq Scan desnecessários.

Exemplo: Otimizando uma query com EXPLAIN ANALYZE

-- Query que tá lenta
SELECT *
FROM students
WHERE name = 'Alice';

-- Analisando o plano de execução
EXPLAIN ANALYZE
SELECT *
FROM students
WHERE name = 'Alice';

Se tu ver que tá rolando um Seq Scan, pode ser que tu esqueceu de criar um índice:

-- Criando índice na coluna name
CREATE INDEX idx_students_name ON students(name);

-- Testando de novo
EXPLAIN ANALYZE
SELECT *
FROM students
WHERE name = 'Alice';

Quando usar pg_stat_statements

Essa ferramenta é indispensável pra analisar a performance do sistema todo. Usa ela nesses cenários:

Monitoramento em produção pg_stat_statements mostra estatísticas das queries executadas num certo período. Tu acha fácil as queries mais lentas olhando a coluna total_time, que mostra o tempo total gasto em cada query.

Achar queries "pesadas" Quer saber quais queries mais pesam no teu banco? Ordena elas pela quantidade de leitura de memória (shared_blks_hit) ou pelo número de linhas processadas (rows).

Descobrir queries que rodam toda hora Às vezes, não é só uma query demorada que dá problema, mas também aquelas que rodam o tempo todo. Tipo, se uma query roda 100 vezes por minuto, até uma otimização pequena pode aliviar bastante o servidor.

Exemplo: Encontrando queries lentas com pg_stat_statements

-- Vendo estatísticas das queries
SELECT query,
       calls,
       total_time,
       rows
FROM pg_stat_statements
ORDER BY total_time DESC
LIMIT 5;

Essa query mostra o top 5 das queries que mais consomem tempo.

Comparando os dois jeitos: qual a diferença?

Critério EXPLAIN ANALYZE pg_stat_statements
Foco da análise Uma query específica Monitoramento global de todas as queries
Nível de detalhe Dados reais de cada node do plano Estatística resumida de cada query
Contexto Usado durante o desenvolvimento Usado em ambiente de produção
Execução necessária Executa a query e mede o tempo Não executa queries, só agrega dados
Facilidade de configuração Não precisa configurar nada Precisa instalar a extensão
Consumo de recursos Medição pontual Coleta contínua de estatísticas depende da carga

Usando as duas ferramentas juntas

Como tudo em programação, não existe botão mágico que resolve tudo. O melhor jeito é usar as duas ferramentas juntas. Por exemplo:

  1. Usa o pg_stat_statements pra achar as queries mais lentas ou mais frequentes no teu sistema.

  2. Depois, analisa essas queries com EXPLAIN ANALYZE pra entender o motivo delas estarem problemáticas.

Exemplo prático: abordagem completa

-- Passo 1: Achar a query mais lenta
SELECT query, total_time, calls
FROM pg_stat_statements
ORDER BY total_time DESC
LIMIT 1;

-- Passo 2: Analisar essa query
EXPLAIN ANALYZE
<copie a query do passo anterior>;

Erros comuns ao usar essas ferramentas

Ao trabalhar com EXPLAIN ANALYZE e pg_stat_statements, tem uns vacilos que a galera que tá começando costuma cometer:

  1. Esquecer de usar dados reais. Se tu analisa uma query numa tabela vazia, o resultado do EXPLAIN ANALYZE pode te enganar. Garante que teu banco de testes tem volumes de dados parecidos com o real.

  2. Ignorar o consumo de recursos do monitoramento. Se tu ativou o pg_stat_statements no servidor de produção, garante que ele tá bem configurado e não tá pesando demais.

  3. Ler só o plano teórico e não o real. Lembra que só o EXPLAIN mostra o plano teórico da query. Usa EXPLAIN ANALYZE pra ver os dados reais.

Agora tu já tá com tudo que precisa pra não só resolver queries lentas, mas também evitar que elas apareçam. O PostgreSQL tem ferramentas poderosas, e saber usar elas junto é o segredo pra tirar o máximo de performance até nos sistemas mais puxados.

2
Tarefa
SQL SELF, nível 42, lição 4
Bloqueado
Buscando as queries mais "pesadas" usando `pg_stat_statements`
Buscando as queries mais "pesadas" usando `pg_stat_statements`
1
Pesquisa/teste
Otimização de queries, nível 42, lição 4
Indisponível
Otimização de queries
Otimização de queries
Comentários
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION