为什么 TOAD 中的执行时间比使用 SYSTIMESTAMP 手动计算的执行时间长?

How come execution time in TOAD is higher then manually calculating execution time with SYSTIMESTAMP?

我有一个包含很多 select 语句的过程。当我 运行 过程时,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

所以计算的时间是 .471 毫秒,但 TOAD 说是 146 毫秒。

这是为什么?

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