【问题标题】:How come execution time in TOAD is higher then manually calculating execution time with SYSTIMESTAMP?为什么 TOAD 中的执行时间比使用 SYSTIMESTAMP 手动计算执行时间要长?
【发布时间】:2015-07-30 08:05:31
【问题描述】:

我有一个包含很多选择语句的过程。当我运行该过程时,TOAD 的查询查看器选项卡中的执行时间远高于在过程开始和结束时使用 SYSTIMESTAMP 计算的执行时间。

程序:

DECLARE

/* Declare Variables */

BEGIN

    /* Initalize Variables */
    startTime number;
    endTime number;
    totalTime number;

    startTime :=  to_number(TO_CHAR (SYSTIMESTAMP, 'MISS.FF' )); 
    dbms_output.put_line('Start Procedure: '||startTime );

    /* Execute a lot of SQL */

    endTime :=   to_number(TO_CHAR (SYSTIMESTAMP, 'MISS.FF'  )); 
    dbms_output.put_line('End Procedure: '||endTime );

    totalTime := endTime-startTime;

    dbms_output.put_line('Total Time in Seconds: '||totalTime );
END;

DBMS 输出:

Start Procedure: 3645.427147
End Procedure: 3645.427618
Total Time in Seconds: .000471

所以计算出来的时间是 0.471 毫秒,但 TOAD 说是 146 毫秒。

这是为什么?

【问题讨论】:

  • Toad 对从语句发送到数据库到执行完成并收到返回通知的整个过程进行计时。这将包括网络活动所需的任何时间以及 Toad 将语句发送到 Oracle 并处理结果所需的任何设置/拆卸代码。 Toad 中显示的时间是您在单击执行后到 Toad 为您提供结果所经历的执行时间。如果您想在数据库上获得准确的执行时间,那么您将需要“现在就在这里”所建议的另一种方法。
  • 我认为 Michael 的评论和“Be Here Now”的回答相结合就足够了。

标签: oracle stored-procedures toad


【解决方案1】:

这都是挂钟时间,可能会有所不同 - 例如,您不知道 TOAD 是如何精确测量它的。我不会认为 TOAD 值得信赖。如果您想要精确测量,请使用 DBMS_UTILITY.GET_TIME/GET_CPU_TIMEsql trace - 他们是有意为之的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-12-22
    • 1970-01-01
    • 2020-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-28
    相关资源
    最近更新 更多