현재 락 목록
Oracle
SELECT s.sid, s.serial#, l.type, DECODE(l.lmode,0,'None',1,'Null',2,'Row-S',3,'Row-X',4,'Share',5,'S/Row-X',6,'Exclusive') AS lmode, o.object_name, s.username, s.blocking_session
FROM v$lock l
JOIN v$session s ON s.sid = l.sid
LEFT JOIN v$locked_object lo ON lo.session_id = l.sid
LEFT JOIN dba_objects o ON o.object_id = lo.object_id
ORDER BY s.sid;v$lock과 v$locked_object를 통해 활성 락과 블로킹 세션(blocking_session)을 보여 준다.
PostgreSQL
SELECT l.locktype, l.mode, l.granted, a.pid, a.usename, a.state, a.wait_event_type, a.query
FROM pg_locks l
JOIN pg_stat_activity a ON a.pid = l.pid
WHERE l.pid <> pg_backend_pid()
ORDER BY l.granted, a.pid;pg_locks와 pg_stat_activity를 조인한다. granted=false인 행은 대기 중인(블로킹된) 락이다.
MySQL
SELECT ENGINE, OBJECT_SCHEMA, OBJECT_NAME, LOCK_TYPE, LOCK_MODE, LOCK_STATUS, THREAD_ID
FROM performance_schema.data_locks;
-- For waiters: SELECT * FROM performance_schema.data_lock_waits;performance_schema.data_locks는 현재 InnoDB 락을, data_lock_waits는 대기 관계를 나열한다.
SQL Server
SELECT tl.resource_type, tl.resource_database_id, tl.request_mode, tl.request_status, tl.request_session_id, es.login_name, er.blocking_session_id
FROM sys.dm_tran_locks tl
LEFT JOIN sys.dm_exec_sessions es ON es.session_id = tl.request_session_id
LEFT JOIN sys.dm_exec_requests er ON er.session_id = tl.request_session_id
ORDER BY tl.request_session_id;sys.dm_tran_locks는 현재 락 요청을 보여 준다. request_status = WAIT인 요청은 블로킹된 요청이다.
MongoDB
db.currentOp({ "$or": [ { "waitingForLock": true }, { "locks": { "$exists": true } } ] })db.currentOp는 락을 기다리는 작업(waitingForLock)과 락을 보유한 작업을 보여 준다. MongoDB는 행 수준이 아니라 문서/컬렉션 수준에서 락을 건다.
Redis
# Not applicable: Redis has no row/table lock concept; commands run sequentially on a single thread. For blocking analysis, use the SLOWLOG and LATENCY commands.Redis는 싱글 스레드이므로 전통적인 락 목록이 없다.
Elasticsearch
GET _cluster/pending_tasksElasticsearch에는 행 락이 없다. 이 명령은 master에 대기 중인 클러스터 변경 작업(pending tasks)을 나열한다.