ClickHouse 数据生命周期管理:TTL 自动过期与冷热分层策略

发布时间:2026/7/15 21:49:25

ClickHouse 数据生命周期管理:TTL 自动过期与冷热分层策略
ClickHouse 数据生命周期管理TTL 自动过期与冷热分层策略一、数据不是越多越好是会花钱的大家好我是朱大喜。上个月我们团队的 ClickHouse 集群告警磁盘使用率到了 87%。DBA 在群里发了一句谁的表在堆数据能不能清一下我打开一看好家伙有个日志表存了 3 年的明细数据占了 4TB 空间。但实际业务查询 90% 集中在近 30 天超过 6 个月的数据基本没人碰过。这就像你在北京三环租了个大仓库里面塞满了三年前的旧报纸——每个月都在为它们付房租。ClickHouse 作为一个列存分析引擎写入快、压缩狠但不意味着你可以无限往里塞数据。数据是有生命周期的热数据需要存在 SSD 上保证查询速度温数据可以挪到 HDD 降低成本冷数据要么归档要么直接删除。ClickHouse 的 TTLTime To Live机制就是为这个场景量身定做的。二、TTL 的三种玩法删、挪、聚合TTL 在 ClickHouse 里可以作用在三个层面表级别、列级别、行级别。不同层面的 TTL 解决不同的问题。graph TB subgraph 数据生命周期 A[数据写入br/当天] -- B[热数据br/SSDbr/近7天] B -- C[温数据br/HDDbr/7-90天] C -- D[冷归档br/对象存储br/90-365天] D -- E[过期删除br/超过365天] end subgraph TTL 策略映射 F[行级TTL: 删除过期行] -- E G[分区TTL: 移动冷热盘] -- B G -- C H[列级TTL: 聚合历史数据] -- D end style B fill:#FF5722,color:#fff style C fill:#FF9800,color:#fff style D fill:#2196F3,color:#fff style E fill:#9E9E9E,color:#fff行级 TTL —— 自动删除过期数据。这是最常用也最简单的场景。比如日志表只保留 90 天超过 90 天的数据自动清理。设置也简单-- 创建一个带行级TTL的表超过90天的数据自动删除 CREATE TABLE app_logs ( event_time DateTime, -- 事件时间TTL以这个字段为基准 user_id UInt64, event_type String, event_data String ) ENGINE MergeTree() PARTITION BY toYYYYMMDD(event_time) -- 按天分区方便整分区删除 ORDER BY (event_type, user_id) TTL event_time INTERVAL 90 DAY; -- 核心event_time超过90天整行删除TTL 清理不是实时触发的而是在后台 Merge 阶段进行的。ClickHouse 会在合并数据分片时检查 TTL 条件符合条件的行直接跳过不写入新分片。这意味着清理有延迟但零性能代价——数据是在 Merge 过程中自然消失的不会阻塞查询。你还可以给 TTL 指定DELETE关键字明确表达意图虽然默认行为就是删除-- 显式指定 DELETE 按日期分区做整分区清理性能最优 TTL event_time INTERVAL 90 DAY DELETE WHERE event_type debug -- 只删除debug日志关键日志保留更久列级 TTL —— 保留行但清理列。有些场景你不想删整行只想清理某些大字段。比如订单表里有个 JSON 格式的detail列存了用户行为路径这个字段 30 天后就没参考价值了但订单的基本信息金额、状态需要保留。-- 列级TTLdetail_json字段30天后自动清空其他列保留 CREATE TABLE orders ( order_id UInt64, order_date Date, amount Decimal(10,2), status String, detail_json String -- 这个字段只保留30天 ) ENGINE MergeTree() PARTITION BY toYYYYMM(order_date) ORDER BY order_id TTL order_date INTERVAL 30 DAY DELETE WHERE 11, -- 这是行级TTL -- detail_json列在order_date30天后被替换为默认值空字符串 detail_json TTL order_date INTERVAL 30 DAY;列级 TTL 的一个妙用是对老数据做自动聚合。比如原始粒度数据保留 30 天超过 30 天的自动聚合成小时级汇总-- 更优雅的做法老数据自动聚合而不是全部丢弃 CREATE TABLE metrics_detail ( ts DateTime, metric_name String, value Float64, tags String ) ENGINE MergeTree() PARTITION BY toYYYYMMDD(ts) ORDER BY (metric_name, ts) TTL ts INTERVAL 30 DAY GROUP BY toStartOfHour(ts) AS ts, -- 聚合到小时粒度 metric_name, sum(value) AS value, AS tags -- tags字段在聚合后丢弃 SETTINGS materialize_ttl_after_modify 0;三、冷热分层SSD 和 HDD 搭配使用如果你的 ClickHouse 节点既有 SSD 又有 HDD最常见的配置是系统盘 SSD 数据盘 HDD 组 RAID可以使用存储策略来实现冷热分层。热数据放 SSD 上保证查询性能冷数据自动迁到 HDD 上节省成本。-- 第一步在 config.xml 中定义存储策略DBA操作 -- storage_configuration -- disks -- ssd -- path/data/ssd/clickhouse//path -- /ssd -- hdd -- path/data/hdd/clickhouse//path -- /hdd -- /disks -- policies -- hot_cold -- volumes -- hot -- diskssd/disk -- max_data_part_size_bytes107374182400/max_data_part_size_bytes -- /hot -- cold -- diskhdd/disk -- /cold -- /volumes -- /hot_cold -- /policies -- /storage_configuration -- 第二步建表时指定存储策略 TTL自动迁移 CREATE TABLE events ( event_time DateTime, user_id UInt64, event_type LowCardinality(String), -- LowCardinality 降低基数类型的存储 properties Map(String, String) -- Map类型适合存动态属性 ) ENGINE MergeTree() PARTITION BY toYYYYMM(event_time) ORDER BY (event_type, user_id) TTL event_time INTERVAL 7 DAY TO VOLUME hot, -- 7天内在SSD event_time INTERVAL 90 DAY TO VOLUME cold; -- 7-90天迁移到HDD这里TO VOLUME指令的神奇之处在于它不是复制数据而是物理上将数据分片从 SSD 目录移动到 HDD 目录。这个迁移同样发生在后台 Merge 过程中不影响查询。冷热分层的成本收益非常可观。以一个 10 节点集群为例如果全部用 SSD 存储每节点配 4TB SSD月成本很高。用冷热分层每节点配 1TB SSD 10TB HDDSSD 只放近 7 天热数据90% 以上的数据落在 HDD 上总存储成本能降低 60% 以上而查询性能只在对冷数据做全量扫描时才受到影响——而这种查询本来就不多见。四、TTL 使用中的三个避坑指南坑一TTL 不是删分区是删行。很多同学以为设置了TTL event_time INTERVAL 90 DAY就万事大吉了ClickHouse 会自动把 90 天前的分区整个删掉。不是的——TTL 是按行判断的而且依赖 Merge 过程。如果你的表写入量不大、Merge 不频繁过期数据可能存留很长时间才被清理。如果想立即释放空间手动ALTER TABLE ... DROP PARTITION才是正解。坑二TTL 表达式里只能用表里的列。你不能写TTL now() - INTERVAL 90 DAY因为now()不是表的列。必须以表中的时间列为基准。这其实是个好设计——防止你不小心写错导致整表数据被清。坑三列级 TTL 清空后数据并没有真的从磁盘消失。ClickHouse 的列级 TTL 是把列值替换为默认值通常是空字符串或 0物理上这些空值仍然占据压缩存储空间。但好消息是ClickHouse 的列存压缩对空值的处理非常高效——连续的空值压缩到几乎为零。所以空间释放效果虽然不如行级 TTL 直接但也足以满足大部分场景。-- 手动触发TTL清理在业务低峰期执行 ALTER TABLE app_logs MATERIALIZE TTL; -- 查看TTL相关信息确认清理前的数据量 SELECT partition, sum(rows) AS rows, formatReadableSize(sum(bytes_on_disk)) AS size, min(event_time) AS min_time, max(event_time) AS max_time FROM system.parts WHERE table app_logs AND active 1 GROUP BY partition ORDER BY partition DESC;五、总结ClickHouse 的 TTL 机制是数据生命周期管理的利器但不同层面的 TTL 有各自的适用场景行级 TTL 适合明确有丢弃时间的日志型数据列级 TTL 适合大字段的成本优化存储策略 TTL 适合冷热分层的成本控制。落地时的优先顺序建议先上行级 TTL解决磁盘被打爆的亡羊补牢问题再上存储策略冷热分层降成本最后考虑列级 TTL 和聚合 TTL精细优化。按照这个顺序逐步推进每一步都能看到立竿见影的效果。最后一句话磁盘空间不是大风刮来的——无论是物理机上的 SSD 还是云上的 EBS都在按 GB 计费。让你的 ClickHouse 只存真正有价值的数据而不是当个垃圾桶什么都往里塞。

