Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Kein SQL-Deadlock durch Design - irgendwelche Codierungsmuster?

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:

  1. 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.