PostgreSQL-EXPLAIN-Analyse

Fügen Sie den JSON-Plan aus EXPLAIN (ANALYZE, BUFFERS, FORMAT JSON) ein, um den Baum und die lokal erkennbaren Hotspots zu sehen. Der Plan wird im Browser ausgewertet; die Abfrage wird nicht ausgeführt und keine Datenbank kontaktiert.

Läuft lokal in deinem Browser
Dieses Werkzeug verarbeitet alle Daten lokal in deinem Browser.
EXPLAIN-JSONFügen Sie das JSON-Ergebnis ein; die Datenbank wird nie kontaktiert.

So liest man einen PostgreSQL-Ausführungsplan aus EXPLAIN-JSON

Fügen Sie die JSON-Ausgabe von EXPLAIN (ANALYZE, BUFFERS, FORMAT JSON) ein und klicken Sie auf Plan analysieren. Die Seite zeichnet den Planbaum, summiert Knoten, Kosten, tatsächliche Zeit und Zeilen und listet die lokal erkennbaren Hotspots.

Der Plan wird im Browser ausgewertet; es wird keine Anweisung ausgeführt und nichts an eine Datenbank oder an diese Seite gesendet. Gelesen wird nur das JSON-Format – das Textformat aus psql ersetzt es nicht.

  1. Führen Sie die Anweisung mit EXPLAIN (ANALYZE, BUFFERS, FORMAT JSON) aus – mit ANALYZE, sonst gibt es keine tatsächlichen Zeilen oder Zeiten zum Vergleich.
  2. Fügen Sie das vollständige Ergebnis (das äußere Array ist in Ordnung) in das Feld ein und klicken Sie auf Plan analysieren.
  3. Lesen Sie zuerst die Zusammenfassung: Knotenzahl, höchste Gesamtkosten, Ausführungszeit und die vom Wurzelknoten zurückgegebenen Zeilen.
  4. Prüfen Sie die Befunde: Schätzabweichungen, im Filter verworfene Zeilen, häufig ausgeführte Innenseiten und der langsamste Knoten sind die aussagekräftigen.
  5. Ändern Sie jeweils eine Sache (Index, Umschreibung, Statistics-Target) und lassen Sie den Plan erneut laufen, um zu sehen, ob sich die Zahlen bewegen.

Was die Analyse meldet, was sie nicht sieht und wie man sie nutzt

Was die Analyse meldet

Die Zusammenfassung zeigt die Zahl der Planknoten, die höchsten Total Cost im Baum, die Ausführungszeit (Execution Time, sonst der langsamste Knoten) und die Zeilen des Wurzelknotens. Der Baum darunter wiederholt Kosten, tatsächliche Zeit, Zeilen, Schleifen, die Schätzung sowie Indexbedingung oder Filter je Knoten.

Die Befunde vergleichen Plan Rows mit den tatsächlich zurückgegebenen Zeilen: Weichen sie um Faktor zehn oder mehr ab, wird der Knoten mit beiden Zahlen genannt. Ebenso gemeldet werden ein Filter, der mindestens zehnmal mehr Zeilen verwarf als zurückgab, eine Innenseite mit tausend oder mehr Ausführungen und der langsamste Knoten ab 50 ms und mindestens einem Fünftel der Ausführungszeit.

Was sie nicht sehen kann

Ein Plan ohne ANALYZE hat keine tatsächlichen Zeilen oder Zeiten, deshalb sagt die Seite das und lässt die Zeitmetriken weg, statt Nullen zu zeigen; die Schätzprüfungen entfallen aus demselben Grund. Die BUFFERS-Zähler stehen im JSON, werden hier aber nicht interpretiert; JIT, die Verteilung auf parallele Worker sowie Trigger- oder Funktionszeit werden nicht analysiert.

Ein Plan ist eine Ausführung: warmer Cache, andere Statistiken, ein anderer Parameterwert oder ein Prepared Statement mit generischem Plan ergeben einen anderen Baum. Vergleichen Sie Pläne unter gleichen Bedingungen und behandeln Sie die Befunde als Hinweise, nicht als Urteil.

Mit dem Ergebnis arbeiten

Eine große Schätzabweichung deutet meist auf veraltete Statistiken oder eine Bedingung hin, die der Planer nicht schätzen kann (Funktion auf der Spalte, korrelierte Bedingung, ungewöhnliche Verteilung); ANALYZE, ein höheres Statistics-Target oder eine umgeschriebene Bedingung ändern den Plan oft vor jedem Index.

Im Filter verworfene Zeilen zeigen auf einen fehlenden oder ungenutzten Index und auf eine wenig selektive Bedingung, während eine wiederholt ausgeführte Innenseite eines Nested Loop das klassische Zeichen für einen Join ist, den ein Hash Join besser löst. Ändern Sie eine Sache, lassen Sie den Plan mit denselben Parametern erneut laufen und behalten Sie den Plan, der bei Ihrer echten Last gewinnt.

Zuletzt verwendet: