ストアド プロシージャを実行するとリソースが大量に消費され、サーバーでタイムアウトが発生することがあります (特に CPU 使用率が 90% を超える場合)。
多くのリソースを消費するブロックを見つけるための最善かつ最速の方法と、それを解決するための良い方法を提案できる人はいますか?
- SQL Server 2005 を使用しています
ストアド プロシージャを実行するとリソースが大量に消費され、サーバーでタイムアウトが発生することがあります (特に CPU 使用率が 90% を超える場合)。
多くのリソースを消費するブロックを見つけるための最善かつ最速の方法と、それを解決するための良い方法を提案できる人はいますか?
クエリ プロファイラーを使用したい。 ここで説明します。これにより、クエリの実行パスと、最も時間がかかっている部分がグラフィカルに表示されます。
どのブロックが最も遅いかを知りたい場合は、次を使用します
統計プロファイルをオンに設定
統計IOをオンに設定
統計時間をオンに設定
SP を実行すると、各クエリの統計が表示されます。
sprocに多数のステートメントがある場合、入力に関連付ける出力のチャンクが多数あるため、SETSTATISTICSオプションをオンにするのは少し複雑になる可能性があります。
SSMSでのクエリプランのグラフィック表現は、バッチ/ sproc全体のコストに対する各ステートメントの%コストを表示するため、非常に便利です。ただし、これは単一の値であるため、プロファイラーを実行してステートメントレベルの出力をオンにするだけの方が便利な場合があります。プロファイラーは、イベントSQL:StmtCompletedと列CPUおよび読み取りを追加すると、ステートメントごとに個別のIOおよびCPUコストを提供します。
SQl Server Management Studio を使用している場合は、実行計画をオンにして、各サブプロセスがプロセス全体の何パーセントを占めるかなど、SQL サーバーによるクエリの実行方法に関する情報を表示できます。
多くの場合、これを行うと、明らかにほとんどのリソースを使用しているクエリの一部が発生します。
この情報を使用して、データベースのチューニング方法について十分な情報に基づいた決定を下すことができます。(問題のあるテーブルにインデックスを追加するなど)
実行計画を表示するために SQL プロファイラーを使用する必要はありません。
SET SHOWPLAN_XML ON