使用 Performance Insights 控制面板分析 Oracle 执行计划
分析 Oracle Database 上的数据库负载时,您可能想了解哪些计划对数据库负载的影响最大。例如,给定时间的主要 SQL 语句可能正在使用下表所示的计划。
主要 SQL | 计划 |
---|---|
SELECT SUM(amount_sold) FROM sales WHERE prod_id = 10 |
计划 A |
SELECT SUM(amount_sold) FROM sales WHERE prod_id = 521 |
计划 B |
SELECT SUM(s_total) FROM sales WHERE region = 10 |
计划 A |
SELECT * FROM emp WHERE emp_id = 1000 |
计划 C |
SELECT SUM(amount_sold) FROM sales WHERE prod_id = 72 |
计划 A |
使用 Performance Insights 的计划功能,您可以执行以下操作:
-
了解主要 SQL 查询使用哪些计划。
例如,您可能会发现,大多数数据库负载是由使用计划 A 和计划 B 的查询生成的,只有很小一部分查询使用计划 C。
-
比较同一查询的不同计划。
在前面的示例中,除产品 ID 外,三个查询都相同。其中两个查询使用计划 A,另一个查询使用计划 B。若要查看两个计划的差异,您可以使用 Performance Insights。
-
了解查询何时切换到新计划。
您可能会看到查询使用了计划 A,然后在某个时间切换到计划 B。此时数据库是否发生了变化? 例如,如果表为空,优化程序可能会选择全表扫描。如果表加载了一百万行,优化程序可能会切换至索引范围扫描。
-
深入了解成本最高的计划的具体步骤。
例如,对于长时间运行的查询,可能会在 Equijoin 中显示缺少联接条件。此缺失条件会强制进行笛卡尔联接,将两个表的所有行联接起来。
您可以使用 Performance Insights 的计划捕获功能来执行上述任务。正如您可以按等待事件和主要 SQL 对 Oracle 查询进行切片一样,您也可以按计划维度对查询进行切片。
有关此功能的区域、数据库引擎和实例类支持信息,请参阅支持性能详情功能的 Amazon RDS 数据库引擎、区域和实例类
使用控制台分析 Oracle 执行计划
通过以下网址打开 Amazon RDS 控制台:https://console.aws.amazon.com/rds/
。 -
在导航窗格中,选择 Performance Insights。
-
选择 Oracle 数据库实例。将为该数据库实例显示 Performance Insights 控制面板。
-
在 Database load (DB load)(数据库负载)部分,选择 Slice by(切片依据)旁边的 Plans(计划)。
平均活动会话图表显示了主要 SQL 语句使用的计划。计划哈希值显示在彩色方块的右侧。每个哈希值唯一标识每个计划。
-
向下滚动至 Top SQL(主要 SQL)选项卡。
在以下示例中,主要 SQL 摘要具有两个计划。您可以通过语句中的问号来判断其是否为摘要。
-
选择摘要,将其扩展到其组件语句中。
在以下示例中,
SELECT
语句为摘要查询。摘要中的组件查询使用两种不同的计划。计划的颜色对应于数据库负载图表。摘要中的计划总数在显示第二列。 -
向下滚动,然后从 Plans for digest query(摘要查询计划)列表中选择两个要比较的 Plans(计划)。
您可以一次查看一个或两个查询计划。以下屏幕截图比较了摘要中的两个计划,哈希值分别为 2032253151 和 1117438016。在以下示例中,运行此摘要查询的平均活动会话中有 62% 使用左侧的计划,其余 38% 使用右侧的计划。
在此示例中,两个计划存在明显不同。计划 2032253151 中的步骤 2 使用索引扫描,计划 1117438016 中的步骤 2 使用全表扫描。对于具有大量行的表,使用索引扫描对单行进行查询通常更快。
-
(可选)选择 Copy(复制)将计划复制到剪贴板,或者选择 Download(下载)将计划保存到硬盘。