突发批量DML操作引发的灾难

【TiDB 使用环境】生产环境
【操作系统】
【部署方式】云上部署(什么云)/机器部署(什么机器配置、什么硬盘)
【集群数据量】2.8T
【集群节点数】主备库都是3个TIKV,3个TIDB SERVER,3个pd。2个CDC。
【遇到的问题:问题现象及影响】
由于主库突发的批量insert和delete操作,导致cdc备库tikv三个节点爆满,查了一下GC设置的是24小时,此时备库只能查询,其他修改类的操作都做不了了,修改gc的时间和drop database都报错tikv满。此时主库的数据量2.8T左右,备库的数据量达到了将近6T。尝试重启备库的集群,结果TIDB server三个节点全部无法启动。

tikv我记得会在数据目录按照分区大小,按照百分比预先创建个大文件的,以预防空间用满下可以紧急处理。

去删一删无用的 日志什么的吧,还有 space_placeholder_file 文件也可以删除

还有你没监控的吗?为告警的的吗

删除过期数据或者无效索引吧

备库 TiKV 磁盘爆满(6T 远超主库 2.8T),CDC 同步主库批量 DML 产生大量历史版本 + GC 未及时清理,导致磁盘被旧数据占满,进而触发 TiDB 启动失败。需先紧急释放磁盘空间,再修复集群启动问题,最后优化 GC 和 CDC 配置避免复发。

需要清理 RocksDB 过期快照和冗余文件吧

你说的是那个预留空间吧,默认5%那个是吧,修改不了

有告警

都清理了,很快又满了

是的,后面通过在cdc节点上临时添加了一个server节点和一个kv节点,kv平衡了好几个小时,总算释放了一部分空间,其他server节点也都成功启动了。

重点是,怎么预防和避免这种突发状况呢,感觉gc设置并不是关键。

2 个赞

清理 TiKV 节点的临时文件试试呢

1 个赞

先删除备库中非关键数据(如过期日志、临时表),或扩容备库 TiKV 磁盘,确保有至少 5% 空闲空间,让基础操作恢复。

2 个赞

都清理了,磁盘也没空间里。后来临时把cdc节点加了个kv节点,后面又删了。

都清理了

空间是预分配的,应该问题不大

释放一些空间,再观察呢

在线扩容的话,还有空间吗

没了,把cdc节点的空间临时加了个kv节点

空间满了影响挺大的