等待事件 ‘latch: row cache objects‘ 说明及解决方法

早上刚来的时候,收到zabbix 数据库连接数增长的告警,同时应用负责人也说查询很慢、很卡

查看该时间段 最多的等待事件

SELECT event,COUNT(1) num

  FROM V$ACTIVE_SESSION_HISTORY A

WHERE A.SAMPLE_TIME BETWEEN

       TO_DATE('2025-01-02 09:00:00', 'YYYY-MM-DD HH24:MI:SS') AND

       TO_DATE('2025-01-02 11:00:00', 'YYYY-MM-DD HH24:MI:SS')

GROUP BY event order by 2 desc;

Latch属于System Lock, 用于保护SGA区中共享数据结构的一种串行化锁定机制。Latch的实现是与操作系统相关的,尤其和一个进程是否需要等待一个latch、需要等待多长时间有关。

Latch是Oracle提供的轻量级锁资源,是一种能够极快地被获取和释放的锁,能快速,短时间的锁定资源,防止多个并发进程同时修改访问某个共享资源,它只工作在SGA中,

通常用于保护描述buffer cache中block的数据结构。

Row cache objects latch的争夺也就意味着数据字典的争夺。如果有latch: row cache objects等待事件,那么会导致CPU很高,主机和数据库响应都很慢。

因为Row cache objects latch是用来保护数据字典缓冲区的,进程在装载、引用或者清除数据字典缓冲区中的对象时必须获得该latch。Latch不会造成阻塞,只会导致等待。 阻塞是一种系统设计上的问题,等待是一种系统资源争用的问题。

当依赖于公共同义词的SQL 被过度解析时,可能会导致这种问题。增加shared pool 通常可以解决这种latch。

在MOS上搜了一下,与latch:row cache objects 相关的等待,大部分与Oracle 的bug 相关和Rowcache及其相关Latch的视图主要有:v$latch_children,v$rowcache,v$latch_misses。

这个latch是对象的数据字典。也就是说有对象数据字典的争用,根据oracle文档介绍一般都有如下的数据字典:

DC_SEQUENCES

Caused by using sequences in simultaneous insert operations. =>

Consider caching sequences using the cache option. Especially important on RAC instances!

Bug 6027068 – Contention on ORA_TQ_BASE sequence -fixed in 10.2.0.5 and 11.2.0.1

DC_OBJECTS

Look for any object compilation activity which might require an exclusive lock, blocking other activities. If object compiles are occurring this can require an exclusive lock which will block other activity. Tune by examining invalid objects and dependencies with following SQL:

select * from dba_objects order by last_ddl_time desc;

select * from dba_objects where status = 'INVALID';

Can be a bug like the following ones: Bug 11070004 – High row cache objects latch contention w/ oracle text queries Bug 11693365 – Concurrent Drop table and Select on Reference constraint table hangs(deadlock) – fixed in 12.1 DC_SEGMENTS This is most likely due to segment allocation. Identify what the session holding the enqueue is doing and use errorstacks to diagnose.

DC_USERS

– This may occur if a session issues a GRANT to a user, and that user is in the process of logging on to the database.

– Excessive calls to dc_users can be a symptom of “set role XXXX”

– You can check the presents of massive login attempts, even the failed ones by analyzing listener.log (use OEM 12c-> All Metrics or by checking database AUDIT if available or using own tools).

– Bug 7715339 – Logon failures causes “row cache lock” waits – Allow disable of logon delay

DC_TABLESPACES

Probably the most likely cause is the allocation of new extents. If extent sizes are set low then the application may constantly be requesting new extents and causing contention. Do you have objects with small extent sizes that are rapidly growing? (You may be able to spot these by looking for objects with large numbers of extents). Check the trace for insert/update activity, check the objects inserted into for number of extents.

DC_USED_EXTENTS and DC_FREE_EXTENTS

This row cache lock wait may occur similar during space management operations where tablespaces are fragmented or have inadequate extent sizes. Tune by checking whether tablespaces are fragmented, extent sizes are too small, or tablespaces are managed manually.

DC_ROLLBACK_SEGMENTS

