使用dbms_profiler测试存储过程性能

1.以sys用户登录执行以下脚本
SQL> conn / as sysdba
已连接。
SQL> @E:\oracle\product\10.2.0\db_1\RDBMS\ADMIN\profload.sql
程序包已创建。
授权成功。
同义词已创建。
库已创建。
程序包体已创建。
Testing for correct installation
SYS.DBMS_PROFILER successfully loaded.
PL/SQL 过程已成功完成。
2.test用户创建一存储过程
SQL> create table tab_test (a int);
表已创建。

SQL> CREATE OR REPLACE PROCEDURE sp_test
  2  AS
  3  BEGIN
  4     FOR I IN 1 .. 100
  5     LOOP
  6        INSERT INTO tab_test
  7          VALUES   (I);
  8     END LOOP;
  9     COMMIT;
 10  END;
 11  /
在test用户执行以下脚本
SQL> @E:\oracle\product\10.2.0\db_1\RDBMS\ADMIN\proftab.sql
drop table plsql_profiler_data cascade constraints
           *
第 1 行出现错误:
ORA-00942: 表或视图不存在
drop table plsql_profiler_units cascade constraints
           *
第 1 行出现错误:
ORA-00942: 表或视图不存在

drop table plsql_profiler_runs cascade constraints
           *
第 1 行出现错误:
ORA-00942: 表或视图不存在

drop sequence plsql_profiler_runnumber
              *
第 1 行出现错误:
ORA-02289: 序列不存在

表已创建。

注释已创建。

表已创建。

注释已创建。

表已创建。

注释已创建。

序列已创建。

过程已创建。

DECLARE
   v_run_number   integer;
   v_temp1        integer;
BEGIN
   --启动profiler
   DBMS_PROFILER.start_profiler (run_number => v_run_number);
   --显示当前跟踪的运行序号(后面查询要用)
   DBMS_OUTPUT.put_line ('run_number:' || v_run_number);
   --运行要跟踪的PLSQL
   sp_test;
   --停止profiler
   DBMS_PROFILER.stop_profiler;
END;
3.查询结果
SQL>  select runid,run_owner,run_date,run_total_time from plsql_profiler_runs;

     RUNID RUN_OWNER                        RUN_DATE       RUN_TOTAL_TIME
---------- -------------------------------- -------------- --------------
         1 TEST                             10-1月 -15         1.0894E+11
         2 TEST                             10-1月 -15         2.3250E+10
         3 TEST                             10-1月 -15         4.1350E+10
         4 TEST                             10-1月 -15         5.9329E+10
SQL>  col text format a60
SQL> SELECT   d.line#,                 --代码行号
  2      s.text,                         --源代码
  3         d.total_time,                   --总共运行时间(单位10000亿分之一秒)
  4         d.total_occur,                  --总共运行次数
  5         d.min_time,                     --最小运行时间
  6         d.max_time                      --最大运行时间
  7      FROM   plsql_profiler_data d, sys.all_source s, plsql_profiler_units u
  8     WHERE       d.runid = 1            --运行号
  9      and u.unit_name = 'SP_TEST'        --单元名,即被测试的存储过程名
 10         AND u.runid = d.runid
 11      AND d.unit_number = u.unit_number
 12      AND d.total_occur <> 0
 13      AND s.TYPE(+) = u.unit_type
 14      AND s.owner(+) = u.unit_owner
 15      AND s.name(+) = u.unit_name
 16      AND d.line# = NVL (s.line, d.line#)
 17     ORDER BY   u.unit_number, d.line#;


     LINE# TEXT                                                         TOTAL_TIME TOTAL_OCCUR   MIN_TIME   MAX_TIME
---------- ------------------------------------------------------------ ---------- ----------- ---------- ----------
         4    FOR I IN 1 .. 100                                           26505044         101     241371     613485
         6       INSERT INTO tab_test                                   1.4423E+10         100   13279900 9301057816
         9    COMMIT;                                                     53914114           1   53914114   53914114
        10 END;                                                             886146           1     886146     886146

SQL>  select unit_number,unit_type,unit_owner,unit_name,unit_timestamp,total_time from plsql_profiler_units where runid = 1 and unit_name = 'SP_TEST';

UNIT_NUMBER UNIT_TYPE                        UNIT_OWNER                       UNIT_NAME                     UNIT_TIMESTAMP TOTAL_TIME
----------- -------------------------------- -------------------------------- -------------------------------- -------------- ----------
          2 PROCEDURE                        TEST                             SP_TEST                          10-1月 -15              0

SQL> select runid,unit_number,line#,total_occur,total_time,min_time,max_time from plsql_profiler_data where runid = 1 and unit_number = 2;

     RUNID UNIT_NUMBER      LINE# TOTAL_OCCUR TOTAL_TIME   MIN_TIME   MAX_TIME
---------- ----------- ---------- ----------- ---------- ---------- ----------
         1           2          1           0    1025828    1025828    1025828
         1           2          4         101   26505044     241371     613485
         1           2          6         100 1.4423E+10   13279900 9301057816
         1           2          9           1   53914114   53914114   53914114
         1           2         10           1     886146     886146     886146
4.生成html报表
SQL> column RUNID format 99
SQL> column RUN_COMMENT format a30
SQL> @C:\prof\profiler.sql

RUNID RUN_DATE                RUN_COMMENT
----- ----------------------- ---------------------------
    1 10-1月 -15 15:04:25     10-1月 -15
    2 10-1月 -15 15:04:51     10-1月 -15
    3 10-1月 -15 16:14:59     10-1月 -15
    4 10-1月 -15 16:15:21     10-1月 -15

Usage:
sqlplus apps/
SQL> START profiler.sql
输入 1 的值:  4

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

转载于:http://blog.itpub.net/26937943/viewspace-1397250/

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值