为什么 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 - 他们是设计来这样做的。
我有一个包含很多 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 - 他们是设计来这样做的。