Oracle查询执行时间

时间:2010-08-24 17:27:27

标签: oracle sqlplus execution

我想在Oracle中获取查询执行时间。我不希望Oracle需要时间打印结果 - 只是执行时间。

在MySQL中,很容易从shell获得执行时间。

如何在 SQL * Plus 中执行此操作?

4 个答案:

答案 0 :(得分:24)

可以发出SQL * Plus命令SET TIMING ON来获取挂钟时间,但是,例如,可以从中轻松获取时间。

AUTOTRACE设置用作SET AUTOTRACE TRACEONLY时会抑制输出,但仍会执行所有工作以满足查询要求并将结果发送回SQL * Plus,这会抑制它。

最后,可以跟踪SQL * Plus会话,并手动计算等待客户端等待事件所花费的时间,例如“SQL * Net message to client”,“SQL * Net message from client”。

答案 1 :(得分:17)

使用:

set serveroutput on
variable n number
exec :n := dbms_utility.get_time;
select ......
exec dbms_output.put_line( (dbms_utility.get_time-:n)/100) || ' seconds....' );

或者可能:

SET TIMING ON;

-- do stuff

SET TIMING OFF;

...获得经过的百分之几秒。

在任何一种情况下,服务器负载等都会影响已用时间。

参考:

答案 2 :(得分:6)

select LAST_LOAD_TIME, ELAPSED_TIME, MODULE, SQL_TEXT elapsed from v$sql
  order by LAST_LOAD_TIME desc

更复杂的例子(不要忘记删除或替换PATTERN):

select * from (
  select LAST_LOAD_TIME, to_char(ELAPSED_TIME/1000, '999,999,999.000') || ' ms' as TIME,
         MODULE, SQL_TEXT from SYS."V_\$SQL"
    where SQL_TEXT like '%PATTERN%'
    order by LAST_LOAD_TIME desc
  ) where ROWNUM <= 5;

答案 3 :(得分:3)

我建议将一致的获取/逻辑读取视为“工作”的更好代理而不是运行时间。运行时间可能会因数据库服务器上发生的其他事情,缓存中有多少内容等而有所不同。

但是如果您真的想要SQL执行时间,那么V $ SQL视图同时具有CPU_TIME和ELAPSED_TIME。