我想知道我的Java程序的计数和执行时间总共执行了多少查询(我没有源代码)。
我打算编写加入gv$session
和gv$sql
的PL / SQL,将输出记录到其中一个表中。程序执行结束后,我将查询表以获取更多详细信息。
但是我想知道Oracle是否有任何默认实用程序来获取类似的报告?我正在查看针对Oracle的AWR报告,但没有获得相同的简单文档。
答案 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;