Журналировать планы выполнения медленных запросов через auto_explain
PostgreSQLПроизводительностьКоманда
-- 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();Что делает
Записывает в журнал сервера план выполнения запросов, превышающих порог (с фактическим числом строк и данными о буферах при включённом log_analyze); фиксирует план, построенный с реальными параметрами приложения.
Когда использовать
Когда запрос медленный только из приложения или с определёнными параметрами и не воспроизводится ручным EXPLAIN; чтобы поймать периодические смены плана.
Внимание
log_analyze = on добавляет накладные расходы на инструментирование к каждому запросу в выборке, включая те, что ниже порога; log_timing = off и sample_rate < 1 уменьшают их. log_min_duration = 0 переполняет журнал в production. ALTER SYSTEM SET session_preload_libraries перезаписывает существующее значение; сначала проверьте SHOW session_preload_libraries. session_preload_libraries не влияет на существующие сессии; загрузка в каждом процессе требует shared_preload_libraries и перезапуска.
Связанные материалы
- Найти самые дорогие запросы (pg_stat_statements: общее и среднее время)
- Найти запросы, создающие дисковый I/O, временные файлы и WAL (pg_stat_statements)
- Сбросить статистику pg_stat_statements (полностью или для одного запроса)
- Детально разобрать план через EXPLAIN (ANALYZE, BUFFERS, SETTINGS, WAL)
- Выявить регрессии планов по queryid (сравнение снимков pg_stat_statements)
- Проверить ёмкость параллельных запросов и текущее использование рабочих процессов