MSSQLSERVER_1205
Si applica a:SQL ServerDatabase SQL di AzureIstanza gestita di SQL di Azure
Dettagli
Attributo | Valore |
---|---|
Nome prodotto | SQL Server |
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
L'accesso alle risorse è in conflitto in caso di transazioni separate, causando un deadlock. Ad esempio:
-
Transaction1
gli aggiornamentiTable1.Row1
, mentre Transaction2 aggiornaTable2.Row2
-
Transaction1
tenta di aggiornareTable2.Row2
ma è bloccato perchéTransaction2
non ha ancora eseguito il commit e non ha rilasciato i blocchi - Transaction2 tenta ora di aggiornare
Table1.Row1
ma è bloccato perchéTransaction1
non ha eseguito il commit e non ha rilasciato i blocchi - Si verifica un deadlock perché
Transaction1
è in attesa del completamento diTransaction2
, maTransaction2
è in attesa del completamento diTransaction1
.
Il sistema rileva questo deadlock e sceglie una delle transazioni coinvolte come vittima . Invia quindi questo messaggio di errore, rollback della transazione della vittima. Per informazioni dettagliate, vedere Deadlock.
Azione dell'utente
I deadlock sono nella maggior parte dei casi problemi correlati all'applicazione e richiedono agli sviluppatori di applicazioni di apportare modifiche al codice. Un approccio quando viene visualizzato l'errore 1205 consiste nell'eseguire di nuovo le query. Per altre informazioni, vedere 'app Deadlock Simulator for Developers: How to Handle a SQL Deadlock issue in Your App.
È inoltre possibile modificare l'applicazione per evitare i deadlock. La transazione scelta come vittima può essere ritentata e probabilmente ha esito positivo, a seconda delle operazioni eseguite contemporaneamente.
Per evitare che si verifichino deadlock, prendere in considerazione la possibilità di accedere a tutte le transazioni nello stesso ordine (Table1
, quindi Table2
). In questo modo, anche se il blocco potrebbe verificarsi, viene evitato un deadlock.
Per altre informazioni, vedere Gestione dei deadlock e riduzione dei deadlock.