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
命令之前,请务必备份重要数据(如果需要)。
评论