oracle WAITED TOO LONG FOR A ROW CACHE ENQUEUE LOCK问题分析

news2024/11/25 9:29:39
  • 服务概述

财务系统出现业务卡顿,数据库实例2遇到>>> WAITED TOO LONG FOR A ROW CACHE ENQUEUE LOCK! <<<错误导致业务HANG住。

对此HANG的原因进行分析:

故障发生时,未有主机监控数据,从可以获取的数据库AWR中,可以发现在故障发生前一小时,已经出现有较多cursor: pin S wait on X Latch: row cache objects等待;而从AWR报告中也可以看到问题时段的shared pool 从4800M收缩为了2900M,查看SGA组件变动使用情况,可以发现将近2个GB是被KGH: NO ACCESS所使用,即处于shrik/grow的中间状态。

此时ALERT日志中开始出现有>>> WAITED TOO LONG FOR A ROW CACHE ENQUEUE LOCK! <<<错误,查看此时的System State dumped TRACE文件,核心进程在等待latch: row cache objects资源,根据故障时ALERT日志中systemstate dump prod2_ora_3191.trc信息来看,以典型的LCK0进程为例,此进程在等待和kghfrunp(释放shared pool中内存)有关的latch,此进程的历史等待事件中也大量存在'latch: shared pool'、latch: row cache objects;kghfrunp(kghfrunp相关的功能是需要从shared pool中释放空间相关)有关的latch。综合考虑,从现在得到的信息来看,很可能发生问题时shared pool的使用出现了问题。

  • RAC数据库实例HANG分析

4.1 数据库实例日志的分析

4.1.1故障节点数据库实例Alert日志

节点1数据库实例的Alert日志

Fri May 31 12:11:03 2019

Incremental checkpoint up to RBA [0x16b38.55e5.0], current log tail at RBA [0x16b38.7949.0]

Fri May 31 12:31:15 2019

Incremental checkpoint up to RBA [0x16b38.d76f.0], current log tail at RBA [0x16b38.d7a1.0]

Fri May 31 12:38:24 2019

GES: Potential blocker (pid=4099) on resource CI-0000001E-00000002;

 enqueue info in file /oracle/product/10.2.0/db/rdbms/log/prod2_lmd0_3768.trc and DIAG trace file

Fri May 31 12:49:04 2019

Beginning log switch checkpoint up to RBA [0x16b39.2.10], SCN: 6163266145639

Thread 2 advanced to log sequence 92985

  Current log# 8 seq# 92985 mem# 0: +CWDATA/prod/onlinelog/group_8.525.896335299

  Current log# 8 seq# 92985 mem# 1: +CWDATA/prod/onlinelog/group_8.628.896335301

Fri May 31 12:49:09 2019

LNS: Standby redo logfile selected for thread 2 sequence 92985 for destination LOG_ARCHIVE_DEST_2

Fri May 31 12:49:09 2019

Completed checkpoint up to RBA [0x16b39.2.10], SCN: 6163266145639

Fri May 31 12:51:21 2019

Incremental checkpoint up to RBA [0x16b39.19.0], current log tail at RBA [0x16b39.19.0]

Fri May 31 12:54:11 2019

GES: Potential blocker (pid=4099) on resource CI-00000046-00000002;

 enqueue info in file /oracle/product/10.2.0/db/rdbms/log/prod2_lmd0_3768.trc and DIAG trace file

Fri May 31 13:02:58 2019

GES: Potential blocker (pid=3991) on resource DR-00000000-00000000;

 enqueue info in file /oracle/product/10.2.0/db/rdbms/log/prod2_lmd0_3768.trc and DIAG trace file

Fri May 31 13:11:23 2019

Incremental checkpoint up to RBA [0x16b39.e1.0], current log tail at RBA [0x16b39.e1.0]

Fri May 31 13:14:13 2019

GES: Potential blocker (pid=4099) on resource CI-0000001E-00000002;

 enqueue info in file /oracle/product/10.2.0/db/rdbms/log/prod2_lmd0_3768.trc and DIAG trace file

Fri May 31 13:25:34 2019

>>> WAITED TOO LONG FOR A ROW CACHE ENQUEUE LOCK! pid=287

