Oracle 固定执行计划

Oracle数据库中执行sql的时候,优化器会根据优化器统计信息和一些参数来生成“它认为最好的“执行计划。
但是并不能够保证每一次都会选择最优的哪个执行计划。如果遇到了sql语句在一定时间段执行时性能变差,
并且发现它的执行计划发生了变化,那么可以考虑固定哪个”好的”时候的执行计划。

当然,必须保证sql语句没有被修改,是同一个sql。

  1. SQL Plan Management (SQL计划管理,简称SPM)

这是Oracle推荐使用的一种方法。使用起来也很简单。以下是一个手动固定的例子。

select * from dba_hist_sql_plan where sql_id = 'bxrrqvukjx2gj';

declare 
aa pls_integer;
begin
 aa := DBMS_SPM.LOAD_PLANS_FROM_CURSOR_CACHE(sql_id => 'bxrrqvukjx2gj',PLAN_HASH_VALUE => '2727519825');
 
 end;

select * from dba_sql_plan_baselines;


declare 
 res  number;
 begin
res := DBMS_SPM.ALTER_SQL_PLAN_BASELINE(
sql_handle => 'SQL_5d441e2d4fb36e37',
plan_name => 'SQL_PLAN_5uj0y5p7v6vjr9c383af1',
attribute_name => 'FIXED',
attribute_value => 'YES'
);
end;

来自博客Oracle数据库固定执行计划的方法总结

你可能感兴趣的:(oracle,数据库)