Ich schreibe eine Anwendung in C#, die auf eine SQL Server 2005-Datenbank zugreift. Die Anwendung ist ziemlich datenbankintensiv, und selbst wenn ich versuche, alle Zugriffe zu optimieren, korrekte Indizes einzurichten usw. erwarte ich früher oder später Deadlocks. Ich weiß, warum Datenbank-Deadlocks auftreten, aber ich bezweifle, dass ich in der Lage sein werde, die Software ohne Deadlocks zu veröffentlichen, die irgendwann auftreten. Die Anwendung verwendet Entity Framework für den Datenbankzugriff.Muster für die Behandlung eines SQL-Deadlocks in C#?
Gibt es ein gutes Muster für die Behandlung von SQLExceptions (deadlocked) im C# -Clientcode - zum Beispiel um den Anweisungsstapel nach x Millisekunden erneut auszuführen?
Um zu klären; Ich suche nicht nach einer Methode, wie man Deadlocks überhaupt vermeiden kann (Isolationsebenen, Indizes, Reihenfolge der Anweisungen usw.), sondern wie man mit ihnen umgeht, wenn sie tatsächlich auftreten.
Können Sie mir sagen, wie Sie die eigentliche Durchführung der Transaktion durchgeführt haben? Haben Sie an jedem Ort, an dem Sie eine Transaktion durchgeführt haben, eine einfache For-Schleife um den Code gelegt oder haben Sie eine allgemeinere Lösung gefunden? – martin
Wir haben eine Schleife implementiert. Wenn die Transaktion wegen einer Deadlock-Situation fehlgeschlagen ist, haben wir die gesamte Transaktion zurückgesetzt und erneut bis zu 5 Mal versucht. –