블로킹 / 락 대기 세션 찾기
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 스키마는 대기 중인 trx_id / 스레드와 블로킹하는 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로 확인할 수 있다.