sql文件的执行时间 - 批处理操作

时间:2014-03-07 18:04:15

标签: sql oracle oracle11g

我有一堆SQL查询存储在磁盘上的文件中 它们都是纯SELECT个查询,换句话说,它们只进行读操作。

我正在连接到Oracle 11g数据库,我想测量所有这些查询的大致执行时间。有没有办法以编程方式执行此操作?

数据库位于防火墙后面的服务器上,因此我只能通过Toad或Oracle SQL开发人员连接到数据库。因此,编写我自己的java / python代码不是一个选项。

3 个答案:

答案 0 :(得分:3)

使用TOAD时我可以想到几个选项。

选项1: F5

,这应该在TOAD中有效
TURN SPOOL ON -- Spool the results
SET TERMOUT OFF -- Controls the display of output generated by commands executed from a script.
SELECT * FROM TABLE;
SPOOL OFF

选项2: F5 ,这应该在TOAD中有效但是这不会打印查询结果。

SET AUTOTRACE TRACEONLY
YOUR QUERY

选项3: F5

,这应该在TOAD中有效
SET TIMING ON -- Controls the display of timing statistics.
YOUR QUERY

例如选项3

SET TIMING ON
SELECT bla FROM bla...
...
Elapsed: 00:00:00:01
SELECT bar FROM foo...
...
Elapsed: 00:00:23:41
SET TIMING OFF

运行所有脚本并查找总时间

TIMING START allmyscripts
... run all my scripts ...
TIMING STOP
timinig for: allmyscripts
Elapsed: 00:00:08.32

使用V $ SQL

中的以下列查找DBA样式
APPLICATION_WAIT_TIME
CONCURRENCY_WAIT_TIME
CLUSTER_WAIT_TIME
USER_IO_WAIT_TIME
PLSQL_EXEC_TIME
CPU_TIME
ELAPSED_TIME

注意:我建议选项3

答案 1 :(得分:2)

我会在选择之前执行对日志记录表的插入,并在每次选择之后更新它。

这不仅可以查询今天的时间,还可以查询历史记录,检测或回溯执行时间的增加。

表可能与一个小型Web应用程序相关,用于向您显示数据并以图形方式呈现,以保证您的老板满意:D

create table batch_log (
batch_name varchar2(100) not null,
run_id varchar2(100) not null,
start_time date not null,
stop_time date not null);

insert into batch_log ('myFisrtSelect',date(sysdate), sysdate, sysdate);

select ....

update batch_log set stop_time=sysdate where batch_name='myFisrtSelect' and run_id=date(sysdate):

当然,run_id可能比一天更好(特别是如果在午夜之前运行)。

表可以重复用于执行插入,更新等的其他批处理作业...以记录其他信息(处理的行数,受影响的行等等。)

插入/更新也可以集中在一个过程中(在包内?)。

答案 2 :(得分:0)

如果你想要直截了当,将所有选择设置在1个文件中,添加带有时间戳的dbms输出(以毫秒为单位)(或者只添加一些变量来实现)。或者像其他人说的那样,将时间戳添加到日志表中。