将SQL计划基准与SQL Tuning Advisor一起使用
使用SQL Tuning Advisor调整SQL语句时,如果顾问程序找到调优计划并验证其性能优于从相应SQL计划基准中选择的计划,则建议接受SQL配置文件。 接受SQL配置文件后,数据库会将调整后的计划添加到相应的SQL计划基准。 但是,SQL Tuning Advisor不会在计划历史记录中验证现有的未接受计划。
在Oracle Database 11g中,自动配置的任务在维护窗口期间运行SQL Tuning Advisor。 此任务针对由自动工作负载存储库(AWR)快照中收集的执行性能数据标识的高负载SQL语句。 自动SQL调优任务实现SQL Tuning Advisor提出的SQL配置文件建议。 因此,数据库会自动将已调整的计划添加到已识别的高负载SQL语句的SQL计划基准中。
使用固定SQL计划基准
当SQL计划基准包含至少一个其FIXED属性设置为YES的已启用计划时,它将得到修复。您可以使用固定的SQL计划基准来修复SQL语句的可能计划集(通常是一个计划),或者通过将“概述”计划作为固定计划加载来迁移现有的存储轮廓。
如果固定的SQL计划基准还包含非固定计划,则优化程序优先于非固定计划的固定计划。因此,即使非固定计划可能具有更低的成本,优化器也会以最低的成本选择固定计划。如果没有任何固定计划可重现,则优化程序会选择最佳的非固定计划。
优化程序不会将新计划添加到固定的SQL计划基准。由于优化程序不会自动添加新计划,因此在执行DBMS_SPM.EVOLVE_SQL_PLAN_BASELINE时,数据库不会生成固定的SQL计划基准。但是,您可以通过从共享SQL区域或SQL调优集手动将新计划加载到其中来发展固定的SQL计划基准。
使用SQL Tuning Advisor调整具有固定SQL计划基准的SQL语句时,SQL配置文件建议具有特殊含义。接受SQL配置文件后,数据库会将调整后的计划作为非固定计划添加到固定SQL计划基准。然而,如上所述,当存在可再现的固定计划时,优化器不使用调整的计划。因此,SQL调优的好处可能无法实现。要启用调整计划,请通过将其FIXED属性设置为YES,手动将调整后的计划更改为固定计划。
显示SQL计划基准
要查看存储在给定语句的SQL计划基准中的计划,请使用DBMS_XPLAN程序包的DISPLAY_SQL_PLAN_BASELINE函数。以下示例显示由句柄(sql_handle)指定的指定SQL语句的一个或多个执行计划:
SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_SQL_PLAN_BASELINE(sql_handle=>'SYS_SQL_209d10fabbedc741',format=>'basic'));
或者,您可以通过提供计划名称(plan_name)来显示单个计划。
此函数使用存储在SQL管理库中的计划信息来解释和显示计划。 在此示例中,DISPLAY_SQL_PLAN_BASELINE函数显示句柄SYS_SQL_209d10fabbedc741指定的SQL语句的执行计划:
您还可以直接在DBA_SQL_PLAN_BASELINES视图上使用SELECT语句显示SQL计划基准信息,如以下示例所示:
SELECT SQL_HANDLE, PLAN_NAME, ENABLED, ACCEPTED, FIXEDFROM DBA_SQL_PLAN_BASELINES;