Selectを使用したプロセスで、完了までに5〜10分程度の時間がかかります。
現在、MS SQLデータベースエンジンへのヒントとしてNOLOCKを使用していません。
同時に、同じデータベースと同じテーブルに更新と挿入を行う別のプロセスがあります。
最初のプロセスが開始されましたが、最近メッセージで途中で終了します
SQLEXCEPTION:トランザクションは別のプロセスでロックリソース上でデッドロックされ、デッドロックの犠牲者として選択されました。
この最初のプロセスは他のサイトで同じ条件で実行されていますが、データベースが小さいため、問題のselectステートメントの所要時間ははるかに短くなります(30秒程度)。これらの他のサイトでは、これらの他のサイトでデッドロックメッセージが表示されません。また、最初に問題が発生しているサイトでもこのメッセージは表示されませんでしたが、データベースが大きくなるにつれて、何らかのしきい値を超えたに違いないと思います。ここに私の質問があります:
- トランザクションの実行に時間がかかるため、関連するプロセスにデッドロックの犠牲者としてフラグが立てられる可能性が高くなります。
- NOLOCKヒントを使用して選択を実行すると、問題が解決しますか?
- selectステートメントのWHERE句の一部としてチェックされる日時フィールドが原因で、ルックアップ時間が遅くなっているのではないかと思います。このフィールドに基づいてインデックスを作成できますか?それはお勧めですか?