Oracle查询执行时间

use*_*743 29 oracle sqlplus execution

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

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

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

Ada*_*sch 25

人们可以发出SQL*Plus命令SET TIMING ON来获得挂钟时间,但是例如,人们无法从中获取时间.

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

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


OMG*_*ies 19

使用:

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....' );
Run Code Online (Sandbox Code Playgroud)

或者可能:

SET TIMING ON;

-- do stuff

SET TIMING OFF;
Run Code Online (Sandbox Code Playgroud)

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

在任何一种情况下,服务器负载等都会影响经过的时间.

参考:


gav*_*koa 7

select LAST_LOAD_TIME, ELAPSED_TIME, MODULE, SQL_TEXT elapsed from v$sql
  order by LAST_LOAD_TIME desc
Run Code Online (Sandbox Code Playgroud)

更复杂的例子(不要忘记删除或替换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;
Run Code Online (Sandbox Code Playgroud)