Ausführungspläne langsamer Abfragen mit auto_explain protokollieren
PostgreSQLPerformanceBefehl
-- 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();Was es tut
Schreibt den Ausführungsplan von Abfragen über dem Schwellenwert ins Server-Log (mit tatsächlichen Zeilenzahlen und Buffer-Daten, wenn log_analyze aktiv ist); erfasst den Plan, der mit den echten Parametern der Anwendung entsteht.
Wann einsetzen
Wenn eine Abfrage nur aus der Anwendung oder mit bestimmten Parametern langsam ist und sich mit einem manuellen EXPLAIN nicht reproduzieren lässt; um sporadische Planänderungen zu erwischen.
Vorsicht
log_analyze = on erzeugt Instrumentierungs-Overhead bei jeder erfassten Abfrage, auch unterhalb des Schwellenwerts; log_timing = off und sample_rate < 1 verringern ihn. log_min_duration = 0 flutet in der Produktion das Log. ALTER SYSTEM SET session_preload_libraries überschreibt den vorhandenen Wert; prüfe zuerst SHOW session_preload_libraries. session_preload_libraries wirkt nicht auf bestehende Sessions; zum Laden in jedem Prozess sind shared_preload_libraries plus Neustart nötig.
Verwandte Einträge
- Teuerste Abfragen finden (pg_stat_statements: Gesamt- und mittlere Zeit)
- Abfragen finden, die Platten-I/O, Temp-Dateien und WAL verursachen (pg_stat_statements)
- Statistiken von pg_stat_statements zurücksetzen (alle oder eine einzelne Abfrage)
- Plan im Detail lesen mit EXPLAIN (ANALYZE, BUFFERS, SETTINGS, WAL)
- Planregressionen per queryid erkennen (Snapshot-Vergleich von pg_stat_statements)
- Kapazität für Parallel Query und aktuelle Worker-Nutzung prüfen