RDS for Oracle 中的实时 SQL 计划管理
从 Oracle Database 26ai(26.0.0.0)开始,Amazon RDS for Oracle 支持实时 SQL 计划管理。此功能通过检测执行计划更改、根据早期计划对此类更改进行评估,以及根据需要从 SQL 计划基准中选择性能最佳的计划,来防止 SQL 性能回归。此过程是透明的,不需要人工干预。
要在 RDS for Oracle 上启用实时 SQL 计划管理,您可以使用 DBMS_SPM.CONFIGURE 来开启自动演进任务。然后,您可以使用 rdsadmin.rdsadmin_spm_util 软件包来配置 SYS 拥有的任务参数。
概述
当 Oracle 优化程序选择的新执行计划比以前的计划性能更差时,就会出现 SQL 性能回归。实时 SQL 计划管理可自动检测和预防这些回归。
启用实时 SQL 计划管理后,数据库将执行以下操作:
-
实时检测执行计划更改。
-
对照先前的计划评估新计划的性能。
-
自动创建或更新 SQL 计划基准。
-
选择性能最佳的计划以防止回归。
要求
要使用实时 SQL 计划管理,您的数据库实例必须满足以下各项要求:
-
Oracle Database 26ai 或更高版本
-
Oracle Enterprise Edition
启用实时 SQL 计划管理
要启用实时 SQL 计划管理,请完成以下两个步骤。
步骤 1:开启自动 SPM 演进任务
以主用户身份或具有 DBA 角色的用户身份运行以下语句:
BEGIN DBMS_SPM.CONFIGURE('AUTO_SPM_EVOLVE_TASK', 'AUTO'); END; /
步骤 2:配置 SYS 拥有的任务参数
SYS_AUTO_SPM_EVOLVE_TASK 任务由 SYS 拥有。RDS for Oracle 为此目的提供了 rdsadmin.rdsadmin_spm_util 软件包。
将 ACCEPT_PLANS 设置为 TRUE,以便数据库自动接受演进的计划:
EXEC rdsadmin.rdsadmin_spm_util.set_evolve_task_accept_plans('TRUE');
(可选)将备用计划来源设置为 AUTO:
EXEC rdsadmin.rdsadmin_spm_util.set_evolve_task_alternate_plan_source('AUTO');
验证配置
要验证是否启用了实时 SQL 计划管理,请运行以下查询:
SELECT parameter_value FROM DBA_SQL_MANAGEMENT_CONFIG WHERE parameter_name = 'AUTO_SPM_EVOLVE_TASK';
此查询返回 AUTO。
要验证任务参数设置,请运行以下查询:
SELECT parameter_name, parameter_value FROM DBA_ADVISOR_PARAMETERS WHERE task_name = 'SYS_AUTO_SPM_EVOLVE_TASK' AND parameter_name IN ('ACCEPT_PLANS', 'ALTERNATE_PLAN_SOURCE');
禁用实时 SQL 计划管理
要禁用实时 SQL 计划管理,请运行以下语句:
BEGIN DBMS_SPM.CONFIGURE('AUTO_SPM_EVOLVE_TASK', 'OFF'); END; /
rdsadmin_spm_util 过程
rdsadmin.rdsadmin_spm_util 软件包提供以下过程。
| 过程 | 参数 | 默认值 | 说明 |
|---|---|---|---|
|
|
|
|
为 |
|
|
|
|
为 |
监控 SQL 计划基准
启用实时 SQL 计划管理后,您可以监控数据库自动管理的计划基准:
SELECT SQL_HANDLE, PLAN_NAME, ENABLED, ACCEPTED, AUTOPURGE FROM DBA_SQL_PLAN_BASELINES ORDER BY LAST_MODIFIED DESC;
注意事项
在使用实时 SQL 计划管理时,请考虑以下事项:
-
具有 DBA 角色的用户可以直接调用
DBMS_SPM.CONFIGURE。此步骤不需要包装器。 -
rdsadmin.rdsadmin_spm_util过程是在 SYS 拥有的SYS_AUTO_SPM_EVOLVE_TASK任务上配置任务参数所必需的,因为主用户无法直接访问 SYS 拥有的顾问任务。 -
实时 SQL 计划管理以透明方式运行。您无需更改应用程序代码。
-
SQL 计划基准占用 SYSAUX 表空间中的空间。开启该功能后,监控 SYSAUX 使用情况。
-
传递给
DBMS_SPM.CONFIGURE的参数值(例如'AUTO'和'OFF')区分大小写。使用大写值。
相关资源
-
Oracle Database 文档中的 DBMS_SPM
-
Oracle Database 文档中的 Managing SQL plan baselines