您的位置:首页 > 数据库

PLSQL性能追踪DBMS_HPROF

2016-04-22 13:58 537 查看
原文链接:http://docs.oracle.com/cd/E11882_01/appdev.112/e41502/adfns_profiler.htm#ADFNS023

1.创建目录存储追踪文件并授权SCOTT用户

CREATE DIRECTORY PLSHPROF_DIR as '/u01/app/oracle/private';

GRANT READ, WRITE ON DIRECTORY PLSHPROF_DIR TO SCOTT;


2. 简单的性能追踪

--创建测试用的PROC
CREATE OR REPLACE PROCEDURE test IS
n NUMBER;
PROCEDURE foo IS
BEGIN
SELECT COUNT(*) INTO n FROM emp;
END foo;
BEGIN
FOR i IN 1 .. 3 LOOP
foo;
END LOOP;
END test;


--性能追踪
BEGIN
--打开性能监控
dbms_hprof.start_profiling(location => 'PLSHPROF_DIR',--监控文件目录
filename => 'test.trc');--监控文件
test;
dbms_hprof.stop_profiling();--关闭
END;


3. 追踪文件介绍

性能监控过程执行完毕后会在PLSHPORF_DIR目录下生成文件test.trc,大体如下所示:

P#V PLSHPROF Internal Version 1.0
P#! PL/SQL Timer Started
P#C PLSQL."SCOTT"."TEST"::7."TEST"#980980e97e42f8ec #1
P#X 2
P#C PLSQL."SCOTT"."TEST"::7."TEST.FOO"#980980e97e42f8ec #3
P#X 7
P#C SQL."SCOTT"."TEST"::7."__static_sql_exec_line5" #5
P#X 182
P#R
P#X 6
P#R
P#X 2
P#C PLSQL."SCOTT"."TEST"::7."TEST.FOO"#980980e97e42f8ec #3
P#X 3
P#C SQL."SCOTT"."TEST"::7."__static_sql_exec_line5" #5
P#X 53
P#R
P#X 2
P#R
P#X 1
P#C PLSQL."SCOTT"."TEST"::7."TEST.FOO"#980980e97e42f8ec #3


P#V 版本说明

P#C 程序单元调用(调用事件)

P#R 程序单元的返回值(返回事件)

P#X 两个事件之间的执行时间

P#! 备注

以调用事件为例:

P#C PLSQL."SCOTT"."TEST"::7."TEST.FOO"#980980e97e42f8ec #3

PLSQL 命名空间,分为SQL和PLSQL

SCOTT.TEST 调用的程序单元所属的MODULE(其实就是程序单元的父级程序单元)

7   调用的程序单元所属MODULE的类型,7代表procedure?

TEST.FOO 正在调用的程序单元

#3 调用程序单元的行号

4. 监控文件转换成表存储

通过DBMS_HPROF.ANALYZE可以将监控文件test.trc可以转换成信息存储在表中

首先需要运行脚本$ORACLE_HOME/rdbms/admin/dbmshptab.sql创建存储监控信息的表:DBMSHP_RUNS,DBMSHP_FUNCTION_INFO,DBMSHP_PARENT_CHILD_INFO

然后运行analyze即可:

DECLARE
runid NUMBER;
BEGIN
runid := dbms_hprof.analyze(location => 'PLSHPROF_DIR',
filename => 'test.trc');
dbms_output.put_line('runid = ' || runid);
END;


5. 监控文件生成HTML报告

如果$ORACLE_HOME/bin已经加入环境变量,可以直接在test.trc所在路径运行命令:plshprof -output report test.trc即可以生成html报告
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: