MSSQLSERVER_1205

Data creazione: 17 luglio 2006

Dettagli

Nome prodotto

SQL Server

Versione prodotto

9.0

Numero di build del prodotto

9.00.1281.60

ID evento

1205

Origine evento

MSSQLSERVER

Componente

SQLEngine

Nome simbolico

LK_VICTIM

Testo del messaggio

La transazione (ID di processo %d) è stata interrotta a causa di un deadlock delle risorse %.*ls con un altro processo. Ripetere la transazione.

Spiegazione

Si è tentato di accedere a risorse in ordine conflittuale in transazioni distinte, causando un deadlock. Ad esempio:

  • Transaction1 aggiorna Table1.Row1, mentre Transaction2 aggiorna Table2.Row2.
  • Transaction1 tenta di aggiornare Table2.Row2 ma viene bloccata perché non è ancora stato eseguito il commit di Transaction2.
  • Transaction2 tenta quindi di aggiornare Table1.Row1 ma viene bloccata perché non è stato eseguito il commit di Transaction1.
  • Si verifica un deadlock perché Transaction1 è in attesa del completamento di Transaction2 e Transaction2 è in attesa a sua volta del completamento di Transaction1.

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. Per ulteriori informazioni sui deadlock, vedere Utilizzo di deadlock.

Azione utente

Eseguire nuovamente la transazione. È inoltre possibile modificare l'applicazione per evitare i deadlock. È 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.

Per impedire che si verifichino deadlock, è consigliabile che tutte le transazioni accedano alle righe nello stesso ordine (Table1 e quindi Table2). In questo modo, nonostante sia possibile che si verifichi un blocco, non si verificherà un deadlock. Per ulteriori informazioni sulle azioni da intraprendere, vedere Rilevamento e interruzione di deadlock.