Die Transaktion (Prozess-ID 84) wurde bei Sperrressourcen mit einem anderen Prozess blockiert und wurde als Deadlock-Opfer ausgewählt

8

Ich habe eine Monitoring-Anwendung entwickelt. Also habe ich eine Timer-Funktion benutzt, um einige Werte in einer SQL-Tabelle zu überprüfen.

Obwohl es so viele Funktionen gibt, gibt es einen folgenden Fehler für eine Funktion namens getLogEntry ()

%Vor%

Dies ist die Implementierung der Funktion

%Vor%

Vielen Dank im Voraus

    
Tharik Kanaka 19.06.2012, 09:11
quelle

2 Antworten

13

Sie können sich auf diese Frage für einige hilfreiche Vorschläge.

Ich verwende das folgende Muster für Datenbankversuche; In diesem Fall geben wir eine DataTable zurück, aber das Muster ist immer gleich. Sie erkennen einen SqlDeadlock oder Timeout basierend auf der SqlException Number , und versuchen Sie es erneut, bis zu einer maximalen Anzahl von n-mal.

%Vor%     
dash 19.06.2012, 09:31
quelle
3

Ihre Abfrage wurde mit einer anderen Abfrage blockiert. Die andere Abfrage ist höchstwahrscheinlich eine insert , update oder delete Abfrage, da select allein nicht zum Deadlock neigt.

Wenn Ihnen die Konsistenz nicht so wichtig ist, können Sie den with (nolock) Hinweis verwenden:

%Vor%

Dies führt dazu, dass Ihre Abfrage keine Sperren platziert. Eine Abfrage ohne Sperren führt nicht zu Deadlocks. Der Nachteil ist, dass es inkonsistente Daten zurückgibt, wenn es gleichzeitig mit einer Modifikationsabfrage ausgeführt wird.

    
Andomar 19.06.2012 09:22
quelle

Tags und Links