1、启用sql_trace
查询v$session视图获取进程信息
select sid,serial#,username from v$session where username is not null;
2、根据相应的应用会话,启用sql_trace跟踪
exec dbms_system.set_sql_trace_in_session(7,284,true);
exec dbms_system.set_sql_trace_in_session(11,214,true);
3、执行一段时间后,关闭sql_trace
exec dbms_system.set_sql_trace_in_session(7,284,false);
exec dbms_system.set_sql_trace_in_session(11,214,false);
4、检查trace文件,找到跟踪过程中前台执行的sql调用,
例如:以下语句可疑
select auditstatus,categoryid,auditlevel from categoryarticleassign a,category b where b.id=a.categoryid and articleId= 20030700400141 and auditstatus>0
call count cpu elapsed disk query current rows
------- ------ -------- ---------- ---------- ---------- ---------- ----------
Parse 1 0.00 0.00 0 0 0 0
Execute 1 0.00 0.00 0 0 0 0
Fetch 1 0.81 0.81 0 3892 0 1
------- ------ -------- ---------- ---------- ---------- ---------- ----------
total 3 0.81 0.81 0 3892 0 1
这里的查询显然是根据articleId进行新闻读取的,但是注意到逻辑读有3892,这是较高的一个数字
alter session set events '10046 trace name CONTEXT forever, level 1';
alter session set "_rowsrc_trace_level"=4;