SQL Server / SQL Database のクエリ情報を確認する際に活用できる クエリストア では、様々な情報を確認することができ、その項目の一つとして「CPU 時間 (ミリ秒) の合計」があります。
この項目は、SSMS から GUI でクエリストアの情報を確認するときに利用することができます。
本投稿では、SSMS からクエリストアの情報を確認する際に利用できる「合計」について触れたいと思います。
本投稿では、CPU 時間についてフォーカスしていますが、他の合計も基本的な考え方は同一です。
「CPU 時間 (ミリ秒)」の「合計」の算出方法
クエリストアの情報については クエリストアカタログビュー に記載されている各種ビューの情報で構成されており、クエリの統計情報については、sys.query_store_runtime_stats として情報が蓄積されています。
CPU に関する情報としては、次のような項目が取得されています。
- avg_cpu_time
- last_cpu_time
- min_cpu_time
- max_cpu_time
- stdev_cpu_time
クエリストアの情報として「total_cpu_time」という情報は保持されていませんね。
それでは、SSMS の GUI から取得した際の「CPU 時間 (ミリ秒) 合計」をどのように取得しているかというと、次のようなクエリで計算をして取得が行われています。
ROUND(CONVERT(float, SUM(rs.avg_cpu_time*rs.count_executions))*0.001,2) as total_cpu_time
平均 CPU 時間を実行回数で乗算した値を合計の CPU 時間として利用しています。
計算によって算出しているため、合計の値は厳密な集計値ではないということになりますね。
クエリストアのカタログビューから、クエリで直接情報を抽出する際にも上記のような計算式
「CPU 時間 (ミリ秒)」の「合計」の活用
合計時間は、厳密な値ではありませんが、合計の時間はチューニング対象のクエリを抽出する際に活用することができます。
SSMS の GUIでクエリストアの情報を確認する際には「構成」から情報を確認する期間を選択することができます。
「CPU 時間 (ミリ秒)」の「合計」を特定の期間で表示することで、「指定した期間で CPU を使用していたクエリ」を取得することができます。
合計時間は、平均 CPU 使用時間を実行回数で乗算したものですので、厳密な CPU 使用時間の合計ではなありませんが、CPU 使用率が高い時間帯を期間として設定し、CPU 時間の合計の情報を確認することで、チューニングすることで CPU 負荷を減らすことにつながるクエリを確認することができるのではないでしょうか。