編集:解決しました。テーブルにループのあるトリガーがありました(以下の私自身の回答を読んでください)。
次のような単純な削除ステートメントがあります。
DELETE FROM tablename WHERE pk = 12345
これはハングアップするだけで、タイムアウトも何もありません。
実行計画を調べたところ、関連するテーブルの多くのルックアップで構成されており、外部キーが削除を失敗させないようにしていますが、他のテーブルにはその特定の行を参照する行がないことを確認しました.
現在、データベースに接続している他のユーザーはいません。
これに対して DBCC CHECKDB を実行したところ、0 個のエラーが報告されました。
の結果sp_whoとsp_lockクエリがハングしている間に、私の spid に多くの PAG および KEY ロックがあり、時折 TAB ロックがあることに気付きました。
テーブルには 1.777.621 行あり、はい、pk は主キーであるため、インデックスに基づく単一行の削除です。実行計画にテーブル スキャンはありませんが、Table Spool (Eager Spool)と書かれたものが含まれていることに気付きましたが、Estimated number of rows 1 と書かれています。主キー列を見ているとだけ言っています。
テーブルで DBCC DBREINDEX と UPDATE STATISTICS を試しました。どちらも妥当な時間内に完了しました。
残念ながら、この特定のテーブルには多数のインデックスがあります。これはシステムの中核となるテーブルであり、多数の列と、送信と受信の両方の参照があります。正確な数は、48 個のインデックス + 主キーのクラスター化インデックスです。
他に何を見るべきですか?
また、このテーブルには以前はこの問題がありませんでしたが、この問題は今日突然発生しました。また、同じテーブル設定 (顧客データベースのコピー) を持つ多くのデータベースがあり、それらは期待どおりに動作します。問題があるのはこの 1 つだけです。