Oracle测量执行时间存储过程
Posted
技术标签:
【中文标题】Oracle测量执行时间存储过程【英文标题】:Oracle measuring execution time stored procedure 【发布时间】:2018-12-15 18:21:52 【问题描述】:我想测量 Oracle 中存储过程的执行时间。我已经了解了在开始和结束时在临时日志表中写入条目的技术,但无法使用这种技术。
您能否向我推荐一个我能够做到这一点的开源/免费工具?
谢谢!
【问题讨论】:
使用 Tyler Muth 的logger
库。这是最接近行业标准的东西。 Check it out
【参考方案1】:
答案取决于您使用的环境。
如果您使用的是 SQLPlus,您可以按如下方式启用计时器:t
SQL> set timing on
然后,只需执行您的程序,例如:
SQL> exec my_procedure;
当程序完成时,将显示一个摘要行,例如:
PL/SQL procedure successfully completed.
Elapsed: 00:00:03.05
在 PL/SQL 中,您可以使用 dbms_utility.get_time
:
DECLARE
start_time pls_integer;
BEGIN
start_time := dbms_utility.get_time;
exec my_procedure;
dbms_output.put_line((dbms_utility.get_time - start_time)/100 || ' seconds');
END;
/
应该输出类似:
3 seconds
PL/SQL procedure successfully completed.
见this excellent explanation from Tom Kyte。
【讨论】:
【参考方案2】:可以使用记录存储过程的开始/结束时间的执行
DBMS_UTILITY.get_cpu_time
或 DBMS_UTILITY.get_time
例如
CREATE OR REPLACE PROCEDURE test_proc IS
BEGIN
DBMS_OUTPUT.put_line('start time '||DBMS_UTILITY.get_time);
<your statement>
DBMS_OUTPUT.put_line('end time '||DBMS_UTILITY.get_time);
END;
当然还有其他方法可以使用Profiler查找执行时间
也看看this
【讨论】:
【参考方案3】:如果您想获得可以真正帮助您诊断问题的详细信息,我强烈推荐使用 dbms_profiler。
它易于使用,并为 pl/sql 中的每一行提供统计信息,包括执行次数、总时间、最小值和最大值。
【讨论】:
以上是关于Oracle测量执行时间存储过程的主要内容,如果未能解决你的问题,请参考以下文章