SQL Serverの実行計画を取得しクエリストアを表示する

 SQL Serverのクエリのコストを評価するには実行計画を取得する必要がある.最近のバージョンではクエリストアでクエリのコストを視覚化することが可能となった.今回はSQL Serverの実行計画を取得する従来の方法と,クエリストアを表示する方法を紹介する.元にした記事は日平均気温の過去30日間の移動平均をSQL Serverのウィンドウ関数を用いて計算するである.

実行計画を取得する

 今回使用するデータベースはHeatStrokeDBである.気象庁の日最高気温や日平均気温をダウンロードしてテーブル化したもの,総務省消防庁の熱中症搬送人員数をダウンロードしてテーブル化したものである.

実際の実行プランを含める

 最も手っ取り早い方法はSQL Server Management Studioの「実際の実行プランを含める」ボタンを押下する方法である.

「実際の実行プランを含める」ボタン
「実際の実行プランを含める」ボタン

 下図のように「結果」「メッセージ」タブの右側に「実行プラン」タブが表示される.

実行プランが視覚化される
実行プランが視覚化される

SET STATISTICS PROFILE ON

 テキストベースで結果を取得したい場合,クエリの前にSET STATISTICS PROFILE ONを加える.

SET STATISTICS PROFILE ON;
SELECT
    D.年月日
,	D.都道府県
,	AVG(D.日平均気温) 
		OVER (PARTITION BY D.都道府県
			  ORDER BY D.年月日 ASC
			  ROWS BETWEEN 29 PRECEDING AND CURRENT ROW) AS '移動平均30日間'
FROM	dbo.T_DailyAvgTemp	AS D
ORDER	BY 都道府県, 年月日;
SET STATISTICS PROFILE OFF;

 結果は要約したものを掲載する.

PhysicalOp EstimateIO EstimateCPU
NULL NULL NULL
Parallelism 0 0.6673307
Compute Scalar 0 0.000188588
Compute Scalar 0 0.001885875
Stream Aggregate 0 0.01184329
Window Spool 0 0.04145153
Segment 0 0.00118433
Compute Scalar 0 0.001885875
Sequence Project 0 0.0015087
Segment 0 0.000377175
Stream Aggregate 0 0.01184329
Window Spool 0 0.04145153
Segment 0 0.00118433
Sequence Project 0 0.0015087
Segment 0 0.000377175
Sort 0.001407658 1.489128
Parallelism 0 0.1188947
Table Scan 0.3957176 0.02076425

クエリストアを表示する

 SQL Server 2022 からデフォルトでオンになった機能がクエリストアである.従来のデータベースの場合,手動でクエリストアをオンにする必要がある.

データベースを右クリックして「プロパティ」

 データベースを右クリックして「プロパティ」を選択する.

データベースを右クリックして「プロパティ」
データベースを右クリックして「プロパティ」

「クエリストア」の「操作モード(要求)」を「読み取り/書き込み」に

 「クエリストア」の「操作モード(要求)」を「読み取り/書き込み」に変更する.

「クエリストア」の「操作モード(要求)」を「読み取り/書き込み」に変更
「クエリストア」の「操作モード(要求)」を「読み取り/書き込み」に変更

データベースをリフレッシュ

 データベースを右クリックしてリフレッシュすると,「クエリストア」ノードが出現している.

データベースをリフレッシュすると「クエリストア」ノードが出現する
データベースをリフレッシュすると「クエリストア」ノードが出現する

リソースを消費するクエリの上位

 最も使用するのは上から3番目の「リソースを消費するクエリの上位」だと思われる.

「リソースを消費するクエリの上位」,または「トップリソースコンシューマー」
「リソースを消費するクエリの上位」,または「トップリソースコンシューマー」

まとめ

 SQL Serverのクエリコストを評価するため,従来の「実際の実行プランを含める」「SET STATISTICS PROFILE ON」に加えて新機能のクエリストアを紹介した.

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

This site uses Akismet to reduce spam. Learn how your comment data is processed.