Найти блокирующие / ожидающие блокировку сессии
Oracle
SELECT blocking_session, sid, serial#, username,
sql_id, seconds_in_wait, event
FROM v$session
WHERE blocking_session IS NOT NULL;Сессия с заполненным blocking_session заблокирована сессией с SID, указанным в значении blocking_session.
PostgreSQL
SELECT pid, usename, pg_blocking_pids(pid) AS blocked_by,
wait_event, query
FROM pg_stat_activity
WHERE cardinality(pg_blocking_pids(pid)) > 0;Массив blocked_by содержит PID, блокирующие данный pid.
MySQL
SELECT * FROM sys.innodb_lock_waits\G
-- MySQL 8: SELECT * FROM performance_schema.data_lock_waits;Схема sys показывает ожидающие и блокирующие trx_id / потоки в удобочитаемом виде.
SQL Server
SELECT r.session_id, r.blocking_session_id,
r.wait_type, r.wait_time, r.wait_resource
FROM sys.dm_exec_requests r
WHERE r.blocking_session_id <> 0;Запросы с blocking_session_id <> 0 заблокированы. Для прослеживания цепочки можно построить рекурсивный запрос.
MongoDB
db.currentOp({ "waitingForLock": true })WiredTiger блокирует на уровне документа/коллекции. Долгие операции можно завершить через killOp.
Redis
# Not applicable: Redis commands run atomically one at a time; there are no row locks.
# Closest diagnostic: SLOWLOG GET 10Блокировка обычно вызвана одной долго выполняющейся командой (напр. KEYS *, большой SORT); SLOWLOG их показывает.