쿼리를 실행하다 보면 간단한 쿼리인데도 실행되지 않는 경우가 종종 발생하곤 합니다.
이럴때 가장먼저 확인해야 하는것이 해당 쿼리에 대해 Lock의 발생 여부입니다.
Lock이 걸린 spid를 확인
EXEC SP_LOCK
Mode가 X로 되어있는 spid를 확인합니다.
Lock이 걸린 쿼리내용 확인
DBCC inputbeffer(spid)
위에서 식별된 spid를 넣고 Lock이 걸린 쿼리 내용을 확인합니다.
Lock이 발생한 host 찾기
EXEC SP_WHO spid
spid를 넣고 어떤 host에서 Lock이 발생한지 확인합니다.
Lock 제거
EXEC KILL spid
Lock이 발생한 경우 일부 테이블에 대한 액세스가 불가하기 때문에 꼭 제거하도록 합시다.
트랜잭션이 필요없는 대량의 데이터를 조회할 경우에는 아래처럼 WITH(NOLOCK) 옵션을 걸어주거나
SELECT * FROM Emp WITH(NOLOCK)
아래의 구문을 쿼리 맨 앞에 넣고 실행하면 Lock 발생 여부와 관계없이 테이블 조회가 가능합니다.
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED