0Pricing
SQL Academy · Aula

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 total
  • log_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

  1. Lendo EXPLAIN e EXPLAIN ANALYZE
  2. Varreduras sequenciais vs varreduras por índice
  3. Junção por hash vs junção por intercalação vs loop aninhado
  4. Identificação e correção de consultas lentas
← Voltar para SQL Academy