在工作中,不乏会出现业务相对复杂,很多时候都是通过存储过程来实现对应的业务逻辑,从而在调用存储过程中,出现运行时间长,无法定位到存储过程中哪条SQL语句导致。因此,提出Oracle自带的DBMS_PROFILER分享,便于大家能够结合自己工作中的业务需求写的存储过程使用DBMS_PROFILER来进行分析,高效找出消耗性能的语句的位置,处理存储过程中导致瓶颈的语句。
一句话,以个人的理解,就是能够快速定位到代码的性能评价在哪里。先提供DBMS_PROFILER使用中涉及的表格:
plsql_profiler_runs --prof运行信息
plsql_profiler_units --prof每个单元信息
plsql_profiler_data --prof每个单元的详细数据
1.操作环境
查看数据库版本:select * from v$version;
2.相关脚本执行,授权
desc dbms_profiler;
grant execute on dbms_profiler to scott;
@C:/oracle/product/10.2.0/db_1/RDBMS/ADMIN/proftab.sql
生成的表格:
SELECT * FROM PLSQL_PROFILER_RUNS;
SELECT * FROM PLSQL_PROFILER_UNITS;
SELECT * FROM PLSQL_PROFILER_DATA
3.创建一个测试过程,包含dbms_profiler包文件,并执行
is
i number :=1 ;
v_str varchar2(4000);
begin
dbms_profiler.start_profiler('测试一下');
dbms_output.put_line(i);
for i in 1..100 loop
exit when length(v_str)>100;
v_str := v_str||i;
end loop;
dbms_output.put_line(v_str);
dbms_profiler.stop_profiler;
end p_dbms_profiler_test;
执行过程:
4.查询数据
select * from plsql_profiler_runs where run_comment='测试一下';
--根据运行号和单元名(即测试的存储过程名)获得本次prof的单元信息:
select * from plsql_profiler_units where runid=1 and unit_name='P_DBMS_PROFILER_TEST';
--根据运行号和单元号获得该存储过程每行运行的统计信息:
select * from plsql_profiler_data where runid =1 and unit_number=1;
最终关联查看:
SELECT d.line#, --代码行号
s.text, --源代码
d.total_time, --总共运行时间(单位10000亿分之一秒)
d.total_occur, --总共运行次数
d.min_time, --最小运行时间
d.max_time --最大运行时间
FROM plsql_profiler_data d, sys.all_source s, plsql_profiler_units u
WHERE d.runid = 1 --运行号
and u.unit_name = 'P_DBMS_PROFILER_TEST' --单元名,即被测试的存储过程名
AND u.runid = d.runid
AND d.unit_number = u.unit_number
AND d.total_occur <> 0
AND s.TYPE(+) = u.unit_type
AND s.owner(+) = u.unit_owner
AND s.name(+) = u.unit_name
AND d.line# = NVL (s.line, d.line#)
ORDER BY u.unit_number, d.line#;
对应结果:
1.通过存储过程打开一个test窗口
![](https://oss-emcsprod-public.modb.pro/wechatSpider/modb_20211117_8d0b1440-478d-11ec-a5a7-fa163eb4f6be.png)
2.通过存储过程打开一个test窗口
3.切换到Profiler窗口查
PLSQL上Profiler页签上按钮讲解
显示配置对话框
刷新
删除并运行
Run 显示当前的系统的所有Profiler列表,缺省为当前的跟踪
Unit 显示本次跟踪的单元列表信息(执行时间),缺省为所有单元的执行时间
文章转载自码蚁在线,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。