Domanda

Ricevo questo errore molto frequentemente ma non coerentemente su 2 pagine in un'applicazione che si trova in un ambiente di produzione. Di seguito sono riportate solo alcune schermate dell'errore.

Transazione (ID processo XX) è stata bloccata in blocco sul blocco | risorse del buffer di comunicazione con un altro processo ed è stato scelto come vittima di un deadlock. Rieseguire la transazione.

Quale dovrebbe essere l'approccio per risolvere questo errore. Il server db è SQL Server 2005.

È stato utile?

Soluzione

Altri suggerimenti

Questo article di Brad McGehee è un buon punto di partenza.

È necessario eseguire una traccia del profilo Deadlock mentre si verificano errori. Il articolo di Brad McGehee è una panoramica. È necessario identificare i due processi offensivi. Successivamente, rivedi il codice nelle due pagine per vedere quali comandi SQL vengono emessi e con quale frequenza. Il più delle volte, ho scoperto che la semplice revisione del codice SQL in esecuzione e la conoscenza della frequenza con cui viene eseguito identificheranno rapidamente il conflitto. La riparazione a volte richiede più tempo ...

Puoi fare come suggerisce il messaggio di errore e far ritentare la transazione dal programma!

Dipende molto da come " atomico " la transazione è però! vale a dire se sei stato bloccato in modo improbabile che qualche altro processo abbia aggiornato con successo la riga che ti interessa. Ha ancora senso applicare l'aggiornamento alla riga in queste circostanze?

Per lo meno presentare all'utente un messaggio di errore migliore (" Un altro utente ha modificato il xxxx che si stava tentando di aggiornare. Si prega di rivedere i nuovi valori e riprovare.)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top