다음을 통해 공유


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 완료할 때까지 기다리고 있지만 Transaction2Transaction1 완료할 때까지 기다리고 있기 때문에 교착 상태가 발생합니다.

시스템은 이 교착 상태를 감지하고 피해자관련된 트랜잭션 중 하나를 선택합니다. 그런 다음 이 오류 메시지를 실행하여 피해자의 트랜잭션을 롤백합니다. 자세한 내용은 교착 상태를 참조 하세요.

사용자 작업

교착 상태는 대부분의 경우 애플리케이션 관련 문제이며 애플리케이션 개발자가 코드를 변경해야 합니다. 오류 1205를 수신하는 한 가지 방법은 쿼리를 다시 실행하는 것입니다. 자세한 내용은 개발자용 교착 상태 시뮬레이터 앱: 앱SQL 교착 상태 문제를 처리하는 방법을 참조하세요.

교착 상태를 방지하기 위해 애플리케이션을 수정할 수도 있습니다. 피해자로 선택한 트랜잭션은 재시도할 수 있으며 동시에 실행 중인 작업에 따라 성공할 수 있습니다.

교착 상태가 발생하지 않도록 하려면 모든 트랜잭션이 동일한 순서(Table1, Table2)로 행에 액세스하도록 하는 것이 좋습니다. 이렇게 하면 차단이 발생할 수 있지만 교착 상태는 방지됩니다.

자세한 내용은 교착 상태 처리 및 교착 상태 최소화를 참조하세요.