次の方法で共有


実行プランの比較

適用対象: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 つのプランで色付きのリージョンを選択すると、そのプランの一致するノードでもう一方のプランが中央に配置されます。 引き続き実行プランの一致しない演算子やノードを比較できますが、その場合、比較する演算子を手動で選択する必要があります。

重要

プランの形状を変えると見なされるノードのみが類似性の確認に使用されます。 そのため、プランの同じサブセクションにある 2 つのノードの中央に、色付けされていないノードが存在する可能性があります。 この場合の色の欠如は、セクションが等しいかどうかを確認するときにノードが考慮されなかったことを意味します。

実行プランの比較

  1. [ファイル] メニューを使用して以前に保存したクエリ実行プラン ファイル (.sqlplan) を開き、[ファイルを開く] を選択するか、プラン ファイルを Management Studio ウィンドウにドラッグします。 あるいは、クエリを実行し、その実行プランの表示を選択したところであれば、結果ウィンドウの [実行プラン] タブに移動します。

  2. 実行プランの空白領域を右クリックし、[ プランの比較] を選択します。

    [プラン表示の比較] を右クリックしたスクリーンショット。

  3. 比較対象にする 2 つ目のクエリ プラン ファイルを選択します。 2 番目のファイルが開き、プランを比較できます。

  4. 比較されたプランでは、既定で、上部に 1 つと下部に 1 つずつ、新しいウィンドウが開きます。 既定の選択は、比較されたプランで共通の演算子またはノードが最初に出現しますが、プラン間の違いを示します。 ハイライトされた演算子とノードはすべて両方の比較対象プランに存在します。 上部または左側のプランで強調表示された演算子を選択すると、下部または右のプランで対応する演算子が自動的に選択されます。 比較されたプランのいずれかでルート ノード演算子 (次の図の SELECT ノード) を選択すると、もう一方の比較プランのそれぞれのルート ノード演算子も選択されます。

    保存された 2 つのプラン ファイルのプラン比較のスクリーンショット。

    ヒント

    実行プラン比較の表示を横並びに切り替えることができます。その場合、実行プランの何もない領域を右クリックし、[分割の方向の切り替え] を選択します。

    実行プランで利用できるズーム オプションとナビゲーション オプションはすべて、プラン比較モードで動作します。 詳細については、 実際の実行プランの表示を参照してください。

  5. また、既定の選択では、右側にプロパティ ウィンドウが 2 つ開きます。 比較演算子の両方に存在するが、違いがあるプロパティの前には、識別を容易にするために 等号 ( ≠) が付けられます。

    [デュアル プロパティ] ウィンドウのスクリーンショット。

  6. 下では、[プラン表示の分析] 比較ナビゲーション ウィンドウも開きます。 3 つのタブを使用できます。

    1. [ステートメント オプション] タブでは、既定で [類似演算子の強調表示] が選択されます。比較対象プランでハイライトされている同じ演算子またはノードで同じ色と線パターンが使用されます。 ライム パターンを選択して、比較されたプラン内の類似領域間を移動します。 [類似セグメントに一致しない演算子の強調表示] を選択することで、類似性ではなく、プランの相違点をハイライトすることもできます。

      Note

      既定では、異なる名前を持つが同じスキーマを共有するデータベースに対してキャプチャされたプランを比較できるように、プランを比較する場合、データベース名は無視されます。 たとえば、データベースのプランを ProdDB および TestDB比較する場合などです。 この動作は [演算子を比較するときにデータベース名を無視する] で変更できます。

      [プラン表示の分析] ウィンドウのスクリーンショット。

    2. [複数ステートメント] タブは、ステートメントが複数含まれるプランを比較するときに便利です。適切なステートメント ペアを比較できます。

      比較されたプランの複数のステートメントのスクリーンショット。

    3. [ シナリオ ] タブでは、最も関連性の高い側面の一部を自動分析して、比較されたプランの カーディナリティ推定 (SQL Server) の 違いに関連するものを確認できます。 左側のウィンドウに一覧表示されている各演算子について、右側のウィンドウには、このシナリオの詳細については、[ ここを選択] のシナリオに関する詳細と、そのシナリオ を説明する考えられる理由が表示されます。

      さまざまな推定行のスクリーンショット。

    このウィンドウが閉じている場合は、比較プランの空白領域を右クリックし、[ プラン比較オプションを表示 ]を選択して再度開きます。

    プラン比較オプションのスクリーンショット。

クエリ ストアの実行プランを比較する

  1. クエリ ストアで、実行プランが複数含まれるクエリを見つけます。 クエリ ストア シナリオの詳細については、「クエリ ストアの使用シナリオ」を参照してください。

  2. Shift キーとマウスの組み合わせを使用して、同じクエリに対して 2 つのプランを選択します。

    [クエリ ストアで 2 つのプランを選択] のスクリーンショット。

  3. [選択したクエリのプランを、別々のウィンドウで比較します。] ボタンを使用してプラン比較を開始します。 「実行プランを比較するには」の手順 4 から 6 が該当します。

    クエリ ストアでのプランの比較のスクリーンショット。