---
title: ClickHouse TTL与分层存储策略实践
keywords:
- ClickHouse
- TTL
- 分层存储
- StoragePolicy
- MOVE PART
description: 使用TTL与存储策略实现冷热分层与数据自动清理,提供可验证的DDL与系统表验证,优化成本与性能。
date: 2025-11-26
tags:
- ClickHouse
- MOVE PART
- StoragePolicy
- TTL
- 分层存储
- 存储
- 数据
categories:
- 文章资讯
- 编程技术
---
概述
- 目标:通过TTL将过期数据自动删除或移动到低成本存储,并使用StoragePolicy实现冷热分层,降低成本同时保障查询效率。
- 适用:时序/日志数据、长期保留与分层访问场景。
核心与实战
- 存储策略定义:
<storage_configuration>
<disks>
<fast>
<path>/data/fast/</path>
</fast>
<cold>
<path>/data/cold/</path>
</cold>
</disks>
<policies>
<hot_cold>
<volumes>
<hot>
<disk>fast</disk>
</hot>
<cold>
<disk>cold</disk>
</cold>
</volumes>
</hot_cold>
</policies>
</storage_configuration>
- 表与TTL:
CREATE TABLE logs (
ts DateTime,
level String,
message String
) ENGINE = MergeTree
ORDER BY (ts)
TTL ts + INTERVAL 30 DAY DELETE,
ts + INTERVAL 7 DAY TO DISK 'cold'
SETTINGS storage_policy='hot_cold';
- 手动迁移分区:
ALTER TABLE logs MOVE PARTITION '2025-11-26' TO DISK 'cold';
示例
- 验证TTL与分层:
SELECT partition, name, disk_name FROM system.parts WHERE table='logs' ORDER BY partition;
- 清理观察:
SELECT * FROM system.part_log ORDER BY event_time DESC LIMIT 20;
验证与监控
- 资源与空间:
- 观察
system.disks与system.parts空间占用;确保移动后热盘压力下降。 - 查询性能:
- 热数据保留在fast盘;冷数据查询可接受较高延迟。
- TTL执行:
- 确认
TTL任务周期执行;避免过期数据堆积。
常见误区
- 未配置storage_policy导致
TO DISK无效;需指定策略。 - TTL仅在合并过程中执行;合并不足时清理延迟,需要调整合并设置或手动触发。
- 将全部数据移至冷盘导致热点查询慢;需按访问模式分层。
结语
- 通过TTL与存储策略可实现ClickHouse数据的自动分层与清理,在控制成本的同时维持热点查询性能。

发表评论 取消回复