

# Amazon RDS の Performance Insights ダッシュボードを使用した実行プランの分析
<a name="USER_PerfInsights.UsingDashboard.AnalyzingPlans"></a>

Amazon RDS Performance Insights ダッシュボードでは、Oracle および SQL Server DB インスタンスの実行プランに関する情報を確認できます。この情報を使用して、どのプランが DB 負荷に最も影響しているかを知ることができます。

Oracle または SQL Server の実行プランを分析するには、以下のトピックを参照してください。

**実行プランの分析**
+ [Amazon RDS の Performance Insights ダッシュボードを使用した Oracle 実行プランの分析](USER_PerfInsights.UsingDashboard.AccessPlans.md)
+ [Amazon RDS の Performance Insights ダッシュボードを使用した SQL Server 実行プランの分析](USER_PerfInsights.UsingDashboard.AccessPlansSqlServer.md)

## Amazon RDS の実行プランの分析の概要
<a name="USER_PerfInsights.UsingDashboard.AnalyzingPlans.Overview"></a>

Amazon RDS Performance Insights ダッシュボードを使用して、Oracle および SQL Server DB インスタンスの DB 負荷に最も影響しているプランを確認できます。

 例えば、特定の時点の上位の SQL ステートメントが、次の表に示すプランを使用している場合があります。


****  

| 上位の SQL | 計画 | 
| --- | --- | 
|  SELECT SUM(amount\$1sold) FROM sales WHERE prod\$1id = 10  |  プラン A  | 
|  SELECT SUM(amount\$1sold) FROM sales WHERE prod\$1id = 521  |  プラン B  | 
|  SELECT SUM(s\$1total) FROM sales WHERE region = 10  |  プラン A  | 
|  SELECT \$1 FROM emp WHERE emp\$1id = 1000  |  プラン C  | 
|  SELECT SUM(amount\$1sold) FROM sales WHERE prod\$1id = 72  |  プラン A  | 

Performance Insights のプランニング機能を使用すると、以下を実行できます。
+ 上位 SQL クエリでどのプランが使用されているかを確認する。

  例えば、DB の負荷の大部分は、プラン A とプラン B を使用したクエリによって生成され、プラン C を使用する割合はごく小規模だということがあります。
+ 同じクエリについてさまざまなプランを比較する。

  前の例では、製品 ID を除けば、3 つのクエリは同一です。この内 2 つのクエリでプラン A が使用されますが、1 つのクエリではプラン B を使用しています。2 つのプランの違いを確認するには、Performance Insights を使用します。
+ クエリが新しいプランに切り替わった時期を確認する。

  プラン A を使用するクエリで、特定のタイミングでプラン B に切り替えられたことを確認できます。この時点で、データベースに変更があったかどうか。例えば、テーブルが空の場合、オプティマイザはテーブル全体に対するスキャンを選択することがあります。仮にテーブルに 100 万行がロードされたとすると、オプティマイザはインデックス範囲のスキャンに切り替えます。
+ コストが最も高いプランの特定のステップにドリルダウンします。

  例えば、実行時間の長いクエリで、等価結合に結合条件がないと表示される場合があります。この欠落条件により、2 つのテーブルのすべての行を結合するデカルト結合が強制的に実行されます。

上記のタスクは、Performance Insights のプランキャプチャ機能を使用して実行できます。クエリは、待機イベントと上位 SQL でスライスできるのと同様に、プランのディメンションでスライスできます。

# Amazon RDS の Performance Insights ダッシュボードを使用した Oracle 実行プランの分析
<a name="USER_PerfInsights.UsingDashboard.AccessPlans"></a>

Oracle Database の DB 負荷を分析する際に、DB 負荷に最も影響しているプランを知りたい場合があります。DB 負荷に最も影響しているプランを特定するには、Performance Insights のプランキャプチャ機能を使用できます。

**コンソールを使用して Oracle 実行プランを分析するには**

1. Amazon RDS コンソール ([https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)) を開きます。

1. ナビゲーションペインで、[**Performance Insights**] を選択します。

1. Oracle DB インスタンスを選択します。この DB インスタンスに Performance Insights ダッシュボードが表示されます。

1. [**データベース負荷 (DB 付加)**] セクションで、[**スライス基準**] の横にある [**プラン**] をクリックします。

   平均アクティブセッションのグラフには、上位 SQL ステートメントで使用されているプランが表示されます。プランのハッシュ値は、色分けされた四角形の右側に表示されます。各ハッシュ値によりプランを一意に識別できます。  
