最近在弄informix,oracle调优也好久没碰了,今天朋友问我v$active_session_history的wait_time和time_waited 怎么看,只记得用过,一下也没想起。连忙验证了下
wait_time 这列,对于在采样时,正在等待的事件,该列为0。对应session_state列。不为0的行是在进行CPU
time_waited这列,是这次等待的等待时间,如果该种类的等待的时间的超时时间大于1秒,那么如果等待了超过了1秒,本次采样的time_waited为0,在最后一次采样到该等待时,置上等待时间。单位百万分之一秒。也就是说,time_waited为0的行也不用看,因为等待时候在后面会体现,其和最后的行是同一次等待。
下面是以前用过的一个SQL
SELECT EVENT,
COUNT(*) TOTAL_WAITS,
TRUNC(SUM(TIME_WAITED) / 1000000) SECONDS_IN_WAIT
FROM V$ACTIVE_SESSION_HISTORY
WHERE SESSION_STATE = 'WAITING'
AND TIME_WAITED > 0
AND SAMPLE_ID BETWEEN 1800000 AND 2000000
AND SESSION_ID = 144
AND SQL_ID = 'cgb71p2hy4zfj'
GROUP BY EVENT
其实v$active_session_history就是一个语句在运行中遇到的所有等待的统计,可以一定程度上代替10046来查看SQL遭遇的等待