System State dumped to trace file /oracle/product/10.2.0/db/rdbms/log/prod2_ora_3191.trc

Fri May 31 13:31:25 2019

Incremental checkpoint up to RBA [0x16b39.1ad.0], current log tail at RBA [0x16b39.1ad.0]

Fri May 31 13:33:01 2019

WARNING: inbound connection timed out (ORA-3136)

Fri May 31 13:33:01 2019

WARNING: inbound connection timed out (ORA-3136)

Fri May 31 13:33:01 2019

WARNING: inbound connection timed out (ORA-3136)

对故障时间段的alert日志进行分析,可以发现当时节点1的ALERT日志中出现大量如下告警信息:

>>> WAITED TOO LONG FOR A ROW CACHE ENQUEUE LOCK! pid=***

4.2 对dump信息的分析

节点2的ALERT日志中提到了大量System State dumped文件,对此类TRACE文件进行了分析。如下:

使用发生问题后产生的systemstate dump prod2_ora_3191.trc

[oracle@bys1 ~]$ awk -f ass109.awk prod2_ora_3191.trc



Starting Systemstate 1

.............................................

Ass.Awk Version 1.0.9 - Processing prod2_ora_3191.trc



System State 1

~~~~~~~~~~~~~~~~

1:                                      

2:  waiting for 'pmon timer'            wait

3:  waiting for 'DIAG idle wait'        wait

4:  waiting for 'rdbms ipc message'     wait

5:  waiting for 'rdbms ipc message'     wait

6:  waiting for 'ges remote message'    wait

7:  waiting for 'gcs remote message'    wait

8:  waiting for 'gcs remote message'    wait

9:  waiting for 'gcs remote message'    wait

10: waiting for 'gcs remote message'    wait

11: waiting for 'gcs remote message'    wait

12: waiting for 'gcs remote message'    wait

13: waiting for 'gcs remote message'    wait

14: waiting for 'gcs remote message'    wait

15: waiting for 'gcs remote message'    wait

16: waiting for 'gcs remote message'    wait

17: waiting for 'gcs remote message'    wait

18: waiting for 'gcs remote message'    wait

19: waiting for 'gcs remote message'    wait

20: waiting for 'gcs remote message'    wait

21: waiting for 'gcs remote message'    wait

22: waiting for 'gcs remote message'    wait

23: waiting for 'gcs remote message'    wait

24: waiting for 'gcs remote message'    wait

25: waiting for 'gcs remote message'    wait

26: waiting for 'gcs remote message'    wait

27: waiting for 'rdbms ipc message'     wait

28: waiting for 'rdbms ipc message'     wait

29: waiting for 'rdbms ipc message'     wait

30: waiting for 'rdbms ipc message'     wait

31: waiting for 'rdbms ipc message'     wait

32: waiting for 'rdbms ipc message'     wait

33: waiting for 'rdbms ipc message'     wait

34: waiting for 'rdbms ipc message'     wait

35: waiting for 'rdbms ipc message'     wait

36: waiting for 'rdbms ipc message'     wait

37: waiting for 'rdbms ipc message'     wait

38: waiting for 'rdbms ipc message'     wait

39: waiting for 'rdbms ipc message'     wait

40: waiting for 'latch: row cache objects'[Latch 33a5d5bd0] wait

41: waiting for 'cursor: pin S wait on X' wait

42: waiting for 'latch: shared pool'   [Latch 33ba89b70] wait

43: waiting for 'rdbms ipc reply'       wait

44: waiting for 'rdbms ipc message'     wait

45: waiting for 'latch: row cache objects'[Latch 33a5d5bd0] wait

Blockers

~~~~~~~~



        Above is a list of all the processes. If they are waiting for a resource

        then it will be given in square brackets. Below is a summary of the

        waited upon resources, together with the holder of that resource.

        Notes:

        ~~~~~

         o A process id of '???' implies that the holder was not found in the

           systemstate.



                    Resource Holder State

             Latch 33a5d5bd0    ??? Blocker

             Latch 33ba89b70    ??? Blocker



Object Names

~~~~~~~~~~~~

Latch 33a5d5bd0 Child row cache objects       

Latch 33ba89b70 Child library cache           





167446 Lines Processed.

 latch: row cache objects等待具体信息


