Dev/Database
[MSSQL] DB DeadLock 원인 쿼리찾기, 데드락 원인, 교착상태
알굼
2023. 10. 25. 20:16
반응형
DB DeadLock 이란?
모든 프로세스가 대기 상태이며 각 프로세스가 다른 프로세스가 가지고 있는 자원을 기다리고 있는 상태
기본적으로 SQL Server 데이터베이스 엔진은 교착 상태에 있는 작업에 대해 주기적으로 검사한다. 모니터가 교착상태를 감지하면 작업 중 하나를 선택하여 오류와 함께 트랜잭션을 종료한다. 이렇게 하면 다른 태스크가 해당 트랜잭션을 완료할 수 있다. 오류로 종료된 트랜잭션이 있는 애플리케이션은 트랜잭션을 다시 시도할 수 있으며, 일반적으로 교착 상태의 다른 트랜잭션이 완료된 후에 완료된다.
SQL Server 에서 기본적으로 DeadLock 상태를 해제해주지만, DeadLock 을 자주 발생시키는 쿼리를 확인하고 개선할 수 있다. (단, DeadLock 을 유발한 쿼리는 발생 시점에서만 확인 가능)
※ UPDATE, DELETE 가 아닌 대용량 데이터 SELECT 시에는 테이블 명 뒤에 (NOLOCK) 을 붙여주는 것이 좋음.
1. Lock 이 걸린 spid 확인
EXEC SP_LOCK
2. Lock 이 걸린 쿼리 확인
DBCC inputbeffer(spid)
3. Lock이 발생한 host 찾기
EXEC SP_WHO spid
4. Lock 제거
EXEC KILL spid
반응형