返回顶部
首页 > 资讯 > 数据库 >Oracle SQL执行计划异常的处理方法
  • 403
分享到

Oracle SQL执行计划异常的处理方法

2024-04-02 19:04:59 403人浏览 独家记忆
摘要

这篇文章主要介绍“oracle sql执行计划异常的处理方法”,在日常操作中,相信很多人在Oracle SQL执行计划异常的处理方法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解

这篇文章主要介绍“oracle sql执行计划异常的处理方法”,在日常操作中,相信很多人在Oracle SQL执行计划异常的处理方法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Oracle SQL执行计划异常的处理方法”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

现象:
下面语句一直以来都比较高效,执行计划用了索引范围扫描后经历三次嵌套循环,可在2秒内返回结果,但今天经同事反映却走了1分多钟!

原SQL语句:

Select * From (Select Rownum As Rownumber__, t.*
          From (Select T1.Orderdate As "OrderDate",
                       T1.Status As "Status",
                       T1.Ordercode As "OrderCode",
                       T1.Sumamt As "SumAmt",
                       T1.Ordertype As "OrderType",
                       T1.Questiondesc As "QuestionDesc",
                       T1.Ordersource As "OrderSource",
                       T2.Accepter As "Accepter",
                       T2.City As "City",
                       T1.Isquestion As "IsQuestion",
                       T1.Issplit As "IsSplit",
                       T1.Salemode As "SaleMode",
                       T1.Stockout As "StockOut",
                       T2.Encmobile As "EncMobile",
                       T2.Encphone As "EncPhone",
                       Decryptbykey(T2.Mobilephone) As "MobilePhone",
                       T2.Province As "Province",
                       T3.Checkercode As "CheckerCode",
                       T3.Iscancel As "IsCancel",
                       T3.Ischeck As "IsCheck",
                       T3.Isclose As "IsClose",
                       T3.Isfinish As "IsFinish",
                       T1.Ischange As "IsChange"
                  From Xs_Order T1                  Join Xs_Orderpsaddress T2                    
                  On T1.Ordercode = T2.Ordercode                  Join Xs_Orderstatus T3                    
                  On T1.Ordercode = T3.Ordercode                 
                  Order By T1.Ordercode Desc) t         
                  Where "OrderDate" >= :Orderdate0           And "StockOut" = :Stockout1) Temp
                  Where Rownumber__ > 0and Rownumber__ <= 20

后来查看执行计划,执行计划变成:
Oracle SQL执行计划异常的处理方法
分析:
由于后面两个表是大表,全表扫描导致大量的IO消耗,该语句采用了绑定变量,如果把绑定变量调整为常量后,执行计划正常走了索引连接,执行后返回也是在2秒内。曾经以为是绑定变量窥探异常问题,后来把表的统计信息重新更新后,问题依旧,接着运行SQL TUNNING包,概要只建议说要启用并行,但全表扫描并没有消除,考虑到代价太高就放弃,于是想用DBMS_SPM包来载入该语句:

BASELINE:
declare
l_pls number;
begin
l_pls := DBMS_SPM.LOAD_PLANS_FROM_CURSOR_CACHE(
sql_id=> 'a0wawpy5hfrt3',
plan_hash_value => 2253704843,    --注意这里的2253704843是我用常量带入后正常的PLAN_HASH_VALUE
enabled         => 'YES');
end;

执行后,发现语句还是走了错误的执行计划,曾经考虑想用捕捉基线的方式进行演化,但由于该语句带绑定变量,会话级比较难搞,所以想到用包删除共享池里的该执行计划,让它重新进行硬解析:操作如下:

exec dbms_shared_pool.purge('0000000DE5E6B808,2332516131', 'c')

–第一个参数为v$sqlarea中address和hash_value,第二个为cursor类型)

处理后执行计划重新产生,并自动应用了2253704843这个执行计划,查询效率正常:
Oracle SQL执行计划异常的处理方法

到此,关于“Oracle SQL执行计划异常的处理方法”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

您可能感兴趣的文档:

--结束END--

本文标题: Oracle SQL执行计划异常的处理方法

