版本: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冲突。如果与两者一起设置,服务启动时会抛出异常并且退出。

  1. 方式一

<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>
  1. 方式二

<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