清理ClickHouse服务占用磁盘空间

Administrator
发布于 2025-07-09 / 2 阅读
0
0

清理ClickHouse服务占用磁盘空间

执行 OPTIMIZE TABLE your_table FINAL; 命令后,磁盘空间减少了,这是预期的行为。以下是原因和详细解释:

为什么磁盘空间会减少

  • 1、数据合并:
    OPTIMIZE TABLE ... FINAL 命令会强制 ClickHouse 合并数据部分(parts)。在 ClickHouse 中,数据是以分区和部分(parts)的形式存储的。每次插入数据时,都会创建新的数据部分。当你删除数据时,删除标记会被添加到这些部分中,而不是立即删除数据。

  • 2、删除标记清理:
    在执行 OPTIMIZE TABLE ... FINAL 命令时,ClickHouse 会合并这些数据部分,并清理被标记为删除的数据。这意味着实际的物理数据会被删除,从而释放磁盘空间。

  • 3、数据压缩:
    合并操作还会重新压缩数据。通过合并多个小的部分成为一个大的部分,数据压缩效果会更好,从而减少占用的磁盘空间。

进一步优化和检查

1、检查表的分区和数据部分:

你可以查看表的分区和数据部分,了解哪些部分占用了大量空间。

SELECT
    partition,
    name,
    active,
    formatReadableSize(bytes_on_disk) AS size
FROM system.parts
WHERE table = 'your_table'
ORDER BY bytes_on_disk DESC;

2、监控磁盘使用情况:

定期监控系统的磁盘使用情况,确保及时发现和处理磁盘空间问题。

SELECT
    table,
    formatReadableSize(sum(bytes)) AS total_size
FROM system.parts
WHERE active
GROUP BY table
ORDER BY total_size DESC;
  • 执行以上sql后返回的内容
1. `trace_log` - 10.06 GiB
2. `part_log` - 4.70 GiB
3. `asynchronous_metric_log` - 4.40 GiB
4. `metric_log` - 3.98 GiB
5. `project_logs` - 1.36 GiB
  • 2.1、手动清理旧数据

你也可以通过 SQL 语句手动删除旧的数据。例如:

-- 删除 30 天前的 trace_log 日志
ALTER TABLE system.trace_log DELETE WHERE event_date < today() - 30;

-- 删除 30 天前的 query_log 日志
ALTER TABLE system.query_log DELETE WHERE event_date < today() - 30;

-- 删除 30 天前的 part_log 日志
ALTER TABLE system.part_log DELETE WHERE event_date < today() - 30;

-- 删除 30 天前的 asynchronous_metric_log 日志
ALTER TABLE system.asynchronous_metric_log DELETE WHERE event_date < today() - 30;

-- 删除 30 天前的 metric_log 日志
ALTER TABLE system.metric_log DELETE WHERE event_date < today() - 30;
  • 2.2、 优化日志表

在清理完旧数据后,执行 OPTIMIZE TABLE 命令来释放磁盘空间:

OPTIMIZE TABLE system.trace_log FINAL;
OPTIMIZE TABLE system.query_log FINAL;
OPTIMIZE TABLE system.part_log FINAL;
OPTIMIZE TABLE system.asynchronous_metric_log FINAL;
OPTIMIZE TABLE system.metric_log FINAL;
  • 2.3、检查和优化用户表

对于用户表(如 project_logssamples),你可以执行类似的操作来清理和优化数据:

-- 删除旧数据
ALTER TABLE project_logs DELETE WHERE event_date < today() - 30;

-- 优化表
OPTIMIZE TABLE project_logs FINAL;

3、配置自动合并:

配置 ClickHouse 进行自动合并,以减少手动维护的需求。你可以在表创建时或通过 ALTER TABLE 命令来设置合并参数。

ALTER TABLE your_table MODIFY SETTING merge_with_ttl_timeout = 3600;

4、定期维护:

定期执行维护操作,如 OPTIMIZE TABLE,以确保数据不会长期积累。

总结

执行 OPTIMIZE TABLE your_table FINAL; 命令后磁盘空间减少,是因为该命令强制合并和清理了被标记为删除的数据,从而释放了磁盘空间。这是 ClickHouse 数据管理的正常行为。通过定期维护和监控,你可以有效管理 ClickHouse 的磁盘空间使用情况。


评论