Ich erhalte diesen Fehler sehr häufig, aber nicht konsistent auf zwei Seiten in einer Anwendung, die sich in einer Produktionsumgebung befindet. Ich habe nur einige Screenshots des Fehlers unten.
Transaktion (Prozess-ID XX) wurde bei Sperre | Kommunikationspuffer Ressourcen mit einem anderen Prozess und wurde als Deadlock-Opfer gewählt. Führen Sie die Transaktion erneut aus.
Was sollte der Ansatz sein, um diesen Fehler zu beheben? Der Datenbankserver ist SQL Server 2005.
Sie müssen eine Deadlock-Profilablaufverfolgung ausführen, während die Fehler auftreten. Der Artikel < von Brad McGehee ist ein Überblick. Sie müssen die zwei problematischen Prozesse identifizieren. Überprüfen Sie anschließend den Code auf den zwei Seiten, um zu sehen, welche SQL-Befehle wie oft ausgegeben werden. Die meiste Zeit habe ich festgestellt, dass der Konflikt einfach identifiziert wird, indem einfach der SQL-Code überprüft wird, der gerade ausgeführt wird, und ich weiß, wie oft er ausgeführt wird. Die Reparatur dauert manchmal länger ...
Sie könnten tun, wie die Fehlermeldung vorschlägt und das Programm veranlassen, die Transaktion erneut zu versuchen!
Kommt sehr darauf an, wie "atomar" die Transaktion ist! Wenn Sie festgefahren sind, ist es wahrscheinlich, dass ein anderer Prozess die Zeile, die Sie interessiert, erfolgreich aktualisiert hat. Ist es unter diesen Umständen dennoch sinnvoll, das Update auf die Zeile anzuwenden?
Geben Sie dem Benutzer zumindest eine schönere Fehlermeldung ("Ein anderer Benutzer hat die xxxx geändert, die Sie aktualisieren wollten. Überprüfen Sie die neuen Werte und versuchen Sie es erneut.)
Tags und Links asp.net sql-server-2005 deadlock transactions