wake-up-neo.net

Ist es möglich, eine Historie von Abfragen in Postgres zu erhalten

Ist es möglich, eine Historie von Abfragen in Postgres zu erhalten? und ist es möglich, die für jede Abfrage benötigte Zeit zu erhalten? Ich versuche gerade, langsame Abfragen in der Anwendung zu ermitteln, an der ich gerade arbeite.

Ich verwende Postgres 8.3.5

48
Chiwai Chan

Es gibt keinen Verlauf in der Datenbank selbst. Wenn Sie psql verwenden, können Sie "\ s" verwenden, um den Befehlsverlauf dort anzuzeigen.

Sie können zukünftige Abfragen oder andere Arten von Vorgängen in die Protokolldateien übernehmen, indem Sie log_statement in der Datei postgresql.conf festlegen. Stattdessen möchten Sie wahrscheinlich log_min_duration_statement . Wenn Sie es auf 0 setzen, werden alle Abfragen und deren Dauer in den Protokollen protokolliert. Dies kann hilfreich sein, wenn Ihre Apps live geschaltet werden. Wenn Sie diesen Wert auf einen höheren Wert setzen, werden nur die lang laufenden Abfragen angezeigt, die für die Optimierung hilfreich sein können (Sie können EXPLAIN ANALYZE mit den dort gefundenen Abfragen ausführen, um herauszufinden, warum sie ausgeführt werden sind langsam).

Eine weitere nützliche Sache in diesem Bereich ist, dass, wenn Sie psql ausführen und es "\ timing" sagen, es zeigt, wie lange jede Anweisung danach braucht. Wenn Sie also eine SQL-Datei haben, die so aussieht:

\timing
select 1;

Sie können es mit den richtigen Flags ausführen und sehen, wie die einzelnen Anweisungen verschachtelt werden. So und wie das Ergebnis aussieht:

$ psql -ef test.sql 
Timing is on.
select 1;
 ?column? 
----------
        1
(1 row)

Time: 1.196 ms

Dies ist praktisch, da Sie nicht im Gegensatz zu einer Änderung der Konfigurationsdatei Datenbank-Superuser sein müssen, um sie verwenden zu können. Sie ist einfacher zu verwenden, wenn Sie neuen Code entwickeln und ihn testen möchten.

62
Greg Smith

Wenn Sie langsame Abfragen ermitteln möchten, verwenden Sie die the - Methode zur Verwendung von log_min_duration_statement (in postgresql.conf oder setzen Sie sie mit ALTER DATABASE SET pro Datenbank).

Wenn Sie die Daten protokolliert haben, können Sie grep oder einige spezielle Tools verwenden, wie pgFouine oder meinen eigenen Analyzer -, denen es an richtigen Dokumenten fehlt, die aber trotzdem laufen - recht gut.

3
user80168

pgBadger ist eine weitere Option - auch hier aufgeführt: https://github.com/dhamaniasad/awesome-postgres#utilities

Erfordert jedoch im Voraus einige zusätzliche Einstellungen, um die erforderlichen Daten in den Postgres-Protokollen zu erfassen, siehe die offizielle Website.

0
Vincent De Smet

FYI für diejenigen, die UINavicat verwenden:

Sie MÜSSEN Ihre Voreinstellungen festlegen, um eine Datei in Bezug auf where zu verwenden, um den Verlauf zu speichern.

Wenn dies leer ist, ist Ihr Navicat leer.

 enter image description here

PS: Ich habe keine Verbindung zu oder zu Navicat oder seinen verbundenen Unternehmen. Ich suche nur um zu helfen.

0
JayRizzo