本文链接: https://lsjlt.com/news/60298.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Oracle SQL执行计划异常的处理方法
    这篇文章主要介绍“Oracle SQL执行计划异常的处理方法”,在日常操作中,相信很多人在Oracle SQL执行计划异常的处理方法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解...
    99+
    2024-04-02
  • oracle中查看执行计划的常用方法
    本篇内容介绍了“oracle中查看执行计划的常用方法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!本文介绍...
    99+
    2024-04-02
  • oracle中如何查看SQL的执行计划方法
    这篇文章主要介绍了oracle中如何查看SQL的执行计划方法,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。Oracle查看SQL执行计划的方...
    99+
    2024-04-02
  • Oracle里常见的执行计划
    本文介绍了Oracle数据库里常见的执行计划,使用的Oracle数据库版本为11.2.0.1。1、与表访问相关的执行计划Oracle数据库里与表访问有关的两种方法:全表扫描和ROWID扫描。反映在执行计划上...
    99+
    2024-04-02
  • Oracle获取执行计划方法
    获取执行计划的6种方法   1. explain plan for获取;   2. set autotrace on ;  &...
    99+
    2024-04-02
  • Oracle固定SQL的执行计划(一)---SQL Profile
    我们都希望对于所有在Oracle数据库中执行的SQL,CBO都能产生出正确的执行计划,但实际情况却并非如此,由于各种各样的原因(比如目标SQL所涉及的对象的统计信息的不准确,或者CBO内部一些成本计算公式的...
    99+
    2024-04-02
  • oracle执行计划的方法是什么
    本篇内容主要讲解“oracle执行计划的方法是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“oracle执行计划的方法是什么”吧!先从最开头一直往右看,直到...
    99+
    2024-04-02
  • Oracle Study--Oracle SQL执行计划查看(MindMap)
    Oracle Study--Oracle SQL执行计划查看(MindMap) ...
    99+
    2024-04-02
  • Oracle固定SQL的执行计划(二)---SPM
    之前写了一篇博客介绍的是用SQL Profile来调整、稳定目标SQL的执行计划,即使无法修改目标SQL的SQL文本。但SQL Profile实际上只是一种亡羊补牢、被动的技术手段,应用在那些执行计划已经发...
    99+
    2024-04-02
  • 获得执行计划方法-一 ORACLE AUTOTRACE
    ORACLE sql trace    AUTOTRACE 命令1 SET AUTOTRACE OFF     &n...
    99+
    2024-04-02
  • oracle中怎么查看sql执行计划的执行顺序
    这篇文章主要讲解了“oracle中怎么查看sql执行计划的执行顺序”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“oracle中怎么查看sql执行计划的执行顺...
    99+
    2024-04-02
  • Oracle中怎么获取SQL执行计划
    这篇文章将为大家详细讲解有关Oracle中怎么获取SQL执行计划,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。Oracle 获取SQL执行计划方法方法一:D...
    99+
    2024-04-02
  • Oracle里的常见执行计划有哪些
    小编给大家分享一下Oracle里的常见执行计划有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!与表访问相关的执行计划Orac...
    99+
    2024-04-02
  • oracle查询执行计划的方法有哪些
    这篇文章主要介绍“oracle查询执行计划的方法有哪些”,在日常操作中,相信很多人在oracle查询执行计划的方法有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”orac...
    99+
    2024-04-02
  • 六种常用的sql执行计划查看方式介绍
    本篇内容主要讲解“六种常用的sql执行计划查看方式介绍”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“六种常用的sql执行计划查看方式介绍”吧!一、explain...
    99+
    2024-04-02
  • oracle怎么查看SQL执行计划的顺序
    本篇内容介绍了“oracle怎么查看SQL执行计划的顺序”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!查看...
    99+
    2024-04-02
  • oracle怎么查看sql历史执行计划
    要查看SQL历史执行计划,可以使用以下方法: 使用Oracle的动态性能视图:通过查询v$sql_plan或v$sql_plan_...
    99+
    2024-04-09
    oracle sql
  • Oracle DB 相关常用sql汇总7【手工绑定sql执行计划】
    SPO coe_xfr_sql_profile.log; SET DEF ON TERM OFF ECHO ON FEED OFF VER OFF HEA ON LIN 2000 PAGES 100 ...
    99+
    2024-04-02
  • mysql 获取执行计划的方法
    mysql 获取执行计划方法:1.通过explain进行查看sql的执行计划;2.通线程正在执行的sql查看该sql的执行计划; explain进行查看sql的执行计划相对简单,其实通线程正在执行的sq...
    99+
    2024-04-02
  • SQL Server的执行计划是什么
    本文小编为大家详细介绍“SQL Server的执行计划是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“SQL Server的执行计划是什么”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。一...
    99+
    2023-07-06
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作