【问题标题】:Oracle measuring execution time stored procedureOracle测量执行时间存储过程
【发布时间】:2018-12-15 18:21:52
【问题描述】:

我想测量 Oracle 中存储过程的执行时间。我已经了解了在开始和结束时在临时日志表中写入条目的技术,但无法使用这种技术。

您能否向我推荐一个我能够做到这一点的开源/免费工具?

谢谢!

【问题讨论】:

  • 使用 Tyler Muth 的 logger 库。这是最接近行业标准的东西。 Check it out

标签: sql oracle stored-procedures plsql


【解决方案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 中的每一行提供统计信息,包括执行次数、总时间、最小值和最大值。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-01-05
        • 2011-06-19
        • 1970-01-01
        • 2011-11-07
        • 1970-01-01
        • 2010-12-23
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多