通过自定义hints实现SQL PROFILE

6710阅读 0评论2023-05-04 dingjun123
分类:Oracle

如果有多个执行计划,可以使用coe脚本快速绑定,如果没有多个执行计划,如果可以用hints构造更好的执行计划,则可以使用自定义hints实现SQL PROFILE,步骤如下:

1.用hints写好SQL执行,然后执行
explain plan for
select .... 新SQL;


2.查询对应的outline,也就是下面要绑定的q'[那些

select * from table(dbms_xplan.display(null,null,'+outline'));


3.将上面的outline取出来,放到ue里,用列模式,前面加q'[ 后面加]',   注意把{BANNED}最佳后一条的逗号去掉,然后按照下面的方式拼好语句,注意sql_id,profile名字修改,执行
执行完毕后看原始语句的执行计划部分是否绑定成功


declare
v_hints sys.sqlprof_attr;
v_sql_id clob;
begin
v_hints := sys.sqlprof_attr
(
   q'[BEGIN_OUTLINE_DATA]',
   q'[USE_NL(@"SEL$3" "F"@"SEL$3")]',
   q'[USE_NL(@"SEL$3" "H"@"SEL$3")]',
   q'[USE_NL(@"SEL$3" "E"@"SEL$3")]',
   q'[USE_NL(@"SEL$3" "A"@"SEL$3")]',
   q'[USE_NL(@"SEL$3" "B"@"SEL$3")]',
   q'[LEADING(@"SEL$3" "G"@"SEL$3" "B"@"SEL$3" "A"@"SEL$3" "E"@"SEL$3" "H"@"SEL$3" "F"@"SEL$3")]',
    。。。
   q'[IGNORE_OPTIM_EMBEDDED_HINTS]',
   q'[END_OUTLINE_DATA]'
);
select sql_text into v_sql_id from gv$sql where sql_id='&sql_id' and rownum=1;
dbms_sqltune.import_sql_profile(v_sql_id,v_hints,'profile_&sql_id',force_match => TRUE);
end;
/  

 



上一篇:12C新特性Automatic Report Capturing导致CPU高
下一篇:12C自定义wm_concat函数