DBAtlas · Atlas de operações de banco de dados

Registrar os planos de execução de consultas lentas com auto_explain

PostgreSQLDesempenho

Comando

-- 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.

Abrir no DBAtlas →

Relacionados