今天巡检一个数据库, 操作系统AIX里查看资源情况,内存使用维持在95%,cpu在90%,分页用了27% ,磁盘bisy在1%。查询select count(*) from v$session where status='ACTIVE‘ 发现有300多活动会话,平时就40,50个。真的吓我一跳。查看锁信息,没有锁。查看等待事件,
select sid,p1,p1raw,p2,p2raw,p3,p3raw,wait_time,seconds_in_wait,state,event
from v$session_wait where event not in (select name from v$event_name where wait_class='Idle');
发现300多个“cursor: pin S wait on X”事件。查看活动的会话,都是查的一张表infec表,LOGON_TIME 都在4月9号,还有一部分是4月10号,还有少些是4月24号的。今天都是4月24号了,这么早的会话还保持活动。原来该表是通过dblink查的别的数据库的表,而4月9号那个源库down过机器,这可能是导致会话一直没有释放的原因。
解决方法:把有问题的sesion查出来,杀掉。
kill session语句如下:
select 'ALTER SYSTEM KILL SESSION ''' || sid || ',' || serial# || ''';'
FROM (select DISTINCT s.sid AS sid, s.serial# AS serial#
from v$sqltext sq, v$session s
where sq.ADDRESS = s.SQL_ADDRESS
and sq.SQL_TEXT like '%INFEC%'
and s.STATUS = 'ACTIVE') P
杀掉这些会话,cpu,内存,分页使用率都降下来了。
总结:如果dblink源库down过,可能会导致当时的查询语句一直保持ACTIVE,必须检查和down库相关的数据库的会话,把这些hang住的会话杀掉。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/25027760/viewspace-722153/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/25027760/viewspace-722153/