web-dev-qa-db-ja.com

SQL Serverで特定のレコードを更新または削除できないのはなぜですか?

SQL Server 2014で奇妙な問題が発生しています。テーブルの特定の行を更新または削除できません。

行を適切に挿入して選択できますが、行を更新または削除しようとすると、タイムアウトエラーが発生します。また、一部の行は更新できるが、他の行は更新できないことも奇妙です。テーブルは小さく、数千行しかないため、行を更新できるパターンと更新できないパターンを確認することは困難ですが、最近挿入された行は削除/更新できないようです。

テーブルにはトリガーがなく、データベースにはロックがなく、テーブルには主キーがあります。

何が原因でしょうか?

1
jabe

いくつかの迅速な可能性:

  1. 悪い統計。数百万行以下のテーブルではありそうにありませんが、技術的には可能です。 UPDATE STATISTICSを実行してみてください。これで問題が解決する場合は、統計情報がうまく機能しない理由と、問題を軽減するために何ができるかを調べてください。

  2. 適切なクラスター化インデックスの欠如。これは#1に関連している可能性があります。CIが悪い場合、変更中にCIを検索および調整する必要があるため、更新/削除が遅くなる可能性がありますが、INSERTがCIの末尾に追加されるだけかもしれません。

  3. 他のプロセスを介して、テーブルの一部のセクションでロックが長時間保持されています。他のトランザクションがテーブルを長時間ロックしている可能性があります。SQLログに対して適切なフラグをオンにしている場合、これはデッドロックとして表示される場合もあります。

クエリプランを手動で取得し、それを確認することも、何が起こっているのかを理解するのに役立ちます。

1
Duffy