暂无图片
暂无图片
1
暂无图片
暂无图片
暂无图片

oracle 19c 通过 sql patch 绑定执行计划:让执行计划走并行

原创 四九年入国军 2025-08-05
274
--12.2+ 才可以使用 DBMS_SQLDIAG.create_sql_patch
--11g是dbms_sqldiag_internal.i_create_patch (dbms_sqldiag_internal 这个是内部存储过程,一般不建议使用)
--12c开始并行并不会显示在执行计划的 outline data 中,如果想绑定并行的执行计划只能通过 sqlpatch( sql profile 和sql  baseline都不行-11g可以正常绑定)

--查看执行计划的outline data:
explain plan for select /*+  full(tmp1) */  count(1) from tmp1,tmp2 where tmp1.object_id=tmp2.object_id;
select * from table(dbms_xplan.display(null,null,'advanced')); 
--注意 paralle 不会在12c+显示,11g可以正常显示为 shared 



--为指定sql_id 添加并行  SHARED(10)=parallel(10)
--select /*+  parallel(10)) */  count(1) from tmp1,tmp2 where tmp1.object_id=tmp2.object_id;
declare 
  patch_name varchar2(30);
begin 
  patch_name:=dbms_sqldiag.create_sql_patch(sql_id=>'13qhm1bwvqykq' , hint_text=>'SHARED(10)');
end ;
/


--多个hint 用空格隔开
declare 
  patch_name varchar2(30);
begin 
  patch_name:=dbms_sqldiag.create_sql_patch(sql_id=>'13qhm1bwvqykq' , hint_text=>'FULL(@"SEL$1" "TMP1"@"SEL$1") SHARED(10)');
end ;
/



--删除sql patch
BEGIN
 dbms_sqldiag.drop_sql_patch(name => 'SYS_SQLPTCH_01987995e9180006');
end;
/







「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论