tidb-server 加索引失败后 内存和临时文件都未清理


如图,通过 CDC 同步到下游 TiDB 集群的 DDL 执行失败,状态为 rollback done,但是tidb-server 上的临时文件,以及内存都没清理。(两台 cdc 节点的内存恢复正常,是因为 OOM 重启过)

目前使用 TiCDC 的新架构 ?还是老架构同步的?

tidb-sever-heap.pprof (8.9 MB)
这是其中一台 tidb-server 的heap pprof,不过感觉不太准,这里只有 5 G,实际上是占用了 30G。


还是老架构同步的,上游 TiDB 版本是 7.5.2

当初我也想用tidb–>ticdc–>tidb,后来想想,如果ticdc到tidb一些语句执行失败,就会影响上游tidb,最后选择用tidb–>ticdc—>kafka—>tidb,写入kafka失败的概率很小,就算下游有问题,也不影响上游tidb的使用。

  1. TiDB-Runtime 监控里的信息

失败原因倒是找到了,是因为存储问题导致的,但是实际上告警的这台机器是冷数据盘,虽然剩余小于 10%,但实际可用空间还有1T 空间可用,用来加索引绰绰有余。。
ERROR 1105 (HY000): the remaining storage capacity of TiKV(172.18.****:20160) is less than 10%; please increase the storage capacity of TiKV and try again

存储问题指得是什么问题?方便的话可以展开一下呢?

确认一下存储这里是什么架构 ?共享存储还是 SSD 盘直通? 和TiDB 标准化部署有什么差异?

就是普通的 Nvme SSD 盘,是用TiUP 部署的。
应该是 TiDB 在加索引时候会检查 TiKV 的磁盘使用率,如果达到了90%,就会主动退出。但是在退出时,并没有清理tidb-server 内存和 temp-dir 的数据,导致磁盘空间和内存都一直不会释放。

这里其实还有第二个问题,这个只是判断了磁盘使用率,而大数据盘的10%真实剩余的空间还很大(还有1T 多),其实完全能让索引执行成功。