同時に実行するとデッドロックが発生する2つのクエリがあります。
クエリ1-インデックス(index1)に含まれる列を更新します。
update table1 set column1 = value1 where id = @Id
table1でXロックを取得してから、index1でXロックを試行します。
クエリ2:
select columnx, columny, etc from table1 where {some condition}
index1でS-Lockを取得してから、table1でS-Lockを試行します。
同じクエリを維持しながらデッドロックを防ぐ方法はありますか?たとえば、更新前に更新トランザクションのインデックスでX-Lockを何らかの方法で取得して、テーブルとインデックスのアクセスが同じ順序であることを確認できますか?デッドロックを防ぐことができますか?
分離レベルは読み取りコミットです。インデックスの行ロックとページロックが有効になっています。同じレコードが両方のクエリに参加している可能性があります。パラメータが表示されないため、デッドロックグラフからはわかりません。