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_timeDBMS_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测量执行时间存储过程的主要内容,如果未能解决你的问题,请参考以下文章

请问oracle怎么执行存储过程

oracle 存储过程中多线程执行另一个存储过程

怎么知道 oracle存储过程是不是执行完

oracle中 kill 正在执行的存储过程

PL_sql如何执行oracle存储过程

怎样实现每天自动执行oracle的存储过程一次