楼主: samt007

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

[复制链接]
论坛徽章:
8
ITPUB9周年纪念徽章
日期:2010-10-08 09:31:22SQL大赛参与纪念
日期:2011-04-13 12:08:17ITPUB十周年纪念徽章
日期:2011-11-01 16:25:222013年新春福章
日期:2013-02-25 14:51:242014年新春福章
日期:2014-02-18 16:43:09马上有钱
日期:2014-02-18 16:43:09秀才
日期:2016-03-24 09:10:24秀才
日期:2016-12-05 11:16:06
21#
发表于 2017-3-14 10:13 | 只看该作者
非常不错. 代码很长 . 在一处 keyword写成keywork了

使用道具 举报

回复
论坛徽章:
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
22#
 楼主| 发表于 2017-3-14 12:43 | 只看该作者
qqjue 发表于 2017-3-14 10:13
非常不错. 代码很长 . 在一处 keyword写成keywork了

哈哈,手误,如果是remark的可以自己改改即可。

使用道具 举报

回复
论坛徽章:
0
23#
发表于 2017-3-25 16:33 | 只看该作者
我想问下,这个工具支持比如,我执行存储过程,能查出,存储过程里面,那些地方运行的比较慢或者说消耗性能较大的

使用道具 举报

回复
论坛徽章:
484
ITPUB北京香山2007年会纪念徽章
日期:2007-01-24 14:35:02ITPUB北京九华山庄2008年会纪念徽章
日期:2008-01-21 16:50:24ITPUB北京2009年会纪念徽章
日期:2009-02-09 11:42:452010新春纪念徽章
日期:2010-03-01 11:04:552010数据库技术大会纪念徽章
日期:2010-05-13 10:04:272010系统架构师大会纪念
日期:2010-09-04 13:35:54ITPUB9周年纪念徽章
日期:2010-10-08 09:28:512011新春纪念徽章
日期:2011-02-18 11:43:32ITPUB十周年纪念徽章
日期:2011-11-01 16:19:412012新春纪念徽章
日期:2012-01-04 11:49:54
24#
发表于 2017-3-25 23:11 来自手机 | 只看该作者
transfer000 发表于 2017-3-25 16:33
我想问下,这个工具支持比如,我执行存储过程,能查出,存储过程里面,那些地方运行的比较慢或者说消耗性能 ...

参考dbms_profiler包

使用道具 举报

回复
论坛徽章:
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
25#
 楼主| 发表于 2017-3-27 09:34 | 只看该作者
本帖最后由 samt007 于 2017-3-27 09:42 编辑
transfer000 发表于 2017-3-25 16:33
我想问下,这个工具支持比如,我执行存储过程,能查出,存储过程里面,那些地方运行的比较慢或者说消耗性能 ...

我想到的有2个办法:
首先,第一个办法是版主介绍的这个DBMS_PROFILE包
下面是使用实例:
  1. --DBMS_PROFILE對PL/SQL的執行跟蹤


  2. DECLARE
  3.        err  NUMBER;
  4.      BEGIN
  5.        err :=DBMS_PROFILER.start_profiler(TO_CHAR(SYSDATE,'YYYY-MM-DD
  6.              HH24:MI:SS'));
  7.       -- You need to test procedure
  8.       --429, WBJ1F-BLFC, WBJ1F-HX, WBJ1F-WL, WBJ1X-XSYL, , , , 2011/06/01 00:00:00, 2011/06/06 23:59:59,
  9.       err :=DBMS_PROFILER.stop_profiler;
  10. END;



  11. SELECT  p.unit_name,p.occured,p.tot_time,p.line# line,
  12.         SUBSTR(s.text,1,75) text
  13.    FROM (SELECT u.unit_name,d.total_occur occured,u.unit_type TYPE,
  14.                 (d.total_time/1000000000) tot_time,d.line#
  15.            FROM plsql_profiler_units u,plsql_profiler_data d
  16.           WHERE d.runid=u.runid
  17.             AND d.unit_number=u.unit_number
  18.             AND d.total_occur>0) p ,     
  19.         user_source s
  20.   WHERE p.unit_name=s.NAME(+)
  21.     AND p.line#=s.line(+)
  22.     AND p.TYPE=s.TYPE(+)
  23.     AND p.unit_name='your sp name'
  24. ORDER BY p.unit_name,p.line#;
复制代码


第二个办法是利用Monitor来跟踪。
首先在会话层启用Monitor跟踪。这个必须要做!否则monitor只可以监控单条SQL的执行时间6秒以上的SQL语句。
接着,在该会话执行您的存储过程。
执行完毕之后,再查询V$SQL_MONITOR视图(注意要查询当前SID的监控情况),分析SQL的执行情况即可。看哪个SQL_ID的总执行的时间最长即可。
老实说,如果只是分析存储过程的SQL执行效率问题,个人比较建议用这个办法~前提你的数据库版本要11g以上。
如果重点是要分析存储过程的逻辑处理问题(举个例子,你的存储过程不小心写了一个死循环,或者循环没退出,执行肯定是直接卡死!那这个办法可能无法监控了),那用DBMS_PROFILE包会更好。
----
关于11g的SQL监控功能介绍可以看这个链接:http://blog.csdn.net/zengmuansha/article/details/23296613

关于第二个监控的办法,我找时间可以写个实例出来,方便你们使用。



使用道具 举报

回复
论坛徽章:
0
26#
发表于 2017-3-30 01:38 | 只看该作者
good job

使用道具 举报

回复
论坛徽章:
0
27#
发表于 2017-5-14 14:49 | 只看该作者
不错,学习一下!

使用道具 举报

回复
论坛徽章:
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
28#
 楼主| 发表于 2017-5-20 22:23 | 只看该作者
newkid 发表于 2017-3-11 23:38
你是怎么看到系统包源码的?自己UNWRAP?
这些代码原创的比例有多少?

下面是Unwrap的DBMS_MVIEW包代码。
另外,看起来DBMS_SNAPSHOT_UTL包也有一定的作用,所以一起将它也拿过来了。
DBMS_SNAPSHOT_UTL.txt (73.56 KB, 下载次数: 36)
DBMS_SNAPSHOT.txt (111.45 KB, 下载次数: 38)

使用道具 举报

回复
论坛徽章:
520
奥运会纪念徽章:垒球
日期: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
29#
发表于 2017-5-20 23:31 | 只看该作者
可惜了,我想看到的REFRESH_KERNEL_INTERFACE过程是C语言写的,看不到源码。

使用道具 举报

回复
论坛徽章:
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
30#
 楼主| 发表于 2017-5-21 20:45 | 只看该作者
newkid 发表于 2017-5-20 23:31
可惜了,我想看到的REFRESH_KERNEL_INTERFACE过程是C语言写的,看不到源码。

嗯,确实核心逻辑有很大一部分是C语言写的。。。
其实我之前研究执行计划的源代码的时候,也发现有不少是调用C语言的接口处理。。。。这部分的代码确实很难直接看。

使用道具 举报

回复

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

本版积分规则 发表回复

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