awr中gc cr/current block lost出现可断定rac私网同步受损;核心指标是avg global cache block receive time(>10ms异常)和estd interconnect traffic(突增至mb/s级)。
awr 报告里 gc cr block lost 或 gc current block lost 出现,基本可以断定 rac 私网同步已受损;单看等待时间长或 sql 慢,不能直接归因于心跳问题。
怎么看 AWR 里最直接的同步损耗指标
别在 Top SQL 或 Instance Efficiency 里找答案。重点翻到报告末尾两块:
-
Avg global cache block receive time (ms):超过 10 ms 就异常,20+ ms 说明私网延迟严重,不是 GC 逻辑问题,是网络层卡住了 -
Estd Interconnect traffic (KB):正常值每秒几百 KB,若突增至几 MB/s(比如 24 MB/s),说明 Cache Fusion 流量暴增,大概率是 MTU 不匹配、丢包或重传堆积导致 - 顺手扫一眼
Global Cache Load Profile中的Blocks served和Blocks received比值——如果某节点Blocks received远大于Blocks served,说明它在被动“拉块”,可能已是瓶颈节点
哪些 gc 等待事件真正指向同步链路故障
不是所有 gc 等待都等于同步坏,但以下这几个高频、高平均等待时间的,基本可锁定私网通信问题:
-
gc cr block lost和gc current block lost:最典型。不是块真丢了,是请求发出去后超时未响应,底层对应 IPC Send timeout 或 TCP 重传失败 -
gc buffer busy acquire/release:当 block 在传输途中卡住,后续进程争抢同一 buffer,等待堆叠——本质是传输延迟引发的连锁反应 -
gc freelist block busy:较少见,但如果集中在某节点,可能是该节点收包队列积压、ksxp消息队列满,此时Avg message sent queue time on ksxp (ms)会同步飙升
注意:gc cr block 2-way 或 gc current block 2-way 这类“2-way”等待属正常开销,不能直接等同于故障。
为什么必须结合 OS 层验证,不能只信 AWR
AWR 只反映结果,真因得下操作系统查。别被 ethtool 显示 “Link detected” 欺骗,这些信号更关键:
- 跑
netstat -s | grep -i "reasm\|frag\|drop",重点看是否持续增长——这是 IP 分片重组失败,99% 因 MTU 不匹配(比如一端设 9000,交换机或对端还是 1500) - 用
ping -c 2 -M do -s <size> node2-priv</size>测试巨帧:从-s 8972开始试,+1 失败就停;若返回Frag needed and DF set (mtu = X),说明已超限 - 查
ocssd.log里是否有missed heartbeat或rebooting due to missed heartbeat记录,和 AWR 时间点对齐
RAC AWR 报告生成时容易漏掉的关键操作
生成报告本身不难,但选错脚本或范围会导致关键指标缺失:
- 单实例用
@?/rdbms/admin/awrrpt.sql,RAC 全局分析必须用@?/rdbms/admin/awrgrpt.sql,否则看不到跨节点的 Global Cache Stats - 若只想看某个实例(比如 node1 性能骤降),要用
@?/rdbms/admin/awrrpti.sql,并手动指定 instance number,否则默认汇总会掩盖局部异常 - 快照时间范围要窄:问题发生前后 15–30 分钟足够,太宽(如 1 小时)会平滑掉尖峰;AWR 默认每小时一个快照,必要时先手动执行
exec dbms_workload_repository.create_snapshot - 如果报告里
Top SQL占比异常低、Global Cache部分数据为空,大概率是top_n_sql参数太小,执行前先运行exec DBMS_WORKLOAD_REPOSITORY.AWR_SET_REPORT_THRESHOLDS(top_n_sql=>200)
真正难的从来不是看懂 AWR 数字,而是把 gc cr block lost 和 netstat 里那一行 fragments dropped 对上号——中间差的那层网络配置,往往藏在交换机 ACL 或主机防火墙规则里,而不是数据库参数里。











