总是有开发人员问某个存储过程的性能下降了,当存储过程的代码很长的时候,想找出某行代码性能下降非常消耗时间。这时profiler和10046都是比较好的工具来定位问题。
Profiler是用来收集plsql代码中每一行代码运行的性能数据。这些数据保护每行代码执行了多少次,总共花了多少时间,最大和最小时间。而且不用修改代码和debug。
Profiler的安装很简单。
1. 首先要创建dbms_profiler的package。dbms_profiler是用来开始和结束profiling的。以sysdba的权限运行$ORACLE_HOME/rdbms/admin/profload.sql,安装完后,使用desc dbms_profiler来验证是否安装成功。
2. 创建完dbms_profiler package后,还需要创建保存每行代码性能数据的表。以执行package的用户运行$ORACLE_HOME/rdbms/admin/proftab.sql来创建。
运行完成后,下列表将会生成。
表:PLSQL_PROFILER_RUNS
表:PLSQL_PROFILER_UNITS
表:PLSQL_PROFILER_DATA
序列号:PLSQL_PROFILER_RUNNUMBER
Profiler的使用也很简单。
begin
DBMS_PROFILER.START_PROFILER('TEST_PROFILER');
TEST_PROC;
DBMS_PROFILER.STOP_PROFILER();
end;
/
查看Profiler执行的性能数据:
SELECT u.runid, u.unit_number, u.unit_type, u.unit_owner, u.unit_name,
d.line#, d.total_occur, d.total_time, d.min_time, d.max_time
FROM plsql_profiler_units u
JOIN plsql_profiler_data d ON u.runid=d.runid AND u.unit_number=d.unit_number
WHERE u.runid=2
ORDER BY u.unit_number, d.line#;
也可以用profiler.sql生成html形式的报告。
具体请参考metalink note 243755.1
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/25105315/viewspace-757837/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/25105315/viewspace-757837/