怎样查看Oracle RAC中Cache Fusion的实际流量情况

阿涛酱_4424

阿涛酱_4424

2026-06-15

864人浏览

原创

查GV$CLUSTER_INTERCONNECTS只能看到Oracle声明使用的网卡,无法反映真实GC流量;需结合tcpdump抓HAIP UDP包、iftop看节点间实时流量、ethtool -S查驱动级丢包来准确定位问题。

查 GV$CLUSTER_INTERCONNECTS 只能看网卡,不能看流量

很多人一上来就查 gv$cluster_interconnects,看到它返回了 bond1 或 eth2 就以为“知道走哪张卡了”,其实这只说明 oracle 声明用了这张网卡,完全不反映真实流量压力。这张视图甚至不记录任何字节计数,也无法区分 gc 流量和心跳、cssd 通信等其他私网流量。

真正要盯的,是操作系统层面的实时载荷——因为 Oracle 的 GC 流量最终落地为 UDP 包(RAC 11.2+ 默认)或 TCP(部分老版本或显式配置),而这些包必须经过内核协议栈。

  • 别信 GV$SYSSTAT 里 gc cr blocks received 这类计数:它们只告诉你“逻辑块次数”,没带时间戳、没带大小、没上下文,无法换算成 KB/s
  • GV$INTERCONNECT_PINGS 是伪指标:它测的是 ping 延迟,不是 GC 包实际传输耗时,且默认每 5 秒才发一次,完全跟不上业务毛刺
  • AWR 报告里的“估计互联网络流量(KB)”是估算值:基于平均块大小(通常按 8KB 算)× 块数,但真实 GC 包含 TCP/UDP 头、IP 头、以太网头,实际线缆字节数比这个高 15%–20%

用 tcpdump 抓真实 UDP 流量,必须匹配 HAIP 和端口范围

RAC 11.2.0.2+ 默认启用 HAIP(169.254.x.x),所有 GC 流量都走这个虚拟地址,而不是你配置的静态私网 IP(如 192.168.1.11)。直接抓后者,tcpdump 会一无所获。

正确命令要同时满足三个条件:指定 HAIP 地址、限定 UDP 协议、过滤双向通信:

tcpdump -i bond1 -n udp and host 169.254.23.37 and host 169.254.23.38 -w gc_udp.pcap
  • -n 必须加:避免 DNS 反查拖慢捕获,也防止时间戳被干扰
  • 不能用 port 1521:GC 不走监听端口,而是动态端口(通常在 32768–65535),但也不建议用 portrange 1024-65535——会混入 NTP、DHCP 等无关 UDP 流量
  • 必须写两个 host:只写一个方向(比如只写 src host A)会漏掉反向 ACK 或响应包,导致流量低估 40% 以上
  • 抓包后用 Wireshark 打开,过滤 udp.length > 100:GC 包一般 ≥ 128 字节,排除 ICMP、ARP 等小包噪音

用 iftop 实时看节点间流量分布,重点识别偏斜

iftop 能告诉你“谁和谁在传、传多快”,这对定位 GC 热点对极有用。GC 流量不是均匀分布在所有节点之间,往往集中在某一对(比如 node1 ↔ node3),而其他链路几乎空闲。

QuantOracle
QuantOracle

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

下载

运行命令(假设 GCS/GES 默认端口是 6200/6201):

iftop -P tcp -f "port 6200 or port 6201" -i bond1
  • 观察 “TX” 列:如果 node1 → node3 的发送速率长期是 node1 → node2 的 5 倍,那 node3 很可能正承担大量 block 请求,需查该节点上是否有未绑定变量的循环 SQL
  • 注意单位:iftop 默认显示 B/s,不是 KB/s;按 P 键可切换为 KB/s,避免误读数量级
  • 别只看峰值:用 -t 参数导出文本日志(iftop -t -L 1000 -P ...),再用 awk 统计 5 分钟滑动窗口均值,比瞬时值更可靠
  • 若发现某对节点间流量突增但 GV$SQL 没对应高 buffer_gets 语句,大概率是后台进程(如 LMS、LMON)在做 cache fusion cleanup,需查 GV$SESSION_EVENT 中 gc cr block busy 的等待分布

用 ethtool -S 查丢包和驱动异常,比 Oracle 统计早 2–3 层

Oracle 的 gc cr block lost 等统计项,是在应用层(LMS 进程)发现超时后才累加的,此时问题已穿透 TCP 栈、到达网卡驱动甚至物理链路。而 ethtool -S bond1 输出里的字段,能提前暴露底层问题:

  • rx_discards 或 tx_aborted_errors 非零:基本锁定为网卡驱动 bug 或交换机 QoS 限速,和 Oracle 配置无关
  • rx_long_length_errors > 0:说明 MTU 不一致(比如一端设 9000,另一端仍是 1500),会导致大包被丢弃,GC 性能断崖下跌
  • rx_crc_errors 持续增长:物理链路有问题(光纤衰减、模块兼容性),不是调参数能解决的
  • 对比 ifconfig bond1 的 RX bytes 和 ethtool -S bond1 的 rx_bytes:前者含以太网头/CRC(L2),后者是驱动接收的真实字节数;若差值长期稳定在 40–60 字节/包,说明 TCP/IP 栈工作正常;若差值忽大忽小,说明有中间设备(如 ToR 交换机)做了策略性丢包

HAIP 地址、UDP 协议、驱动级丢包——这三个点串起来,才能看清 Cache Fusion 流量的真实水位。光看数据库视图,就像只听发动机声音判断车速,而忘了看油表、转速表和轮胎胎压。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

oracle

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

相关专题

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

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

2023.08.16

961

5

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

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

2023.09.15

2793

5

oracle怎么分页
oracle怎么分页

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

2023.09.18

2810

5

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

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

2023.09.19

1609

3

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

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

2023.09.19

2233

7

oracle imp
oracle imp

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

2023.09.19

2989

4

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

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

2023.11.02

4489

19

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

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

2023.11.08

237

5

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

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

2023.11.14

766

5

热门下载

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

精品课程

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