怎样排查Oracle Data Guard中LGWR引起的性能抖动

云浩吖_7732

云浩吖_7732

2026-11-01

745人浏览

原创

查主库LNS进程是否卡在NET_TIMEOUT重试:执行SELECT PROCESS, STATUS, CLIENT_PROCESS, SEQ#, DELAY_MS FROM V$MANAGED_STANDBY WHERE PROCESS = 'LNS';若STATUS为WRITING但DELAY_MS持续>1000,或频繁在CONNECTING/WAITING间跳变,即判定NET_TIMEOUT触发抖动,需将NET_TIMEOUT设为P99 RTT的2倍(如RTT=42ms则设200)、REOPEN设为NET_TIMEOUT/2(如100),并确认LGWR配置含ASYNC参数以避免退化为同步阻塞。

怎样排查oracle data guard中lgwr引起的性能抖动

查主库LNS进程是否卡在NET_TIMEOUT重试

LGWR模式下,LNS进程负责把日志从online redo log推到备库。一旦网络抖动或备库响应慢,它就会反复等待、超时、重连——这个过程不报错,但会拖慢LGWR本身,引发log file sync飙升和提交延迟。

执行以下SQL确认LNS状态:

SELECT PROCESS, STATUS, CLIENT_PROCESS, SEQ#, DELAY_MS FROM V$MANAGED_STANDBY WHERE PROCESS = 'LNS';

若STATUS是WRITING但DELAY_MS持续 > 1000(即超1秒),或频繁在CONNECTING/WAITING间跳变,基本可判定是NET_TIMEOUT触发了抖动。

  • NET_TIMEOUT默认180秒,在跨城/云环境极易误判——实测P99 RTT为42ms时,应设为200而非默认值
  • REOPEN必须 ≤ NET_TIMEOUT,建议设为NET_TIMEOUT / 2(如REOPEN=100),否则故障恢复太慢
  • 漏配ASYNC参数(如只写LGWR不写ASYNC=256K)会导致LNS退化为同步阻塞行为

确认LGWR是否因AFFIRM未收到而挂起

最大保护或最高可用模式下,LGWR必须等备库返回AFFIRM才允许事务提交。如果备库SRL没就位、I/O慢、或MRP进程卡住,AFFIRM就迟迟不来,LGWR只能干等——这时log file sync平均等待会突增,且与log file parallel write无强相关。

先查备库SRL是否可用:

SELECT GROUP#, THREAD#, SEQUENCE#, STATUS FROM V$STANDBY_LOG;

必须有至少一组STATUS为ACTIVE或UNASSIGNED;空结果或全是UNUSED说明SRL未生效,AFFIRM实际被忽略。

  • 主库LOG_ARCHIVE_DEST_2中若含SYNC AFFIRM,但备库没SRL,Oracle不会报错,而是静默降级为异步
  • 用SELECT DEST_ID, AFFIRM, TRANSMIT_MODE FROM V$ARCHIVE_DEST WHERE DEST_ID = 2;交叉验证:若AFFIRM = ENABLED但TRANSMIT_MODE = ASYNC,说明配置冲突,已被Oracle自动修正
  • 备库V$MANAGED_STANDBY中若PROCESS = 'MRP0'且STATUS长期为WAIT_FOR_GAP或APPLYING_LOG但SEQ#不更新,AFFIRM必然积压

区分LGWR抖动和备库MRP应用瓶颈

现象相似(apply lag涨、log file sync高),但根因相反:LGWR抖动是主库发不出去,MRP瓶颈是备库收得进但吃不下。错误归因会导致调参方向完全反向。

QuantOracle
QuantOracle

63个确定性量化金融计算器 + 10个通过MCP的复合工作流。期权定价、Greeks、奇异衍生品、风险指标、投资组合优化……

下载

关键分界点看transport_lag和apply_lag的差值:

SELECT name, value FROM V$DATAGUARD_STATS WHERE name IN ('transport lag', 'apply lag');

若transport_lag > apply_lag + 30秒,问题在主库端传输链路(LNS、网络、SRL配置);若两者接近且apply_lag单边上涨,则是备库MRP或I/O问题。

  • 主库侧重点查V$ARCHIVE_DEST_STATUS.error、tnsping丢包率、ping -s 1472的P99延迟
  • 备库侧重点查V$SYSTEM_EVENT中log file parallel write和db file sequential read平均等待是否超10ms
  • STANDBY_MAX_DATA_DELAY=0只是控制延迟报告逻辑,设了≠实时,底层卡住照样延迟

ADG备库LGWR异常终止前的ORA-04021锁等待

在11.2.0.4+ ADG环境中,备库LGWR进程可能因parse lock争用主动终止实例,告警日志里紧跟着ORA-04021: timeout occurred while waiting to lock object。这不是普通DDL锁,而是内核层实例状态锁,前台硬解析会阻塞LGWR获取parse lock。

