概述
- 目标:通过TTL将过期数据自动删除或移动到低成本存储,并使用StoragePolicy实现冷热分层,降低成本同时保障查询效率。
- 适用:时序/日志数据、长期保留与分层访问场景。
核心与实战
- 存储策略定义:
```
/data/fast/
/data/cold/
fast
cold
```
- 表与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数据的自动分层与清理,在控制成本的同时维持热点查询性能。
发表评论 取消回复