

# 使用 Amazon RDS 的性能详情控制面板分析执行计划
<a name="USER_PerfInsights.UsingDashboard.AnalyzingPlans"></a>

在 Amazon RDS 性能详情控制面板中，您可以找到有关 Oracle 和 SQL Server 数据库实例的执行计划的信息。您可以使用这些信息来了解哪些计划对数据库负载的贡献最大。

要分析 Oracle 或 SQL Server 执行计划，请参阅以下主题。

**分析执行计划**
+ [使用 Amazon RDS 的性能详情控制面板分析 Oracle 执行计划](USER_PerfInsights.UsingDashboard.AccessPlans.md)
+ [使用 Amazon RDS 的性能详情控制面板分析 SQL Server 执行计划](USER_PerfInsights.UsingDashboard.AccessPlansSqlServer.md)

## 分析 Amazon RDS 的执行计划概述
<a name="USER_PerfInsights.UsingDashboard.AnalyzingPlans.Overview"></a>

您可以使用 Amazon RDS 性能详情控制面板，来了解哪些计划对 Oracle 和 SQL Server 数据库实例的数据库负载贡献最大。

 例如，给定时间的主要 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 查询使用哪些计划。

  例如，您可能会发现，大多数数据库负载是由使用计划 A 和计划 B 的查询生成的，只有很小一部分查询使用计划 C。
+ 比较同一查询的不同计划。

  在前面的示例中，除产品 ID 外，三个查询都相同。其中两个查询使用计划 A，另一个查询使用计划 B。若要查看两个计划的差异，您可以使用 Performance Insights。
+ 了解查询何时切换到新计划。

  您可能会看到查询使用了计划 A，然后在某个时间切换到计划 B。此时数据库是否发生了变化？ 例如，如果表为空，优化程序可能会选择全表扫描。如果表加载了一百万行，优化程序可能会切换至索引范围扫描。
+ 深入了解成本最高的计划的具体步骤。

  例如，对于长时间运行的查询，可能会在 equi-join 中显示缺少联接条件。此缺失条件会强制进行笛卡尔联接，将两个表的所有行联接起来。

您可以使用 Performance Insights 的计划捕获功能来执行上述任务。正如您可以按等待事件和主要 SQL 对查询进行切片一样，您也可以按计划维度对查询进行切片。

# 使用 Amazon RDS 的性能详情控制面板分析 Oracle 执行计划
<a name="USER_PerfInsights.UsingDashboard.AccessPlans"></a>

分析 Oracle Database 上的数据库负载时，您可能想了解哪些计划对数据库负载的影响最大。您可以使用性能详情的计划捕获特征，来确定哪些计划对数据库负载的贡献最大。

**使用控制台分析 Oracle 执行计划**

