MSSQLSERVER_1205MSSQLSERVER_1205

DettagliDetails

Nome prodottoProduct Name SQL ServerSQL Server
ID eventoEvent ID 12051205
Origine eventoEvent Source MSSQLSERVERMSSQLSERVER
ComponenteComponent SQLEngineSQLEngine
Nome simbolicoSymbolic Name LK_VICTIMLK_VICTIM
Testo del messaggioMessage Text La transazione (ID di processo %d) è stata interrotta a causa di un deadlock delle risorse %.ls con un altro processo.Transaction (Process ID %d) was deadlocked on %.ls resources with another process and has been chosen as the deadlock victim. Ripetere la transazione.Rerun the transaction.

SpiegazioneExplanation

Si è tentato di accedere a risorse in ordine conflittuale in transazioni distinte, causando un deadlock.Resources are accessed in conflicting order on separate transactions, causing a deadlock. Esempio:For example:

  • Transaction1 aggiorna Table1.Row1, mentre Transaction2 aggiorna Table2.Row2.Transaction1 updates Table1.Row1, while Transaction2 updates Table2.Row2.

  • Transaction1 tenta di aggiornare Table2.Row2 ma viene bloccata perché non è ancora stato eseguito il commit di Transaction2.Transaction1 tries to update Table2.Row2 but is blocked because Transaction2 has not yet committed.

  • Transaction2 tenta quindi di aggiornare Table1.Row1 ma viene bloccata perché non è stato eseguito il commit di Transaction1.Transaction2 now tries to update Table1.Row1 but is blocked because Transaction1 has not committed.

  • Si verifica un deadlock perché Transaction1 è in attesa del completamento di Transaction2 e Transaction2 è in attesa a sua volta del completamento di Transaction1.A deadlock occurs because Transaction1 is waiting for Transaction2 to complete, but Transaction2 is waiting for Transaction1 to complete.

Il sistema rileva il deadlock e sceglie una delle due transazioni interessate come "vittima". Genera quindi il messaggio ed esegue il rollback della transazione della vittima.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.

Azione dell'utenteUser Action

Eseguire nuovamente la transazione.Execute the transaction again. È inoltre possibile modificare l'applicazione per evitare i deadlock.You can also revise the application to avoid deadlocks. È possibile tentare di eseguire nuovamente la transazione scelta come vittima. In base alle operazioni che verranno eseguite simultaneamente, è probabile che la transazione abbia esito positivo.The transaction that was chosen as a victim can be retried and will likely succeed, depending on what operations are being executed simultaneously.

Per impedire che si verifichino deadlock, è consigliabile che tutte le transazioni accedano alle righe nello stesso ordine (Table1, quindi Table2). In questo modo, sebbene sia possibile che si verifichi un blocco, non si verificherà un deadlock.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.