日期:2014-05-16  浏览次数:20505 次

如何追踪其他SESSION会话信息

?

今天测试说在加载条目数据、校验数据和质检数据的时候很慢,但是又不知道这些操作的具体SQL是什么,很难分析,应用程序用的是weblogic中间件,session很难跟踪,只好追踪整个库的会话情况,由于整库跟踪需要前台只有一个人操作,跟踪结果才准确,如果多人操作,对跟踪结果会有影响,需要和测试人员约好时间,目前还未开始正式测试性能,所以以下操作都是在本人电脑上实验。

利用dbms_monitor追踪SESSION,如果在程序里指定CLIENT_ID,追踪起来相对简单些,可以使用CLIENT_ID_STAT_ENABLE来追踪,但是程序别没有指定,那么追踪单个SESSION的信息,就需要用SESSION_TRACE_ENABLE来追踪,但是WEBLOGIC连接池很可能连接数据库的不是同一个SESSION,没法确定SIDSERIAL#,也没法使用,只好使用DATABASE_TRACE_ENABLE进行整个数据库的跟踪,下面分别对SESSION_TRACE_ENABLEDATABASE_TRACE_ENABLE进行演示。

首先演示利用SESSION_TRACE_ENABLE追踪SESSION的用法,首先需要查到要追踪会话的SIDSERIAL#

SQL> select sid, serial# from v$session where sid in (select sid from

??2? v$mystat where rownum = 1);

?????? SID??? SERIAL#

---------- ----------

?????? 144??????? ??5

???????? 启动会话跟踪。

SQL> exec dbms_monitor.session_trace_enable(144, 5, true, true);

PL/SQL 过程已成功完成。

???????? 做一些操作,让dbms_monitor追踪到。

SQL> select count(*) from user_objects;

? COUNT(*)

----------

??????? 52

SQL> select count(*) from tab;

? COUNT(*)

----------

??????? 34

????????