• <li id="gs2cs"><wbr id="gs2cs"></wbr></li>
    <dd id="gs2cs"><tr id="gs2cs"></tr></dd>
    <dd id="gs2cs"></dd>
  • 查看: 57809|回复: 42

    [SQL] 性能调优分析之:Oracle SQL执行计划报告生成器

    [复制链接]
    论坛徽章:
    8
    ITPUB9周年纪念徽章
日期:2010-10-08 09:28:522011新春纪念徽章
日期:2011-02-18 11:43:332013年新春福章
日期:2013-02-25 14:51:24优秀写手
日期:2013-12-18 09:29:092014年新春福章
日期:2014-02-18 16:42:02马上有房
日期:2014-02-18 16:42:02秀才
日期:2017-03-20 13:42:20秀才
日期:2017-07-11 13:54:02
    跳转到指定楼层
    1#
    发表于 2017-3-11 11:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    本帖最后由 samt007 于 2017-3-12 20:35 编辑

    Oracle SQL执行计划分析器功能的创建3步曲:
    1 首先,编译XYG_ALD_SESS_PKG的Package头。(XYG_ALD_SESS_PKG.sql)
    2 接着要建立好下面的4个视图对象。因为XYG_ALD_SESS_PKG包体会用到。(View Create Script v1.0.sql)
      如果出现没权限访问GV$SQL_PLAN_MONITOR这些对象,请先用sys用户赋值。
    3 最后,编译XYG_ALD_SESS_PKG的包体。完工!(XYG_ALD_SESS_PKG_BODY.sql)

    功能特点说明;
    优点:
    1 主要是使用方便,效率高。
    个人觉得是一个非常高效而且非常简洁(也可以说是简单)的一个SQL执行计划分析工具。
    主要是借用了标准功能的一些执行计划分析表(例如GV$SQL_PLAN_MONITOR等),通过二次封装开发得出的一个完整的SQL执行计划分析报告。
    而且自己添加一些查看执行计划的时候需要关注的信息。自己写的东西,只要是内容不会出错,还是很好用的。
    另外,使用方便是体现在,如果要具体分析某个SQL的执行计划,分析其性能瓶颈,甚至不需要花费时间找所运行的脚本对应是哪个SQL_ID,
    只需要在Hint输入足够唯一的关键字,然后根据关键字,就可以直接得出该SQL的完整执行计划报告。
    而且执行计划报告里面也会非常直观体现一些关键的性能指标的报告信息,使得查看SQL的执行计划,分析SQL的性能瓶颈变得如此的简单。
    2 SQL报告的执行速度快。
    Oracle数据库自带功能的dbms_sqltune.report_sql_monitor,在分析一个比较复杂的SQL,一般都需要2分钟以上。而这个开发的功能,只需要6秒左右就可以出结果。
    当然,速度快主要是因为开发的功能只需要考虑一种txt执行计划报告,而自带的dbms_sqltune需要同时考虑多种不同样式的报告(例如html)的可能,所以肯定复杂很多。
    3 因为是自己开发的,所以,有一些有分析意义的栏位也可以自己添加。
    例如SQL读取缓存区的总字节数,还有用到的索引范围扫描和索引跳跃扫描的信息,以及Predicate Information和实际执行的时候的绑定变量窥探的值等。
    可以非常直观地协助分析对应的执行计划是否正确!

    缺点:
    分区表的详细执行计划信息方面支持程度不高。主要是考虑到执行计划的栏位太多的话,看起来乱。
    另外,为了精简执行计划的长度,精简了E-bytes字段。有需要的兄台可以自己修改源码,添加。
    另外,只可以是txt的结果报告。

    特别说明:
    1 该功能是由本人(samt007@qq.com)编写,如果要分享,请必须注明转载。
    2 该功能的原型是dbms_sqltune.report_sql_monitor(开发的时候也有参考了它的源码)。同时也参考了 DBMS_XPLAN.DISPLAY_CURSOR 的源码(例如绑定变量窥探的值的获取等)。
      所以,该脚本请在数据库版本11g(包括11g版本)以上的Oracle数据库中使用。
      低于11g的版本的Oracle不支持实时监控sql 的功能,所以本脚本也就无法使用了。这点必须要注意!  
    3 还有,脚本的和size相关的结果和一个系统参数的配置有关系,就是db_block_size(SELECT VALUE FROM V$PARAMETER WHERE NAME = 'db_block_size')
      默认=8192的。如果修改了这个配置,不是8192(8K)的话,请对应修改一些代码(*8的部分,不明白的可以找我)。否则算出来的size可能有误。
    4 该脚本已经全部通过测试,在EBS环境(11gr2,apps用户) 以及 一个新的Oracle数据库环境(12C,sys用户)测试通过。
    5 如果有报错,最好自己先解决一下。实在无法解决的请联系我:samt007@qq.com
    6 如果发现有bug请反馈给我,我好进一步修正!谢谢!

    View Create Script v1.0.sql (8.46 KB, 下载次数: 253)
    XYG_ALD_SESS_PKG.sql (5.2 KB, 下载次数: 226)
    XYG_ALD_SESS_PKG_BODY.sql (51.39 KB, 下载次数: 239)

    ---使用实例:
    1. --执行要分析的SQL脚本:
    2. SELECT /*+ SAMT004 monitor gather_plan_statistics */*
    3. FROM XYG_JBI_SHIP_PLAN_HEADERS_V2
    4. WHERE SALES_ORG_ID=83
    5. AND CREATION_DATE BETWEEN DATE'2017-03-01' AND DATE'2017-03-05'+0.99999
    6. ORDER BY SEND_NUM;

    7. --接着,用hint的关键字SAMT004直接定位要分析的SQL的执行计划报告
    8. SELECT XYG_ALD_SESS_PKG.GET_SQLM_REPORT('SAMT004') FROM DUAL;
    复制代码



    结果:



    另外,如果了解里面的各个指标,可以参考这个文档:http://www.kz486.com/forum.php?mod=viewthread&tid=2084537







    论坛徽章:
    8
    ITPUB9周年纪念徽章
