数日後、アプリケーションの 1 つで非常に頻繁に例外がスローされるようになりました。これらはすべて次の形式です。
Exception : com.microsoft.sqlserver.jdbc.SQLServerException:
Transaction (Process ID 66) was deadlocked on lock resources with
another process and has been chosen as the deadlock victim.
Rerun the transaction.
いくつかの興味深い事実:
- これらの例外はすべて、1 つのテーブルの特定の更新に対して発生します。
- システムでの処理方法により、これらの更新の全体が異なるスレッドで本質的に同時にトリガーされることがよくあります。ただし、システムが実行されている限り、この動作が問題を引き起こしたことは一度もありません (誰もが知っている限り、そして私たちが知っている限りでは、例外がログを大幅に混乱させています)、SQL サーバーはキューに入れられた方法でこれを適切に処理しました。ロックの問題なし。
- 他の多くの更新クエリが他のテーブルに対して同時に発生し、同じ状況が発生しますが、問題は発生しません。
- これは SQL Server 2005 です
- サーバー、データベース、スキーマ、またはテーブルの構成は何も変わっていないと主張されています。
しかし、最後の主張が正しいとは思えません。サーバーが同時更新を処理する方法を変更するサーバー構成について、どのようなことを変更できますか?