设为首页 收藏本站
查看: 1071|回复: 0

[经验分享] Oracle PL/SQL Profiler应用指南

[复制链接]

尚未签到

发表于 2016-7-24 12:39:37 | 显示全部楼层 |阅读模式
Oracle PL/SQL Profiler应用指南  

  
  
  

  
  
Profiler是ORACLE PL/SQL 的一个调试优化跟踪方案的应用  

  
  
相对sqltrace+tkprof工具调试优化跟踪方案来说, Profiler有最直观更方便的优点,因为不需要生成和读取服务器端的跟踪文件,它是将跟踪数据全部存储的数据库表里,所以也得到了一些第三方工具的支持,如PL/SQL DEVELOPER 。  

  
  
注:Profiler生成的跟踪信息远远没有trace生成的详细,它没有执行计划、没有CPU及IO 信息,它只是生成主要的执行时间信息,所以分析起来比较快,比较直观,可以让我们以最快的时间定位要优化的SQL。  

  
  
  

  
  
下面将介绍ORACLE PL/SQL profiler的详细应用  

  
  
  

  
  
1、安装  

  
  
安装总共要运行两个ORALCE自带的服务脚本   

  
  
(1)、创建profiler的基础结构(用将来常使用的用户登录)  

  
  
@$ORACLE_HOME/rdbms/admin/proftab.sql;  

  
  
proftab.sql会在当前用户下创建如下表结构及序列:  

  
  
plsql_profiler_runs - profiler运行信息  

  
  
plsql_profiler_units - profiler每个单元信息  

  
  
plsql_profiler_data - profiler每个单元的详细数据  

  
  
plsql_profiler_runnumber 用来生成profiler唯一运行编号的序列  

  
  
  

  
  
(2)、创建数据库服务运行包(用sys用户登录,需用sqlplus,不能用pl/sql developer command window)  

  
  
@$ORACLE_HOME/rdbms/admin/profload.sql;  

  
  
profload.sql主要是创建sys.dbms_profiler包  

  
  
包主要的函数过程有  

  
  
  

  
  
start_profiler,   

  
  
stop_profiler,   

  
  
pause_profiler,   

  
  
resume_profiler,   

  
  
flush_data,   

  
  
internal_version_check,   

  
  
get_version,   

  
  
rollup_unit,   

  
  
rollup_run  

  
  
  

  
  
主要使用的函数是  

  
  
  start_profiler--启动 profiler  

  
  
  stop_profiler--停止 profiler  

  
  
  其它为一些辅助函数  

  
  
2、应用实例   

  
  
declare  

  
  
v_run_number integer;  

  
  
v_temp1 integer;  

  
  
begin  

  
  
--1.启动profiler  

  
  
sys.dbms_profiler.start_profiler(run_number => v_run_number);  

  
  
--显示当前跟踪的运行序号(后面查询要用)  

  
  
dbms_output.put_line('run_number:'||v_run_number);  

  
  
--2.运行要跟踪的PL/SQL  

  
  
--select count(*) into v_temp1 from scott.emp t;  

  
  
--select count(*) into v_temp1 from scott.dept t;  

  
  
--3.停止profiler  

  
  
sys.dbms_profiler.stop_profiler;  

  
  
end;  

  
  
  

  
  
3、查询结果  

  
  
select u.unit_name,--单元名称  

  
  
d.line,--代码行号  

  
  
d.total_time,--总共运行时间(单位:10000亿分之一秒)  

  
  
d.total_occur,--总共运行次数  

  
  
d.min_time,--最小运行时间  

  
  
d.max_time,--最大运行时间  

  
  
s.text--源代码  

  
  
from plsql_profiler_data d, sys.all_source s, plsql_profiler_units u  

  
  
where d.runid = 33--运行号v_run_number  

  
  
and u.runid = d.runid  

  
  
and d.unit_number = u.unit_number  

  
  
and d.total_occur <> 0  

  
  
and s.type(+) = u.unit_type  

  
  
and s.owner(+) = u.unit_owner  

  
  
and s.name(+) = u.unit_name  

  
  
and d.line# = nvl(s.line, d.line#)  

  
  
order by u.unit_number, d.line#  

  
  
  

  
  
