clickhouse清理简单总结

本文最后更新于:几秒前

clickhouse清理简单总结

背景:clickhouse磁盘占用过大,需要清理以腾出可用空间,对clickhouse不太熟悉,记录一下处理过程,以供参考

  1. 先查看哪些表占用空间最多:
1
2
3
4
5
6
7
8
SELECT
database,
table,
formatReadableSize(sum(bytes_on_disk)) AS total_size
FROM system.parts
WHERE active
GROUP BY database, table
ORDER BY sum(bytes_on_disk) DESC

  1. 查询结果如上,query_thread_log,query_log是 ClickHouse 的系统操作日志表,占用空间很大,基本可以判断是日志保留时间过长或配置异常导致的。

  2. delete删除很慢,大表的情况下几乎不能使用,(保险些)不清除全表的情况下可以按分区清理。先确认下这个表是否有分区。

1
2
3
SELECT *
FROM system.tables
WHERE name = 'query_thread_log' AND database = 'system';

建表结果如下:

1
2
3
4
-- 省略
ENGINE = MergeTree
PARTITION BY toYYYYMM(event_time)
-- 省略

看出,确实按照event_time进行分区。

  1. 我们可以先来清理历史分区
1
ALTER TABLE system.query_thread_log DROP PARTITION 202312;
  1. 使用sql查询已有分区也会卡住,可以查看目录文件确认有哪些分区
1
2
cd ${ck_home}/data/system/query_thread_log
ls

可以看到如下目录(看起来一直没有清理过):

6. 同样地,query_log也可以清理

  1. 进一步,可以创建定时任务,来定时清理过期的日志文件,保持磁盘空间。

  2. 若确认近期的日志也不需要,则可以直接清空整张表

1
2
3
4
5
-- 清空 query_log 表
TRUNCATE TABLE system.query_log;

-- 清空 query_thread_log 表
TRUNCATE TABLE system.query_thread_log;

clickhouse清理简单总结
https://blog.caozeal.cn/2025/05/19/clickhouse清理简单总结/
作者
傲然绝唳
发布于
2025年5月19日
许可协议