文章目录
  1. 1. 执行计划稳固之 SQL PROFILE
    1. 1.1. Step 1: 使用 explain plan for 对sql文本进行plan
    2. 1.2. Step 2: generate the profile
    3. 1.3. Step 3: 执行计划稳固
    4. 1.4. 另外oracle11g 提供了另一种稳固执行计划的方式,就是 SQL baseline .

执行计划稳固之 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无效。 
文章目录
  1. 1. 执行计划稳固之 SQL PROFILE
    1. 1.1. Step 1: 使用 explain plan for 对sql文本进行plan
    2. 1.2. Step 2: generate the profile
    3. 1.3. Step 3: 执行计划稳固
    4. 1.4. 另外oracle11g 提供了另一种稳固执行计划的方式,就是 SQL baseline .