Condividi tramite


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 aggiornamenti 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 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, ma Transaction2 è in attesa del completamento di Transaction1.

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.