Как получить статус запущенного запроса в базе данных postgresql
У меня есть запрос на выбор, который выполняется очень долго. Как я получу статус этого запроса, например, как долго он будет выполняться? Доступ к данным из таблиц или нет.
Примечание: согласно pg_stat_activity
запрос выполняется как активный. Не в состоянии ожидания. Как и в Oracle, мы можем видеть исходное / целевое состояние и статус обработки запроса - есть ли что-то подобное в postgresql?
4 ответа
Основываясь на ответе @Anshu, я использую:
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;
Когда stats_command_string включена, таблица pg_stat_activity содержит все активные в данный момент строки запроса. Самый простой запрос покажет все текущие строки запроса, а также базу данных, к которой они относятся, и идентификатор процесса (PID) процесса, обслуживающего этот запрос.
SELECT datname,pid,state,query FROM pg_stat_activity
Пример:
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)
Каждый ряд pg_stat_activity
представляет один процесс PostgreSQL (PostgreSQL использует один процесс сервера на соединение).
Любые процессы, которые в настоящее время не выполняют никаких запросов, будут показаны <IDLE>
как текущий_запрос.
Проверьте это для справки
Мы можем найти журнал запросов относительно базы данных в postgres .
select *
from pg_stat_activity
where datname = 'yourdatabasename'
Это даст активный журнал запросов базы данных.