クエリの実行が遅い理由をどうすればわかりますか?

クエリの実行が遅い理由をどうすればわかりますか?

通常よりもかなり時間がかかっているクエリがあり、それがスタックされているかどうかわかりません。

クエリは次のようになります。

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 の強化版であり、必要な情報をすべて提供してくれるはずです。

http://sqlblog.com/files/folders/beta/entry27502.aspx

関連情報