oracle系统繁忙时,快速定位
1 看现在的连接数
select count(*) from gv$session;
2 我们这里是bs架构,我们针对应用来看一下session的大致情况
2.1 执行的sql
select gs.inst_id,
gs.SID,
gvs.sql_text,
gs.SERIAL#,
gs.STATUS,
gs.EVENT,
gs.WAIT_CLASS,
gs.WAIT_TIME,
gs.SECONDS_IN_WAIT,
p.spid,
gs.logon_time
from gv$process p, gv$session gs
left join gv$sql gvs
on gs.sql_id = gvs.sql_id
where gs.PROGRAM = 'JDBC Thin Client'
and gs.paddr = p.ADDR;
说明:
1)State字段有四种含义﹕
(1)Waiting:SESSION正等待这个事件。
(2)Waited unknown time:由于设置了timed_statistics值为false,导致不能得到时间信息。表示发生了等待,但时间很短。
(3)Wait short time:表示发生了等待,但由于时间非常短不超过一个时间单位,所以没有记录。
(4)Waited knnow time:如果session等待然后得到了所需资源,那么将从waiting进入本状态。
2).Wait_time值也有四种含义:
(1)值>0:最后一次等待时间(单位:10ms),当前未在等待状态。
(2)值=0:session正在等待当前的事件。
(3)值=-1:最后一次等待时间小于1个统计单位,当前未在等待状态。
(4)值=-2:时间统计状态未置为可用,当前未在等待状态。
3).Wait_time和Second_in_wait字段值与state相关:
(1)如果state值为Waiting,那么wait_time值无用。Second_in_wait值是实际的等待时间(单位:秒)。
(2)如果state值为Wait unknow time,那么wait_time值和Second_in_wait值都无用。
(3)如果state值为Wait short time,那么wait_time值和Second_in_wait值都无用。
(4)如果state值为Waiting known time,那么wait_time值就是实际等待时间(单位:秒),Second_in_wait值无用。