Oracle 11g中SQL优化新特性之SQL Plan Management的要点如下:
功能概述:
- 目的:捕获并保持任意SQL语句执行计划的最优状态,以减少因优化器统计数据刷新、应用变化及数据库版本升级带来的性能影响。
- 核心组件:SQL Management Base,用于存储SQL Plan Baselines。
SQL Plan Baseline的捕获:
- 自动捕获:通过设置OPTIMIZER_CAPTURE_SQL_PLAN_BASELINES参数为TRUE来开启。CBO会在SMB中记录会话内执行的SQL语句及其相关信息。
- 手动捕获:使用DBMS_SPM包,可以从数据库缓存、SQL Tuning Set、AWR快照或存储表中预先捕获和导入SQL语句的计划。
SQL Plan Baseline的评估与选择:
- 性能评估:当SQL语句再次执行时,CBO会比较新计划与SMB中的计划,评估新计划的性能。
- 最优计划选择:若新计划性能更优,则将其标记为最优计划;若性能降低,则选择成本最低的计划存储。
SQL Plan Baseline的状态管理:
- 标记过程:新计划进入SMB时标记为ENABLED,验证为良好计划后标记为ACCEPTED。
- 查看元数据:通过DBA_SQL_PLAN_BASELINES字典视图查看已存在的SQL Plan Baselines,使用DBMS_XPLAN.DISPLAY_SQL_PLAN_BASELINE过程显示特定SQL语句的计划。
SQL Plan Baseline的演化:
- 手动演化:调用dbms_spm.evolve_sql_plan_baseline函数或使用SQL Tuning Advisor工具包执行演化。
- 自动演化:定期调度evolve_sql_plan_baseline函数,或配置SQL TUNING ADVISOR在自动任务窗口中运行。
操作实践:
- 开启自动捕获:通过ALTER SESSION语句调整参数。
- 查看SPM元数据:使用DBMS_XPLAN.DISPLAY_SQL_PLAN_BASELINE显示包含特定文本的SQL Plan Baselines。
总结:SQL Plan Management是Oracle 11g引入的一项强大特性,通过捕获、评估和选择最优SQL执行计划,有效提升了数据库的性能稳定性和可预测性。