问题现象
在大量频繁建删表并迅速导入数据的场景下,执行均衡操作 transfer 触发了错误代码 7123,具体表现为 transfer 负载均衡任务因等待 follower 回放超时而无法正常推进至 start 状态。
关键信息
错误代码: 7123。 触发条件: 频繁建删表后迅速导入数据,随后执行均衡操作。 日志分析: 观察到在执行均衡操作时,发现有 wait_ls_replay_event 报错超时,并且存在大量的 pending task 等着回放,回放速度明显滞后于日志拉取速度。


问题原因
此问题是由于内核的 BUG 引起。在用户频繁大量进行表或者分区的创建和删除操作,并紧接着导入大量数据的情况下,OceanBase 数据库的回放机制会变得较为缓慢。这是因为 OceanBase 数据库的回放是乱序并发的,创建分区的日志和 DML 日志不在同一个回放队列中,它们会进行并发乱序处理,这可能导致在回放 DML 日志时因找不到对应的分区而产生错误重试。这个会需要等到另一个队列回放到创建分区的日志才会继续回放影响这个队列的回放速度,进而影响整个回放的速度。当回放速度跟不上日志拉取的速度时,会导致 pending task 数量长期超过 1000,进一步加剧了回放的延迟。在这种情况下,如果触发了 transfer 操作,由于需要等待 follower 回放到特定的位点,因此容易超时并报错 -7123。
问题的风险及影响
回放延迟。
transfer 操作无法继续推进。
适用版本
OceanBase 数据库 V4.x 版本。
解决方法
应急处理: 一旦出现 transfer 报错 -7123,目前唯一的解决办法是等待,等待回放赶上。
长期解决方案: 调整均衡操作的执行时机,尽量选择在业务低峰期进行,在 V4.3.x 版本上需要在执行均衡的同时可以减小
partition_balance_schedule_interval参数值(用于分区均衡调度周期,默认值 2h),使分区均衡的各个小步骤能够更快的触发。
规避方式
尽量避免在业务高峰期执行均衡操作,以减少因回放延迟导致的 transfer 超时问题。
定期在业务低峰期执行均衡任务,确保系统健康运行,避免因磁盘空间不足等问题引发更严重的故障。