绑定运行计划sql_plan_baseline[通俗易懂]

绑定运行计划sql_plan_baseline

大家好,又见面了,我是全栈君。

–因为生产环境运行的sql变化较快,版本号公布比較频繁,造成sql的运行计划不是非常稳定。常常会有一些性能非常查的sql出现
–对于这些sql,我们能够使用sql_plan_baseline对运行计划进行绑定,从而使运行计划固定下来
–前提是sql最好使用绑定变量。就算有的没有绑定变量,确定字段的值不会改变才行。由于是针对sql_id进行的绑定,假设sql文本改变,绑定也就无意义了

详细步骤:
–1、找到问题sql,假设查询sql的运行计划,假设有合适的运行计划。直接进行绑定
–查询sql运行计划相应的PLAN_HASH_VALUE
SELECT DISTINCT(PLAN_HASH_VALUE) FROM V$SQL_PLAN t WHERE SQL_ID = ‘010cv4dvf6swv’ and child_number=’0′
–绑定好的运行计划:
declare
  l_pls number;
begin
  l_pls := DBMS_SPM.LOAD_PLANS_FROM_CURSOR_CACHE(sql_id  => ‘524wzct86gu1d’,
                                                 plan_hash_value => 2554538542,
                                                 enabled         => ‘YES’);
end;
/

2、假设没有合适的运行计划,就要通过自己分析,运用一些hint让sql产生比較好的运行计划
–须要绑定的sql
–oldSQL(id PLAN_HASH_VALUE)
524wzct86gu1d
2554538542

–新的sql
–newSQL(id PLAN_HASH_VALUE)
010cv4dvf6swv
756701203
–查询新的运行计划的sql_id
select * from v$sql where sql_text like ‘%zhruoyu%’ –通过在hint中加一下特殊字符来查找

—新建制定SQLID的BASELINE依据old_sql id,PLAN_HASH_VALUE
declare
  l_pls number;
begin
  l_pls := DBMS_SPM.LOAD_PLANS_FROM_CURSOR_CACHE(sql_id    => ‘524wzct86gu1d’,
                                                 plan_hash_value => 2554538542,
                                                 enabled         => ‘NO’);  –注意这里是no
end;
/

—确定原始运行计划的 sql_handle
select sql_handle, plan_name, origin, enabled, accepted,fixed,creator,optimizer_cost,sql_text
from dba_sql_plan_baselines where origin = ‘MANUAL-LOAD’ order by created desc
 
SQL_HANDLE:SQL_66108ad9595208fc                                     
PLAN_NAME:SQL_PLAN_6c44av5cp427w65e519aa

—与正确的运行计划做关联
declare
  l_pls number;
begin
  l_pls := DBMS_SPM.load_plans_from_cursor_cache(sql_id          => ‘010cv4dvf6swv’, — new_SQL_ID’
                                                 plan_hash_value => 756701203, –new_plan_hash_value
                                                 sql_handle      => ‘SQL_66108ad9595208fc’ –OLD_handle
                                                 );
end;
/

—删除错误的运行计划
declare
  l_pls number;
begin
  l_pls := DBMS_SPM.DROP_SQL_PLAN_BASELINE(sql_handle => ‘SQL_66108ad9595208fc’, –sql_handle_for_original
                                           plan_name  => ‘SQL_PLAN_6c44av5cp427w65e519aa’ –sql_plan_name_for_original                                       
                                           );
end;
/

–检查一下
select sql_handle, plan_name, origin, enabled, accepted,fixed,creator,optimizer_cost,sql_text
from dba_sql_plan_baselines where origin = ‘MANUAL-LOAD’ and sql_handle=’SQL_66108ad9595208fc’

–完毕

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/116257.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 奇怪的现象:touchesBegan: 与UITapGestureRecognizer手势没有人响应 以及set方法的妙用

    奇怪的现象:touchesBegan: 与UITapGestureRecognizer手势没有人响应 以及set方法的妙用本打算实现一个点击按钮弹出一个landKindView然后点击屏幕其他部分时移除这个VIew,没想到的是,出了诸多不可思议的问题。在给这个控制器的View添加手势时,然后居然拦截不到,touchesbegin方法,然后又试了下添加tapGesture,依旧是没有反应。然后我试着在touchesBegin方法中 实现[supertouchesBegins….];依旧是没有任

    2022年7月25日
    6
  • RelativeLayout中子view设置Margin无效[通俗易懂]

    RelativeLayout中子view设置Margin无效[通俗易懂]发现:在RelativeLayout中如果一个子view设置如:layout_alignParentBottom或者layout_alignParentTop等属性,在代码中通过layoutParam动态设置margin会是无效。记录下。修改margin同时改变图片大小:RelativeLayout.MarginLayoutParamslayoutParams=(RelativeLayout

    2022年7月17日
    32
  • pet的结构单元_三层架构

    pet的结构单元_三层架构PetShop4架构设计分析(三) petshop4.0详解之三(PetShop数据访问层之消息处理)三、PetShop数据访问层之消息处理在进行系统设计时,除了对安全、事务等问题给与足够的重视外,性能也是一个不可避免的问题所在,尤其是一个B/S结构的软件系统,必须充分地考虑访问量、数据流量、服务器负荷的问题。解决性能的瓶颈,除了对硬件系统进行升级外,软件设计的合理性尤为重要。在前

    2022年10月16日
    0
  • 模仿学习对比强化学习「建议收藏」

    模仿学习对比强化学习「建议收藏」模仿学习介绍模仿学习是将专家经验作为样本进行强监督学习的一种方法。模仿学习对比强化学系模仿学习优点:1.简单、稳定的监督学习过程缺点:1.需要提供榜样行为数据2.需要处理多解型行为(例如绕过障碍物,可以从左边或者右边,但是专家数据不一定覆盖所有行为,可以用多元高斯分布去等方法去处理)3.不能超越人类水平强化学习优点:1.可以超越人类水平缺点:1.需要设置奖励函数2.必须解决策略探索性问题3.训练可能不收敛、不稳定结合模仿学习和强化学习:Pretrain&Finetune

    2022年9月18日
    0
  • vue文件下载功能_vue实现下载功能

    vue文件下载功能_vue实现下载功能vue下载文件常用的几种方式一、直接打开直接打开是指我们直接使用window.open(URL)的方法优点:简单操作缺点:没办法携带token二、我们可以自己封装一个方法,比如如下:importaxiosfrom”axios”import*asauthfrom’@/utils/auth.js’letajax=axios.create({baseURL:process.env.VUE_APP_BASE_API,timeout:100000}

    2025年8月2日
    0
  • hexdump用法_linux dump命令

    hexdump用法_linux dump命令本文乃fireaxe原创,使用GPL发布,可以自由拷贝,转载。但转载请保持文档的完整性,并注明原作者及原链接。内容可任意使用,但对因使用该内容引起的后果不做任何保证。作者:fireaxe_hq@hotmail.com博客:fireaxe.blog.chinaunix.net转自:http://blog.chinaunix.net/uid-20528014-id-4087756.html开发时经常会…

    2022年9月21日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号