基于湖库一体架构,统一管理结构化、半结构化与非结构化等多模态数据,一个系统承载事务处理、实时分析与 AI 工作负载。
集群合并阻塞
更新时间:2025-07-28 15:47:16
OceanBase 通过 Compaction 来进行增量数据与基线数据的整合。Compaction 行为在 OceanBase 数据库中被大致分为两类:转储与合并。
转储对应 minor freeze 或 minor merge,合并对应 major freeze 或 major merge。
当任一租户 Minor Freeze 的次数达到参数 minor_freeze_times 指定的阈值,或者达到参数major_freeze_duty_time 设定的调度时间,就会触发合并。
本节介绍几种常见的合并阻塞的场景以及解决方法。
如何判断合并阻塞
- 初步的判断方法是,排除系统变更和流量上涨的因素后,通过合并开始时间以及历史上的合并时长进行对比,发现合并耗时远超日常均值时,大概率可能遇到合并阻塞。具体查询 SQL 如下:
obclient> SELECT * FROM __all_zone WHERE name in ('last_merged_time','merge_status','merge_start_time');
查看是否有
merge error,如果出现merge error,此时合并会被停止。obclient> SELECT * FROM __all_zone WHERE name = 'is_merge_error';查看具体合并阻塞的 Partition,
latest_version即为当前最新的冻结版本号,可以通过 __all_zone表的frozen_version获取。obclient> SELECT * FROM __all_virtual_meta_table WHERE data_version != 'latest_version' LIMIT 1;
应急处理流程
对于集群合并阻塞的情况,一般分如下几种,针对每种情况进行相关处理。
首先排除特殊情况,即开启了手动合并。查询值正常为
false,如果为true则系统不会自动触发合并,此时需要关闭手动合并。obclient> show parameters like 'enable_manual_merge';节点硬件故障导致合并阻塞。
针对这种情况,可以进行如下操作,使合并继续。
确认故障的
observer已经处于 inactive 状态。调小永久下线时间。让 OBserver 自动剔除故障节点成员,让合并继续。
obclient> alter system set server_permanent_offline_time ='xxx';
磁盘空间满导致合并阻塞,此时需要清理腾挪部分磁盘空间使合并继续。详见 节点数据盘空间满。
节点 IO 或网卡负载过高,导致 RPC 失败,合并无法推进,处理方法请参见 节点磁盘 IO 过高 和 节点网卡负载过高。
RS 出现无主等异常,导致合并失败。更多内容请参见 SYS租户/RS服务问题。
判断 RS 出现无主问题的方法:登录 RS 所在的节点,查询
election.log和rootservice.log,具体命令参考如下:grep 'election_error_rs' election.log grep 'ob_major_freeze_launcher.cpp' rootservice.log |grep 'failed'