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)
...获得经过的百分之几秒.
在任何一种情况下,服务器负载等都会影响经过的时间.
参考:
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)
| 归档时间: |
|
| 查看次数: |
103740 次 |
| 最近记录: |