2013-07-15 19 views
20

Ich würde gerne sehen, welche Abfragen in einer Live-Django-Anwendung ausgeführt werden und wie viel Speicher sie belegen. Ich habe gelesen, dass pg_stat_activity nützlich sein kann, um eine Postgres-Datenbank zu überwachen.Wie benutzt man pg_stat_activity?

Ich habe looked at the Postgres documentation, aber ich habe eine sehr einfache Frage, die dort nicht beantwortet scheint.

Wie starte ich eigentlich mit pg_stat_activity? Was gebe ich ein, um es zu verwenden, und wo gebe ich es ein?

+0

Wahrscheinlich benötigen Sie stattdessen das [pgstatstatements module] (http://www.postgresql.org/docs/current/static/pgstatstatements.html). –

Antwort

27

Siehe this closely related answer.

pg_stat_activity ist eine Ansicht im pg_catalog Schema.

Sie können es von SELECT wie jede andere Tabelle abfragen, zB SELECT * FROM pg_stat_activity. Die Handbuchseite, mit der Sie verlinkt haben, erklärt ihre Spalten.

Sie werden manchmal finden sich auf andere Tabellen wie pg_class (Tabellen) beitreten wollen, pg_namespace (Schemata) usw.

pg_stat_activity tut nicht Informationen über Back-End-Speichernutzung aus. Sie müssen hierfür die Funktionen auf Betriebssystemebene verwenden. Es tut Sie die Prozess-ID, aktive Benutzer zu sagen, derzeit Abfrage ausgeführt wird, Aktivitätsstatus, Uhrzeit der letzten Abfrage gestartet, usw. Es ist für die Identifizierung gut ist lang andauernde idle in transaction Sitzungen, sehr lange laufende Abfragen usw.

Offen gesagt Das eingebaute Monitoring von PostgreSQL ist eher rudimentär. Es ist einer der Bereiche, an denen es nicht so aufregend ist, zu arbeiten, und kommerzielle Kunden sind nicht oft bereit, es zu finanzieren. Die meisten Leute koppeln Werkzeuge wie check_postgres mit Icinga und Munin oder verwenden Zabbix oder andere externe Überwachungsagenten.

In Ihrem Fall klingt es wie Sie wollen pg_stat_statements, und/oder PgBadger Log-Analyse mit geeigneten Logging-Einstellungen und möglicherweise die auto_explain Modul.

+0

Danke für diese Antwort! Also, nur um die wahren Grundlagen zu behandeln .... Ich sollte anfangen, mein Skript zu starten, dann in einer neuen Konsole Tab, öffnen Sie eine Postgres-Verbindung zu meiner Datenbank, und geben Sie 'Select * von pg_stat_activity' und die verschiedenen Anweisungen werden angezeigt. Ist das korrekt? – Richard

+1

@Richard Nein, nur die * momentan laufende * Anweisung. 'pg_stat_activity' ist eine Ansicht von dem, was gerade passiert *. Klingt so, als ob du die Erweiterung 'pg_stat_statements' und/oder PgBadger + auto_explain für mich haben möchtest. –

+4

Noch kürzer: 'TABLE pg_stat_activity;' –