2012-09-28 13 views
19

Ho una query di selezione in esecuzione molto lunga. Come otterrò uno stato di quella query, come per quanto tempo sarà in esecuzione? Indipendentemente dal fatto che acceda o meno ai dati delle tabelle.Come ottenere uno stato di una query in esecuzione nel database postgresql

Nota: come da pg_stat_activity, la query è attiva come attiva. Non in uno stato di attesa. Come in Oracle, possiamo vedere lo stato sorgente/destinazione e lo stato di elaborazione di una query - c'è qualcosa di simile in postgresql?

+0

Ho bisogno di un tempo di completamento di una query nella domanda precedente. La visualizzazione pg_stat_activity fornisce solo le query attive, il database, i dettagli dell'utente. pg_stat_activity non contiene il tempo di completamento di una query in esecuzione. –

risposta

27

Quando stats_command_string è abilitato, la tabella pg_stat_activity contiene tutte le stringhe di query attualmente attive. La query più semplice mostrerà tutte le stringhe di query correnti insieme al database a cui si riferiscono e l'ID di processo (PID) del processo che serve quella query.

SELECT datname,pid,state,query FROM pg_stat_activity 

Esempio:

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) 

Ogni riga di pg_stat_activity rappresenta un processo PostgreSQL (PostgreSQL utilizza un processo server per connessione).

Qualsiasi processo che al momento non sta eseguendo alcuna query mostrerà <IDLE> come current_query.

Controllare this per riferimento

+0

Ho bisogno di un tempo di completamento nella domanda precedente. Non la query attiva, db in cui è in esecuzione o l'utente. –

+0

Ho bisogno di un tempo di completamento di una query nella domanda precedente. La visualizzazione pg_stat_activity fornisce solo le query attive, il database, i dettagli dell'utente. pg_stat_activity non contiene il tempo di completamento di una query in esecuzione. –

+8

La semantica di questa query è apparentemente cambiata in PostgreSQL 9.3 (forse prima). Ora sembra 'SELECT nomecamp, pid, state, query FROM pg_stat_activity;' (notare la nuova colonna per determinare se la query è attiva). –

1

Basato su @Anshu risposta che sto usando:

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

possiamo trovare il log delle query rispetto al database in Postgres.

select * 
from pg_stat_activity 
where datname = 'yourdatabasename' 

Ciò fornirà il registro delle query attivo del database.