MSSQLSERVER_1205
적용 대상:SQL ServerAzure SQL 데이터베이스Azure SQL Managed Instance
세부 정보
attribute | 값 |
---|---|
제품 이름 | SQL Server |
이벤트 ID | 1205 |
이벤트 원본 | MSSQLSERVER |
구성 요소 | SQLEngine |
심볼 이름 | LK_VICTIM |
메시지 텍스트 | 트랜잭션(프로세스 ID %d)이 %.*ls 리소스에서 다른 프로세스와의 교착 상태가 발생하여 실행이 중지되었습니다. 트랜잭션을 다시 실행합니다. |
설명
리소스는 별도의 트랜잭션에서 충돌하는 순서로 액세스되어 교착 상태가 발생합니다. 예시:
-
Transaction1
업데이트는Table1.Row1
, Transaction2 업데이트는Table2.Row2
-
Transaction1
Table2.Row2
업데이트하려고 시도하지만Transaction2
아직 커밋되지 않았고 잠금을 해제하지 않았기 때문에 차단됩니다. - 이제 transaction2는
Table1.Row1
업데이트하려고 시도하지만Transaction1
커밋되지 않았고 잠금을 해제하지 않았기 때문에 차단됩니다. -
Transaction1
Transaction2
완료할 때까지 기다리고 있지만Transaction2
Transaction1
완료할 때까지 기다리고 있기 때문에 교착 상태가 발생합니다.
시스템은 이 교착 상태를 감지하고 피해자관련된 트랜잭션 중 하나를 선택합니다. 그런 다음 이 오류 메시지를 실행하여 피해자의 트랜잭션을 롤백합니다. 자세한 내용은 교착 상태를 참조 하세요.
사용자 작업
교착 상태는 대부분의 경우 애플리케이션 관련 문제이며 애플리케이션 개발자가 코드를 변경해야 합니다. 오류 1205를 수신하는 한 가지 방법은 쿼리를 다시 실행하는 것입니다. 자세한 내용은 개발자용 교착 상태 시뮬레이터 앱: 앱SQL 교착 상태 문제를 처리하는 방법을 참조하세요.
교착 상태를 방지하기 위해 애플리케이션을 수정할 수도 있습니다. 피해자로 선택한 트랜잭션은 재시도할 수 있으며 동시에 실행 중인 작업에 따라 성공할 수 있습니다.
교착 상태가 발생하지 않도록 하려면 모든 트랜잭션이 동일한 순서(Table1
, Table2
)로 행에 액세스하도록 하는 것이 좋습니다. 이렇게 하면 차단이 발생할 수 있지만 교착 상태는 방지됩니다.
자세한 내용은 교착 상태 처리 및 교착 상태 최소화를 참조하세요.