Deadlock-sicheren Code zu schreiben ist wirklich schwierig. Selbst wenn Sie auf die Tabellen in derselben Reihenfolge zugreifen, kann es immer noch zu Deadlocks kommen [1]. Ich habe einen Beitrag in meinem Blog geschrieben, in dem einige Ansätze erläutert werden, die Ihnen helfen, Deadlock-Situationen zu vermeiden und zu lösen.
Wenn Sie sicherstellen möchten, dass zwei Anweisungen/Transaktionen niemals blockiert werden, können Sie dies möglicherweise erreichen, indem Sie mithilfe von sp_lock beobachten, welche Sperren jede Anweisung verbraucht System gespeicherte Prozedur. Dazu müssen Sie entweder sehr schnell sein oder eine offene Transaktion mit einem Holdlock-Hinweis verwenden.
Hinweise:
- Jede SELECT-Anweisung, die mehr als eine Sperre gleichzeitig benötigt, kann eine Deadlock gegen eine intelligent gestaltete Transaktion verursachen, die die Sperren in umgekehrter Reihenfolge greift.