– This is due to rollback segment allocation. Just like dc_segments, identify what is holding the enqueue and also generate errorstacks.

Possible Bugs:

– Bug 7313166 Startup hang with self deadlock on dc_rollback_segments (Versions BELOW 11.2)

– Bug 7291739 Contention Under Auto-Tuned Undo Retention (Doc ID 742035.1)

DC_TABLE_SCNS

Bug 5756769 – Deadlock between Create MVIEW and DML – fixed in 10.2.0.5 ,11.1.07 and 11.2.0.1

DC_AWR_CONTROL

This enqueue is related to control of the Automatic Workload Repository. As such any operation manipulating the repository may hold this so look for processes blocking these.

II.解决方案:

通过如下分析是由于故障时段有大量硬解析,硬解析需要去获取数据字典资源,这需要获得latch,若硬解析量太大,会造成严重的latch争用,占用非常多的资源,导致CPU使用过高,从而表现出数据库ROW CACHE OBJECT等待事件,最终导致数据库系统缓慢。

根据分析,有如下2点建议:

1. 对业务侧进行SQL整改,将未使用绑定变量改成绑定变量,成为软解析,减少获取数据字典的次数,从而降低LATCH争用次数,从根本解决问题(推荐)

2. 对数据库参数 cursor_sharing 进行调整,可部分缓解这个问题,但不能从根本上解决问题。

3.优化查询语句,本次是对OGG同步的表添加组合索引,缓解了争用

III.分析过程:

1.数据库存在LATCH等待情况,看到这几个等待事件,这个数据库的内存很大,我怀疑是硬解析或者热块争用有关;

2.SGA使用率,Shared pool还有18G,排除内存不足

select POOL,round(BYTES/1024/1024) FREE_MB from v$sgastat a where a.NAME like  'free%';

3. 通过AWR发现Parse CPU to Parse Elapsed为4.61%,Non-Parse CPU为62.18%,正常情况下98%以上,该值表示SQL解析时间占比,越高越好,如果过低说明解析中等待资源时间太长。软解析比例也过低,正常在98%以上。应该就是硬解析的问题了

4. 通过分析数据库内部资源,发现数据字典的各种LATCH争用过高,(GETS表示请求该资源的次数,MISSES表示请求失败重新请求的次数,SLEEPS表示请求失败进入睡眠队列),成功率最底12%,正常应为98%。

查看row cache objects 的具体信息,查询LATCH 的GET量,以及成为率

col LATCH_NAME for a20

SELECT a.addr,a.latch#,a.child#,a.level#,a.name LATCH_NAME,a.gets,a.misses,round((1-a.misses/a.gets)*100,2) SUCESS_PCT,a.sleeps

FROM v$latch_children a

WHERE a.name='row cache objects' AND a.gets <>0

ORDER BY a.gets desc;

使用如下SQL检查row cache 是否高效。 pct_succ_gets 接近与100最好,如果接近于0,就说明需要优化,

如果pct_succ_gets 的值不接近与100,或者数据库出现大量的“Row Cache Objects” latch等待,可以考虑增加SHARE_POOL_SIZE 来缓解这种现象

SELECT parameter,

       SUM(gets),

       SUM(getmisses),

       100 * SUM (gets-getmisses)/sum(gets)pct_succ_gets,

sum(modifications) updates

FROM V$ROWCACHE

WHERE gets >0

GROUP BY parameter;

5.通过以下查询语句,查看引起该争用的SQL语句

select sq.sql_text,sql_fulltext from (

select * from (

  SELECT sql_id,event,COUNT(1) num

  FROM V$ACTIVE_SESSION_HISTORY A

WHERE A.SAMPLE_TIME BETWEEN

       TO_DATE('2025-01-02 09:00:00', 'YYYY-MM-DD HH24:MI:SS') AND

       TO_DATE('2025-01-02 11:00:00', 'YYYY-MM-DD HH24:MI:SS')

   AND event  in( 'latch: row cache objects' ,'cursor: pin S wait on X') and user_id=141

GROUP BY sql_id,event

ORDER BY 3 DESC) where rownum<=15 ) a left join v$sql sq on a.sql_id=sq.sql_id where sql_text is not null order by num desc;