相关新闻

广告素材曝光量估算与监测工具对比解析|海内外全域投放技术选型

广告素材曝光量估算与监测工具对比解析|海内外全域投放技术选型

2026/7/15 21:49:25

📌 摘要在全域信息流投放、App UA买量、国内电商投流场景中,素材曝光量级、投放趋势、起量节点、消耗热度是投放策略优化的核心依据。广告曝光估算监测工具能够在无媒体后台权限的情况下,量化竞品投放体量、还原素材生命周期、预判流量波动。…

卫星姿态调整用的是什么能源,能源耗尽后卫星需要报废吗

卫星姿态调整用的是什么能源,能源耗尽后卫星需要报废吗

2026/7/15 21:39:24

先把结论说在前面:卫星姿态调整用的“能源”主要有两种:电能(来自太阳能电池板 蓄电池),驱动飞轮、磁力矩器等“不喷气”的执行机构;推进剂(肼类、冷气、氙/氪等),用于推…

【贝加莱PLC实战指南】从零到一:Automation Studio 4.10硬件组态全流程解析

【贝加莱PLC实战指南】从零到一:Automation Studio 4.10硬件组态全流程解析

2026/7/15 21:39:24

1. 环境准备与软件安装第一次接触贝加莱Automation Studio 4.10时,我完全被满屏的英文界面和专业术语吓到了。但实际用下来发现,只要掌握几个关键步骤,硬件组态并没有想象中那么复杂。先说说软件安装这个入门关,这里有几个新手容易…

