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