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

 

반응형