EXEC sp_lock
* 여기에서 나온 spid는 세션이고, ObjId는 다시 한 번 아래처럼 조회하여 구체적으로 락이 걸린 곳의 이름을 확인해볼 수 있다.
SELECT * FROM sys.objects WHERE object_id = '0000000000'
-- 0000000000에 ObjId의 숫자를 입력.
* 동시 다발적으로 락이 걸려서, 그 수를 파악해보기 위해서는 아래와 같은 쿼리를 이용한다.
* 여기에서 나온 request_mode에 대한 값은 아래의 사이트를 참고하자.
* http://www.lockergnome.com/uncategorized/2010/01/26/what-are-the-different-lock-modes-in-sql-server/
SELECT request_mode, COUNT(request_mode)
FROM sys.dm_tran_locks
GROUP BY request_mode
* LOCK에 대한 세부적인 내역(락이 발생한 테이블, 접속정보 등)을 확인하려면, 아래의 쿼리를 이용한다. 아래 사이트의 쿼리를 참조해서 수정했다.
* http://www.sqlservercentral.com/Forums/Topic1166444-391-1.aspx
SELECT l.resource_type, l.request_mode,
CASE
WHEN l.resource_type IN ('DATABASE', 'FILE', 'METADATA')
THEN l.resource_type
WHEN l.resource_type = 'OBJECT'
THEN OBJECT_NAME(l.resource_associated_entity_id)
WHEN l.resource_type IN ('KEY', 'PAGE', 'RID')
THEN (SELECT OBJECT_NAME(object_id)
FROM sys.partitions
WHERE sys.partitions.hobt_id = l.resource_associated_entity_id
)
ELSE 'Unidentified'
END Parent_Object,
l.request_session_id, s.host_name, s.login_name
FROM sys.dm_tran_locks l
LEFT OUTER JOIN sys.dm_exec_sessions s
ON l.request_session_id = s.session_id
ORDER BY resource_type, request_mode, Parent_Object
* LOCK을 강제로 종료하기 위해서는 KILL과 세션ID(spid)를 사용한다.
KILL 00
-- 00에 spid의 숫자를 입력.
댓글 없음:
댓글 쓰기