具有计数和执行时间的Oracle总查询执行(对于Java程序)

时间:2011-05-22 18:02:48

标签: java performance oracle plsql

我想知道我的Java程序的计数和执行时间总共执行了多少查询(我没有源代码)。

我打算编写加入gv$sessiongv$sql的PL / SQL,将输出记录到其中一个表中。程序执行结束后,我将查询表以获取更多详细信息。

但是我想知道Oracle是否有任何默认实用程序来获取类似的报告?我正在查看针对Oracle的AWR报告,但没有获得相同的简单文档。

1 个答案:

答案 0 :(得分:2)

我会去

DBMS_SESSION.SESSION_TRACE_ENABLE (waits => true);

在数据库服务器上,您将获得一个文件(在v $ parameter中由user_dump_dest指示的目录中),该文件将包含一个跟踪。

通过tkprof实用程序(数据库服务器上的数据库实用程序)运行该跟踪,它将为您提供所有SQL,执行的次数,执行的时间以及时间的细分花在了。

v $ sql(或RAC的gv $ sql)的缺点是(1)某些查询可能会老化,特别是对于长时间运行的进程以及(2)如果你不喜欢其他会话的潜在“干扰”拥有对DB的独占访问权。

如果你不想进入文件,从v $ session你也可以深入到v $ sessstat和v $ session_event,这可以提供一些有用的花絮。

select event, sum(round(time_waited/(100*60),2)) time_mins, wait_class
from v$session_event
where sid in (221)
group by event, wait_class
order by 2 desc;

select sid, name, value from v$sesstat s 
  join v$statname n on n.statistic# = s.statistic#
where s.sid in (221)
and name in ('consistent gets','sorts (rows)','execute count',
        'parse count (total)','user calls','user commits','user rollbacks'
order by value desc;