Показать активные и блокирующие запросы
PostgreSQLСессииКоманда
SELECT pid, usename, state, wait_event_type, wait_event, pg_blocking_pids(pid) AS blocking_pids, now() - query_start AS duration, left(query, 100) AS query FROM pg_stat_activity WHERE state <> 'idle' AND pid <> pg_backend_pid() ORDER BY duration DESC;Что делает
Выводит все не простаивающие backend, PID, которые их блокируют, и длительность их выполнения.
Когда использовать
Для диагностики проблем с блокировками и долгих запросов.
Внимание
pg_blocking_pids доступна в PostgreSQL 9.6+. Если массив blocking_pids не пуст, эти PID удерживают блокировку; при необходимости отмените/завершите этот PID.
Связанные материалы
- Завершить backend (pg_terminate_backend)
- Отменить выполняющийся запрос (pg_cancel_backend)
- Построить дерево блокировок (найти корневой блокирующий процесс)
- Детально изучить ожидания блокировок по объектам и режимам блокировки (pg_locks)
- Найти долгие транзакции и транзакции в состоянии 'idle in transaction'
- Контролируемо массово завершить долгие сессии 'idle in transaction'