조회가 갑자기 느려지거나, 실행되지 않을때, 먹통이 될때 db쪽 문제인가 싶을 때
Lock 걸린 쿼리가 있는지 확인해야하는 경우가 생기는데요.
Lock 걸린 쿼리를 확인하고, 해제하는 방법입니다.
1. 락(Lock) 걸린 상태인지 확인하기
SQL server에서 lock을 확인할 수 있도록 내장 함수 SP_LOCK, SP_WHO2를 제공하고 있는데요,
SP_LOCK부터 알아보겠습니다.
SP_LOCK
EXEC SP_LOCK 을 치면 하단과 같은 내용을 확인할 수 있습니다.
실행 결과의 Mode가 X로 되어있는 항목이 락(lock) 걸린 상태입니다.
SP_WHO2
EXEC SP_WHO2를 치면 하단과 같은 내용을 확인할 수 있습니다.
실행 결과의 BlkBy 컬럼에 값이 존재하면, 락(lock) 걸린 상태입니다.
2. 락(Lock) 걸린 쿼리 확인하기
SQL server에서 제공하는 내장 함수 DBCC INPUTBUFFER를 통해 확인할 수 있습니다.
DBCC INPUTBUFFER ( session_id [ , request_id ])
SP_LOCK 또는 SP_WHO2를 통해 락으로 의심되는 SPID 값을 DBCC INPUTBUFFER 의 인자값으로 넣어 실행하면 됩니다.
아래의 SPID 컬럼의 1에 대해 알아보고 싶다면,
DBCC INPUTBUFFER 1
이렇게 입력 후 실행하면 됩니다.
3. SPID를 이용하여 락(Lock) KILL 하기
SQL server에서 제공하는 내장 함수 KILL을 사용해서 락(lock)걸린 세션을 종료 시킬 수 있습니다.
KILL { session ID [ WITH STATUSONLY ] | UOW [ WITH STATUSONLY | COMMIT | ROLLBACK ] }
SPID 컬럼의 1이 락(lock) 걸린 상태여서 세션 종료해야하는 경우,
KILL 1
이렇게 입력 후 실행하면 됩니다.
'공부 (IT) > IT관련_DB' 카테고리의 다른 글
[MSSQL] 쿼리 단축키 지정하기 (0) | 2021.09.09 |
---|---|
[MSSQL] 날짜 변환표 (0) | 2021.08.27 |
[MSSQL] 커서(Cursor) 사용법 (0) | 2021.06.22 |
[MSSQL] char nchar / varchar nvarchar 차이점 (0) | 2021.06.16 |
[MSSQL] 데이터 타입 변환 (0) | 2021.06.01 |
댓글