日期:2010-10-08 09:28:522011新春纪念徽章
日期:2011-02-18 11:43:332013年新春福章
日期:2013-02-25 14:51:24优秀写手
日期:2013-12-18 09:29:092014年新春福章
日期:2014-02-18 16:42:02马上有房
日期:2014-02-18 16:42:02秀才
日期:2017-03-20 13:42:20秀才
日期:2017-07-11 13:54:02
    2#
     楼主| 发表于 2017-3-11 11:29 | 只看该作者
    本帖最后由 samt007 于 2017-3-11 11:33 编辑

    下面是一个需要执行时间较长的SQL的分析。可以直接看执行计划在哪一步的时候,在等待什么事件:


    使用道具 举报

    回复
    论坛徽章:
    1
    秀才
日期:2016-11-25 16:52:36
    3#
    发表于 2017-3-11 16:03 | 只看该作者
    666,支持一个

    使用道具 举报

    回复
    论坛徽章:
    548
    生肖徽章2007版:猴
日期:2008-05-16 11:28:59生肖徽章2007版:马
日期:2008-10-08 17:01:01SQL大赛参与纪念
日期:2011-04-13 12:08:17授权会员
日期:2011-06-17 16:14:53ITPUB元老
日期:2011-06-21 11:47:01ITPUB官方微博粉丝徽章
日期:2011-07-01 09:45:27ITPUB十周年纪念徽章
日期:2011-09-27 16:30:472012新春纪念徽章
日期:2012-01-04 11:51:222012新春纪念徽章
日期:2020-11-30 22:13:24海蓝宝石
日期:2012-02-20 19:24:27
    4#
    发表于 2017-3-11 17:33 | 只看该作者
    感谢分享! good job!

    使用道具 举报

    回复
    论坛徽章:
    8
    ITPUB9周年纪念徽章
日期:2010-10-08 09:28:522011新春纪念徽章
日期:2011-02-18 11:43:332013年新春福章
日期:2013-02-25 14:51:24优秀写手
日期:2013-12-18 09:29:092014年新春福章
日期:2014-02-18 16:42:02马上有房
日期:2014-02-18 16:42:02秀才
日期:2017-03-20 13:42:20秀才
日期:2017-07-11 13:54:02
    5#
     楼主| 发表于 2017-3-11 17:45 | 只看该作者

    有兴趣可以试试。发现bug的话直接跟帖回复即可。能解决的一定解决~

    使用道具 举报

    回复
    论坛徽章:
    8
    ITPUB9周年纪念徽章
