clickhouse清除system 表数据释放磁盘空间

注:clickhouse 默认系统有以下几个 log 表,如下

bash 复制代码
system.asynchronous_metric_log  
system.metric_log
system.part_log
system.query_log
system.query_thread_log
system.session_log 
system.trace_log 

如果不想看原文直接执行以下语句即可。

bash 复制代码
ALTER table `system`.asynchronous_metric_log  DELETE where event_date is not null;
ALTER table `system`.metric_log DELETE where event_date is not null;
ALTER table `system`.part_log DELETE where event_date is not null;
ALTER table `system`.query_log DELETE where event_date is not null;
ALTER table `system`.query_thread_log DELETE where event_date is not null;
ALTER table `system`.session_log DELETE where event_date is not null;
ALTER table `system`.trace_log DELETE where event_date is not null;

OPTIMIZE TABLE system.asynchronous_metric_log FINAL;
OPTIMIZE TABLE system.metric_log FINAL;
OPTIMIZE TABLE system.part_log FINAL;
OPTIMIZE TABLE system.query_log FINAL;
OPTIMIZE TABLE system.query_thread_log FINAL;
OPTIMIZE TABLE system.session_log FINAL;
OPTIMIZE TABLE system.trace_log FINAL;

问题

为什么我执行ALTER table system.asynchronous_metric_log DELETE where event_date is not null;和 truncate table system.asynchronous_metric_log; 后store 文件不见减少

📌 执行 ALTER TABLE ... DELETE 或 TRUNCATE TABLE 后,为什么 store 目录文件没有减少?

当你执行以下命令:

sql 复制代码
ALTER TABLE system.asynchronous_metric_log DELETE WHERE event_date IS NOT NULL;

或者

sql 复制代码
TRUNCATE TABLE system.asynchronous_metric_log;

你可能发现 /var/lib/clickhouse/store/ 目录下的文件没有减少,或者磁盘空间没有释放。

✅ 1. DELETE 只是标记数据删除,并不会立刻释放磁盘

在 ClickHouse 里,DELETE 并不会 立即 物理删除数据,而是:

创建一个"删除标记",表示哪些数据不再可见。

实际数据仍然存储在 store/ 目录中,但不会被查询结果返回。

数据真正删除要等到 MergeTree 进行合并(Merge)时,ClickHouse 才会清理过时数据。

🔹 解决方案:手动触发合并

你可以手动执行 OPTIMIZE 命令:

sql 复制代码
OPTIMIZE TABLE system.asynchronous_metric_log FINAL;

✅ 这会强制 ClickHouse 合并数据,并物理删除被标记为删除的数据。

✅ 2. TRUNCATE 可能只是逻辑清理,并不一定释放文件

sql 复制代码
TRUNCATE TABLE system.asynchronous_metric_log;

🔹 TRUNCATE 主要做的是:

清除 system.asynchronous_metric_log 的所有数据,使其不可见。

但 不会立刻释放磁盘空间,因为 ClickHouse 可能会延迟文件删除,以提高性能。

✅ 解决方案:手动触发磁盘回收

bash 复制代码
sudo systemctl restart clickhouse-server

这会重启 ClickHouse 服务器,并确保 ClickHouse 释放已经删除的数据文件。

✅ 3. store/ 目录中的数据文件为何不减少?

ClickHouse 采用 MergeTree 存储引擎,它不会立即删除文件,而是等到数据合并后才会清理旧文件。即使你 DELETE 或 TRUNCATE 了表,store/ 目录的文件仍然可能保留一段时间。

🔹 如何检查哪些文件仍在占用空间?

bash 复制代码
du -sh /var/lib/clickhouse/store/*

🔹 如果想立即释放空间

sql 复制代码
OPTIMIZE TABLE system.asynchronous_metric_log FINAL;

然后执行:

bash 复制代码
sudo systemctl restart clickhouse-server

结论

命令 是否释放空间? 解决方案

DELETE ❌ 不会立即释放 OPTIMIZE TABLE ... FINAL; 后重启

TRUNCATE ⚠ 可能不会释放 重启 ClickHouse

OPTIMIZE FINAL ✅ 强制清理数据 确保数据合并后释放磁盘

🚀 推荐执行 OPTIMIZE TABLE ... FINAL;,然后重启 ClickHouse,确保 store/ 目录清理! 🎯

相关推荐
2601_962218617 小时前
万象生鲜系统业财一体化底层打通技术自动生成经营账单
大数据·数据库·人工智能·python·算法
李高钢7 小时前
Python FastAPI 框架入门:从零搭建你的第一个高性能 API 服务
数据库·python·fastapi
yuzhiboyouye9 小时前
那xml对应的sql语法,列举一下
xml·数据库·sql
. . . . .9 小时前
乐观锁 vs 悲观锁
数据库·sql
Leo.yuan9 小时前
2026年多数据库实时同步的四种架构方案及工具推荐
数据库·架构
hasty10 小时前
Origin 校验不是身份认证:MySQL MCP Server 漏洞给 AI 平台的警告
数据库·mysql·安全
梦想平凡11 小时前
百游棋牌源代码开发搭建教程(五):房间创建、座位分配与请求幂等实现
前端·javascript·数据库·源代码管理
凤山老林11 小时前
Spring Boot 整合 Flowable 的企业级落地指南
数据库·spring boot·后端·flowable·工作流
企业数字化笔记11 小时前
AI写的系统出现504怎么办?接口超时和数据库慢查询排查
数据库·后端
2601_9622186112 小时前
万象生鲜系统订单全生命周期状态同步技术实现业务可视
大数据·数据库·人工智能·python·算法