以上介绍的是通过手工方法应用Profiler,使用相对比较烦杂,最后查询也不直观,下面将详细介绍在PL/SQL DEVELOPER 应用Profiler  

  
  
  

  
  
1、 打开test window  

  
  
方法一、新建一个test window  

  
  
方法二、选择要跟踪运行的过程,快捷菜单test,如下图所示  

  
  
http://javawebsoa.iyunv.com/images/blog_csdn_net/yzsind/image1002.jpg

http://javawebsoa.iyunv.com/images/blog_csdn_net/yzsind/image1002.jpg
  
在test window中输入你要执行的PL/SQL脚本  

  
  
<shapetype id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t" path="m@4@5l@4@11@9@11@9@5xe" filled="f" stroked="f"></shapetype><stroke joinstyle="miter"></stroke><formulas></formulas><f eqn="if lineDrawn pixelLineWidth 0"></f><f eqn="sum @0 1 0"></f><f eqn="sum 0 0 @1"></f><f eqn="prod @2 1 2"></f><f eqn="prod @3 21600 pixelWidth"></f><f eqn="prod @3 21600 pixelHeight"></f><f eqn="sum @0 0 1"></f><f eqn="prod @6 1 2"></f><f eqn="prod @7 21600 pixelWidth"></f><f eqn="sum @8 21600 0"></f><f eqn="prod @7 21600 pixelHeight"></f><f eqn="sum @10 21600 0"></f><lock v:ext="edit" aspectratio="t"></lock>  

  
  
  

  
  
2、打开Profiler,如下图所示  

  
  
如果在打开Profiler出现出错提示则说明你没有安装Profiler,详细安装步骤见上文的安装过程。
http://javawebsoa.iyunv.com/images/blog_csdn_net/yzsind/image1004.jpg

http://javawebsoa.iyunv.com/images/blog_csdn_net/yzsind/image1004.jpg
  
  

  
  
3、F8执行脚本,执行完成后,切换到profiler选项卡,如下图所示
http://javawebsoa.iyunv.com/images/blog_csdn_net/yzsind/image1006.jpg

http://javawebsoa.iyunv.com/images/blog_csdn_net/yzsind/image1006.jpg
  
  

  
  
每列的详细意义如下:  

  
  
  unit --单元名称  

  
  
line--代码行号  

  
  
total time--总共运行时间(本行代码的执行时间与最长代码执行时间的百分比图)  

  
  
occurrences--总共运行次数  

  
  
text--源代码  

  
  
  Average time—平均运行时间  

  
  
maximum time--最大运行时间  

  
  
minimum time--最小运行时间  

  
  
  

  
  
列表中显示的源代码只显不一行,如果要定位则可以在对应的行中打开右键,选择  

  
  
[Go to unit line] ,这样就会直接跳到对应的源代码位置。  

  
  
  

  
  
  

  
  
工具栏
http://javawebsoa.iyunv.com/images/blog_csdn_net/yzsind/image1008.jpg

http://javawebsoa.iyunv.com/images/blog_csdn_net/yzsind/image1008.jpg
  
  

  
  
1、 显示配置对话框  

  
  
2、 刷新  

  
  
3、 删除当前运行号的数据  

  
  
4、Run:显示当前的系统的所有Profiler列表,缺省为当前的跟踪  

  
  
5、Unit:显示本次跟踪的单元列表信息(执行时间),缺省为所有单元的执行时间  

  
  
  

  
  
配置PL/SQL Developer 的Profiler选项,如下图所示
http://javawebsoa.iyunv.com/images/blog_csdn_net/yzsind/image1010.jpg

http://javawebsoa.iyunv.com/images/blog_csdn_net/yzsind/image1010.jpg
  
  

  
  
Available Columns:可用列  

  
  
Selected Columns:选择要查看的列  

  
  
Time units:时间单位(秒、毫秒、微秒)  

  
  
Show 0 occurrences:是否显示执行0次的处理语句  

  
  
Graphical time display:用图形显示处理时间的颜色深度百分比  

  
  
  

  
  
  

  
  
叶正盛  

  
  
<chsdate year="2005" month="4" day="17" islunardate="False" isrocdate="False" w:st="on"></chsdate>2005-04-17  

  
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-248650-1-1.html 上篇帖子: Oracle中 ROWNUM 的使用心得 下篇帖子: Oracle创建、修改表和主键自增
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表