绑定运行计划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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • PHP中文字符串的查找与替换「建议收藏」

    PHP中文字符串的查找与替换「建议收藏」查找字符串中是否包含某个词组<?phpechostrpos("一二三四五","一");echo"<br>";echostrpos("一二三

    2022年5月23日
    43
  • 微信小程序资源汇总

    微信小程序资源汇总微信小程序汇总(10月16日更新小程序100+个教程或资讯与50+个Demo)1:微信小程序官方工具:https://mp.weixin.qq.com/debug/w…tml?t=14764346784612:微信小程序简易教程:https://mp.weixin.qq.com/debug/wxadoc/dev/?t=14764346775993:微信小程序设计指南:http…

    2022年5月27日
    53
  • pytorch 查看cuda 版本

    pytorch 查看cuda 版本由于pytorch的whl安装包名字都一样,所以我们很难区分到底是基于cuda的哪个版本。有一条指令可以查看importtorchprint(torch.version.cuda)

    2022年6月4日
    45
  • 小树剪发网1114_aow把抓

    小树剪发网1114_aow把抓乔治拿来一组等长的木棒,将它们随机地砍断,使得每一节木棍的长度都不超过 50 个长度单位。然后他又想把这些木棍恢复到为裁截前的状态,但忘记了初始时有多少木棒以及木棒的初始长度。请你设计一个程序,帮助乔治计算木棒的可能最小长度。每一节木棍的长度都用大于零的整数表示。输入格式输入包含多组数据,每组数据包括两行。第一行是一个不超过 64 的整数,表示砍断之后共有多少节木棍。第二行是截断以后,所得到的各节木棍的长度。在最后一组数据之后,是一个零。输出格式为每组数据,分别输出原始木棒的可能最小长度

    2022年8月8日
    6
  • 贾尚文_roc指标详解及实战用法

    贾尚文_roc指标详解及实战用法文章目录混淆矩阵ROCAOUPRCF1-Score多分类的F1-Score选择指标ROC曲线和AUC常被用来评价一个二值分类器的优劣。混淆矩阵其中,TP(真正,TruePositive)表示真正结果为正例,预测结果也是正例;FP(假正,FalsePositive)表示真实结果为负例,预测结果却是正例;TN(真负,TrueNegative)表示真实结果为正例,预测结果却是负例…

    2022年8月31日
    4
  • 浮点数 原理_浮点数存储原理

    浮点数 原理_浮点数存储原理1.什么是浮点数在计算机系统的发展过程中,曾经提出过多种方法表达实数。典型的比如相对于浮点数的定点数(FixedPointNumber)。在这种表达方式中,小数点固定的位于实数所有数字中间的某

    2022年8月4日
    7

发表回复

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

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