SQL Server のデッドロックのトピックは何度も議論されてきましたが、テーブルへの 2 つの同時挿入でさえもデッドロック状態になる可能性があるとは確信が持てませんでした。
シナリオ: アプリケーション (バックエンドとして SQL Server 2005、ASP.net 3.5) をテストしているときに、テーブルにレコードを同時に挿入したところ (簡略化された概要)、70% 以上のユーザーでデッドロックが発生しました。これは複数のリソースの場合ではないため、挿入がデッドロックになっている方法として、これを理解できませんでした。詳細な分析 (2 人のユーザーによるバグの再現) の後、両方のプロセスがテーブルの主キー インデックスで RangeS-S ロックを保持しており、これを RangeI-N ロックに変換しようとしていることがわかりました。デッドロックと 1 つのトランザクションが強制終了されます。
質問: これはリソースのアクセス順序の変更の場合ではないため、この種のデッドロックを回避または削減できますか? 他のプロセスをブロックしてデッドロックを回避するために、トランザクションに最初に排他ロックを強制することはできませんか? どのような(悪影響を)与える可能性がありますか? また、RangeI-N ロックについて詳しく説明できる人もいます。
これの分離レベルは「シリアル化可能」でした。
どんな提案も役に立ちます。
ありがとう、ガウラフ