oracle使用profiler分析语句执行效率

1、前言
     Profiler是ORACLE PL/SQL 的一个调试优化跟踪方案,使用profiler可以跟语句执行过程中消耗的时间等。在日常开发过程中,我们可能会常常遇到一些sql语句、存储过程在使用过程中,消耗过多的资源,为了细化了某条具体的语句,我们可以使用profiler。这样大大的减少了我们寻找问题语句的时间,提高效率,在优化的过程中,profiler起到一个很好的效果

2、profiler的一些包的介绍

--proftab.sql介绍
在当前用户建表及序列等,具体如下;
plsql_profiler_runs  - profiler运行信息                   
plsql_profiler_units - profiler每个单元信息               
plsql_profiler_data  - profiler每个单元的详细数据         
plsql_profiler_runnumber 用来生成profiler唯一运行编号的序列

--profload.sql介绍
创建数据库服务包,包括启动、停止等,具体如下:
sys.dbms_profiler包
此包包括以下主要的函数过程   
start_profiler           --启动函数
stop_profiler            --停止函数
pause_profiler
resume_profiler
flush_data
internal_version_check
get_version
rollup_unit
rollup_run

--具体创建过程
SQL> @$ORACLE_HOME/rdbms/admin/proftab.sql;
drop table plsql_profiler_data cascade constraints
ERROR at line 1:
ORA-00942: table or view does not exist


drop table plsql_profiler_units cascade constraints
           *
ERROR at line 1:
ORA-00942: table or view does not exist


drop table plsql_profiler_runs cascade constraints
           *
ERROR at line 1:
ORA-00942: table or view does not exist


drop sequence plsql_profiler_runnumber
              *
ERROR at line 1:
ORA-02289: sequence does not exist

 

Table created.


Comment created.


Table created.


Comment created.


Table created.


Comment created.


Sequence created.

在创建的过程中,会检测这些对象是否存在,先进行删除,后面补建成功

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

Package created.


Grant succeeded.


Synonym created.


Library created.


Package body created.

Testing for correct installation
SYS.DBMS_PROFILER successfully loaded.

PL/SQL procedure successfully completed.

3、创建我们需要的测试对象

在本存储过程中,我们只进行两条语句的分析处理,具体如下:

SQL> CREATE OR REPLACE PROCEDURE mytest_proc
  2  is
  3    v_counts1 number;
  4    v_counts2 number;
  5    v_counts3 number;
  6 
  7  begin
  8    select count(*) into v_counts1 from dba_tables;
  9    select count(*) into v_counts2 from dba_objects;
 10    select count(*) into v_counts3 from dba_segments;
 11  end;
 12  /

4、开始测试profiler的使用
--针对上面建立的存储过程,对里面的语句进行分析
SQL> begin
  2  DBMS_PROFILER.START_PROFILER('my profiler test');
  3  mytest_proc ;
  4  DBMS_PROFILER.STOP_PROFILER;
  5  end;
  6  /

PL/SQL procedure successfully completed.

--查询刚才分析出来的结果:
SQL> select d.line#,
  2         u.unit_name,
  3         d.total_time,
  4         d.total_occur,
  5         d.max_time,
  6         s.text
  7    from sys.plsql_profiler_data d, sys.all_source s, sys.plsql_profiler_units u
  8   where u.runid = d.runid
  9     and d.unit_number = u.unit_number
 10     and d.total_occur <> 0
 11     and s.type(+) = u.unit_type
 12     and s.owner(+) = u.unit_owner
 13     and s.name(+) = u.unit_name
 14     and d.line# = nvl(s.line, d.line#) and u.unit_name = 'MYTEST_PROC'
 15   order by u.unit_number, d.line#
 16  ;
 
LINE# UNIT_NAME       TOTAL_TIME TOTAL_OCCUR   MAX_TIME TEXT
----- --------------- ---------- ----------- ---------- ----------------------------------------------------
    1 MYTEST_PROC           2006           1       2006 PROCEDURE mytest_proc
    8 MYTEST_PROC      412905914           1  412905914   select count(*) into v_counts1 from dba_tables;
    9 MYTEST_PROC      102775576           1  102775576   select count(*) into v_counts2 from dba_objects;
   10 MYTEST_PROC      222756652           1  222756652   select count(*) into v_counts3 from dba_segments;
   12 MYTEST_PROC           5015           1       5015 end;
  
字段说明:
unit_time     --表示执行的过程、语句、函数等
total_time    --总共运行的时间,单位非常小,万亿分之一秒
total_occur   --执行的次数,用总时间除次数,可得到每次运行的时间
max_time      --代码运行的最最长时间,如有游标循环等
runid         --运行号,这个是自动产生的
Avg_time      --平均运行时间
min_time      --最小运行时间

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29371470/viewspace-1064297/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/29371470/viewspace-1064297/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值