デッドロック防止コードを書くのは本当に難しいです。同じ順序でテーブルにアクセスした場合でも、デッドロックが発生する可能性があります[1]。デッドロック状態を回避して解決するのに役立ついくつかのアプローチを詳しく説明した投稿をブログに書きました。
2つのステートメント/トランザクションがデッドロックしないようにしたい場合は、 sp_lock を使用して、各ステートメントがどのロックを消費するかを観察することで、それを達成できる場合があります。 システムストアドプロシージャ。これを行うには、非常に高速であるか、ホールドロックヒント付きのオープントランザクションを使用する必要があります。
注:
- 一度に複数のロックを必要とするSELECTステートメントは、逆の順序でロックを取得するインテリジェントに設計されたトランザクションに対してデッドロックする可能性があります。