暂无图片
暂无图片
6
暂无图片
暂无图片
暂无图片

跨机房ADG因带宽限制引起的GAP问题

原创 潇湘秦 2025-11-03
440
本案例来自网友“缺角的西瓜头”的投稿,看了下和他的聊天时间,正好过去两年了,而这个问题也困扰了他两年,终于在调整了一个参数后,有大幅的改善(并未彻底解决), 请看他描述的这个案例。
背景:主机房2节点rac,备机房单节点dg备库,版本11.2.0.4,备库有ogg向下游同步交易数据

数据库情况:交易系统,主要压力在每天15:30-18:00的结算期间

问题现象:结算期间因为带宽限制(100m,每天峰值都在140M左右)出现2-4个gap,触发fal请求后,有时候能自己恢复,有时候需要等很久(1-2小时)才能恢复。

前期处理:awr报告能看到明显的log file switch (checkpoint incomplete)的等待事件,将redo从1G扩大到了2G,并优化了一些sql改善log file sync,gap频率下降到1-2次每天,整体数据库在结算期间没什么大的压力

IMG_256IMG_257

所以首先可以定调,瓶颈不在数据库,在于跨机房的带宽,那带宽无法增加,gap无法避免,我们解决问题的思路就来到了如何解决fal无法及时自动恢复gap的问题上。

我们观察备库V$MANAGED_STANDBY视图

IMG_258IMG_259

可以看到mrp复制进程在等待120073号日志,接收进程是接收中的状态;而看到主库的V$ARCHIVE_PROCESSES视图发现,arc0号进程处于busy状态一直在传输120073号日志,而日志最新已经传到120082号日志了,很明显备库已经检测到gap,发起fal请求了

于是写了个脚本持续观察主库arch进程的情况

IMG_260IMG_261

数据库默认是4个arc进程(log_archive_max_processes=4),可以看到3号在传输120037号归档,值得注意的是在active的进程中,1号进程是no fal no srl的,就是不响应fal和server请求,2号进程是检测心跳的,也就是说真正能响应fal的只有0号和3号进程

此时猜想,因为进程占满,备库发出fal请求,需要等待。

当主库进程释放120037,状态变为idle,同一进程开始传输其它日志时,备库认定接收120037号日志失败,发起fal请求,这个过程需要一点时间

IMG_262IMG_263

此时我将log_archive_max_processes=4修改为8

ALTER SYSTEM SET log_archive_max_processes = 8 SID='*';

通过备库日志应用可以发现fal请求正常发起,gap恢复

IMG_264

观察流量图

IMG_266

此时的流量因为多个归档的恢复,持续打满(这里时间的匹配说明不是因为带宽打满,导致gap去恢复,而是因为fal请求,多个归档发起传输持续打满了带宽,正常打满带宽是一个尖尖)

验证一周,加大参数log_archive_max_processes后,gap都能及时自己fal恢复;

说明:根因是带宽,gap无法避免,我们做的优化只是从侧面提升了数据库用fal请求处理gap的能力。


两年前就和这位网友做过多次讨论,基本上我们能达成一致的意见,就是根本原因就是带宽问题;因为这里是一个特殊的场景跨机房ADG,而且带宽有限,再加上是数据库的版本是11g,如果是12c+可以考虑far sync ADG,或者使用中间件OGG/DSG来实现。 但是基于现状来看调整log_archive_max_processes 确实可以加速fal的恢复,下面介绍参数的基本信息。

log_archive_max_processes参数的核心作用

  • 主要功能:指定可以创建的最大 ARCn 进程数量(从 ARC0 到 ARC9,或扩展到 ARCa 到 ARCt)。这些进程不仅处理本地归档,还支持远程归档(如 Data Guard 中的 FAL 请求),并可用于心跳检测(例如,某些进程标记为 "no FAL no SRL",不响应 Fetch Archive Log 请求)。
  • 在 RAC 和 Data Guard 中的应用:在 RAC 环境中(如文章的 2 节点主库),多个实例共享 redo 日志,ARC 进程需协调跨节点归档。在 Data Guard 备库(如单节点 DG)中,当检测到 gap 时,会发起 FAL 请求,主库的 ARC 进程响应传输缺失的归档日志。如果可用 ARC 进程不足(如文章观察到的仅 0 号和 3 号进程可用),FAL 请求会排队等待,导致恢复延迟(文章中 1-2 小时)。增加该参数(如从 4 改为 8)可提升并发处理能力,确保 FAL 及时响应,尤其在带宽受限(100M 峰值 140M)的高压结算期。
  • 动态调整:参数支持 ALTER SYSTEM 动态修改(需数据库挂起但未打开),范围为 1-30,默认值为 4。 
     在文章案例中,修改后观察到流量峰值呈 "尖尖" 状(多个归档并发传输打满带宽),验证一周无延迟恢复,证明了其在优化 gap 恢复方面的侧面作用。

Oracle 版本
关键变化与描述
默认值
范围
备注
8i (8.1.6)
初始引入,指定数据库启动时调用的 archiver 后台进程数量(ARC0 到 ARC9)。重点解决手动归档切换的痛点,支持基本自动归档。
2(或根据配置)
1-10
早期强调初始进程数,数据库不会动态扩展。
9i/10g (10.1)
扩展为初始调用进程数,支持更多 ARC 进程(ARC0-ARC9)。引入对远程归档的支持,适用于早期 Data Guard。参数动态化,便于运行时调整。
2
1-10
演进焦点:从固定初始数向自动化倾斜,减少 log file sync 等待。
11g (11.2)
转变为"最大可创建 ARCn 进程数",数据库根据负载动态启动进程(不超过上限)。默认提升,支持 RAC 多实例并发归档。文章案例即基于 11.2.0.4,默认 4 个进程中部分用于心跳,导致 FAL 瓶颈。
4
1-30
关键演进:从"初始数"到"最大数",允许动态扩展至 30 个,优化高吞吐场景如 OGG 同步。
12c/19c
进一步自动化,数据库根据 redo 生成率和归档需求智能分配进程。默认保持 4,但推荐在 RAC/Data Guard 中调至 8-16 以处理 FAL/gap。
4
1-30
强调在物理/逻辑备库中的可选配置,支持快照备库。
21c
无重大结构变化,但集成更多监控(如 V$ARCHIVE_PROCESSES 视图增强),便于脚本观察(如文章所述)。范围不变,MODIFIABLE 为 ALTER SYSTEM。
4
1-30
演进趋势:与云原生集成,推荐结合 AWR 报告调优。
26ai
参数保持稳定,支持 AI 增强功能(如 26ai 的新特性),但无特定变化。默认和范围不变,适用于云和混合环境。
4
1-30
集成 AI Vector Search 等新功能,参数调优适用于高
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论