MSSQLSERVER_1205MSSQLSERVER_1205

세부 정보Details

제품 이름Product Name SQL ServerSQL Server
이벤트 IDEvent ID 12051205
이벤트 원본Event Source MSSQLSERVERMSSQLSERVER
구성 요소Component SQLEngineSQLEngine
심볼 이름Symbolic Name LK_VICTIMLK_VICTIM
메시지 텍스트Message Text 트랜잭션(프로세스 ID %d)이 %.ls 리소스에서 다른 프로세스와의 교착 상태가 발생하여 실행이 중지되었습니다.Transaction (Process ID %d) was deadlocked on %.ls resources with another process and has been chosen as the deadlock victim. 트랜잭션을 다시 실행하십시오.Rerun the transaction.

설명Explanation

분리된 트랜잭션에서 리소스에 액세스하는 순서가 적절하지 못하여 교착 상태가 발생합니다.Resources are accessed in conflicting order on separate transactions, causing a deadlock. 예를 들어For example:

  • Transaction2가 Table2.Row2를 업데이트하는 동안 Transaction1이 Table1.Row1을 업데이트합니다.Transaction1 updates Table1.Row1, while Transaction2 updates Table2.Row2.

  • Transaction1이 Table2.Row2의 업데이트를 시도하지만 Transaction2가 커밋되지 않아 차단됩니다.Transaction1 tries to update Table2.Row2 but is blocked because Transaction2 has not yet committed.

  • 이제 Transaction2가 Table1.Row1의 업데이트를 시도하지만 Transaction1이 커밋되지 않아 차단됩니다.Transaction2 now tries to update Table1.Row1 but is blocked because Transaction1 has not committed.

  • Transaction1은 Transaction2가 완료되기를 기다리지만 Transaction2는 Transaction1이 완료되기를 기다리므로 교착 상태가 발생합니다.A deadlock occurs because Transaction1 is waiting for Transaction2 to complete, but Transaction2 is waiting for Transaction1 to complete.

시스템이 이 교착 상태를 발견하고 교착 상태가 발생한 트랜잭션 중 하나를 선택하여 이 메시지를 표시한 후 선택한 트랜잭션을 롤백합니다.The system will detect this deadlock and will choose one of the transactions involved as a 'victim' and will issue this message, rolling back the victim's transaction.

사용자 동작User Action

트랜잭션을 다시 실행하십시오.Execute the transaction again. 교착 상태가 발생하지 않도록 응용 프로그램을 수정할 수도 있습니다.You can also revise the application to avoid deadlocks. 교착 상태가 발생한 트랜잭션을 다시 실행하면 동시에 실행 중인 작업이 무엇인지에 따라 성공할 수도 있습니다.The transaction that was chosen as a victim can be retried and will likely succeed, depending on what operations are being executed simultaneously.

교착 상태를 방지하거나 발생하지 않도록 하려면 모든 트랜잭션이 동일한 순서(Table1에 액세스한 뒤 Table2에 액세스)로 행에 액세스하도록 하세요. 이렇게 하면 차단이 발생할 수는 있으나 교착 상태는 발생하지 않습니다.To prevent or avoid deadlocks from occurring, consider having all transactions access rows in the same order (Table1, then Table2); this way, although blocking might occur, a deadlock will not occur.