Oracle PLSQL Procedure 如何进行性能调优分析

在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:\oracle\product\10.2.0\client_1\RDBMS\ADMIN\profload.sql

重置记录表,执行

SQL> @@C:\oracle\product\10.2.0\client_1\RDBMS\ADMIN\proftab.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;

相关阅读

相关推荐