【Oracle优化】通过SQL_PROFILE固化执行计划

本文介绍了在Oracle数据库中,当执行计划因数据变化导致性能问题时,如何通过SQL_PROFILE来固化执行计划的三种方法。包括手动绑定已存在的执行计划,手动绑定Outline信息,以及借助自动优化任务来接受优化建议。这些方法允许在不修改代码或业务逻辑的情况下,确保SQL语句使用理想的执行计划。
摘要由CSDN通过智能技术生成

在生产环境中,随着数据量的变化、查询条件的不同,有时执行计划发生了突变而导致SQL性能急剧下降。此时如果调整代码,或者修改业务逻辑,一方面时间上可能来不及,另一方面可能成本较高,那么有没有办法,可以在不调整代码或业务逻辑的情况下,让SQL语句使用计划突变之前的执行计划呢?本篇将介绍通过SQL_PROFILE来固化执行计划的三种方法。

一 绑定已存在的执行计划

DECLARE

v_ar_profile_hints sys.sqlprof_attr;

v_clsql_text CLOB;

BEGIN

SELECT extractvalue(VALUE(d), '/hint') AS outline_hints

BULK COLLECT

INTO v_ar_profile_hints

FROM xmltable('/*/outline_data/hint' passing

(SELECT xmltype(other_xml) AS xmlval

FROM dba_hist_sql_plan

WHERE sql_id = 'fzbu6pashquvv'

AND plan_hash_value = '116091679'

AND other_xml IS NOT NULL)) d;



SELECT sql_text

INTO v_clsql_text

FROM dba_hist_sqltext

WHERE sql_id = 'fzbu6pashquvv';



dbms_output.put_line(v_clsql_text);



dbms_sqltune.import_sql_profile(sql_text => v_clsql_text,

profile => v_ar_profile_hints,

NAME => '
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值