SE の雑記

SQL Server の情報をメインに Microsoft 製品の勉強内容を日々投稿

Batch Resp Statistics を使用したクエリ実行時間の把握

leave a comment

SQL Server 2012 では [SQL Server:Batch Resp Statistics] というパフォーマンスモニターのカウンタが追加されています。

image

このカウンタを使用するとインスタンスのクエリの実行時間を俯瞰することができますのでまとめてみたいと思います。

SQL Server 関連のカウンタは SQL Server オブジェクトの使用 に記載されているのですがこのカウンタは説明がないのですよね。

このカウンタを使用すると以下のように ms の時間を範囲として、CPU 利用時間や経過時間の統計を取ることができます。
image

この情報を見ることで実行にどの程度かかっているクエリが多いのかを把握することができます。
CPU 時間や経過時間が長いクエリはそれだけハードウェア負荷が上がることになりますので、数ミリ秒の範囲が多いことが望ましくなります。

[sys.dm_exec_query_stats] には、[last_worker_time] [last_elapsed_time] というような最後に実行したクエリ実行時の CPU 時間や経過時間を確認することができる項目があります。

この項目と上記のカウンタを組み合わせると、どのようなクエリが該当の範囲に入っているかを確認するための手掛かりになるかと思います。

実際のクエリとしては以下のような形でしょうか。

SELECT
    DB_NAME(sys.dm_exec_query_plan.dbid),
    creation_time,
    last_execution_time,
    last_worker_time,
    last_elapsed_time,
    sys.dm_exec_sql_text.text,
    sys.dm_exec_query_plan.query_plan
FROM
sys.dm_exec_query_stats
CROSS APPLY
sys.dm_exec_sql_text(sql_handle)
CROSS APPLY
sys.dm_exec_query_plan(plan_handle)
WHERE
(last_worker_time >= 500000
OR
last_elapsed_time >= 500000)
AND
sys.dm_exec_query_plan.dbid >= 5

 

最後の実行時に CPU 時間と経過時間が 500 ms 以上かかっているクエリを取得するものになります。
稼働中のシステムのカウンタを取得して、どの範囲の時間のクエリが多いかを確認し、それに合わせてクエリの条件を調整することでカウンタが示す範囲のクエリを取得することができるかと。

Share

Written by Masayuki.Ozawa

6月 25th, 2013 at 8:37 am

Posted in SQL Server

Tagged with ,

Leave a Reply