PL/SQL Profiler - DBMS_PROFILER

之前写过EBS下的PL/SQL Profiling 调试的文章,PL/SQL Profiling用于调试EBS下PL/SQL(如:Procedure,Function)的性能情况。今天抛开EBS这个特定的产品,写一下如何使用DBMS_PROFILER这个Package,如何获取PL/SQL中各段代码的执行时间。

DBMS_PROFILER的官方介绍:http://docs.oracle.com/cd/B19306_01/appdev.102/b14258/d_profil.htm


DBMS_PROFILER Installation

一般情况下DBMS_PROFILER的Package和Table都已经安装,如果你的数据库里没有DBMS_PROFILER相关Package和Table,那么需要手动的运行以下两个prof*.sql
1.Run profload.sql which will install the DBMS_PROFILER package.
$ORACLE_HOME/rdbms/admin/profload.sql

2.Once connected run proftab.sql which will create special tables where profiler puts its results.
$ORACLE_HOME/rdbms/admin/proftab.sql
Tables:
plsql_profiler_runs  - information on profiler runs
plsql_profiler_units - information on each lu profiled
plsql_profiler_data  - profiler data for each lu profiled


Demo

1.创建一个测试表

create table t1 (col1 varchar2(30), col2 varchar2(30));
2.创建一个测试Procedure
create or replace procedure literals
is
 vNumber number;
begin
 for i in 1..100000 loop
   vNumber := dbms_random.random;               
   execute immediate
    'insert into t1 values ('||vNumber||','||vNumber||')';
 end loop;
 end;
3.Start Profiler-> Your Procedure -> Stop Profiler
SQL> execute dbms_profiler.start_profiler('PTIAN123'); --PTIAN123 is comment for your profiler

SQL> exec literals;

SQL> execute dbms_profiler.stop_profiler;
4.查看测试结果

4.1) plsql_profiler_runs has summary of all dbms_profiler runs.

set lines 10000
column run_owner format a30
column run_comment format a10
select runid,
       run_owner, 
       run_date,
       run_total_time/1000000000 run_total_time,
       run_comment
from plsql_profiler_runs
WHERE run_comment = 'PTIAN123';
Result Like:

RUNIDRUN_OWNERRUN_DATERUN_TOTAL_TIMERUN_COMMENT
7APPS02.12.2012 20:24:5549.759322PTIAN123
4.2)

column text format a55
 column total_time format 99.9
 column min_time format 99.9
 column max_time format 99.9
 select s.text ,
        p.total_occur ,
        p.total_time/1000000000 total_time,
        p.min_time/1000000000 min_time,
        p.max_time/1000000000 max_time
 from plsql_profiler_data p, user_source s, plsql_profiler_runs r
 where p.line# = s.line
 and   p.runid = r.runid
 and   r.run_comment = 'PTIAN123'  --Your Profiler Comment
 and   s.name ='LITERALS';  --Procedure Name
Result Like:

TEXTTOTAL_OCCURTOTAL_TIMEMIN_TIMEMAX_TIME
procedure literals0000
is0000
vNumber number;1.000001.000001.000001
procedure literals2.000035.000003.000019
procedure literals2.000033.000002.000027
procedure literals0.000004.000004.000004
is2.000013.000001.000012
vNumber number;1.000003.000003.000003
procedure literals0.000004.000004.000004
for i in 1..100000 loop100001.10566.000001.000808
vNumber := dbms_random.random;100000.319572.000001.000959
execute immediate10000040.923568.000287.112456
end;1.000055.000055.000055
procedure literals2.000044.000005.000025
procedure literals2.000032.000002.000026
procedure literals0.000007.000007.000007
is2.002595.000002.002593
vNumber number;0000

从上面的结果就可以清楚的看到,execute immediate的执行时间最长(实际是insert的消耗)


DBMS Profiler HTML report

另外Oracle还提供了一个DBMS Profiler的HTML页面化工具,可以参见下边这个NOTE,HTML的输出更加清楚些.

Script to produce HTML report with top consumers out of PL/SQL Profiler DBMS_PROFILER data (Doc ID 243755.1)
输出的样式:


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值