V$SESSION_EVENT
SQL> desc v$session_event
Name Type
-------------------------------------------------
SID NUMBER
EVENT VARCHAR2(64)
TOTAL_WAITS NUMBER
TOTAL_TIMEOUTS NUMBER
TIME_WAITED NUMBER
AVERAGE_WAIT NUMBER
MAX_WAIT NUMBER
TIME_WAITED_MICRO NUMBER
EVENT_ID NUMBER
WAIT_CLASS_ID NUMBER
WAIT_CLASS# NUMBER
WAIT_CLASS VARCHAR2(64)
V$session_event对于查找某一个session的主要瓶颈非常有用,但是它对于查找根源并不很有帮助:
l V$session_event不跟踪产生瓶颈的SQL,例如你发现db file scattered read事件是你主要的瓶颈,但是不抓住执行全表扫描的SQL,一切还是徒劳;
l 还不能提供足够的证据来定位性能问题的根源。例如,所有的latch wait都会记入latch free事件,你并不清楚session所等待的究竟是什么latch。
MAX_WAIT纪录的是该Session对某一个时间的最大等待时间,即high-water mark of this wait event,不过oracle并不记录这个高点产生的时间。Oracle提供了一个内部过程dbms_system.kcfrms()可以reset所有session的MAX_WAIT列,另外,它也会reset v$filestat视图的maxiortm和maxiowtm。
V$SESSION_WAIT
SQL> desc v$session_wait
Name Type
---------------------- ----------------------------
SID NUMBER
SEQ# NUMBER
EVENT VARCHAR2(64)
P1TEXT VARCHAR2(64)
P1 NUMBER
P1RAW RAW(8)
P2TEXT VARCHAR2(64)
P2 NUMBER
P2RAW RAW(8)
P3TEXT VARCHAR2(64)
P3 NUMBER
P3RAW RAW(8)
WAIT_CLASS_ID NUMBER
WAIT_CLASS# NUMBER
WAIT_CLASS VARCHAR2(64)
WAIT_TIME NUMBER
SECONDS_IN_WAIT NUMBER
STATE VARCHAR2(19)
当得知某个正在运行的应用有问题时查询v$session_wait最有用,由于这个视图是实施刷新的,你只需要重复查询这个视图,如果查询结果不停的变换,用户一直都在经历不同的wait event,说明应用正在运行,如果应用持续的等候同一个事件,那就意味着这个session处于idle状态或者正在等待某个资源,如lock、latch等。
V$session_wait提供的是实时地数据,10g开始,历史数据可以从v$session_wait_history获取。
STATE字段共有4个状态:
STATE状态 | 状态说明 | WAIT_TIME值 |
WAITED UNKNOWN TIME | TIMED_STATISTICS为FALSE | -2 |
WAITED SHORT TIME | 前一个等待的时间<1 centisecond | -1 |
WAITING | 正处于等待状态,实际的等待时间在SECONDS_IN_WAIT中有记录; Seconds_in_wait的单位是秒;wait_time的单位是毫秒 | 0 |
WAITED KNOWN TIME | Oracle is able to determine the duration of the last wait | 等待的时间(单位:centisecond) |
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/55472/viewspace-425559/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/55472/viewspace-425559/