版本:clickhouse-server-24.5.1.1763-1.x86_64

言语

Clickhouse 所在服务器磁盘空间不足,需要确认磁盘空间占用的数据来源,如果是系统表可以做临时清理或保留策略变更。如果是业务数据库表依据业务情况清理或磁盘扩容。

系统日志表

ClickHouse 的系统表(System Tables)是 ClickHouse 提供的一组特殊表,用于存储和管理数据库的元数据、状态信息、配置、日志等。这些表可以帮助用户监控数据库的运行状态、优化查询性能、排查问题等。

查询数据表占用

确认磁盘占用情况如下,业务数据仅占用2G磁盘空间,系统(system)日志表占用60G。

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

执行变更

先做备份,再做变更

  • 方式一:表引擎级别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>
  •  方式二:显式声明TTL
<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
Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