假设Web应用程序中的操作导致相同的数据库查询执行6次。
如果我想找出6个查询的开始时间以及它们在每种情况下花了多长时间,有没有办法从Oracle数据库中执行此操作?或者我错过了一些配置?
我已经检查了v $ sql,但我的实验表明它没有记录单个执行的详细信息。
答案 0 :(得分:1)
有一些选择。 1)您可以使用 LOGON TRIGGER 来启用跟踪
create or replace trigger traceme after logon on database
begin
for tr in (
select * from (
select sid,serial# serial
from v$session
where username = user /* put here your program name or machine name, check v$session view for detail */
order by logon_time desc
) where rownum < 2
) loop
dbms_system.set_ev(tr.sid,tr.serial,10046,8,'');
end loop;
end;
/
运行会话后找到跟踪文件并使用TKPROFF / ORASRP等进行分析... 另一个,使用ASH(不是AWR !!!)报告!
如果您没有安装dbconsole或OEM,可以使用相当不错的Oracle SQLDevleoper: