版本:clickhouse-server-24.5.1.1763-1.x86_64
Clickhouse 所在服务器磁盘空间不足,确认磁盘占用情况如下,业务数据仅占用2G空间,系统日志表占用60G。需要搞清楚系统日志表磁盘高占用的原因和清理方案。
ClickHouse 的系统表(System Tables)是 ClickHouse 提供的一组特殊表,用于存储和管理数据库的元数据、状态信息、配置、日志等。这些表可以帮助用户监控数据库的运行状态、优化查询性能、排查问题等。
手动删除系统日志表分区
查看所有表的实际大小
SELECT table,
formatReadableSize(sum(bytes)) AS size
FROM system.parts
WHERE active
GROUP BY table;
┌─table───────────────────┬─size───────┐
1. │ part_log │ 4.47 GiB │
2. │ metric_log │ 3.39 GiB │
3. │ trace_log │ 9.00 GiB │
4. │ query_log │ 5.03 GiB │
5. │ processors_profile_log │ 32.87 GiB │
6. │ asynchronous_metric_log │ 2.76 GiB │
└─────────────────────────┴────────────┘
查看指定表的分区占用
SELECT
partition,
name AS part_name,
rows,
formatReadableSize(bytes_on_disk) AS size
FROM system.parts
WHERE database = 'system' AND table = 'trace_log'
ORDER BY partition;
手动删除去年的分区
#生成全部删除SQL,然后复制执行
SELECT
'ALTER TABLE system.trace_log DROP PARTITION ''' || partition || ''';' AS drop_sql
FROM system.parts
WHERE database = 'system' AND table = 'trace_log' AND partition LIKE '2024%';
ALTER TABLE system.trace_log DROP PARTITION '202407';
ALTER TABLE system.processors_profile_log DROP PARTITION '202407';
变更系统日志表配置
用户可以通过在/etc/clickhouse-server/config.d/
下创建与系统表同名的配置文件, 或者在/etc/clickhouse-server/config.xml
中设置相应配置项,来自定义系统日志表的结构。可供自定义的配置项如下:
database
: 系统日志表所在的数据库。这个选项目前已经不推荐使用。所有的系统日表都位于system
库中。table
: 接收数据写入的系统日志表。partition_by
: 指定PARTITION BY表达式。ttl
: 指定系统日志表TTL选项。flush_interval_milliseconds
: 指定日志表数据刷新到磁盘的时间间隔。engine
: 指定完整的表引擎定义。(以ENGINE =
开头)。 这个选项与partition_by
以及ttl
冲突。如果与两者一起设置,服务启动时会抛出异常并且退出。
方式一
<query_log>
<database>system</database>
<table>query_log</table>
<engine>Engine = MergeTree PARTITION BY event_date ORDER BY event_time TTL event_date + INTERVAL 30 day</engine>
<flush_interval_milliseconds>7500</flush_interval_milliseconds>
<max_size_rows>1048576</max_size_rows>
<reserved_size_rows>8192</reserved_size_rows>
<buffer_size_rows_flush_threshold>524288</buffer_size_rows_flush_threshold>
<flush_on_crash>false</flush_on_crash>
</query_log>
方式二
<query_log>
<database>system</database>
<table>query_log</table>
<partition_by>toYYYYMM(event_date)</partition_by>
<ttl>event_date + INTERVAL 30 DAY DELETE</ttl>
<flush_interval_milliseconds>7500</flush_interval_milliseconds>
<max_size_rows>1048576</max_size_rows>
<reserved_size_rows>8192</reserved_size_rows>
<buffer_size_rows_flush_threshold>524288</buffer_size_rows_flush_threshold>
<flush_on_crash>false</flush_on_crash>
</query_log>
变更配置后,重启clickhouse-server使之生效。
systemctl restart clickhouse-server