在公司内部有时候会给其它的同事进行一些内部的培训,这里大部分的同事都在用PL/SQL写程序,因此关于PL/SQL程序的性能调整是很多人关心的话题。 对于一大段PL/SQL程序,如何快速找到这段程序里面最耗费时间的部分在哪里?如何快速地定位改程序的bottleneck?这时候需要dbms_profiler包。 1. 首先需要检查dbms_profiler包有没有安装。如果没有则需要通过sys用户运行ORACLE_HOME/admin/profload.sql来创建该包。 2. 将该包的执行权限赋予待优化的PL/SQL程序属主。 3. 使用PL/SQL程序属主登录数据库,运行ORACLE_HOME/rdbms/admin/proftab.sql来创建repository tables,包含PLSQL_PROFILER_RUNS,PLSQL_PROFILER_UNITS,PLSQL_PROFILER_DATA这三张表。 4. 在待优化的PL/SQL程序前后加上运行dbms_profiler包的代码,如下: BEGIN DBMS_PROFILER.START_PROFILER(‘any comment’); …’your pl/sql code’ DBMS_PROFILER.STOP_PROFILER; … END; / 5. 运行该PL/SQL程序,之后检查PLSQL_PROFILER_DATA表内容,从中就可以看到每一行代码的执行次数,每行代码总共的执行时间。 另外从Metalink上Note:243755.1中可以下载PROF.zip,包含的程序可以用来生成直观的profiler结果报告,一个html样式的报告。 From Drop Box 该报告可以列出Top 10最消耗时间的代码,强烈推荐使用。