绑定完请刷新页面
取消
刷新

分享好友

×
取消 复制
后台进程的Library cache lock大量等待导致的Dbtime告警分析
2023-08-11 11:43:47

Library cache lock大量等待导致的Dbtime告警分析

1.       问题描述

84号晚812业务值班人员反应tjdm313 dbtime告警,百分比达到472%,持续时间1.5分钟。

 

 

2.       问题分析

2.1 收集ASH报告,确认当时等待事件

top events发现告警时刻只有library cache lock等待,占比到了99%,可以确定他导致了dbtime超过阈值。这个等待是Oracle内存保护机制的锁导致,也就是并发用户访问一块library cache但是这个cache被排他锁定,大量用户的等待积压,累积成严重的dbtime告警,但是具体是什么cache需要进一步分析。

下面看看该等待事件的p参数,其中p3表实锁模式和namespace,有助于我们分析问题。

 

下面我们看看这个参数的具体含义

SQL>  select to_char(8323074,'xxxxxxxxxxxx') from dual;

TO_CHAR(83230

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

7f0002

SQL> select to_number('7f','xxxxxx') from dual;

TO_NUMBER('7F','XXXXXX')

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

127

select distinct KGLHDNSP,KGLHDNSD from x$kglob where KGLHDNSP=127

KGLHDNSP KGLHDNSD

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

127 Last_Successful_Logon_Time

这里我们看到这个内存的跟记录用户后登录时间有关,我们推测当时应该是高并发登录数据库的操作,而Oracle的引擎需要将用户登录时间记录到内存字典中,而这个字典影响应该再内存里做更新,这个更新应该是串行操作,进而导致大量的library cache lock等待。进一步分析验证。

下面我们再看看涉及的service/module ,ASH报告知道此事的modulehttpd@TopEMM-2.localdomainTNS V1-V3

这里我们可以进一步推测,由于如此多的library cache 等待应该会造成用户连接的超时,所以alert日志中应该会有大量的连接中断记录

下面我们看监听日志,和alert日志。

监听日志,这里只截取了0.01秒的几个记录,连接异常的多,证明此时

发生连接风暴。这里省略截图。

告警日志,从17:58开始有连接断开,后续大量用户断开连接

我们通过Library cache lockLast_Successful_Logon_TimeMOS 找到一个二者关系的Doc

Bug 33121934 - Library cache lock / load lock / mutex x during connection storm due to update user$ (Doc ID 33121934.8)

在该文档中Oracle明确了在登录风暴时,由于要记录用户的后登录时间,需要更新user$表,此时会造成一系列等待,其中包括library cache lock.

Oracle的更新操作涉及如下语句

update user$ set spare6=DECODE(to_char(:2, 'YYYY-MM-DD'), '0000-00-00', to_date(NULL), :2) where user#=:1

(sql_id = 9zg9qd9bm4spu)

由于超时等待可以推测用连接会大量中断,下面是AWR中的report summary,可以说明问题。

这里发现用户连接和断开比较频繁,由于AWR统计时间粒度大,无法准确定位连接和断开数量,但是可以说明这个趋势,作为进一步定位问题的参考。

下面我们确认下连接的业务用户

这里省略查询 通过ash 和db_users查询定位连接用户

我们知道该用户是天融信互联网接入平台,也就是该用户的高并发导致了1.5分钟的超高dbtime告警。

2.2 如何解决该问题

方法1

需要补丁解决,Oracle在如下版本做了Fix

The fix for 33121934 is first included in  

21.7.0.0.220719 (July 2022) DB Release Update (DB RU)

19.16.0.0.220719 (July 2022) DB Release Update (DB RU)

19.15.1.0.220719 (July 2022) DB Release Update Revision(DB RUR)

19.14.2.0.220719 (July 2022) DB Release Update Revision(DB RUR)

方法2

修改隐藏参数禁止记录用户的后登录信息。优化LSLT的记录,但是目前我们Oracle版本只支持其中一个参数,修改如下

alter system set “_disable_last_successful_login_time”=true scope=spfile;

方法3:业务分析连接风暴原因,可以通过连接池限制数量。

 

 

 

3 结论

Secadmin用户高并发连接,触发bug导致Oracle引擎记录用户登录时间的library cache lock等待,短时的等待挤压导致dbtime超过阈值(百分比473%.

分享好友

分享这个小栈给你的朋友们,一起进步吧。

Oracle运维新鲜事-技术与管理各占半边天
创建时间:2020-08-04 11:34:57
本技术栈旨在分享技术心得,运维趣事,故障处理经验,调优案例,故障处理涉及集群,DG,OGG,大家生产中遇到的问题基本都会囊括了,我会发布生产库遇到的故障,希望在交流中互助互益,共同提高,也希望大家讨论,如果您有生产中遇到的集群问题,也可以在这里提出来,一起讨论,现实中也帮助不少同学解决了生产库的故障。
展开
订阅须知

• 所有用户可根据关注领域订阅专区或所有专区

• 付费订阅:虚拟交易,一经交易不退款;若特殊情况,可3日内客服咨询

• 专区发布评论属默认订阅所评论专区(除付费小栈外)

栈主、嘉宾

查看更多
  • Abraham林老师
    栈主
  • 小雨滴
    嘉宾
  • hawkliu
    嘉宾
  • u_97a59a25246404
    嘉宾

小栈成员

查看更多
  • 栈栈
  • dapan
  • 小菜鸟___
  • hwayw
戳我,来吐槽~