MS_SQLExecutionPlan - NetDevInfraWGinOSSConsortium/NetDevInfraWiki GitHub Wiki

実行プランのグラフィカル表示

概要

SQL Server Management Studioを使用して、

  • クエリの実行とデバッグが可能
  • また、クエリプラン(実行プラン)のグラフィカル表示も可能。

補足(3種類の実行プラン): 「実行プラン」と呼ばれるものには
性質の異なる 3 つがあり、見分けないと解析を誤る。

種類 取得方法 内容
推定実行プラン Ctrl+L / SET SHOWPLAN_XML ON 実行せずにオプティマイザの見積りだけを表示
実際の実行プラン Ctrl+M / SET STATISTICS XML ON 実行した上で実際の行数も表示
ライブ クエリ統計 SSMS の「ライブ クエリ統計を含める」 実行中の進捗をリアルタイム表示。長時間クエリの解析に有用

チューニングの起点は、実際の実行プランで
「推定行数」と「実際の行数」の乖離を探すこと。
大きくずれている演算子の直前が、統計情報の陳腐化や
SARGable でない述語(列に関数を適用しているなど)を疑う場所になる。

補足(読み方の勘所): グラフィカル表示は右から左に流れる。
太い矢印ほど行数が多い。
よく問題になるのは以下。

見えるもの 疑うこと
Key Lookup / RID Lookup 非クラスタ化インデックスに列が足りない(インデックスINCLUDE を検討)
Table Scan / Clustered Index Scan インデックスが無い、または使えていない
Sort が高コスト ORDER BY に合ったインデックスが無い。tempdb へのスピルも確認
Hash Match 結合キーのインデックス不足。ただし大量データでは正常
演算子の警告アイコン メモリ グラントの不足(スピル)、暗黙の型変換、統計情報の欠落

「コスト %」は見積り値であり、実測ではない点に注意。
推定が外れているクエリでは、コスト % 自体が当てにならない。

参考

Microsoft Learn

SQLプロファイラ(SQLトレース)

SQLプロファイラ(SQLトレース)

実行プランのログを取得できる。

補足(最新化:クエリ ストア): SQL Server 2016 以降は、
クエリ ストアが実行プランと実行統計を DB 内に自動で蓄積する。
トレースを仕掛けなくても、

  • 「あるクエリの実行プランがいつ変わったか」
  • 「変わった前後で実行時間がどう変化したか」

を後追いで比較でき、良かったプランを
**強制(Force Plan)**することもできる。
実行プランの回帰(plan regression)を扱うなら、
現在はまずクエリ ストアを見るのが定石
SQL Server のログ参照)。

SQL Server のオプティマイザ

SQL Server のオプティマイザ

オプティマイザが実行プランを決定する。


Tags: 移行, データアクセス, SQL Server, 障害対応, 性能, デバッグ, ツール類

⚠️ **GitHub.com Fallback** ⚠️