Avg global cache block receive time超标(>100ms)直接表明私网块传输延迟严重,是心跳异常的根因;Estd Interconnect traffic突增至几MB/s(如24 MB/s)且同步升高,大概率由MTU不匹配或UDP丢包引发重传堆积。

看RAC Statistics里Avg global cache block receive time是否超标
这个值直接反映私网块传输延迟,不是“平均等待”,而是真实网络层耗时。AWR报告末尾的Avg global cache block receive time (ms)。正常应100ms基本可断定心跳延迟已成瓶颈。注意它和gc buffer busy acquire不同——后者是争抢结果,前者才是根因信号。
查Estd Interconnect traffic是否异常飙升
私网流量暴增不是负载高,而是重传堆积。在同一个Estd Interconnect traffic (KB)。OLTP系统平时几百KB/s属正常;若突增至几MB/s(比如24 MB/s),且与Avg global cache block receive time升高同步出现,大概率是MTU不匹配或UDP丢包触发了大量重传。别只盯着带宽利用率——ethtool eth2显示“Link detected”不代表无抖动,得看实际收发包质量。
交叉验证GV$CLUSTER_INTERCONNECT和ocssd.log
AWR只告诉你“结果”,真因得下操作系统查。立刻做三件事:
- 查
/oracle/11.2.0/grid/log/<hostname>/cssd/ocssd.log,搜CRS-1611、CRS-1610、CRS-1607——多节点密集报这三类错误,就是底层网络抖动 - 跑
SELECT * FROM GV$CLUSTER_INTERCONNECT,确认ip_address走的是私网IP,且interface列对应物理网卡(如eth3),不是lo或bond - 执行
ping -c 100 -i 0.1 <对端私网IP>,重点看>5ms的包占比;RAC要求95%包≤2ms,一旦>5%超5ms,GC等待必然上扬
避开gc cr block 2-way这类伪故障信号
很多DBA一看到Top 5里有gc cr block 2-way就调MTU或换网卡,其实这是正常开销。真正指向私网问题的只有两类:gc cr block lost和gc current block lost——它们本质是IPC send timeout,不是块丢了,是UDP包被丢弃或延迟超限。而gc buffer busy acquire平均等待>5ms且频次突增时,大概率是前者拖慢引发的连锁反应,别本末倒置去优化SQL。
心跳延迟最狡猾的地方在于:它不总表现为明显报错,而是让gc cr block lost平均等待时间缓慢爬升到16–32ms桶,同时IpReasmFails在netstat -s里持续增长——这种温水煮青蛙式的恶化,最容易被当成“暂时波动”忽略掉。



