1. 通过以下网址打开 Amazon RDS 控制台：[https://console.aws.amazon.com/rds/](https://console.amazonaws.cn/rds/)。

1. 在导航窗格中，选择**性能详情**。

1. 选择 Oracle 数据库实例。将为该数据库实例显示 Performance Insights 控制面板。

1. 在 **Database load (DB load)**（数据库负载）部分，选择 **Slice by**（切片依据）旁边的 **Plans**（计划）。

   平均活动会话图表显示了主要 SQL 语句使用的计划。计划哈希值显示在彩色方块的右侧。每个哈希值唯一标识每个计划。  
![\[按计划切片\]](http://docs.amazonaws.cn/AmazonRDS/latest/UserGuide/images/pi-slice-by-plans.png)

1. 向下滚动至 **Top SQL**（主要 SQL）选项卡。

   在以下示例中，主要 SQL 摘要具有两个计划。您可以通过语句中的问号来判断其是否为摘要。  
![\[选择摘要计划\]](http://docs.amazonaws.cn/AmazonRDS/latest/UserGuide/images/top-sql-plans-unselected.png)

1. 选择摘要，将其扩展到其组件语句中。

   在以下示例中，`SELECT` 语句为摘要查询。摘要中的组件查询使用两种不同的计划。计划的颜色对应于数据库负载图表。摘要中的计划总数在显示第二列。  
![\[选择摘要计划\]](http://docs.amazonaws.cn/AmazonRDS/latest/UserGuide/images/pi-digest-plan.png)

1. 向下滚动，然后从 **Plans for digest query**（摘要查询计划）列表中选择两个要比较的 **Plans**（计划）。

   您可以一次查看一个或两个查询计划。以下屏幕截图比较了摘要中的两个计划，哈希值分别为 2032253151 和 1117438016。在以下示例中，运行此摘要查询的平均活动会话中有 62% 使用左侧的计划，而 38% 使用右侧的计划。  
![\[并排比较计划\]](http://docs.amazonaws.cn/AmazonRDS/latest/UserGuide/images/pi-compare-plan.png)

   在此示例中，两个计划存在明显不同。计划 2032253151 中的步骤 2 使用索引扫描，计划 1117438016 中的步骤 2 使用全表扫描。对于具有大量行的表，使用索引扫描对单行进行查询通常更快。  
![\[并排比较计划\]](http://docs.amazonaws.cn/AmazonRDS/latest/UserGuide/images/pi-table-access.png)

1. （可选）选择 **Copy**（复制）将计划复制到剪贴板，或者选择 **Download**（下载）将计划保存到硬盘。

# 使用 Amazon RDS 的性能详情控制面板分析 SQL Server 执行计划
<a name="USER_PerfInsights.UsingDashboard.AccessPlansSqlServer"></a>

分析 SQL Server 数据库上的数据库负载时，您可能想了解哪些计划对数据库负载的贡献最大。您可以使用性能详情的计划捕获特征，来确定哪些计划对数据库负载的贡献最大。

**使用控制台分析 SQL Server 执行计划**

1. 通过以下网址打开 Amazon RDS 控制台：[https://console.aws.amazon.com/rds/](https://console.amazonaws.cn/rds/)。

1. 在导航窗格中，选择**性能详情**。

1. 选择 SQL Server 数据库实例。将为该数据库实例显示 Performance Insights 控制面板。

1. 在 **Database load (DB load)**（数据库负载）部分，选择 **Slice by**（切片依据）旁边的 **Plans**（计划）。

   平均活动会话图表显示了主要 SQL 语句使用的计划。计划哈希值显示在彩色方块的右侧。每个哈希值唯一标识每个计划。  
![\[按计划切片\]](http://docs.amazonaws.cn/AmazonRDS/latest/UserGuide/images/pi-slice-by-plans-sqlserver.png)

1. 向下滚动至 **Top SQL**（主要 SQL）选项卡。

   在以下示例中，主要 SQL 摘要具有三个计划。SQL 语句中存在问号表示该语句是摘要。要查看完整的 SQL 语句，请在 **SQL 语句**列中选择一个值。  
![\[选择摘要计划\]](http://docs.amazonaws.cn/AmazonRDS/latest/UserGuide/images/top-sql-plans-unselected-sqlserver.png)

1. 选择摘要，将其扩展到其组件语句中。

   在以下示例中，`SELECT` 语句为摘要查询。摘要中的组件查询使用三种不同的执行计划。分配给计划的颜色对应于数据库负载图表。  
![\[选择摘要计划\]](http://docs.amazonaws.cn/AmazonRDS/latest/UserGuide/images/pi-digest-plan-sqlserver.png)

1. 向下滚动，然后从 **Plans for digest query**（摘要查询计划）列表中选择两个要比较的 **Plans**（计划）。

   您可以一次查看一个或两个查询计划。以下屏幕截图比较了摘要中的两个计划。在以下示例中，运行此摘要查询的平均活动会话中有 40% 使用左侧的计划，而 28% 使用右侧的计划。  
![\[并排比较计划\]](http://docs.amazonaws.cn/AmazonRDS/latest/UserGuide/images/pi-compare-plan-sqlserver.png)

   在前面的示例中，这些计划在一个重要方面有所不同。左侧计划中的步骤 2 使用表扫描，而右侧的计划使用聚集索引扫描。对于具有大量行的表，使用聚集索引扫描，检索单行的查询几乎总是更快。

1. （可选）选择“计划详细信息”表上的**设置**图标来自定义列的可见性和顺序。以下屏幕截图显示了“计划详细信息”表，其第二列是**输出列表**列。  
![\[自定义“计划详细信息”表中各列的可见性和顺序\]](http://docs.amazonaws.cn/AmazonRDS/latest/UserGuide/images/pi-plan-fields-sql-server.png)

1. （可选）选择 **Copy**（复制）将计划复制到剪贴板，或者选择 **Download**（下载）将计划保存到硬盘。

**注意**  
性能详情使用分层树表来显示估计的执行计划。该表包括每条语句的部分执行信息。有关“计划详细信息”表中各列的更多信息，请参阅 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 文档中的[显示估计的执行计划](https://learn.microsoft.com/en-us/sql/relational-databases/performance/display-the-estimated-execution-plan)。