Oracle技术之大量会话出现resmgr:become active等待

2014-11-24 17:54:43 · 作者: · 浏览: 1

在一个客户环境的数据库上发现这个问题。


当时客户求助,数据库状态不正常,连接到数据库无法正常操作,而且有时报错ORA-12537错误。


ORA-12537: TNS:connection closed


Cause: "End of file" condition has been reached; partner has disconnected.


Action: None needed; this is an information message.


导致这个错误的原因有很多,不好确定问题的原因,于是通过远程登陆数据库检查系统状态:


SQL> select count(*) from v$session;


COUNT(*)


----------


996


SQL> select event, count(*) from v$session group by event having count(*) > 10 order by 2 desc ;


EVENT COUNT(*)


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


resmgr:become active 968


rdbms ipc message 12


数据库中会话数接近1000,而根据客户描述,正常情况下,连接数不到100。更奇怪的是,几乎所有的会话都在等待resmgr:become active这个事件。


根据事件名称就可以知道,这是一个资源管理区相关的等待事件,查询了一下metalink,发现如果系统资源管理区设置为INTERNAL_QUIESCE的状态,则所有SYS和SYSTEM以外的用户将处于这个等待事件,而无法进行任何的操作。Metalink文档ID 396970.1描述了这个现象。


但是,当前有几点和问题描述有所区别。首先,一般在进入WEEKNIGHT_WINDOW或WEEKEND_WINDOW窗口可能导致这个现象,而用户出现问题时是下午,因此排除了切换窗口导致资源管理器设置为INTERNAL_QUIESCE的可能性。第二,当发现等待事件为resmgr:become active后,当时就查询了v$rsrc_plan视图,结果为空,说明当前系统并没有设置资源管理策略。


虽然问题的真正原因还不是很清楚,不过解决这个问题并不复杂,虽然用户默认resource_manager_plan参数为空,但是Oracle内部仍然可能自动使用资源管理器,因此可以通过隐含参数来禁止资源管理器的启动:


设置初始化参数"_resource_manager_always_on"=false后,重启数据库,这个问题没有再出现。