oracle一次卡顿案例(三)-library cache lock
2022-07-16 09:14:53这个时间点,本次所有的library cache lock会话都被Memory: Reg/Dereg等待事件会话阻塞,可以判断这些library cache lock会话是登录会话,等待更新登录时间,也就是说上面70多个会话都是登录会话。上面都是应用用户,由于多个应用用户的阻塞会话正在执行update 登录时间,导致后面这些用户登录会话无法更新底层表的登录时间
故障描述
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 无法及时更新用户登录时间。
解决办法和建议
- 建议应用查找2022-07-16 09:14:53 时间点,应用会话暴增的原因。
- 建议从应用角度控制每次并发的会话量。
- 可以考虑升级到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)

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