tidb删除空间回收问题

【 TiDB 使用环境】生产环境 /测试/ Poc
【 TiDB 版本】
【复现路径】做过哪些操作出现的问题
【遇到的问题:问题现象及影响】
【资源配置】进入到 TiDB Dashboard -集群信息 (Cluster Info) -主机(Hosts) 截图此页面
【附件:截图/日志/监控】
delete删除数据后,手动compact,空间无法释放
手动compact命令:./tikv-ctl --host xxxxx --data-dir /data/tidb-data/tikv-20160 compact -d kv
现在的文件系统为:


三个节点都一样,但是手动compact没有释放,当时还是60%磁盘使用率,有没有哪位高手遇到过

我等了一天有compact的,绝对超过10分钟了

默认 10 分钟 gc 一次,确认 gc 成功的情况下。说明mvcc 的数据已经删除成功。compact 是底层 RocksDB 根据每层算分,会自动执行 compact。本身底层已经是合并删除过重复数据,如果数据本身就比较连续,感觉除了第一层有重复数据,如果比较多,可能会有一些效果,感觉手工执行效果可能也不是很明显。

手动compact 用如下命令对write default cf处理,需要对最后一层一起compact,否则基本没效果
tikv-ctl --host tikv_ip:port compact -c write -d kv --bottommost force

1 个赞

嗯,我这样写不行吗

看这两个帖子:

delete不释放硬盘空间,不要等了,手工compact各种方式我都测试过,没有用

你那样只是对default cf(不指定的话默认default)进行compact,需要指定对write cf也进行一下compact才行

1 个赞


我看了我开启了compaction功能了

虽然这样写,但实际没效果

我测过,delete测了几天也不会释放硬盘空间
关于表删除数据后gc和region merge - :ringer_planet: TiDB 技术问题 - TiDB 的问答社区 (asktug.com)

ok,好的,多谢

的确是这样哈

delete 应该会释放空间,不释放我觉得是 bug,反馈区反馈下。

也不是,其他常见的数据库delete也不释放硬盘空间,比如oracle mysql等等,只是标记删除,空间留着重复使用

那是空间碎片吧,TiDB 应该不是 我直观感觉是 gc 和 compact 的 bug。何不反馈下呢。

不是bug,具体这样的
TiDB中删除数据后会立即释放空间吗?
DELETE,TRUNCATE和DROP都不会立即释放空间。对于TRUNCATE和DROP操作,在达到TiDB的GC (garbage collection)时间后(默认10分钟),TIDB的GC机制会删除数据并释放空间。对于DELETE操作TiDB的GC机制会删除数据,但不会释放空间而是当后续数据写入RocksDB且进行compact时对空间重新利用。

compact 是无时无刻都在做的,最后都会 compact 最后一层,释放空间是 compact 做的,但是一直不释放 我认为是有问题。
以前我遇到过类似情况 就是 compact 有 bug 导致的。所以我才说的 不释放感觉有问题。

1 个赞

我在 7.1版本做过几次测试,比如一个表几千万条数据全部delete,几天后占用空间都不少
现在这个表是这样