日期:2010-10-08 09:28:522011新春纪念徽章
日期:2011-02-18 11:43:332013年新春福章
日期:2013-02-25 14:51:24优秀写手
日期:2013-12-18 09:29:092014年新春福章
日期:2014-02-18 16:42:02马上有房
日期:2014-02-18 16:42:02秀才
日期:2017-03-20 13:42:20秀才
日期:2017-07-11 13:54:02
    6#
     楼主| 发表于 2017-3-11 17:47 | 只看该作者
    solomon_007 发表于 2017-3-11 17:33
    感谢分享! good job!

    有分享精神才可以提高水平!
    我自己也看了别人很多分享的功能,学到了很多东西。。。

    使用道具 举报

    回复
    论坛徽章:
    548
    生肖徽章2007版:猴
日期:2008-05-16 11:28:59生肖徽章2007版:马
日期:2008-10-08 17:01:01SQL大赛参与纪念
日期:2011-04-13 12:08:17授权会员
日期:2011-06-17 16:14:53ITPUB元老
日期:2011-06-21 11:47:01ITPUB官方微博粉丝徽章
日期:2011-07-01 09:45:27ITPUB十周年纪念徽章
日期:2011-09-27 16:30:472012新春纪念徽章
日期:2012-01-04 11:51:222012新春纪念徽章
日期:2020-11-30 22:13:24海蓝宝石
日期:2012-02-20 19:24:27
    7#
    发表于 2017-3-11 19:02 | 只看该作者
    samt007 发表于 2017-3-11 17:47
    有分享精神才可以提高水平!
    我自己也看了别人很多分享的功能,学到了很多东西。。。

    有没有注意,我也是 007

    使用道具 举报

    回复
    论坛徽章:
    8
    ITPUB9周年纪念徽章
日期:2010-10-08 09:28:522011新春纪念徽章
日期:2011-02-18 11:43:332013年新春福章
日期:2013-02-25 14:51:24优秀写手
日期:2013-12-18 09:29:092014年新春福章
日期:2014-02-18 16:42:02马上有房
日期:2014-02-18 16:42:02秀才
日期:2017-03-20 13:42:20秀才
日期:2017-07-11 13:54:02
    8#
     楼主| 发表于 2017-3-11 21:50 | 只看该作者
    solomon_007 发表于 2017-3-11 19:02
    有没有注意,我也是 007

    有。。。都是国产007~

    使用道具 举报

    回复
    论坛徽章:
    548
    生肖徽章2007版:猴
日期:2008-05-16 11:28:59生肖徽章2007版:马
日期:2008-10-08 17:01:01SQL大赛参与纪念
日期:2011-04-13 12:08:17授权会员
日期:2011-06-17 16:14:53ITPUB元老
日期:2011-06-21 11:47:01ITPUB官方微博粉丝徽章
日期:2011-07-01 09:45:27ITPUB十周年纪念徽章
日期:2011-09-27 16:30:472012新春纪念徽章
日期:2012-01-04 11:51:222012新春纪念徽章
日期:2020-11-30 22:13:24海蓝宝石
日期:2012-02-20 19:24:27
    9#
    发表于 2017-3-11 22:33 | 只看该作者
    samt007 发表于 2017-3-11 21:50
    有。。。都是国产007~

       

    使用道具 举报

    回复
    论坛徽章:
    519
    奥运会纪念徽章:垒球
日期:2008-09-15 01:28:12生肖徽章2007版:鸡
日期:2008-11-17 23:40:58生肖徽章2007版:马
日期:2008-11-18 05:09:48数据库板块每日发贴之星
日期:2008-11-29 01:01:02数据库板块每日发贴之星
日期:2008-12-05 01:01:03生肖徽章2007版:虎
日期:2008-12-10 07:47:462009新春纪念徽章
日期:2009-01-04 14:52:28数据库板块每日发贴之星
日期:2009-02-08 01:01:03生肖徽章2007版:蛇
日期:2009-03-09 22:18:532009日食纪念
日期:2009-07-22 09:30:00
    10#
    发表于 2017-3-11 23:38 | 只看该作者
    你是怎么看到系统包源码的?自己UNWRAP?
    这些代码原创的比例有多少?

    使用道具 举报

    回复

    您需要登录后才可以回帖 登录 | 注册

    本版积分规则 发表回复

    TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
      ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
      ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
    CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
    京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
      
    快速回复 返回顶部 返回列表
    亚洲三级理论