Oracle Plan Stablilty
文章目录
执行计划稳固之 SQL PROFILE
生产数据库环境中,经常会遇到执行计划走错的sql,产生异常,使得db的压力很大,更甚者宕机都有可能
今天介绍一下如何手工使用sql profile 稳固执行计划
Step 1: 使用 explain plan for 对sql文本进行plan
通常本次都是对通过hint 处理的sql进行plan使其生成对的执行计划
Step 2: generate the profile
select * from table(dbms_xplan.display(null,null,'outline'));
Step 3: 执行计划稳固
declare
v_hints sys.sqlprof_attr;
sql_fulltext clob;
begin
select SQL_FULLTEXT
into sql_fulltext
from v$sqlarea
where sql_id = '$sql_id';
v_hints := sys.sqlprof_attr( 'USE_NL(@"SEL$1" "C"@"SEL$1")',
'USE_NL(@"SEL$1" "P"@"SEL$1")',
'USE_NL(@"SEL$1" "S"@"SEL$1")',
'INDEX(@"SEL$1" "CAM"@"SEL$1" ("xxxx"."ID"))');
dbms_sqltune.import_sql_profile(sql_fulltext, v_hints,'$sql_id',force_match => true);
end;
/
另外oracle11g 提供了另一种稳固执行计划的方式,就是 SQL baseline .
后续会进行分析 …
注意 :
如果sql baseline 是开启的情况下, 可能会导致假如的sql profile无效。