2012-09-28 32 views
19

Tengo una consulta de selección que se ejecuta muy larga. ¿Cómo obtendré un estado de esa consulta, como por cuánto tiempo se ejecutará? Si se trata de acceder a los datos de las tablas o no.Cómo obtener un estado de una consulta en ejecución en la base de datos postgresql

Nota: según pg_stat_activity la consulta se está ejecutando como activa. No en estado de espera. Al igual que en Oracle, podemos ver el origen/destino y el estado de prcessing de una consulta: ¿hay algo como esto en postgresql?

+0

Necesito un tiempo de finalización de una consulta en la pregunta anterior. La vista pg_stat_activity solo muestra las consultas activas, la base de datos y los detalles del usuario. pg_stat_activity no contiene el tiempo de finalización de una consulta en ejecución. –

Respuesta

27

Cuando stats_command_string está habilitado, la tabla pg_stat_activity contiene todas las cadenas de consulta actualmente activas. La consulta más simple mostrará todas las cadenas de consulta actuales junto con la base de datos a la que se refieren y el ID de proceso (PID) del proceso que sirve esa consulta.

SELECT datname,pid,state,query FROM pg_stat_activity 

Ejemplo:

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) 

Cada fila de pg_stat_activity representa un proceso de PostgreSQL (PostgreSQL utiliza un proceso de servidor por conexión).

Cualquier proceso que no esté realizando ninguna consulta mostrará <IDLE> como current_query.

Comprobar this para referencia

+0

Necesito un tiempo de finalización en la pregunta anterior. No es la consulta activa, db en la que se ejecuta o el usuario. –

+0

Necesito un tiempo de finalización de una consulta en la pregunta anterior. La vista pg_stat_activity solo muestra las consultas activas, la base de datos y los detalles del usuario. pg_stat_activity no contiene el tiempo de finalización de una consulta en ejecución. –

+8

La semántica de esta consulta aparentemente ha cambiado en PostgreSQL 9.3 (posiblemente antes). Ahora parece 'SELECT nombre_de_datos, pid, estado, consulta FROM pg_stat_activity;' (observe la nueva columna para determinar si la consulta está activa). –

1

Basado en respuesta @Anshu estoy 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

podemos encontrar el registro de consultas con respecto a la base de datos en postgres.

select * 
from pg_stat_activity 
where datname = 'yourdatabasename' 

Esto dará el registro de consulta activo de la base de datos.

Cuestiones relacionadas