ClickHouse删除表后磁盘未释放,寻求等效PostgreSQL vacuum的清理方案
ClickHouse删表后磁盘未释放问题解决方案
核心原因
ClickHouse默认对删表操作做了异步安全处理,执行DROP TABLE后不会立刻删除物理文件:
- 被删除的表会先被打上删除标记,对应数据文件移动到所属库目录下的
detached文件夹 - 后台清理线程默认会等待8分钟后才会真正删除物理文件,等待时长由配置项
data_path_default_proposal_interval控制 - 集群复制表场景下,需要所有副本都完成删表操作,才会触发物理文件清理流程
等效PostgreSQL VACUUM的清理操作
即时主动清理
执行以下SQL可以立刻触发无用数据清理,无需等待后台线程调度:
SYSTEM DROP UNUSED PARTS
该操作会扫描所有标记为待删除的分区、表文件,直接释放对应的磁盘空间,效果和PostgreSQL的VACUUM FULL类似。
紧急情况手动清理
如果需要立刻释放空间,也可以直接在操作系统层删除detached目录下的无用文件(确认数据无需恢复后再操作):
rm -rf /var/lib/clickhouse/data/<你的库名>/detached/*
操作无需重启ClickHouse服务,执行后空间会立刻释放。
可选配置调整
如果希望缩短删表后的默认等待清理时间,可以修改config.xml配置:
<!-- 单位为秒,以下配置改为1分钟后自动清理 --> <data_path_default_proposal_interval>60</data_path_default_proposal_interval>
修改配置后重启服务生效。
内容的提问来源于stack exchange,提问作者bleutner
相关产品推荐
相关产品推荐