中国沿海养殖池数据集1990-2020,海上和陆地水产养殖区分布,空间分辨率为30米,数据格式为.tif,适合科研、GIS分析、生态研究等

中国沿海养殖池数据集1990-2020,海上和陆地水产养殖区分布,空间分辨率为30米,数据格式为.tif,适合科研、GIS分析、生态研究等

2026/7/15 23:19:29

中国沿海养殖池数据集1990-2020,海上和陆地水产养殖区分布,空间分辨率为30米,数据格式为.tif,适合科研、GIS分析、生态研究等 中国沿海养殖池数据集(1990-2020,30m/TIF)使用指南 一、数据集基础…

PyWxDump:解密微信PC版本地数据库,实现聊天记录备份与分析

PyWxDump:解密微信PC版本地数据库,实现聊天记录备份与分析

2026/7/15 23:19:29

1. 项目概述:为什么需要PyWxDump?如果你在Windows上用过微信PC版,可能会好奇那些聊天记录、联系人信息都存哪儿了。打开微信的存储目录,你会发现一堆以.db结尾的数据库文件,但直接用数据库工具打开,看到的全…

ROS2大型项目启动架构:Launch分层设计与参数治理实战

ROS2大型项目启动架构:Launch分层设计与参数治理实战

2026/7/15 23:19:29

1. 为什么大型ROS2项目不能靠“ros2 run”硬刚?——从单节点到系统级启动的思维跃迁你刚学完ROS2基础,能顺利跑通turtlesim、写几个简单的发布者订阅者,甚至用ros2 run把节点一个个拉起来。但当你接手一个真实项目——比如带多传感器融合的移…

无源无感·合规可控:镜像视界跨镜无缝接力,筑牢涉密军工安防绝对防线专项技术白皮书 · 军工涉密专属版

无源无感·合规可控:镜像视界跨镜无缝接力,筑牢涉密军工安防绝对防线专项技术白皮书 · 军工涉密专属版

2026/7/15 23:19:29