LCK0进程在等待和kghfrunp(释放shared pool中内存)有关的latch,此进程的历史等待事件中也大量存在'latch: shared pool'latch: row cache objects
 

PROCESS 45:

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

  SO: 0x357240660, type: 2, owner: (nil), flag: INIT/-/-/0x00

  (process) Oracle pid=45, calls cur/top: 0x33472fae8/0x33472fae8, flag: (6) SYSTEM

            int error: 0, call error: 0, sess error: 0, txn error 0

  (post info) last post received: 0 0 24

              last post received-location: ksasnd

              last process to post me: 35224fdd8 39 0

              last post sent: 0 0 87

              last post sent-location: kjmdrmchk: drm_hb ack

              last process posted by me: 355269da8 1 6

    (latch info) wait_event=0 bits=0

        Location from where call was made: kqrbip:

      waiting for 33a5d5bd0 Child row cache objects level=4 child#=16

        Location from where latch is held: kghfrunp: clatch: wait:  ====>>> 可以看到这个latch是因为kghfrunp(KGH: Ask client to free unpinned space)相关的功能发起的,而这个功能是需要从shared pool中释放空间有关

        Context saved from call: 0

        state=busy, wlstate=free

          waiters [orapid (seconds since: put on list, posted, alive check)]:

           50 (1, 1559280342, 1)

           45 (1, 1559280342, 1)

           waiter count=2

          gotten 540727585 times wait, failed first 2224239 sleeps 386931

          gotten 3781484 times nowait, failed: 419225

        possible holder pid = 223 ospid=30412

      on wait list for 33a5d5bd0

    Process Group: DEFAULT, pseudo proc: 0x3552a2308

    O/S info: user: oracle, term: UNKNOWN, ospid: 4099

    OSD pid info: Unix process pid: 4099, image: oracle@findbb (LCK0)

    Short stack dump: ksdxfstk()+32<-ksdxcb()+1547<-sspuser()+111<-<0x311720eb10>

此进程的历史等待事件:    

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

    SO: 0x3553c5998, type: 4, owner: 0x357240660, flag: INIT/-/-/0x00

    (session) sid: 1537 trans: (nil), creator: 0x357240660, flag: (51) USR/- BSY/-/-/-/-/-

              DID: 0000-002D-00000003, short-term DID: 0000-0000-00000000

              txn branch: (nil)

              oct: 0, prv: 0, sql: (nil), psql: (nil), user: 0/SYS

    waiting for 'latch: row cache objects' blocking sess=0x(nil) seq=30395 wait_time=0 seconds since wait started=0

                address=33a5d5bd0, number=c7, tries=2

    Dumping Session Wait History

     for 'latch: row cache objects' count=1 wait_time=41

                address=33a5d5bd0, number=c7, tries=1

     for 'latch: row cache objects' count=1 wait_time=422982

                address=33a5d5bd0, number=c7, tries=0

     for 'latch: shared pool' count=1 wait_time=28

                address=600ebf80, number=d5, tries=0

     for 'latch: shared pool' count=1 wait_time=57

                address=600ebf80, number=d5, tries=0

     for 'latch: row cache objects' count=1 wait_time=135277

                address=33a5d5bd0, number=c7, tries=0

     for 'latch: shared pool' count=1 wait_time=29

                address=600ebf80, number=d5, tries=1

     for 'latch: shared pool' count=1 wait_time=37

                address=600ebf80, number=d5, tries=0

     for 'latch: shared pool' count=1 wait_time=78

                address=600ebf80, number=d5, tries=0

     for 'latch: row cache objects' count=1 wait_time=47585

                address=33a5d5bd0, number=c7, tries=0

     for 'latch: row cache objects' count=1 wait_time=45842

                address=33a5d5bd0, number=c7, tries=0

    temporary object counter: 0

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

      UOL used : 0 locks(used=0, free=0)

      KGX Atomic Operation Log 0x35afaaab8

       Mutex (nil)(0, 0) idn 7fff00000000 oper NONE

       Cursor Pin uid 1537 efd 3 whr 11 slp 0

      KGX Atomic Operation Log 0x35afaab00

       Mutex (nil)(0, 0) idn 7fff00000000 oper NONE

       Library Cache uid 1537 efd 0 whr 0 slp 0

      KGX Atomic Operation Log 0x35afaab48

       Mutex (nil)(0, 0) idn 7fff00000000 oper NONE

       Library Cache uid 1537 efd 0 whr 0 slp 0

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

      SO: 0x33c58c458, type: 41, owner: 0x3553c5998, flag:

4.3 数据库AWR信息分析

数据库实例在11点时已经HANG住,未生成AWR快照。因此使用9-10点的快照来查看故障发生前是否存在异常。

  

 

从AWR可以看到shared pool 从4800M收缩为了2900M,查看SGA组件变动使用情况,可以发现将近2个GB是被KGH: NO ACCESS所使用,即处于shrik/grow的中间状态。

  • 总结与建议

针对此次RAC数据库实例问题,总结及建议如下:

5.1 问题描述与分析

此套RAC上运行的数据库实例,数据库版本为10.2.0.3.0;

其中数据库实例2遇到>>> WAITED TOO LONG FOR A ROW CACHE ENQUEUE LOCK! <<<错误导致业务HANG住。

对此HANG的原因进行分析:

故障发生时,未有主机监控数据,从可以获取的数据库AWR中,可以发现在故障发生前一小时,已经出现有较多cursor: pin S wait on X Latch: row cache objects等待;而从AWR报告中也可以看到问题时段的shared pool 从4800M收缩为了2900M,查看SGA组件变动使用情况,可以发现将近2个GB是被KGH: NO ACCESS所使用,即处于shrik/grow的中间状态。

此时ALERT日志中开始出现有>>> WAITED TOO LONG FOR A ROW CACHE ENQUEUE LOCK! <<<错误,查看此时的System State dumped TRACE文件,核心进程在等待latch: row cache objects资源,根据故障时ALERT日志中systemstate dump prod2_ora_3191.trc信息来看,以典型的LCK0进程为例,此进程在等待和kghfrunp(释放shared pool中内存)有关的latch,此进程的历史等待事件中也大量存在'latch: shared pool'、latch: row cache objects;kghfrunp(kghfrunp相关的功能是需要从shared pool中释放空间相关)有关的latch。综合考虑,从现在得到的信息来看,很可能发生问题时shared pool的使用出现了问题。

5.2 后续处理方法与建议

1. 数据库SGA内存参数的优化

当前节点1主机内存大小为32GB,节点2由于更换过硬件设备,内存为128GB。

因此之前出于两节点参数统一未对节点2的内存参数进行增加,使用的是sga_target= 12884901888,即12GB。

