SQL Serverの実行計画の確認やチューニング検討に便利なPlan Explorerについて

# Plan Explorerとは
Plan Explorerは、Microsoft SQL Serverのクエリパフォーマンスを分析・最適化するためのツールです。
このツールは、実行計画を視覚的に表示し、クエリの実行効率を改善するための情報を提供してくれます。

もともとはSentryOne社によって提供されていましたが、2021年に買収されて以降はSolarWinds社に提供されています。

本記事では、Plan Explorerの基本的な使い方や活用例について紹介します。


# インストール方法

https://www.solarwinds.com/ja/free-tools/plan-explorer からインストーラをダウンロードできます。
2024年12月現在はユーザー登録が必須となっています。

# 実行計画の表示方法

Plan Explorerを使うとこのように実行計画を表示することができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/299916/8241582d-ebf1-2651-7c2f-30a6fafb90d1.png)

表示方法はいくつかあるため、以下に紹介します。

## 方法A. Plan Explorerで直接SQLを実行して取得する

Plan Explorerからサーバー・DBを指定して接続することができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/299916/cb9a91df-e03d-3c49-2849-ea0f9288da1d.png)

接続後、CommandTextタブにSQLを書いてF5を押すと実際にクエリが実行されて実際の実行計画(Actual Plan)が取得できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/299916/51157086-d046-f8cb-79b0-f28bd826f262.png)
↓ 実行後、Resultsタブが表示
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/299916/a8c8984a-09a9-1354-5a2f-e09b0ebc8043.png)

Ctrl+Lで推定実行計画(Estimated Plan)を取得することもできます。

## 方法B. sqlplanファイルを読み込む

SSMSで実行計画を保存し、保存した.sqlplanファイルをPlan Explorerで読み込むことができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/299916/db98243b-23df-0455-ca39-3f58c41f5b67.png)
↓sqlplanファイルを開く
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/299916/d743a32a-692c-4023-4ff8-6f082178faed.png" width=30%>

## 方法C. SSMSアドインから開く

Plan Explorerのインストール時にSSMSアドインもインストールしていると、SSMSの実行計画の表示画面からPlan Explorerを開くメニューが追加されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/299916/d0e791dc-d79a-80f2-b428-c8b7a34710c3.png)

## 方法D. XMLを貼り付ける
XML形式の実行計画をコピーしてPlan Explorerに貼り付けることで表示することもできます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/299916/69da772a-2d99-cd79-9315-07ad9c6268a6.png)
↓表示されたXMLをコピー
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/299916/45feaa87-fdd1-37df-3afe-e8eb9baab289.png)


別の環境で取得した実行計画を手元の環境で確認したい場合などに有用です。

# Plan Explorerの活用例

ここからはPlan Explorerを使った活用例について紹介します。

## 実際の行数と推定行数との比較

実際の実行計画では「ShowEstimatedPlan」ボタンを押すことができ、これを押すことで、実際の行数と推定行数を比較することができます。

例えばこちらにパフォーマンスの悪い、実際の実行計画があります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/299916/161a2010-9515-bdf2-265b-c0cdb7437b14.png)
インデックスからの読み込みとKeyLookUpとの結合が大量に走っていることで非常にパフォーマンスが悪くなっています。


こちらを推定実行計画に切り替えるとレコード量が非常に少ない見積もりであることがわかります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/299916/0ccacafc-742a-d38d-6b49-c6a9e95c4f96.png)

上記から、オプティマイザの推定としては取得行数が非常に少ない見込みであったことがパフォーマンスの悪い実行計画が作られた原因であり、この乖離をなくせれば改善に繋げられるだろうという予測が立てられます。

## Warning表示

Plan Explorerは、クエリの実行計画に関する警告を表示することができます。
例えば、次の画像では処理されている行数が多くないためパフォーマンスは一見そこまで悪くないように思えます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/299916/c1da6c3f-d061-fe18-e78f-0457a2c3393c.png)

ただし、Warningが出ている上記矢印のテーブルにカーソルを当てると次のように詳細な情報が確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/299916/44e8b4fc-769b-97de-3e5d-9c5ffd6d4adc.png)

条件句があり、返される行数は39行であるもののIndexSeekされておらず、9700万行超の読み込みが発生してボトルネックになっていることがわかります。

## チューニングの履歴管理
Plan Explorerでは、実行の履歴を管理し、コメントを残すことができます。
例えば次のようにチューニングの過程でどのような変更をして、その時にどのような実行計画だったかなどを残すことができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/299916/da6d03d1-00e0-d5d5-14b9-6aca8bfc8e59.png)


# 終わりに

以上、実行計画の確認やチューニング検討に便利なPlan Explorerについて紹介しました。
紹介しきれなかった機能もありますので、興味がありましたら実際にインストールして使ってみてください。