SQL Server 2014で奇妙な問題が発生しています。テーブルの特定の行を更新または削除できません。
行を適切に挿入して選択できますが、行を更新または削除しようとすると、タイムアウトエラーが発生します。また、一部の行は更新できるが、他の行は更新できないことも奇妙です。テーブルは小さく、数千行しかないため、行を更新できるパターンと更新できないパターンを確認することは困難ですが、最近挿入された行は削除/更新できないようです。
テーブルにはトリガーがなく、データベースにはロックがなく、テーブルには主キーがあります。
何が原因でしょうか?
いくつかの迅速な可能性:
悪い統計。数百万行以下のテーブルではありそうにありませんが、技術的には可能です。 UPDATE STATISTICSを実行してみてください。これで問題が解決する場合は、統計情報がうまく機能しない理由と、問題を軽減するために何ができるかを調べてください。
適切なクラスター化インデックスの欠如。これは#1に関連している可能性があります。CIが悪い場合、変更中にCIを検索および調整する必要があるため、更新/削除が遅くなる可能性がありますが、INSERTがCIの末尾に追加されるだけかもしれません。
他のプロセスを介して、テーブルの一部のセクションでロックが長時間保持されています。他のトランザクションがテーブルを長時間ロックしている可能性があります。SQLログに対して適切なフラグをオンにしている場合、これはデッドロックとして表示される場合もあります。
クエリプランを手動で取得し、それを確認することも、何が起こっているのかを理解するのに役立ちます。