无源无感合规可控:镜像视界跨镜无缝接力,筑牢涉密军工安防绝对防线专项技术白皮书 军工涉密专属版文档版本:V1.0权威资质背书:国家十四五重点课题时空智能专项、镜像视界浙江普陀时空大数据应用技术联合研究院联合攻关、河南省电…

从零到一:深入理解ASCII码在C语言中的核心应用

从零到一:深入理解ASCII码在C语言中的核心应用

2026/7/15 23:19:29

1. ASCII码的前世今生第一次接触ASCII码时,我盯着那张密密麻麻的编码表发愣——这堆数字和符号的对应关系,简直像天书一样。但当我真正理解它的设计逻辑后,才发现这简直是程序员与计算机对话的"摩斯密码"。ASCII全称American Stand…

5分钟快速上手Markn:轻量级Markdown查看器的终极指南

5分钟快速上手Markn:轻量级Markdown查看器的终极指南

2026/7/15 23:09:29

5分钟快速上手Markn:轻量级Markdown查看器的终极指南 【免费下载链接】markn Lightweight markdown viewer. 项目地址: https://gitcode.com/gh_mirrors/ma/markn Markn是一款专为开发者和内容创作者设计的轻量级Markdown查看器,它解决了传统Mark…

Unity游戏文本翻译架构深度解析:XUnity.AutoTranslator的技术实现与工程实践

Unity游戏文本翻译架构深度解析:XUnity.AutoTranslator的技术实现与工程实践

2026/7/14 10:03:09

Unity游戏文本翻译架构深度解析:XUnity.AutoTranslator的技术实现与工程实践 【免费下载链接】XUnity.AutoTranslator 项目地址: https://gitcode.com/gh_mirrors/xu/XUnity.AutoTranslator XUnity.AutoTranslator作为Unity游戏社区中最成熟的文本翻译解决方…

openEuler Raspberry Pi Kernel设备驱动开发指南:为树莓派硬件添加支持

openEuler Raspberry Pi Kernel设备驱动开发指南:为树莓派硬件添加支持

2026/7/13 20:43:19

openEuler Raspberry Pi Kernel设备驱动开发指南:为树莓派硬件添加支持 【免费下载链接】raspberrypi-kernel It provides openEuler kernel source for Raspberry Pi 项目地址: https://gitcode.com/openeuler/raspberrypi-kernel 前往项目官网免费下载&…

openEuler系统集成测试实战:基于smoke-test套件的环境验证技巧

openEuler系统集成测试实战:基于smoke-test套件的环境验证技巧

2026/7/15 0:26:43

openEuler系统集成测试实战:基于smoke-test套件的环境验证技巧 【免费下载链接】integration-test The repo contains test suits for system integration test 项目地址: https://gitcode.com/openeuler/integration-test 前往项目官网免费下载:…

【LINUX】驱动

【LINUX】驱动

2026/7/15 0:08:14

【LINUX驱动】【字符设备】【中断】【Platform】【网课 设备树】【GPIO】【PINCTRL】【INPUT】【IIC】【SPI】【网络驱动】【屏幕驱动】【一 设备树】【二 内核模块编译】【三 基本驱动框架】【四 Platform总线设备驱动框架】【五 驱动子系统】【六 综合】

【1982-2026】全国高精度建筑轮廓|村级精度|SHP矢量

【1982-2026】全国高精度建筑轮廓|村级精度|SHP矢量

2026/7/15 0:08:14

🔍 数据简介 本次分享1982-2026年全国村级精度建筑轮廓矢量数据,覆盖全国各省市区县,到村级别精细,为2026年最新实时采集成果,非网传仅60/77个城市的老旧数据。 数据含带高度/不带高度双版本,单体建筑边界精…

【1975-2026】全国水系水路数据|河流/水库/运河|SHP矢量

【1975-2026】全国水系水路数据|河流/水库/运河|SHP矢量

2026/7/15 0:08:14

🔍 数据简介 本次分享1975-2026年全国高精度水系水路矢量数据,覆盖全国全域,包含河流、水系、水库、运河、湿地、冰川、沟渠等全类别水文要素。 数据集包含双层矢量图层,字段分类清晰、要素齐全,支持2013-2026逐年完整…