0

数日後、アプリケーションの 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 です
  • サーバー、データベース、スキーマ、またはテーブルの構成は何も変わっていないと主張されています。

しかし、最後の主張が正しいとは思えません。サーバーが同時更新を処理する方法を変更するサーバー構成について、どのようなことを変更できますか?

4

1 に答える 1

1

このようなことは、テーブルが断片化されたり、統計が時間の経過とともに古くなったりした場合に発生する可能性があります。誰かがおそらくインデックスを削除しましたか? デッドロックが発生したときに通知を受け取る方法については、予防的なデッドロック通知も参照してください。

于 2013-02-21T18:52:54.197 に答える