프로그래밍/DB

[DB] MSSQL Lock걸린 쿼리확인방법 dbcc inputbuffer(spid)

ss-pro 2020. 12. 26. 00:00
반응형

데이터베이스 lock걸린 쿼리를 찾아서 해당세션을 종료시키는 방법에 대하여 알아보도록 하겠습니다. lock이 걸리게 되면 해당 작업이 끝날때까지 해당테이블 insert/update/delete/select가 되지 않기때문에 성능에 문제가 생기게됩니다. 

처리순서요약 

처리순서 쿼리문
1. 락걸렸는지 유무확인 sp_lock 
2. 락걸린 세션소유자확인 sp_who
3. 쿼리문확인 dbcc inputbuffer(spid)
4. 락걸린세션 삭제 kill spid

강제로 members테이블에 lock이 걸리도록 트랜잭션을 걸은후 commit을 하지 않아 보도록 하겠습니다. 테이블이 lock이 걸렸기때문에 select문으로 조회해서 결과값을 얻어올수 없습니다. 


1. sp_lock (락걸렸는지 유무확인)
sp_lock문으로 락이 걸렸는지를 확인해보도록 하겠습니다. spid 72번이 Mode값이 X로 잠금이 발생한것을 확인할수 있습니다. 


2. sp_who
sp_who문을 사용해서 어떤 세션에서 발생했는지 확인해보겠습니다. sa계정에 AdventureWork2014 데이터베이스에서 발생한것을 확인할수 있습니다.


3. dbcc inputbuffer(spid)
dbcc inputbuffer(60)으로 spid값이 60인것을 조회해보면 락이걸린 쿼리문( begin tran insert into memebers....)은 확인할수 있습니다

4. kill spid 
kill 명령어를 이용하여 해당세션을 종료시키면 lock이 해제되며 lock이발생했던 부분이 해제되어 select/insert등의 작업을 수행할수 있습니다.