![\[プランによるスライス化\]](http://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/images/pi-slice-by-plans.png)

1. 下部にある [**トップ SQL**] タブまでスクロールします。

   次の例では、上位 SQL ダイジェストに 2 つのプランがあります。ステートメント内で疑問符を付けることで、それがダイジェストだと伝えることができます。  
![\[ダイジェストプランを選択する\]](http://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/images/top-sql-plans-unselected.png)

1. ダイジェストを選択して、そのコンポーネントステートメントを展開します。

   以下の例では、`SELECT` ステートメントがダイジェストクエリです。ダイジェスト内のコンポーネントクエリでは、2 つの異なるプランが使用されます。プランに付けられた色は、データベースの負荷チャートのものと対応しています。ダイジェスト内のプランの総数が、2 列目に表示されます。  
![\[ダイジェストプランを選択する\]](http://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/images/pi-digest-plan.png)

1. 下にスクロールし、[**ダイジェストクエリのプラン**] リストから、比較する 2 つの [**プラン**] を選択します。

   1 つのクエリについて、一度に 1 つまたは 2 つのプランを表示できます。次のスクリーンショットは、ダイジェスト内で、ハッシュ 2032253151 とハッシュ 1117438016 を含む 2 つのプランを比較しています。次の例では、このダイジェストクエリを実行する平均アクティブセッションの 62% が左側のプランを使用しているのに対し、38% は右側のプランを使用しています。  
![\[プランを並べて比較する\]](http://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/images/pi-compare-plan.png)

   この例では、それぞれのプランに重要な相違点があります。プラン 2032253151 のステップ 2 ではインデックススキャンが使用されますが、プラン 1117438016 ではフルテーブルスキャンが使用されます。ほとんどの場合、行数が多いテーブルでは、インデックススキャンを使用すると 1 行のクエリを高速化できます。  
![\[プランを並べて比較する\]](http://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/images/pi-table-access.png)

1. (オプション) [**コピー**] をクリックし、クリップボードにプランをコピーします。あるいは、[**ダウンロード**] により、ハードドライブにプランを保存します。

# Amazon RDS の Performance Insights ダッシュボードを使用した SQL Server 実行プランの分析
<a name="USER_PerfInsights.UsingDashboard.AccessPlansSqlServer"></a>

SQL Server データベースの DB 負荷を分析する際に、DB 負荷に最も影響しているプランを確認することもできます。DB 負荷に最も影響しているプランを特定するには、Performance Insights のプランキャプチャ機能を使用できます。

**コンソールを使用して SQL Server 実行プランを分析するには**

1. Amazon RDS コンソール ([https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)) を開きます。

1. ナビゲーションペインで、[**Performance Insights**] を選択します。

1. SQL Server DB インスタンスを選択します。この DB インスタンスに Performance Insights ダッシュボードが表示されます。

1. [**データベース負荷 (DB 付加)**] セクションで、[**スライス基準**] の横にある [**プラン**] をクリックします。

   平均アクティブセッションのグラフには、上位 SQL ステートメントで使用されているプランが表示されます。プランのハッシュ値は、色分けされた四角形の右側に表示されます。各ハッシュ値によりプランを一意に識別できます。  
![\[プランによるスライス化\]](http://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/images/pi-slice-by-plans-sqlserver.png)

1. 下部にある [**トップ SQL**] タブまでスクロールします。

   次の例では、上位の SQL ダイジェストに 3 つのプランがあります。SQL ステートメントに疑問符が付いている場合は、そのステートメントがダイジェストであることを示しています。SQL ステートメント全体を表示するには、**[SQL ステートメント]** 列の値を選択します。  
![\[ダイジェストプランを選択する\]](http://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/images/top-sql-plans-unselected-sqlserver.png)

1. ダイジェストを選択して、そのコンポーネントステートメントを展開します。

   以下の例では、`SELECT` ステートメントがダイジェストクエリです。ダイジェスト内のコンポーネントクエリでは、3 つの異なる実行プランを使用します。プランに付けられた色は、データベースの負荷チャートに対応しています。  
![\[ダイジェストプランを選択する\]](http://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/images/pi-digest-plan-sqlserver.png)

1. 下にスクロールし、[**ダイジェストクエリのプラン**] リストから、比較する 2 つの [**プラン**] を選択します。

   1 つのクエリについて、一度に 1 つまたは 2 つのプランを表示できます。次のスクリーンショットは、ダイジェスト内の 2 つのプランを比較しています。次の例では、このダイジェストクエリを実行する平均アクティブセッションの 40% が左側のプランを使用し、28% が右側のプランを使用しています。  
![\[プランを並べて比較する\]](http://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/images/pi-compare-plan-sqlserver.png)

   前の例では、プラン間に重要な違いがあります。左側のプランのステップ 2 ではテーブルスキャンを使用しているのに対し、右側のプランではクラスター化インデックススキャンを使用しています。行数が多いテーブルでは、ほとんどの場合、1 行を取得するクエリはクラスター化インデックススキャンより高速です。

1. (オプション) [プランの詳細] テーブルの **[設定]** アイコンを選択して、列の表示と順序をカスタマイズします。次のスクリーンショットでは、[プランの詳細] テーブルに **[出力リスト]** 列が 2 番目の列として表示されています。  
![\[[プランの詳細] テーブルの列の表示と順序をカスタマイズする\]](http://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/images/pi-plan-fields-sql-server.png)

1. (オプション) [**コピー**] をクリックし、クリップボードにプランをコピーします。あるいは、[**ダウンロード**] により、ハードドライブにプランを保存します。

**注記**  
Performance Insights は、階層ツリーテーブルを使用して推定実行プランを表示します。このテーブルには、各ステートメントの部分的な実行情報が含まれています。[プランの詳細] テーブルの列の詳細については、SQL Server ドキュメントの「[SET SHOWPLAN\$1ALL](https://learn.microsoft.com/en-us/sql/t-sql/statements/set-showplan-all-transact-sql)」を参照してください。推定実行プランの実行情報全体を表示するには、**[ダウンロード]** を選択してプランをダウンロードし、これを SQL Server Management Studio にアップロードします。SQL Server Management Studio を使用して推定実行プランを表示する方法の詳細については、SQL Server ドキュメントの「[Display an Estimated Execution Plan](https://learn.microsoft.com/en-us/sql/relational-databases/performance/display-the-estimated-execution-plan)」を参照してください。