在Java的性能调优分析中,可以使用 JProfiler 分析JVM运行时的CPU消耗、Memory占用、Thread情况等信息。对于Java代码中调用的Oracle的存储过程、函数它也能输出调用时间、调用次数等信息,但对于过程、函数内部的性能情况,JProfiler就使不上力了。
在一次调优实战中,我就遇到了上面的情况,存储过程是性能问题所在,需要调优,这时就要用上 Oracle 提供的 DBMS_PROFILER package了。
1. DBMS_PROFILER 是什么?能做什么?
它是 Oracle 提供的一个用于性能分析的工具包。从Oracle document 网站找的定义大致是说:
此package能收集PLSQL执行时的性能数据,开发人员可以使用这些数据用于程序分析以提高其运行速度。开发人员可以在一个Session中打开此工具,它会记录所有的“数据库对象(function、procedure这样的PLSQL代码)”的性能分析数据,“数据”包括每句代码的运行次数、运行时间、运行平均时间、最长运行时间、最短运行时间等信息。
2. 使用DBMS_PROFILER对PLSQL进行性能分析
用它进行性能分析的过程大概是这样的:安装DBMS_PROFILER package --》 初始化记录表 --》打开分析开关 --》 执行你的PLSQL --》去分析表里面找瓶颈所在 --》解决它。
以下详解:
2.1 启用DBMS_PROFILER
先查看是否已安装:
SQL> desc dbms_profiler
如没有安装,执行
SQL> @@C:oracleproduct10.2.0client_1RDBMSADMINprofload.sql
重置记录表,执行
SQL> @@C:oracleproduct10.2.0client_1RDBMSADMINproftab.sql
2.2 执行你的PLSQL
begin
DBMS_PROFILER.START_PROFILER ('My Test‘);
--PLSQL 放在这里
DBMS_PROFILER.STOP_PROFILER;
end;
此段程序会先打开profiler 的设置,然后执行待测试的代码,最后再关闭profiler。这是一个典型的应用,DBMS_PROFILER也支持“暂停”,‘恢复“的操作:
DBMS_PROFILER.PAUSE_PROFILER ,DBMS_PROFILER.RESUME_PROFILER
然后就跑下这段代码,接下来就可以看分析数据了。
2.3查看分析数据
性能数据会被记录在下面的三张表里:
select * from PLSQL_PROFILER_RUNS ;
select * from PLSQL_PROFILER_UNITS ;
select * from PLSQL_PROFILER_DATA;
相关阅读:
Oracle 10g 安装后重启系统,用PLSQL连接报没有监听
ORA-03114 PLSQL过程编译断开连接错误
PLSQL 连接 Oracle简单配置
PLSQL批量Forall操作性能提升详解
使用Oracle SQLDeveloper连接数据库并创建用户
Oracle自带的PL/SQL Developer导入导出数据
在64位Win7系统下安装Oracle 11g和Oracle SQL Developer客户端