DBAtlas · Atlas für Datenbankbetrieb

Ausführungspläne langsamer Abfragen mit auto_explain protokollieren

PostgreSQLPerformance

Befehl

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

In DBAtlas öffnen →

Verwandte Einträge