Postgres: Wie kann ich sehen, dass alle SQL-Anweisungen vom Datenbankserver ausgeführt werden?

23

Aus Gründen der Leistung überprüfe ich derzeit jede SQL-Anweisung, die eine Anwendung für die Datenbank abgibt. Gibt es eine einfache Möglichkeit, alle Anweisungen zu protokollieren, die vom PostgreSQL-Datenbankserver ausgeführt werden? Vielen Dank.

Jin Kim
quelle
In der folgenden Erläuterung wird erläutert, wie die aktuell ausgeführte Abfrage
angezeigt wird.

Antworten:

27

Die Konfigurationsoption, nach der Sie suchen, ist log_statement = "all"(wenn Sie nur die Anweisungen wollen) oder log_min_statement_duration = <some number>wenn Sie nur nach "langsamen" Abfragen suchen (für einen bestimmten Wert von "langsam"). Weitere Informationen zur Protokollierungskonfiguration finden Sie unter http://www.postgresql.org/docs/current/static/runtime-config-logging.html .

womble
quelle
1
Das Protokollieren aller Aussagen ist ein Leistungskiller (wie in den offiziellen Dokumenten angegeben). 8.4 hat jedoch eine nette Funktion explain analyze, um das Ergebnis einer langsamen Abfrage bei der Ausführung zu erhalten. Vielleicht möchten Sie mit dem Testen beginnen, da 8.4 noch nicht veröffentlicht ist, aber es ist eine nette Option, um zu wissen, dass dies zum Zeitpunkt der Ausführung passierte Wenn die EXPLAIN-Ausgabe für die Analyse in Ordnung ist, treten wahrscheinlich Probleme mit E / A- oder CPU-Grenzen auf, aber zumindest wissen Sie, dass es sich nicht um die eigentliche Abfrage handelt
Serverhorror
5
Ich mag die Option log_statement = 'mod' wirklich. Es werden nur alle ausgewählten Anweisungen erstellt, aktualisiert und gelöscht sowie übersprungen. Großartig, wenn Sie herausfinden möchten, welcher Code ein Feld verändert.
Don Kirkby
5

Das auto_explainModul ist dafür sehr nützlich. Es protokolliert nicht nur die Anweisungen, sondern auch deren Ausführungspläne und kann sogar Anweisungen protokollieren, die in PL / PgSQL-Funktionen ausgeführt werden. Die Leistungseinbußen sind relativ gering, es sei denn, Sie aktivieren die Analyse. In diesem Fall entsteht für alle Abfragen ein erheblicher Zeitaufwand.

Siehe auto_explainin der Dokumentation.

Craig Ringer
quelle
Beachten Sie, dass "auto_explain" ein Modul ist und daher nicht auf AWS RDS Postgres-Datenbanken ausgeführt werden kann :(
johntellsall
1
@johntellsall RDS unterstützt auto_explain, es ist in der Liste der gesegneten Module. Weitere Informationen finden
Craig Ringer
3

Natürlich können Sie die langsamsten Abfragen selbst ermitteln, aber ich rate Ihnen, pgFouine zu verwenden - einen PostgreSQL-Protokollanalysator. Es ist einfach zu installieren und sehr nützlich.

Beispielberichte: hier und hier .

Severe_admin
quelle
Ich habe pgFouine für ein Projekt verwendet und mehrere Stellen identifiziert, an denen ein Index sehr hilfreich ist.
Paul Tomblin