建议将两节点内存统计设置为SGA设置为节点1内存的一半大小,即16GB。(注意此操作需要重启数据库需要安排停机维护时间窗口进行

2.数据库buffer cache及shared pool组件优化

建议设置最小的buffer cache及shared pool的值

这是用来设置下限值,使SGA自动管理时不会调整到低于此值。具体值应结合历史AWR报告中Report Summary部分的Cache Sizes大小及Advisory Statistics 部分建议的 Buffer Pool Advisory/Shared Pool Advisory值。使用的命令如下:(注意在非业务高峰时或安排停机维护时间窗口进行

SQL> ALTER SYSTEM SET DB_CACHE_SIZE=n SCOPE=SPFILE;

SQL> ALTER SYSTEM SET SHARED_POOL_SIZE=m SCOPE=SPFILE;

建议可以设置为BUFFER CACHE 10GB,SHARED POOL 5GB。

3.关闭DRM相关参数

10G

    _gc_affinity_time=0  

    _gc_undo_affinity=FALSE  

这2个参数是静态参数,也就是说必须要重启实例才能生效。

实际上可以设置另外2个动态的隐含参数,来达到这个目的。按下面的值设置这2个参数之后,不能完全算是禁止/关闭了DRM,而是从”事实上“关闭了DRM。

--可以设置更高的值。

    _gc_affinity_limit=250  

    _gc_affinity_minimum=10485760  

alter system set "_gc_affinity_limit"=250;

alter system set "_gc_affinity_minimum"=10485760;

甚至可以将以上2个参数值设置得更大。这2个参数是立即生效的,在所有的节点上设置这2个参数之后,系统不再进行DRM。

4.建议继续加强对于RAC集群、数据库运行情况、主机资源使用的监控。再次出现类似异常时可以手动收集HANG和Systemstate dump信息来辅助分析,以协助排查。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/566492.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

c++ 11标准模板(STL) std::map(三)

定义于头文件<map> template< class Key, class T, class Compare std::less<Key>, class Allocator std::allocator<std::pair<const Key, T> > > class map;(1)namespace pmr { template <class Key, class T, clas…

使用Linkage Mapper工进行物种分布建模的步骤详解(含实际案例分析)

✅创作者:陈书予 🎉个人主页:陈书予的个人主页 🍁陈书予的个人社区,欢迎你的加入: 陈书予的社区 🌟专栏地址: Linkage Mapper解密数字世界链接 文章目录 引言:一、介绍二、数据准备2.1 物种分布数据获取2.2 环境变量数据获取2.3 数据预处理

【拼多多API 开发系列】百亿补贴商品详情接口,代码封装

为了进行电商平台 PDD 的API开发&#xff0c;首先我们需要做下面几件事情。 1&#xff09;开发者注册一个账号 2&#xff09;然后为每个 PDD 应用注册一个应用程序键&#xff08;App Key) 。 3&#xff09;下载 PDD API的SDK并掌握基本的API基础知识和调用 4&#xff09;利用SD…

CSS布局:浮动与绝对定位的异同点

CSS布局&#xff1a;浮动与绝对定位的异同点_cherry_vincent的博客-CSDN博客 浮动 ( float ) 和绝对定位 ( position:absolute ) 相同点&#xff1a; &#xff08;1&#xff09;都是漂起来( 离开原来的位置 ) &#xff08;2&#xff09;并且都不占着原来的位置 &#xff08;3…

Flutter 笔记 | Flutter 布局组件

布局类组件都会包含一个或多个子组件&#xff0c;布局类组件都是直接或间接继承SingleChildRenderObjectWidget 和MultiChildRenderObjectWidget的Widget&#xff0c;它们一般都会有一个child或children属性用于接收子 Widget。 不同的布局类组件对子组件排列&#xff08;layo…

企业级WordPress开发 – 创建企业级网站的优秀提示

目录 “企业级”是什么意思&#xff1f; 使用WordPress创建企业级网站有什么好处&#xff1f; 使用 WordPress 进行企业开发的主要好处 WordPress 可扩展、灵活且价格合理 WordPress 提供响应式 Web 开发 WordPress 提供了巨大的可扩展性 不断更新使 WordPress 万无一…

JAVA-创建PDF文档

目录 一、前期准备 1、中文字体文件 2、maven依赖 二、创建PDF文档方法 三、通过可填充PDF模板将业务参数进行填充 1、 设置可填充的PDF表单 2、代码开干&#xff0c;代码填充可编辑PDF并另存文件 一、前期准备 1、中文字体文件 本演示使用的是iText 7版本&#xff0c…

Jeddak-DPSQL 首次开源!基于差分隐私的 SQL 代理保护能力

动手点关注 干货不迷路 ‍ ‍1. 背景 火山引擎对于用户敏感数据尤为重视&#xff0c;在火山引擎提供的数据分析产品中&#xff0c;广泛采用差分隐私技术对用户敏感信息进行保护。此类数据产品通常构建于 ClickHouse 等数据引擎之上&#xff0c;以 SQL 查询方式来执行计算逻辑&a…

【计算机网络复习】第六章 关系数据理论 1

关系模式的设计 按照一定的原则从数量众多而又相互关联的数据中&#xff0c;构造出一组既能较好地反映现实世界&#xff0c;而又有良好的操作性能的关系模式 ●冗余度高 ●修改困难 ●插入问题 ●删除问题 ★产生问题的原因 属性间约束关系&#xff08;即数据间的依赖关系&…

【JavaSE】Java基础语法(十):构造方法

文章目录 ⛄1. 构造方法的格式和执行时机⛄2. 构造方法的作用⛄3. 构造方法的特点⛄4. 构造方法的注意事项⛄5. 构造方法为什么不能被重写 在面向对象编程的思想中&#xff0c;构造方法&#xff08;Constructor&#xff09;是一个特殊的函数&#xff0c;用于创建和初始化类的对…

“数字”厨电成新宠?“传统”厨电如何凭实力年销破百亿?|厨房电器SMI社媒心智品牌榜

Social Power 核心解读 AI加持&#xff0c;数字厨电新物种持续走红 传统厨电发力社媒&#xff0c;“有范儿”实力吸睛 4月中下旬的“魔都”可谓热闹非凡&#xff0c;上海车展喧嚣未落&#xff0c;隔壁2023AWE&#xff08;中国家电及消费电子博览会&#xff09;的群雄逐鹿紧随…

Electron 小白介绍,你能看懂吗?

目录 前言一、Electron是什么1.官网介绍2.小白介绍 二、Electron开发了哪些应用三、Electron的优势在哪里1.优势2.带给我们什么优势 四、Electron如何学习1.前置知识2.学习建议 五、Electron的乐趣总结 前言 在最近的学习中&#xff0c;我接触了 Electron 这个前端框架&#x…

总结加载Shellcode的各种方式(更新中!)

1.内联汇编加载 使用内联汇编只能加载32位程序的ShellCode&#xff0c;因为64位程序不支持写内联汇编 #pragma comment(linker, "/section:.data,RWE") //将data段的内存设置成可读可写可执行 #include <Windows.h>//ShellCode部分 unsigned char buf[] &qu…

Hadoop的基础操作

Hadoop的基础操作 HDFS是Hadoop的分布式文件框架&#xff0c;它的实际目标是能够在普通的硬件上运行&#xff0c;并且能够处理大量的数据。HDFS采用主从架构&#xff0c;其中由一个NameNode和多个DataNode NameNode负责管理文件系统的命名空间和客户端的访问DataNode负责存储实…

企业为什么要做数字化转型,应该如何进行转型?

企业需要数字化转型才能在当今快速发展的商业环境中保持竞争力和相关性。数字化转型涉及利用数字技术和战略从根本上改变企业的运营方式、为客户创造价值并实现他们的目标。以下是企业进行数字化转型的一些关键原因&#xff1a; 提高运营效率&#xff1a;数字技术可实现自动化、…

如何使用ArcGIS标注上下标

&#xff08;本文首发于“水经注GIS”公号&#xff0c;关注公号免费领取地图数据&#xff09; 在某些情况下除了需要普通的标注之外还需要上下标注&#xff0c;对于这一需求&#xff0c;ArcGIS是支持的&#xff0c;这里为大家介绍一下ArcGIS标注上下标的方法&#xff0c;希望能…

初阶数据结构之栈的实现(五)

文章目录 &#x1f60f;专栏导读&#x1f916;文章导读&#x1f640;什么是栈&#xff1f;&#x1f640;画图描述 &#x1f633;栈的代码实现及其各类讲解&#x1f633;栈的初始化代码实现及其讲解&#x1f633;栈的初始化 &#x1f633;栈的销毁代码实现及其讲解&#x1f633;…

【面试题】2023vue面试题

大厂面试题分享 面试题库 前后端面试题库 &#xff08;面试必备&#xff09; 推荐&#xff1a;★★★★★ 地址&#xff1a;前端面试题库 web前端面试题库 VS java后端面试题库大全 1、说说你对 SPA 单页面的理解&#xff0c;它的优缺点分别是什么&#xff1f; SPA&#xf…

【运维知识进阶篇】集群架构-Nginx高可用Keepalived

高可用是指2台机器启动着完全相同的业务系统&#xff0c;一台机器宕机后&#xff0c;另一台可以快速启用&#xff0c;用户是无感知的。高可用硬件通常使用F5&#xff0c;软件通常使用keepalived。keepalived软件是基于VRRP协议实现的&#xff0c;VRRP虚拟路由冗余协议&#xff…

详解Node.js开发中不可或缺的7个库

在Node.js开发中&#xff0c;选择合适的库对于提高开发效率和优化应用程序性能至关重要。本文将介绍七个备受关注的Node.js库&#xff0c;它们在各自的领域中展现了出色的功能和性能。这些库分别是&#xff1a;Config、Fetch、Ioredis、Multer、Cache、Fast-xml-parser和Cron。…