반응형
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
반응형
'Dev > Database' 카테고리의 다른 글
[MSSQL] DB 배치 추가하는법, SSMS 배치 등록, DB 배치등록 (1) | 2023.12.18 |
---|---|
[MSSQL] mssql 테이블 컬럼추가, mssql 제약조건 추가 (0) | 2023.12.15 |
[MSSQL] INSERT INTO SELECT, SELECT 해서 바로 INSERT (0) | 2023.10.19 |
[MSSQL] MSSQL 자릿수 콤마 출력 (0) | 2023.08.02 |
[Oracle] 오라클 날짜포맷 날짜형식 시간형식 yyyymmdd, hhmmss (0) | 2023.07.20 |