故障描述

2022年7月16号早上9点49左右,客户jsbas生产库。客户反馈应用系统慢并且报超时错误; 后续反馈应用用户无法连接数据库,其他用户登录没问题。

这套RAC环境总共6个节点,上面运行5套数据库。 出问题的是jsbas数据库,jsbas数据库实例运行在节点3,4,5,6。其他数据库都正常。

临时处理方法

检查当前等待事件:
在这里插入图片描述

检查发现,大部分都是library cache lock等待事件,大概有1904个会话。
让客户杀掉会话,杀掉之后,随后又发起300多个会话。最后停掉实例5解决。

问题详细诊断过程

检查会话情况:
在这里插入图片描述

2022/7/16 9:14:22 到 2022/7/16 9:15:22 1分钟之内活动会话数从785增加到1524,增加739左右。

检查ash视图会话情况:

select a.INSTANCE_NUMBER,to_char(a.sample_time, 'yyyy-mm-dd hh24:mi:ss') as "DATE", 
session_id, 
session_serial#, a.USER_ID, sql_id, wait_time,a.P1,a.p1text,
       a.event,a.MACHINE,a.PROGRAM, a.BLOCKING_SESSION,a.BLOCKING_SESSION_SERIAL#,BLOCKING_INST_ID,BLOCKING_SESSION_STATUS
  from dba_hist_active_sess_history a
 where a.sample_time > to_date('2022-07-16 9:00:00', 'yyyy-mm-dd hh24:mi:ss')
   and a.sample_time < to_date('2022-07-16 9:15:00', 'yyyy-mm-dd hh24:mi:ss') order by to_char(a.sample_time, 'yyyy-mm-dd hh24:mi:ss');

在这里插入图片描述
在这里插入图片描述

从上面可以看出2022-07-16 09:14:53这个时间点,大概有70个活动会话,而且这些会话基本被其中几个会话阻塞。 被阻塞的会话等待事件:library cache lock SQL_ID为空; 阻塞会话的等待事件:Memory: Reg/Dereg SQL_ID为9zg9qd9bm4spu
检查阻塞会话sql文本:
在这里插入图片描述

完整语句为:update user$ set spare6=DECODE(to_char(:2, ‘YYYY-MM-DD’), ‘0000- 00-00’, to_date(NULL), :2) where user#=:1

这个update语句的作用是每当用户会话登录数据库,会话第一次访问数据库的时候记录用户的本次登录时间。对应的是DBA_USERS视图里面的LAST_LOGIN字段。

检查所有阻塞会话:
在这里插入图片描述

从上面可以发现,所有的阻塞会话为上面6个会话。

检查Memory: Reg/Dereg等待事件:
Mos上解释如下:
在这里插入图片描述

造成这个等待的原因是登录风暴,也就是高并发的登录数据库会导致这个等待事件。

检查library cache lock等待事件:
2022-07-16 09:14:53这个时间点,本次所有的library cache lock会话都被Memory: Reg/Dereg等待事件会话阻塞,可以判断这些library cache lock会话是登录会话,等待更新登录时间,也就是说上面70多个会话都是登录会话。
检查MOS(Doc ID 33121934.8)发现,update user$表确实会导致library cache lock 这个是oracle bug。oracle 12.1.0.2及以上版本,23.1以下都存在这个问题。

另外,检查受影响用户,除了JOUR用户,还有其他用户,如下所示:
在这里插入图片描述

上面都是应用用户,由于多个应用用户的阻塞会话正在执行update 登录时间,导致后面这些用户登录会话无法更新底层表的登录时间,所以无法连接数据库,而其他用户登录没问题。

总结,2022-07-16 09:14:53 时间点,应用会话暴增,70个用户会话(主要集中在jour用户)同时登录到数据库,导致触发oracle bug 无法及时更新用户登录时间。

解决办法和建议

  1. 建议应用查找2022-07-16 09:14:53 时间点,应用会话暴增的原因。
  2. 建议从应用角度控制每次并发的会话量。
  3. 可以考虑升级到19.14,19.15 ,然后可以打oracle bug补丁(不推荐)。

参考文档

Lots of “Memory: Reg/Dereg” waits or high CPU usage by IPC0 background process on Exadata (Doc ID 2832480.1)
Bug 33121934 - Library cache lock / load lock / mutex x during connection storm due to update user$ (Doc ID33121934.8)

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