ClickHouse 系统表清理与维护

本笔记记录了ClickHouse系统表数据的清理和定期维护步骤,以确保系统性能并控制存储成本。

1. 前置准备:用户权限

  • 登录 Manager 页面: 首先需要登录到 ClickHouse 的 Manager 页面。
  • 创建用户: 创建一个具有系统表修改权限的 ClickHouse 用户。具体操作请参考 [ClickHouse 用户及权限管理文档](链接地址 - 请替换成实际文档链接)。 确保该用户拥有 ALTER TABLE 权限,以便后续操作。

2. 连接客户端节点

  • 使用创建的用户登录: 使用在步骤1中创建的用户登录到 ClickHouse 客户端节点。
  • 连接服务端: 确保客户端成功连接到 ClickHouse 服务端。 具体步骤请参考 [使用 ClickHouse 客户端文档](链接地址 - 请替换成实际文档链接)。

3. 清理存量系统表数据

执行以下 SQL 命令来清理现有的系统表数据。 这会删除所有历史数据,请谨慎操作!

truncate table system.metric_log on cluster default_cluster;
truncate table system.asynchronous_metric_log on cluster default_cluster;
truncate table system.part_log on cluster default_cluster;
truncate table system.trace_log on cluster default_cluster;
truncate table system.query_views_log on cluster default_cluster;
truncate table system.query_log on cluster default_cluster;

重要提示:default_cluster 替换为您的实际集群名称。

4. 配置系统表的 TTL (数据保留策略)

为系统表配置 TTL(Time To Live),以便自动删除超过指定时间的数据。 以下命令将保留近30天的数据:

ALTER TABLE system.metric_log ON CLUSTER default_cluster MODIFY TTL event_time + INTERVAL 30 DAY;
ALTER TABLE system.asynchronous_metric_log ON CLUSTER default_cluster MODIFY TTL event_time + INTERVAL 30 DAY;
ALTER TABLE system.part_log ON CLUSTER default_cluster MODIFY TTL event_time + INTERVAL 30 DAY;
ALTER TABLE system.trace_log ON CLUSTER default_cluster MODIFY TTL event_time + INTERVAL 30 DAY;
ALTER TABLE system.query_views_log ON CLUSTER default_cluster MODIFY TTL event_time + INTERVAL 30 DAY;
ALTER TABLE system.query_log ON CLUSTER default_cluster MODIFY TTL event_time + INTERVAL 30 DAY;

重要提示:default_cluster 替换为您的实际集群名称。

5. 查看库和表的大小

以下 SQL 查询可以帮助您监控系统表的存储使用情况:

5.1 查看所有库的大小

SELECT
    database,
    ROUND(((sum(bytes) / 1024) / 1024) / 1024, 2) AS size_gb
FROM system.parts
GROUP BY database;

5.2 查看指定库的表大小 (例如,查看 system 库)

SELECT
    table,
    ROUND(SUM(bytes) / 1024 / 1024 / 1024, 2) AS size_gb
FROM system.parts
WHERE database = 'system'
GROUP BY table
ORDER BY size_gb DESC;

备注:

  • 务必将 default_cluster 替换为您的实际集群名称。
  • 根据需要调整 TTL 的时间间隔,以满足您的数据保留需求和存储限制。
  • 定期执行清理操作(例如,每月一次)并监控系统表的存储使用情况。
  • 在执行 truncate table 命令之前,请务必备份重要数据(如果需要)。