淘先锋技术网

首页 1 2 3 4 5 6 7

Oracle的自适应SQL计划管理(SPM)是一个非常有用的工具,它可以帮助DBAs和开发人员改善数据库性能。SPM通过自动抓取执行计划、存储和分析历史执行计划数据,然后找到出现性能问题的SQL语句,并生成更优于以前的执行计划。

例如,在一个新的应用程序中,一些SQL语句的性能令人不满意,我们可以使用SPM来帮助判断应该使用哪个执行计划更好。通过执行计划的比较,SPM可以帮助我们决定哪个计划对应于最佳的性能。

当SPM找到更好的执行计划时,它会创建一个新的SQL Baseline。SQL Baseline的作用是,当Oracle数据库在今后执行该SQL语句时,可以将其与SQL Baseline进行比较,如果当前执行计划比SQL Baseline更优,则使用当前执行计划;否则,SQL Baseline可以强制使用历史执行计划,使得查询的性能不会再次变得不可预测。

--1.启用自动SPM,让Oracle自动为您的SQL语句生成Baseline。
alter system set CONTROL_MANAGEMENT_PACK_ACCESS=DIAGNOSTIC+TUNING;
--2.检查现有的Baseline。
SELECT distinct PLAN_HASH_VALUE, ENABLED, ACCEPTED, FIXED FROM DBA_SQL_PLAN_BASELINES;
--3.启用一个Baseline。
EXECUTE DBMS_SPM.ALTER_SQL_PLAN_BASELINE(SQL_HANDLE=<handle>,PLAN_NAME =<name>,ENABLED=>TRUE);

默认情况下,SPM被禁用。使用上面的代码启用它并不复杂,当基准线被启用后,Oracle会记录所有SQL语句的执行计划。

如果一个SQL语句的性能不佳,我们可以尝试使用基准线管理工具来找到原因。比如,我们可以使用DBMS_SPM.EVOLVE_SQL_PLAN_BASELINE函数来寻找新的执行计划,并且我们可以使用DBMS_SPM.CREATE_STGTAB_SQLSET来创建用于存储计划的表。

除了手动控制基准线之外,我们还可以使用自动SPM来处理更复杂的SQL语句。例如,如果SPM可以识别出某个SQL语句的执行计划已经优化了,我们可以使用自动SPM来建议一个新计划。

在自动模式下,SPM会使用Oracle的自动SQL优化引擎来捕获执行计划,存储和分析历史SQL执行计划数据,评估当前的执行计划,然后生成新的执行计划。

--使用DBMS_SPM.CREATE_AUTO_SQL_PLAN_BASELINE函数启用自动 完全自动计划生成
EXECUTE DBMS_SPM.CREATE_AUTO_SQL_PLAN_BASELINE( <begin_snapshot_time>, <end_snapshot_time>);
--使用DBMS_SPM.EVOLVE_SQL_PLAN_BASELINE函数基于最新的暂存快照来生成并演化计划
EXECUTE DBMS_SPM.EVOLVE_SQL_PLAN_BASELINE(EVOLVE_TASK=>'SYS_AUTO_SPM_EVOLVE_TASK');
--检出当前的SQL计划
SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_CURSOR(sql_id=><sql statement unique identifier>));

自动SPM可以帮助我们通过自动发现和优化性能低下的SQL语句,提供更好的数据库性能。

总之,SPM是Oracle的一个非常有用的工具,可以帮助我们改善数据库的性能。它可以通过自动捕获执行计划来自动优化SQL语句,并且可以通过手动配置和管理执行计划来优化SQL语句。对于任何需要提高数据库性能的用户和DBAS来说,SPM都是一个必不可少的工具。