
通常よりもかなり時間がかかっているクエリがあり、それがスタックされているかどうかわかりません。
クエリは次のようになります。
INSERT XXXXXX WITH (TABLOCK)
SELECT * FROM YYYYYY with (NOLOCK)
WHERE ZZZZZZZZ = 1
これにより、何億もの行が挿入されます。ZZZZZZZZ にインデックスがあります。
ブロッキングセッションはありません。sys.dm_exec_requestsを確認すると、最後の待機タイプがページIOLATCH_SH これが何を意味するのかはよく分かりませんが、I/O と関係があるようです。
sys.dm_exec_sessions ではステータスが RUNNING と表示されますが、sp_who2 では SUSPENDED と表示されます。
テーブルが拡大しているかどうかを確認しようとしましたが、sp_spaceused XXXXXX を呼び出すと同じ値が返され続けます。
他に何ができるでしょうか?
アップデート:
上の回答を参考にしてスタックオーバーフロー、私はあることを発見しましたI/Oの問題、そして私の質問平均して1分あたり約600件のレコードが挿入されることになります。)。
次のステップは何ですか?
ディスクが故障していると判断する前に、何ができるでしょうか?
答え1
クエリが実行されています。PAGEIOLATCH_SH は、ディスク サブシステムでの待機であるため、多数の挿入を実行するときによく発生します。インデックスはテーブルへの挿入ごとに挿入を取得するため、実際にはパフォーマンスを妨げています。
数億というのは膨大な記録なので時間がかかりますが、どれくらいの期間実行されているのでしょうか?
答え2
2005 または 2008 を使用している場合は、SQL MVP Adam Mechanic が開発した sp_whoisactive スクリプトを必ず実行してください。これは基本的に sp_who/sp_who2 の強化版であり、必要な情報をすべて提供してくれるはずです。