2012-09-28 3 views
19

Ich habe eine Select-Abfrage sehr lange ausgeführt. Wie erhalte ich den Status dieser Abfrage, z. B. wie lange wird sie ausgeführt? Ob auf Daten aus den Tabellen zugegriffen wird oder nicht.Wie bekomme ich den Status einer laufenden Abfrage in PostgreSQL-Datenbank

Hinweis: Gemäß pg_stat_activity läuft die Abfrage als aktiv. Nicht in einem Wartezustand. Wie in Oracle können wir den Quell-/Ziel- und Verarbeitungsstatus einer Abfrage sehen - gibt es so etwas in postgresql?

+0

Ich brauche eine Abschlusszeit einer Abfrage in der obigen Frage. pg_stat_activity zeigt nur die aktiven Abfragen, Datenbank, Benutzerdetails. pg_stat_activity enthält nicht die Abschlusszeit einer laufenden Abfrage. –

Antwort

27

Wenn stats_command_string aktiviert ist, enthält die Tabelle pg_stat_activity alle derzeit aktiven Abfragezeichenfolgen. Die einfachste Abfrage zeigt alle aktuellen Abfragezeichenfolgen zusammen mit der Datenbank, auf die sie verweisen, und der Prozess-ID (PID) des Prozesses an, der diese Abfrage bedient.

SELECT datname,pid,state,query FROM pg_stat_activity 

Beispiel:

database1=# SELECT datname,procpid,current_query FROM pg_stat_activity ORDER BY procpid ; 
    datname | procpid | current_query 
---------------+---------+--------------- 
mydatabaseabc | 2587 | <IDLE> 
anotherdb  | 15726 | SELECT * FROM users WHERE id=123 ; 
mydatabaseabc | 15851 | <IDLE> 
(3 rows) 

Jede Zeile von pg_stat_activity stellt einen Prozess PostgreSQL (PostgreSQL verwendet einen Server-Prozess pro Verbindung).

Alle Prozesse, die derzeit keine Abfragen ausführen, zeigen <IDLE> als current_query an.

prüfen this Referenz

+0

Ich brauche eine Abschlusszeit in der obigen Frage. Nicht die aktive Abfrage, db, in der es ausgeführt wird, oder der Benutzer. –

+0

Ich brauche eine Abschlusszeit einer Abfrage in der obigen Frage. pg_stat_activity zeigt nur die aktiven Abfragen, Datenbank, Benutzerdetails. pg_stat_activity enthält nicht die Abschlusszeit einer laufenden Abfrage. –

+8

Die Semantik dieser Abfrage hat sich offenbar in PostgreSQL 9.3 (möglicherweise früher) geändert. Jetzt sieht es wie folgt aus: SELECT datname, pid, state, Abfrage FROM pg_stat_activity; (beachte die neue Spalte, um zu bestimmen, ob die Abfrage aktiv ist). –

1

auf @Anshu Antwort Basierend Ich verwende:

SELECT datname, pid, state, query, age(clock_timestamp(), query_start) AS age 
FROM pg_stat_activity 
WHERE state <> 'idle' 
    AND query NOT LIKE '% FROM pg_stat_activity %' 
ORDER BY age; 
0

wir das Abfrageprotokoll in Bezug auf die Datenbank in Postgres finden.

select * 
from pg_stat_activity 
where datname = 'yourdatabasename' 

Dies gibt aktive Abfrageprotokoll der Datenbank.

Verwandte Themen