查找阻塞 / 等待锁的会话
Oracle
SELECT blocking_session, sid, serial#, username,
sql_id, seconds_in_wait, event
FROM v$session
WHERE blocking_session IS NOT NULL;blocking_session 有值的会话被 blocking_session 中的 SID 阻塞。
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 schema 以易读形式展示等待和阻塞的 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 可显示这些命令。