发现是对一个视图的查询,查看执行计划,发现联合查询中,有一个是对OGG投递过来的表进行全表扫描,评估了下,在源端的表添加组合索引,目标表自动同步了索引(OGG开启了DDL同步),争用没有了,告警恢复

查看该语句的执行计划

select * from table(dbms_xplan.display_cursor('sql_id_number',null,'advanced'))

或者

explain plan for select_sql;

select * from table(dbms_xplan.display('',null,'advanced'));

MOS参考:

Slow Performance with High Waits for ‘row cache lock’ With Possible Database Hang (Doc ID 2189126.1)

Bug 13902396 - Hash joins cause “row cache objects” latch gets and “shared pool” latch gets (disabled fix) (Doc ID 13902396.8)

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HAL 库------中断相关函数

HAL_SuspendTick();是对SysTick中CTRL寄存器中TICKINT位清0 HAL_ResumeTick(); 刚好与上面函数相反&#xff0c;对SysTick中CTRL寄存器中TICKINT位置1&#xff0c;恢复stick中断。

IDEA开发Java应用的初始化设置

一、插件安装 如下图所示&#xff1a; 1、Alibaba Java Coding Guidelines 2.1.1 阿里开发者规范&#xff0c;可以帮忙本地自动扫描出不符合开发者规范的代码&#xff0c;甚至是代码漏洞提示。 右击项目&#xff0c;选择《编码规约扫描》&#xff0c;可以进行本地代码规范扫…

QT-------------多线程

实现思路 QThread 类简介&#xff1a; QThread 是 Qt 中用于多线程编程的基础类。可以通过继承 QThread 并重写 run() 方法来创建自定义的线程逻辑。新线程的执行从 run() 开始&#xff0c;调用 start() 方法启动线程。 掷骰子的多线程应用程序&#xff1a; 创建一个 DiceThre…

在C语言基础上的C++(深入理解类和对象)

1&#xff1a;构造函数 1&#xff1a;为什么使用构造函数 由于类的封装性&#xff0c;一般来说&#xff0c;数据成员是不能被外界访问的&#xff0c;所以对象的数据成员的初始化工作就给共有函数来完成了。如果定义了构造函数&#xff0c;那么只要对象一建立&#xff0c;就可…

ESP32_H2-ESP32_H2(IDF)学习系列-安装官方组件

1、 在VS Code项目工程中添加IDF组件注册表中的组件十分便捷。您只需按下“CtrlShiftP”快捷键快速进入命令面板&#xff0c;或者通过菜单栏的“查看”选项&#xff0c;选择“命令面板”来打开它。随后&#xff0c;在命令面板中输入“ESP-IDF: Show Component Registry”即可展…

【UE5】UnrealEngine源码构建2:windows构建unreal engine 5.3.2

参考大神知乎的文章:UE5 小白也能看懂的源码编译指南 据说会耗费400G的空间。 代码本身并不大,可能是依赖特别多,毕竟看起来UE啥都能干,核心还是c++的, 【UE5】UnrealEngine源码构建1:tag为5.3.2源码clone 本着好奇+ 学习的态度,想着也许有机会能更为深入的熟悉UE的机制…

[Qt] 常用控件 | QWidget | “表白程序2.0”

目录 一、控件概述 控件体系的发展阶段&#xff1a; 二、QWidget 核心属性 核心属性概览&#xff1a; 1、enabled 2、Geometry 实例 1: 控制按钮的位置 实例 2: 表白 程序 i、Window Frame 的影响 ii、API 设计理念 iii、Geometry 和 FrameGeometry 的区别 &#xf…

laravel部署到云服务器上,除了首页之外,区域页面找不到路由

laravel部署到云服务器上&#xff0c;除了首页之外&#xff0c;区域页面找不到路由&#xff0c;都是报404错误 解决方法&#xff1a; &#xff08;注&#xff1a;本人服务器使用宝塔面板&#xff09; 打开宝塔面板&#xff0c;找到该站点->配置文件 在下方增加如下代码 …

git注意事项

提交代码的备注 feat : 开发 新增功能 fix: 修复 git相关 1. git安装及全局用户设置 Git安装 npm install git -ggit修改用户名邮箱密码 git config --global --replace-all user.name "要修改的用户名" git config --global --replace-all user.email"要修改…

