MSSQLSERVER_1205
Si applica a: SQL Server Database SQL di Azure Istanza 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 aggiorna Table1.Row1, mentre Transaction2 aggiorna Table2.Row2
- Transaction1 tenta di aggiornare Table2.Row2 ma è bloccato perché Transaction2 non ha ancora eseguito il commit e non ha rilasciato i relativi 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 di Transaction2 e Transaction2 è in attesa a sua volta del completamento di Transaction1.
Il sistema rileverà questo deadlock e sceglierà una delle transazioni coinvolte come "vittima". Verrà quindi generato questo messaggio di errore, rollback della transazione della vittima. Per informazioni dettagliate, vedere Deadlock.
Azione 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. Vedere questo blog per un esempio di come ripetere i tentativi: gestire il deadlock ed eseguire di nuovo la query: App del simulatore deadlock per sviluppatori: Come gestire un problema di deadlock SQL nell'app
È 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 evitare che si verifichino deadlock, è consigliabile disporre di tutte le transazioni che accedono alle righe nello stesso ordine (Table1, quindi Table2). In questo modo, anche se il blocco potrebbe verificarsi, verrà evitato un deadlock.
Per altre informazioni, vedere Gestione dei deadlock e riduzione dei deadlock.