首批通过分布式安全可靠测评,为关键业务系统打造
purge 并发引发的副本 checksum 数据不一致
更新时间:2026-06-10 09:46
问题现象
发生数据不一致的环境中出现的现象。
observer.log出现 ERROR 日志-4103 (OB_CHECKSUM_ERROR),命令如下。grep "ERROR.*-4103" observer.log在有问题的 OceanBase 数据库环境中通过
__all_sstable_checksum查询有问题的同一分区data_checksum不同。observer.log里面出现 WARN 日志关键字sstable row count is not same to main table,命令如下。grep "sstable row count is not same to main table" observer.log因为数据不一致导致合并卡住,可通过内部表
_all_zone查看全局merge_status ERROR(合并状态错误)。obclient> SELECT * FROM oceanbase.__all_zone;
关键诊断信息
触发条件
开启分区内并行转储 ,开启的参数是
_enable_parallel_minor_merge。发起删除批量数据的事务。
冻结。
事务提交。
问题原因
OceanBase 数据库内部 btree 的 purge 场景下,由于并发逻辑的 bug,可能导致某些线程的查询少行,从而使得出现问题主表的各个副本数据不一致。数据不一致问题本身对数据正确性有致命危害,OceanBase 数据库合并逻辑后有数据校验机制,在校验到数据不一致时便会报 checksum 相关的错误。
问题的风险及影响
该数据不一致问题本身会对数据正确性有致命危害,目前按照多副本提交为相对正确数据内容对现场进行应对处置。需要业务核对数据正确性。OceanBase 数据库合并逻辑后有数据校验机制,故遇到数据不一致问题时会在合并后数据校验阶段进行报错。该正确性问题需要预防、规避和修复,尽最大可能地避免该正确性问题。
影响租户
影响 OceanBase 数据库中的 SYS 租户和 Oracle 租户以及 MySQL 租户。
影响的版本
OceanBase 数据库企业版 V2.2.77 GA(oceanbase-2.2.77-20210508211731)及之后版本、V3.1.2 GA(oceanbase-3.1.2-20210618150922)及之后版本。
解决方法及规避方式
解决方法:
升级至问题已修复版本。
目前已修复的版本包括 OceanBase 数据库企业版 V2.2.77 BP10 Hotfix2(oceanbase-2.2.77-20220401180934)、V2.2.77 BP10 Hotfix3(oceanbase-2.2.77-20220525151131)、V2.2.77 BP11 (oceanbase-2.2.77-20220502140811)、V3.1.2 BP8 (oceanbase-3.1.2-20220329234820) 及后续版本。
升级至修复版本之后将分区内并行转储开启提升分区转储效率,命令如下。
obclient> ALTER SYSTEM SET _enable_parallel_minor_merge = true;
规避方式:
在能够升级至修复版本之前关闭
_enable_parallel_minor_merge降低数据不正确问题出现的概率,命令如下。obclient> ALTER SYSTEM SET _enable_parallel_minor_merge = false;设置
_enable_parallel_minor_merge = false若出现数据不正确问题,请联系 OceanBase 技术支持来应急修复正确性问题(可能会涉及到删索引表、删副本等非常规操作),切记不能私自操作。注意
OceanBase 数据库 V1.4.x ~ V3.2.x 版本均存在该正确性问题,且引入单分区并行转储(
_enable_parallel_minor_merge)后该问题更易暴露。