Agent系列:AppAgent v2-屏幕智能Agent(详解版)

引言 简介 方法 Agent 框架 Agent 交互 探索阶段 部署阶段 文档生成 高级功能 实验结果 总结 局限性 未来工作 1. 引言 大语言模型&#xff08;LLM&#xff09;如 ChatGPT 和 GPT-4 显著提升了自然语言处理能力&#xff0c;并且推动了智能体在自主决策中的应用。…

flink cdc oceanbase

接上文&#xff1a;一文说清flink从编码到部署上线 环境&#xff1a;①操作系统&#xff1a;阿里龙蜥 7.9&#xff08;平替CentOS7.9&#xff09;&#xff1b;②CPU&#xff1a;x86&#xff1b;③用户&#xff1a;root。 预研初衷&#xff1a;现在很多项目有国产化的要求&#…

Docker 安装与配置 Nginx

摘要 1、本文全面介绍了如何在 Docker 环境中安装和配置 Nginx 容器。 2、文中详细解释了如何设置 HTTPS 安全连接及配置 Nginx 以实现前后端分离的代理服务。 2、同时&#xff0c;探讨了通过 IP 和域名两种方式访问 Nginx 服务的具体配置方法 3、此外&#xff0c;文章还涵…

C语言格式输出

1.转换字符说明&#xff1a; 2.常用的打印格式&#xff1a; 在 C 语言中&#xff0c;格式输出主要依靠 printf 函数来实现。以下是一些 C 语言格式输出的代码举例及相关说明。 printf("%2d"&#xff0c;123)&#xff0c;因为输出的部分有三位数&#xff0c;但是要求…

yolov5核查数据标注漏报和误报

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、误报二、漏报三、源码总结 前言 本文主要用于记录数据标注和模型预测之间的漏报和误报思想及其源码 提示&#xff1a;以下是本篇文章正文内容&#xff0c;…

Word如何插入图片并移动到某个位置

Word如何插入图片并移动到某一个位置 新建word→插入→图片 选择合适的位置→选择图片→打开 点击图片→布局选项→选择文字环绕下的任意一个→固定在页面上 点击图片就可以将图片移动到任意位置

【prometheus】【blackbox_exporter】grafna导入blackbox_exporter看板配置

1、进入到grafana看板&#xff0c;选择合适的看板模版 地址&#xff1a;https://grafana.com/grafana/dashboards/ 在搜索框中输入 blackbox_exporter,找到合适的模版&#xff0c;如下图所示&#xff1a; 2、点击并下载对应看板JSON数据 3、在grafana的页面进行导入操作 3.1…

微服务面试题:分布式事务和服务监控

&#x1f9d1; 博主简介&#xff1a;CSDN博客专家&#xff0c;历代文学网&#xff08;PC端可以访问&#xff1a;https://literature.sinhy.com/#/?__c1000&#xff0c;移动端可微信小程序搜索“历代文学”&#xff09;总架构师&#xff0c;15年工作经验&#xff0c;精通Java编…

wx015基于springboot+vue+uniapp的经济新闻资讯的设计与实现

开发语言&#xff1a;Java框架&#xff1a;springbootuniappJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#…

获取用户详细信息-ThreadLocal优化

Thread全局接口可用&#xff0c;不用再重复编写。所以为了代码的复用&#xff0c;使用Thread。把之前的内容&#xff08;函数的参数和map与username&#xff09;注释掉&#xff0c;换为Thread传过来的内容&#xff08;map与username&#xff09;。 因为Thread需要在拦截器里面…

【论文阅读笔记】IceNet算法与代码 | 低照度图像增强 | IEEE | 2021.12.25

目录 1 导言 2 相关工作 A 传统方法 B 基于CNN的方法 C 交互方式 3 算法 A 交互对比度增强 1)Gamma estimation 2)颜色恢复 3)个性化初始η B 损失函数 1)交互式亮度控制损失 2)熵损失 3)平滑损失 4)总损失 C 实现细节 4 实验 5 IceNet环境配置和运行 1 下载…