Registrar los planes de ejecución de las consultas lentas con auto_explain
PostgreSQLRendimientoComando
-- 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.
Relacionado
- Encontrar las consultas más costosas (pg_stat_statements: tiempo total y medio)
- Encontrar las consultas que generan I/O de disco, archivos temporales y WAL (pg_stat_statements)
- Restablecer las estadísticas de pg_stat_statements (todas o una sola consulta)
- Leer un plan en profundidad con EXPLAIN (ANALYZE, BUFFERS, SETTINGS, WAL)
- Detectar regresiones de plan por queryid (comparación de snapshots de pg_stat_statements)
- Comprobar la capacidad de consultas paralelas y el uso actual de workers