DBAtlas · Atlas de operaciones de bases de datos

Registrar los planes de ejecución de las consultas lentas con auto_explain

PostgreSQLRendimiento

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();

Qué hace

Escribe en el log del servidor el plan de ejecución de las consultas que superan el umbral (con número real de filas y datos de buffers cuando log_analyze está activado); captura el plan generado con los parámetros reales de la aplicación.

Cuándo usarlo

Cuando una consulta solo es lenta desde la aplicación o con parámetros concretos y no se puede reproducir con un EXPLAIN manual; para detectar cambios de plan intermitentes.

Precaución

log_analyze = on añade sobrecarga de instrumentación a cada consulta muestreada, incluidas las que están por debajo del umbral; log_timing = off y sample_rate < 1 la reducen. log_min_duration = 0 inunda el log en producción. ALTER SYSTEM SET session_preload_libraries sobrescribe el valor existente; compruebe antes SHOW session_preload_libraries. session_preload_libraries no afecta a las sesiones existentes; cargarlo en todos los procesos requiere shared_preload_libraries más un reinicio.

Abrir en DBAtlas →

Relacionado