PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Ist es möglich, einen Verlauf der in Postgres gestellten Abfragen zu erhalten

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

Sie können zukünftige Abfragen oder andere Arten von Vorgängen in die Protokolldateien übertragen, indem Sie log_statement in der postgresql.conf-Datei. Was Sie stattdessen wahrscheinlich wollen, ist log_min_duration_statement , das, wenn Sie es auf 0 setzen, alle Abfragen und ihre Dauer in den Protokollen protokolliert. Das kann hilfreich sein, sobald Ihre Apps live gehen, wenn Sie das auf einen höheren Wert setzen, sehen Sie nur die Abfragen mit langer Laufzeit, die für die Optimierung hilfreich sein können (Sie können EXPLAIN ANALYZE für die Abfragen ausführen, die Sie dort finden, um herauszufinden, warum sie sind langsam).

Eine weitere nützliche Sache, die Sie in diesem Bereich wissen sollten, ist, dass, wenn Sie psql ausführen und ihm "\timing" sagen, es zeigt, wie lange jede Anweisung danach dauert. 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 lange jede Anweisung verschachtelt ist. So sieht das Ergebnis aus:

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

Time: 1.196 ms

Dies ist praktisch, da Sie kein Datenbank-Superuser sein müssen, um es zu verwenden, im Gegensatz zum Ändern der Konfigurationsdatei, und es ist einfacher zu verwenden, wenn Sie neuen Code entwickeln und ihn testen möchten.