ITPub博客

首页 > 数据库 > Oracle > oracle一次卡顿案例(三)

oracle一次卡顿案例(三)

原创 Oracle 作者:wanglinghua0907 时间:2024-01-10 15:39:59 0 删除 编辑

图片水印为本人在csdn账号

故障描述

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)


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69980685/viewspace-3003366/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
Oracle ACE、sql server、oceanbase数据库专家,拥有7年以上的大型数据库运维经验,主方向oracle,擅长故障排除、诊断,大体量(TB)迁移,异常故障修复等。拥有丰富主导大型项目经验。服务行业包括:运营商、银行、金融业、政府单位、医疗、制造业、高校等等。

注册时间:2020-07-31

  • 博文量
    116
  • 访问量
    88788