DBAtlas · 데이터베이스 운영 아틀라스

1205: Transaction (Process ID) was deadlocked on lock resources with another process and has been chosen as the deadlock victim

SQL Server

의미

둘 이상의 트랜잭션이 서로가 보유한 락을 기다리고 있다(데드락). 순환을 끊기 위해 SQL Server가 트랜잭션 하나를 희생자로 선택해 롤백한다.

원인

서로 다른 순서로 테이블/행을 잠그는 트랜잭션, 장시간 실행되는 트랜잭션, 인덱스 부재로 인한 넓은 스캔, lock escalation, 높은 동시성이 대표적인 원인이다.

해결 방법

애플리케이션에서 1205 오류를 잡아 트랜잭션을 자동으로 재시도한다. 모든 트랜잭션에서 같은 순서로 객체에 접근하고 트랜잭션을 짧게 유지한다. 데드락 그래프를 분석한다: 상세 정보는 Extended Events(system_health 세션) 또는 trace flag 1222를 사용한다. 적절한 인덱스를 추가해 스캔과 락을 줄인다. 필요하면 READ COMMITTED SNAPSHOT(RCSI) 격리 수준을 검토한다.

DBAtlas에서 열기 →

같은 데이터베이스의 다른 항목