定位要点不是查V$LOCK,而是抓取宕机前1分钟的锁等待链:

SELECT blocking_session, blocking_session_status, event, sql_id FROM V$SESSION WHERE EVENT = 'enq: KO - fast object checkpoint' OR EVENT LIKE 'cursor:%';

若发现多个会话EVENT为cursor: pin S wait on X且blocking_session指向LGWR自身,就是典型ADG parse lock争用。

  • 临时缓解:设_adg_parselock_timeout=300(单位秒),避免LGWR过早放弃
  • 根治方向:禁用cursor_sharing=force,减少硬解析;或升级到12.2+,该Bug(16717701)已修复
  • 注意:ORA-04021对象名若显示为kjzduptcctx或为空,基本可排除用户表锁,直接按ADG内核锁处理

真实延迟永远藏在主备SCN差值里,而不是V$DATAGUARD_STATS的估算字段中;而LGWR抖动最隐蔽的信号,往往是log file sync等待时间波动剧烈,却查不到对应I/O或CPU瓶颈——这时候该回头再看一遍NET_TIMEOUT和REOPEN的数值是否贴合你的物理链路。

相关文章

数码产品性能查询
数码产品性能查询

该软件包括了市面上所有手机CPU,手机跑分情况,电脑CPU,电脑产品信息等等,方便需要大家查阅数码产品最新情况,了解产品特性,能够进行对比选择最具性价比的商品。

下载

相关标签:

oracle

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
oracle清空表数据
oracle清空表数据

当表中的数据不需要时,则应该删除该数据并释放所占用的空间。本专题为大家提供oracle清空表数据的相关文章,帮助大家解决该问题。

2023.08.16

1061

5

Oracle中declare的使用
Oracle中declare的使用

Oracle DECLARE语句是PL/SQL编程语言中用于声明变量、常量、游标或异常的关键字。它的主要作用是在程序中定义这些对象,以便在后续的代码中使用。DECLARE语句的语法简单明了,可以根据需要声明多个对象。通过使用这些声明的对象,可以进行各种操作,如计算、查询数据库、处理异常等 。

2023.09.15

3153

5

oracle怎么分页
oracle怎么分页

实现分页的步骤:1、使用ROWNUM进行分页查询;2、在执行查询之前进行设置分页参数;3、使用"COUNT(*)"函数来获取总行数,并使用"CEIL"函数来向上取整计算总页数;4、在外部查询中使用"WHERE"子句来筛选出特定的行号范围,以实现分页查询。想了解更多oracle怎么分页的文章,可以来阅读本专题先的文章。

2023.09.18

3150

5

Oracle查看表操作历史记录
Oracle查看表操作历史记录

查看操作历史记录的方法:1、使用Oracle内置的审计功能,可以记录数据库中发生的各种操作,包括登录、DDL语句、DML语句等;2、使用Oracle日志文件,其中包含了数据库中发生的各种操作,可以通过查看日志文件来获取操作历史记录;3、使用Oracle的Flashback功能,可以查看数据库在某个时间点的操作历史记录;4、使用第三方工具等。本专题还提供其他查看表操作的文章,大家可以免费阅读。

2023.09.19

1789

3

Oracle中RAC的用法
Oracle中RAC的用法

Oracle中RAC的用法:1、通过在多个服务器上运行数据库实例来提供高可用性;2、允许在需要时增加或减少节点数量;3、通过将工作负载分布到多个节点上来实现负载均衡;4、使用共享存储来实现多个节点之间的数据共享;5、允许多个节点同时处理数据库请求,从而实现并行处理;6、提供了透明故障切换功能;7、使用了一些技术来确保数据的一致性;8、提供了管理工具来简化RAC环境的管理和维护。本专题还提供RAC相关的其他文章,大家可以免费阅读。

2023.09.19

2413

7

oracle imp
oracle imp

imp是Oracle数据库中的一个命令行工具,用于将导出的数据和对象从一个数据库实例导入到另一个数据库实例。imp命令的一般语法为“imp username/password@connect_string file=file_name [options]”。

2023.09.19

3309

4

常用的数据库软件
常用的数据库软件

常用的数据库软件有MySQL、Oracle、SQL Server、PostgreSQL、MongoDB、Redis、Cassandra、Hadoop、Spark和Amazon DynamoDB。更多关于数据库软件的内容详情请看本专题下面的文章。php中文网欢迎大家前来学习。

2023.11.02

4729

19

oracle通配符有哪些
oracle通配符有哪些

oracle通配符有“%”、“_”、“[]”和“[^]"。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2023.11.08

257

5

oracle四舍五入怎么操作
oracle四舍五入怎么操作

oracle四舍五入操作可以使用ROUND函数来实现,其语法为“ROUND(number, decimal_places)”,其中,number是要进行四舍五入的数值,decimal_places是指定的小数位数。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2023.11.14

866

5

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程