Wenn eine Datenbankabfrage zu lange dauert, kann man sich in Postgres die Informationen vom Query-Planer anzeigen lassen. Dies geschieht, indem der Abfrage ein EXPLAIN oder EXPLAIN ANALYZE vorangestellt wird. Leider ist diese Ausgabe sehr unübersichtlich.
EXPLAIN zeigt an, wie der Query-Planer die Abfrage auszuführen gedenkt.
EXPLAIN ANALYZE führt zusätzlich die Abfrage aus und verändert gegebenenfalls auch Daten (DELETE, INSERT, UPDATE). Um das zu verhindern kann die EXPLAIN ANALYZE-Abfrage als Transaktion ausgeführt und zurückgedreht werden:
BEGIN; –Transaktionsbeginn
EXPLAIN ANALYZE DELETE FROM payments WHERE id > 100;
ROLLBACK; — zurückdrehen der Änderungen
Dankbarerweise gibt es ein paar Seiten im Netz, die die unübersichtliche Ausgabe grafisch aufbereiten können.
http://tatiyants.com/pev/ benötigt die Ausgabe im JSON-Format, was wie folgt erreicht werden kann:
a) EXPLAIN (ANALYZE, COSTS, VERBOSE, BUFFERS, FORMAT JSON)
b) psql mydatabse -qAt -f explain.sql > analyze.json
mydatabase ist der Name der DB und explain.sql ist ein Textfile mit dem EXPLAIN-Ausdruck aus a) und dem SQL, was ausgewertet werden soll.
Eine Vorgängerseite, die aber auch mit der RAW-Ausgabe von Postgres umgehen kann:
https://explain.depesz.com/