Identificação e correção de consultas lentas
Use pg_stat_statements, log_min_duration_statement e EXPLAIN para encontrar consultas lentas e aplicar correções direcionadas.
Identificação e correção de consultas lentas é uma aula grátis de SQL Academy no CoddyKit. Esta é a aula 4 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.
Etapa 1: Encontre as Mais Lentas
Não otimize às cegas. Use:
pg_stat_statements— principais consultas por tempo totallog_min_duration_statement— registra consultas acima de um limite- pgBadger — relatórios formatados a partir dos registros
Configuração de pg_stat_statements
Ative a extensão e configure shared_preload_libraries:
-- postgresql.conf
shared_preload_libraries = 'pg_stat_statements'
-- After restart:
CREATE EXTENSION pg_stat_statements;As 10 Consultas Mais Pesadas
A consulta mais útil para qualquer DBA:
SELECT query,
calls,
total_exec_time,
mean_exec_time,
rows
FROM pg_stat_statements
ORDER BY total_exec_time DESC
LIMIT 10;Registre Consultas Lentas
Defina um limite e leia o registro:
-- postgresql.conf
log_min_duration_statement = '500ms'
-- All queries running > 500ms are logged.Etapa 2: Reproduza com EXPLAIN ANALYZE
Para cada consulta lenta, execute EXPLAIN ANALYZE em um ambiente representativo (com dados semelhantes aos de produção). Observe:
- Maior nó por tempo real
- Maior diferença entre linhas estimadas e reais
- Se os índices corretos são usados
Correções Comuns
- Índice ausente em uma coluna usada por WHERE ou JOIN
- Predicado não indexável (função sobre a coluna) — adicione um índice de expressão ou reescreva
- Estatísticas desatualizadas — execute ANALYZE
- Tipo de dado incorreto (causando conversão implícita) — corrija o tipo da coluna
- Condições OR — reescreva como uma UNION de consultas com uma única condição
- SELECT * buscando dados demais — reduza a projeção
Estatísticas Desatualizadas
Se as linhas estimadas diferirem muito das linhas reais, execute ANALYZE primeiro:
ANALYZE orders;
-- Or rely on autovacuum to do it periodically.Verificação dos Índices
Liste os índices de uma tabela e seus tamanhos:
SELECT indexrelname, pg_size_pretty(pg_relation_size(indexrelid))
FROM pg_stat_user_indexes
WHERE relname = 'orders'
ORDER BY pg_relation_size(indexrelid) DESC;Índices Não Utilizados
Encontre índices que nunca são usados:
SELECT schemaname, relname, indexrelname, idx_scan
FROM pg_stat_user_indexes
WHERE idx_scan = 0
ORDER BY pg_relation_size(indexrelid) DESC;
-- Consider dropping them — they slow writes for no read benefit.Contenção de Bloqueios
Às vezes, uma consulta é "lenta" porque está esperando um bloqueio. Verifique pg_stat_activity quanto a wait_event:
SELECT pid, state, wait_event_type, wait_event, query
FROM pg_stat_activity
WHERE state <> 'idle';Padrões de Reescrita de Consultas
- Mova os filtros para WHERE
- Substitua a subconsulta correlacionada em SELECT por JOIN + GROUP BY
- Substitua OR por uma UNION ALL de consultas indexadas
- Use funções de janela em vez de junções da tabela consigo mesma
- Materialize subconsultas repetidas com CTEs (quando o planejador estiver confuso)
Repita
O ajuste de desempenho é um ciclo: medir → formular uma hipótese → alterar → medir. Não chute.
Recapitulação
Encontre consultas lentas com pg_stat_statements, diagnostique-as com EXPLAIN ANALYZE, corrija-as com índices / ANALYZE / reescritas e repita o processo.
Verificação Rápida
Qual extensão do PostgreSQL mostra as consultas que mais consomem tempo, classificadas pelo tempo total de execução?
Perguntas Frequentes
A aula “Identificação e correção de consultas lentas” é grátis?
Sim — o texto completo de “Identificação e correção de consultas lentas” é 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 “Identificação e correção de consultas lentas”?
Use pg_stat_statements, log_min_duration_statement e EXPLAIN para encontrar consultas lentas e aplicar correções direcionadas. 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 4 de 4.
Quanto tempo leva a aula “Identificação e correção de consultas lentas”?
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
- Lendo EXPLAIN e EXPLAIN ANALYZE
- Varreduras sequenciais vs varreduras por índice
- Junção por hash vs junção por intercalação vs loop aninhado
- Identificação e correção de consultas lentas