実行プランの比較
適用対象: SQL Server
このトピックでは、SQL Server Management Studio のプラン比較機能を使用し、実際のグラフィカルな実行プランの類似性や相違点を比較する方法について説明します。 この機能は、v16以降の SQL Server Management Studio で使用できます。
Note
実際の実行プランは、Transact-SQL のクエリまたはバッチが実行された後に生成されます。 そのため、実際の実行プランには、実際の行数、リソース使用状況のメトリック、ランタイムの警告 (ある場合) などのランタイム情報が含まれます。 詳細については、「実際の実行プランの表示」を参照してください。
プランを比較する機能は、次のようなトラブルシューティング目的でデータベースの専門家に使用されることがあります。
- クエリまたはバッチが突然遅くなった。
- クエリ書き直しの影響を理解する。
- スキーマ設計に導入した特定のパフォーマンス強化が実行プランに効果を与えているかを観察する。
[プランの比較] メニュー オプションでは、2 つの異なる実行プランを横に並べて比較できます。上述のすべての理由に対してさまざまな動作を明らかにする類似性や変化を簡単に特定できます。 このオプションでは次を比較できます。
- 以前に保存した 2 つの実行プラン ファイル (.sqlplan 拡張子)。
- アクティブな実行プラン 1 つと前に保存したクエリ実行プラン 1 つ。
- クエリ ストアで選択した 2 つのクエリ プラン。
ヒント
.sqlplan ファイルを含むプランの比較作業。旧バージョンの SQL Server からの作業も対象。 また、このオプションではオフライン比較が可能です。そのため、SQL Server インスタンスに接続する必要がありません。
2 つの実行プランが比較されているとき、基本的に同じことを行うプランのリージョンは同じ色とパターンでハイライトされます。 1 つのプランで色付きのリージョンをクリックすると、そのプランで、一致するノードの中央にもう 1 つのプランが配置されます。 引き続き実行プランの一致しない演算子やノードを比較できますが、その場合、比較する演算子を手動で選択する必要があります。
重要
プランの形状を変えると見なされるノードのみが類似性の確認に使用されます。 そのため、2 つのノードの真ん中で色が付いていないノードがプランの同じ下位セクションに入るということがありえます。 その場合、色が付いていないということは、セクションが等しいか確認されたとき、それらのノードが考慮されなかったことを意味します。
実行プランを比較するには
[ファイル] メニューを使用し、[ファイルを開く] をクリックするか、プラン ファイルを Management Studio ウィンドウにドラッグすることで、前に保存したクエリ実行プラン ファイル (.sqlplan) を開きます。 あるいは、クエリを実行し、その実行プランの表示を選択したところであれば、結果ウィンドウの [実行プラン] タブに移動します。
実行プランの何もない領域を右クリックし、[プラン表示の比較] をクリックします。
比較対象にする 2 つ目のクエリ プラン ファイルを選択します。 2 つ目のファイルが開いたら、プランを比較できます。
プランが比較されると、新しいウィンドウが開きます。既定では、プランが上下に分かれて表示されます。 比較されるプランで一般的な演算子またはノードで最初に現れるものが既定で選択され、プラン間の違いが表示されます。 ハイライトされた演算子とノードはすべて両方の比較対象プランに存在します。 上または左のプランでハイライトされた演算子を選択すると、下または右のプランで該当する演算子が自動的に選択されます。 一方の比較対象プランでルート ノード演算子を選択すると (下の画像では SELECT ノード)、もう一方の比較対象プランでもルート ノード演算子が各自選択されます。
ヒント
実行プラン比較の表示を横並びに切り替えることができます。その場合、実行プランの何もない領域を右クリックし、[分割の方向の切り替え] を選択します。
ヒント
実行プランで利用できるズーム オプションとナビゲーション オプションはすべて、プラン比較モードで動作します。 詳細については、「実際の実行プランの表示」を参照してください。
また、既定の選択では、右側にプロパティ ウィンドウが 2 つ開きます。 両方の比較対象演算子に存在するが違いがあるプロパティには、見分けやすいように先頭に 不等号 (≠) が付けられます。
下では、[プラン表示の分析] 比較ナビゲーション ウィンドウも開きます。 3 つのタブを使用できます。
- [ステートメント オプション] タブでは、既定で [類似演算子の強調表示] が選択されます。比較対象プランでハイライトされている同じ演算子またはノードで同じ色と線パターンが使用されます。 線パターンをクリックし、比較対象プランの類似領域間を移動します。 [類似セグメントに一致しない演算子の強調表示] を選択することで、類似性ではなく、プランの相違点をハイライトすることもできます。
Note
既定では、プランを比較するとき、データベース名が無視されるため、名前が異なるがスキーマが同じデータベースに対して保存されたプランを比較できます。 たとえば、ProdDB データベースと TestDB データベースのプランを比較できます。 この動作は [演算子を比較するときにデータベース名を無視する] で変更できます。
[複数ステートメント] タブは、ステートメントが複数含まれるプランを比較するときに便利です。適切なステートメント ペアを比較できます。
[シナリオ] タブでは、比較対象プランの [カーディナリティ推定] の相違点に関連することで最も関連性の高い側面がいくつか自動分析されています。 左側ウィンドウの一覧にある各演算子に対して、右側ウィンドウに [このシナリオの詳細については、ここをクリックしてください] リンクのシナリオに関する詳細と、そのシナリオが一覧に含まれる理由として考えられることが表示されます。
このウィンドウが閉じられている場合、比較対象プランの何もない領域を右クリックし、[プラン表示の比較オプション] を選択して再び開きます。
クエリ ストアで実行プランを比較するには
クエリ ストアで、実行プランが複数含まれるクエリを見つけます。 クエリ ストア シナリオの詳細については、「クエリ ストアの使用シナリオ」を参照してください。
SHIFT キーとマウスを組み合わせると、同じクエリに対して 2 つのプランを選択できます。
[選択したクエリのプランを、別々のウィンドウで比較します。] ボタンを使用してプラン比較を開始します。 「実行プランを比較するには」の手順 4 から 6 が該当します。