首批通过分布式安全可靠测评,为关键业务系统打造
活跃事务阻止已删除的索引回收副本会使 clog 无法回收最终导致 clog 盘占用 100% 的原因和解决方法
更新时间:2026-06-12 03:56
问题现象
当 clog 盘(/data/log1)磁盘占用百分比超过 clog_disk_utilization_threshold(默认值 80) 时,表明当前节点 clog 一直无法回收,此时可以查看冻结转储状态,因为冻结转储完成 MemTable 后,所产生的 clog 才能被安全回收。
含有关键 index is deleted, will del it, no need merge 信息的日志如下。
[2023-12-25 21:26:54.550295] INFO [STORAGE] ob_partition_store.cpp:2285 [99480][0][Y0-0000000000000000-0-0] [lt=5] [dc=0] index is deleted, will del it, no need merge(ret=0, pkey={tid:1102810162718163, partition_id:0, part_cnt:0}, table_id=1102810162718164)
且 __all_virtual_trans_stat 表中可以查询到日志对应 table_id 的活跃事务。
问题的风险及影响
索引涉及的主表会卡转储,导致租户 MemStore 内存越来越高、clog 无法回收、clog 盘占用越来越高,如果 MemStore 内存使用率达到 100% 此节点此租户会无法写入,clog 盘使用率达到 clog_disk_usage_limit_percentage 配置的百分比时此节点会不可用。
影响租户
影响 OceanBase 数据库中的 SYS 租户和 Oracle 租户以及 MySQL 租户。
适用版本
OceanBase 数据库 V3.x 版本。
解决方法及规避发生
解决方法:
通用排查步骤。
过滤日志关键字,查看阻塞 clog 回收的分区。
grep can_skip_base observer.log | grep 'need_record_=true'再根据分区 pkey 搜索日志。
[2023-12-25 21:26:54.550295] INFO [STORAGE] ob_partition_store.cpp:2285 [99480][0][Y0-0000000000000000-0-0] [lt=5] [dc=0] index is deleted, will del it, no need merge(ret=0, pkey={tid:1102810162718163, partition_id:0, part_cnt:0}, table_id=1102810162718164) observer.log.20231225213603:[2023-12-25 21:26:54.550390] INFO [STORAGE] ob_partition_store.cpp:2285 [99480][0][Y0-0000000000000000-0-0] [lt=91] [dc=0] index is deleted, will del it, no need merge(ret=0, pkey={tid:1102810162718163, partition_id:0, part_cnt:0}, table_id=1102810162718165)如查找到上述信息,说明该索引已经被删除,正在等待垃圾回收(Garbage Clean 即 GC)且主表的 schema 还在,即
__all_virtual_table表中可以找到如上日志 table_id 对应的记录。此时主表的转储会卡住导致 clog 一直无法回收。
通过
__all_virtual_trans_stat查看到主表上有活跃的事务,主动杀掉事务后 clog 正常回收。杀死活跃事务。
通过
__all_virtual_trans_stat找到此表上的事务对应的 session id,使用命令kill session_id或在 OCP 上终止活跃会话来规避。
规避方式:
避免长时间不提交活跃事务、通过拆分事务来避免超大事务。