DBAtlas · Atlas für Datenbankbetrieb

Plan im Detail lesen mit EXPLAIN (ANALYZE, BUFFERS, SETTINGS, WAL)

PostgreSQLPerformance

Befehl

-- ANALYZE really executes the statement: run DML inside a transaction and roll it back
BEGIN;
EXPLAIN (ANALYZE, BUFFERS, SETTINGS, WAL, VERBOSE)
UPDATE customer SET balance = balance + 1 WHERE city = 'Ankara';
ROLLBACK;

-- For SELECT
EXPLAIN (ANALYZE, BUFFERS, SETTINGS)
SELECT name FROM customer ORDER BY name DESC LIMIT 10 OFFSET 1000;

Was es tut

Liefert den Plan mit echten Ausführungsstatistiken: BUFFERS zeigt je Knoten Shared hit/read/dirtied und Temp-Blöcke, SETTINGS zeigt planungsrelevante Parameter mit Nicht-Standardwerten, WAL zeigt die erzeugten WAL-Records/-Bytes.

Wann einsetzen

Um die Abweichung zwischen geschätzten und tatsächlichen Zeilen, auf die Platte ausgelagerte Sortierungen/Hashes (Sort Method: external merge, temp read/written) und die WAL-Kosten von DML zu analysieren.

Vorsicht

ANALYZE führt die Anweisung wirklich aus; DML immer innerhalb von BEGIN/ROLLBACK ausführen (Trigger und Sequence-Inkremente finden trotzdem statt). Lesetipps: Eine Abweichung um Faktor 10 oder mehr zwischen geschätzten 'rows' und 'actual rows' deutet auf ein Statistikproblem hin; bei Knoten in Schleifen gelten Zeit und Zeilen je Schleife, für den Gesamtwert mit loops multiplizieren; hohe 'Heap Fetches' bei einem Index Only Scan bedeuten eine veraltete Visibility Map, und 'Workers Planned' > 'Workers Launched' bedeutet einen erschöpften Worker-Pool. Bei hohem Timing-Overhead TIMING OFF verwenden; COSTS OFF blendet auch den JIT-Abschnitt aus.

In DBAtlas öffnen →

Verwandte Einträge