导读:本期聚焦于沈清秋创作的《Oracle RAC的interconnect私网带宽应该怎么规划?带宽不足会有哪些表现?》,敬请观看详情。搭建Oracle RAC集群时,私网interconnect的带宽规划经常被忽视,很多故障其实都源于这里。当节点间Cache Fusion传输量超过私网承载能力时,会出现gc block lost、全局缓存等待飙升、节点驱逐等问题。本文从私网流量的产生原理讲起,分析不同业务场景下的带宽估算方法,对比千兆、万兆以及InfiniBand等不同组网方案的适用场景,并给出通过AWR报告和gc系列等待事件评估私网压力的具体手段,帮助你在部署阶段就把带宽规划到位,避免上线后再被动扩容。

Oracle RAC集群的稳定性很大程度上取决于私网(Private Network,也就是interconnect)的质量,而带宽规划又是其中最容易踩坑的环节。私网带宽给小了,节点间的全局缓存传输会丢包、重传,引发gc block lost等待甚至节点驱逐;给大了又可能造成投入浪费。这篇文章就来系统地聊聊interconnect带宽的估算方法、常见故障表现以及组网选型建议。

Oracle RAC的interconnect私网带宽应该怎么规划?带宽不足会有哪些表现?

一、interconnect上到底跑了什么流量

要规划带宽,首先得理解私网流量从哪里来。RAC的多节点共享存储架构下,每个节点都有自己的SGA,同一个数据块可能同时被多个节点以不同模式持有。为了保持一致性,Oracle引入了Cache Fusion机制:当节点A需要访问一个被节点B持有的块时,并不会直接从磁盘读取,而是通过私网让节点B把这个块的主拷贝或者共享拷贝传输过来。

所以私网上跑的核心流量就是块镜像消息(BCM)和块本身。此外还有GCS(全局缓存服务)和GES(全局队列服务)的元数据消息、心跳流量,以及11g之后可能出现的结果集缓存相关的消息。这些流量的大小完全取决于业务模式:如果是OLTP系统,节点间频繁交换小块,单次传输量不大但频率很高;如果是批处理或者大表全扫描被并行拆分到多个节点,动辄就是大量的块批量传输,瞬时压力会非常大。

一个容易被低估的场景是应用连接没有做亲和性设计。比如同一个业务模块的请求被负载均衡随机分发到所有节点,同一个热点块在不同节点间被来回请求,私网流量会被放大好几倍。这也是为什么DBA常说,RAC性能问题的第一排查方向往往就是私网。

二、带宽怎么估算:从GC流量到网卡规格

带宽估算的基本思路是:先测出单节点间私网流量峰值,再乘以合理的安全系数。可以用下面这个查询从AWR或者AWRSQRPT里大致估算块传输量:

-- 查询全局缓存传输统计(基于GV$SYSSTAT)
SELECT inst_id, name, value
FROM gv$sysstat
WHERE name IN ('gc cr blocks received',
               'gc current blocks received',
               'gc cr blocks served',
               'gc current blocks served');

-- 粗略估算私网吞吐:块数 x 8KB / 统计间隔秒数
-- 例如:10分钟内 gc cr blocks received = 7500000
-- 吞吐 = 7500000 * 8 * 1024 / 600 ≈ 100 MB/s ≈ 0.8 Gbps

得到基础吞吐之后,建议再乘以3到5倍的安全系数。为什么要留这么大余量?一是AWR统计的是平均值,而私网流量往往呈脉冲式分布,某个批量任务启动的几秒内流量可能是均值的十倍;二是UDP协议本身有重传开销,丢包后重传会让实际流量雪崩式增长;三是要预留业务增长的空间。

从经验值来看,两节点的中小型OLTP系统,节点间GC流量通常在几十MB/s以内,千兆网勉强能跑但风险较高,万兆是起步配置;四节点以上的集群,或者存在跨节点并行查询、大事务的系统,万兆是标配,高负载场景建议考虑25G或者InfiniBand。另外要注意交换机的背板带宽和端口缓存,私网必须使用独立的专用交换机,和公网、存储网物理隔离,并且交换机要关闭流量控制相关的不当配置。

三、带宽不足的典型症状与排查手段

私网带宽或者质量出问题时,数据库会给出相当明确的信号。最常见的等待事件包括gc block lostgc loss recoverygc cr block busy以及gc buffer busy。其中gc block lost几乎就是私网丢包的代名词——Oracle通过UDP传输块,发送方发出后没有收到确认就认为块丢失,正常系统里这个值应该接近零,如果每分钟出现几十上百次,基本可以断定私网有问题。

排查时可以按这个顺序来:先看AWR报告中Global Cache Load Profile部分的gc blocks received/s和gc blocks transferred/s,确认流量水平;再看Top 10 Events里gc类等待的占比;然后用操作系统层面的工具验证网络质量,Linux下可以用netstat -su观察UDP的RcvbufErrors和SndbufErrors是否持续增长,这两个计数器是私网健康度的直观指标。

# 观察UDP收发缓冲区溢出情况,持续增长说明私网丢包
netstat -su | grep -i -E "buffer|overflow"

# 用oratop或集群OSWatcher的oswnet统计私网网卡流量
cat /proc/net/dev | grep -E "eth1|bond0"

# 私网ping延迟测试,正常应小于1ms且无丢包
ping -c 10000 -s 8972 -f 192.168.2.2

丢包的原因不一定是带宽不足,也可能是网卡队列、交换机端口协商速率不对、UDP缓冲区太小等。Linux下建议调大UDP缓冲区,例如net.core.rmem_max=4194304net.core.wmem_max=4194304,这在Oracle的安装前检查脚本里也有明确要求。如果确认是带宽打满,就需要考虑升级网络或者在应用层做连接亲和,把相关业务固定到同一节点,从源头减少跨节点传输。

四、组网方案选择与容量预留建议

目前主流的私网组网方案有三种:千兆以太网基本已被淘汰,不建议新系统采用;万兆以太网(10GbE)是目前绝大多数OLTP环境的标准配置,性价比高,运维门槛低;InfiniBand(比如Exadata上用的方案)适合超大规模集群和数据仓库类的高吞吐场景,单条链路可达56Gbps以上,配合RDS协议传输效率比UDP over Ethernet更高。

无论选哪种方案,都建议做链路冗余。常见的做法是在操作系统层做bonding(mode 4动态链路聚合或mode 1主备),Oracle 19c也支持原生的HAIP,可以在一条私网上跑多个高可用IP实现负载分担。不过要注意HAIP最多支持4个地址,而且如果用了bonding,HAIP和bond模式的配合要提前测试,避免出现脑裂。

最后给一个实用的规划原则:私网带宽至少要是预估GC峰值流量的三倍,万兆起步;私网交换机独立部署、冗余配置;上线前用Swingbench或者真实业务回放做压力测试,观察gc block lost是否为零。带宽规划的钱在建设阶段花,远比上线后因为节点驱逐导致故障再补救便宜得多。

Oracle RACinterconnect私网带宽修改时间:2026-09-05 20:06:54

免责声明:已尽一切努力确保本网站所含信息的准确性。网站作品多为原创整理与精心创作,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们进行处理Email:chomcom@qq.com。
引用或转载本作品时,请注明当前出处:https://www.ipipp.com/html/20260905/51114.html,基于非商业用途的前提下,欢迎转载或二创本作品。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。