Registrar os planos de execução de consultas lentas com auto_explain
PostgreSQLDesempenhoComando
-- 1) Per session: effective immediately, no restart (superuser)
LOAD 'auto_explain';
SET auto_explain.log_min_duration = '500ms';
SET auto_explain.log_analyze = on;
SET auto_explain.log_buffers = on;
SET auto_explain.log_timing = off;
SET auto_explain.log_nested_statements = on;
-- 2) Persistent: loaded by new sessions, a reload is enough.
-- The module must be LOADed in this session before ALTER SYSTEM accepts auto_explain.* parameters.
LOAD 'auto_explain';
ALTER SYSTEM SET session_preload_libraries = 'auto_explain';
ALTER SYSTEM SET auto_explain.log_min_duration = '2s';
ALTER SYSTEM SET auto_explain.log_analyze = on;
ALTER SYSTEM SET auto_explain.log_buffers = on;
ALTER SYSTEM SET auto_explain.log_timing = off;
ALTER SYSTEM SET auto_explain.sample_rate = 0.1;
SELECT pg_reload_conf();O que faz
Grava no log do servidor o plano de execução das consultas que excedem o limite (com contagens reais de linhas e dados de buffer quando log_analyze está on); captura o plano produzido com os parâmetros reais da aplicação.
Quando usar
Quando uma consulta só é lenta a partir da aplicação ou com parâmetros específicos e não pode ser reproduzida com um EXPLAIN manual; para capturar mudanças de plano intermitentes.
Atenção
log_analyze = on adiciona overhead de instrumentação a toda consulta amostrada, incluindo as abaixo do limite; log_timing = off e sample_rate < 1 o reduzem. log_min_duration = 0 inunda o log em produção. ALTER SYSTEM SET session_preload_libraries sobrescreve o valor existente; verifique SHOW session_preload_libraries antes. session_preload_libraries não afeta sessões existentes; carregá-lo em todo processo exige shared_preload_libraries mais um restart.
Relacionados
- Encontrar as consultas mais caras (pg_stat_statements: tempo total e médio)
- Encontrar as consultas que geram I/O de disco, arquivos temporários e WAL (pg_stat_statements)
- Zerar as estatísticas do pg_stat_statements (todas ou de uma única consulta)
- Ler um plano em profundidade com EXPLAIN (ANALYZE, BUFFERS, SETTINGS, WAL)
- Detectar regressões de plano por queryid (comparação de snapshots do pg_stat_statements)
- Verificar a capacidade de consulta paralela e o uso atual de workers