当前位置: 首页 > news >正文

阿里云Clickhouse 冷热数据分层存储 实战记录

一、 背景

        某业务Clickhouse库月数据增长超过2.5T,云上Clickhouse容量并不是无限的,单节点有32T上限,而业务已使用一半以上,依此速度,半年内就将达到上限。

        与业务讨论,大致有以下几种解决思路:

  • 按时间清理数据,但因为业务特点,能清理的数据不多
  • 改造为分片模式,但涉及业务改动量较大
  • 利用阿里云Clickhouse自带的冷热数据分层存储功能,从文档来看,操作简单、业务改动量也最小,于是业务进行调研与测试

二、 冷热数据分层存储

1. 背景知识

  • 热数据:访问频次较高的数据,存储在热数据盘(即创建集群时所选的ESSD云盘或高效云盘)中,满足高性能访问的需求

  • 冷数据:访问频次较低的数据,存储在较低价的冷数据盘(OSS)中,满足高性价比的需求

2. 两种存储策略

  • 默认存储策略(按空间):新写入的数据存储在热数据盘中,当热数据存储量达到业务指定阈值时,自动将当前热数据盘中占用空间最大的part数据文件移动到冷数据盘存储,从而释放热数据盘存储空间。
  • TTL存储策略(按时间):在默认存储策略基础上,添加TTL语句,实现将间隔时间之前的所有数据自动转移到冷数据盘中。

三、 注意事项

容易踩到和已经踩到的一些坑

1. 版本问题

默认阿里云界面现在已经建不了20.8版本以下的Clickhouse,对于新实例问题不大。

  • 云数据库ClickHouse集群为社区兼容版且版本为20.8及以上版本
  • 云数据库ClickHouse企业版基于缓存及共享存储,自动进行冷热分层,不依赖冷热数据存储规则

2. 关闭备份

       这个有点坑,使用冷热分层后就不支持备份恢复了。但好在ClickHouse一般是数仓和报表业务用,本身有源数据,即使误删还能从上游拉回来,业务评估风险可以接受。

3. 重启生效

开通该功能后集群会立即进行重启,需要提前预约变更窗口

4. 只开不关

冷热数据分层存储功能开通后,暂不支持关闭

5. meta节点inode使用率暴增

        这个是文档中完全没有提及的部分,可以看到,在不到两个小时,inode使用率从接近0快速涨到100%,且meta节点无法在界面扩容,后联系阿里云紧急在后台为meta节点扩容才恢复。

 

     阿里云的解释是迁移到oss中的数据,每个part会映射到Clickhouse的meta节点上,占用一个inode。当表part数过多,而又没有设置合并,就可能触发这个问题。

      对此的建议:

  • 表分批迁移,优先迁移表大而part相对较少的,收益较大
  • 设置prefer_not_to_merge参数为false,对冷数据中的part也进行合并(对性能有明显影响)
  • 提前估算迁移part数与inode使用率,必要时联系阿里云提前扩meta节点
  • 社区新版本对此功能有计划优化,但何时上线还不明确,且还需业务进行升级

四、 启用及设置

1. 功能启用

非常简单,点击开通即可

2. 默认存储策略设置

两个核心参数

参数

说明

move_factor

当热数据盘中的可用存储空间所占比例小于该参数时,自动将当前热数据盘中占用空间最大的part数据文件移动到冷数据盘存储。

取值范围为[0,1]。取值为0时,代表关闭基于磁盘存储容量的冷热数据分层存储。默认值为0.1,代表可用存储空间所占比例小于10%时,将自动进行数据移动。

一般来说生产表业务逻辑不太会允许根据空间大小挪数据,建议设为0

prefer_not_to_merge

冷数据盘中的数据是否进行合并。

  • true:不合并,默认值。对性能影响小,但part数可能非常多,出现前面的inode问题

  • false:合并。part可以合并,占用inode较少,但合并时性能影响较大,遇到过打满CPU的情况。

3. TTL设置

  • 创建时设置
-- 以date列为依据,将90天之前的所有数据移动到冷数据盘。
CREATE TABLE ttl_test_tbl
(`f1` String,`f2` String,`f3` Int64,`f4` Float64,`date` Date
)
ENGINE = MergeTree()
PARTITION BY date
ORDER BY f1
TTL date + INTERVAL 90 DAY TO DISK 'cold_disk'
SETTINGS storage_policy = 'hot_to_cold';

  • 创建后修改
ALTER TABLE <table_name> ON CLUSTER default MODIFY TTL <time_column> + INTERVAL <number> TO DISK 'cold_disk';
  • 存量数据:默认情况下,存量数据将按照新策略进行存储,但需要时间异步处理,如需立即生效,您需更改TTL分层存储策略之后,还要执行ALTER TABLE materialize TTL;语句。如果您不期望更改存量数据的TTL分层存储策略,需要在更改TTL分层存储策略之前,执行SET materialize_ttl_after_modify=0;语句。
  • 增量数据:默认情况下,增量数据也将按照新策略进行存储。

  • 更改TTL分层存储策略后,已经进入冷数据盘中的数据不会自动移动到热数据盘。

4. 移动冷热数据盘的数据

  • 热 -> 冷

ALTER TABLE <table_name> ON CLUSTER default MOVE PARTITION <partition> TO DISK 'cold_disk';
  • 冷 -> 热

ALTER TABLE <table_name> ON CLUSTER default MOVE PARTITION <partition> TO DISK 'default';

5. 查看数据

  • 查看热数据盘上的数据
SELECT * FROM system.parts WHERE database = '<db_name>' AND TABLE = '<tbl_name>' AND disk_name ='default' AND active = 1;
  • 查看冷数据盘上的数据
SELECT * FROM system.parts WHERE database = '<db_name>' AND TABLE = '<tbl_name>' AND disk_name ='cold_disk' AND active = 1;
  • 查看磁盘空间

SELECT * FROM system.disks;
  • 移动上下限值
SELECT move_ttl_info.min,move_ttl_info.max FROM system.parts WHERE database = '<db_name>'AND table = '<tb_name>'AND disk_name = 'default'

五、 大致效果

移动后可以看到冷数据空间逐渐增大

热数据存储使用率从93%左右降低至81%,大幅缓解空间压力

参考:

ClickHouse冷热数据分离存储_云数据库 ClickHouse(ClickHouse)-阿里云帮助中心

相关文章:

  • 递归下降 ll(1) 型文法 识别二元组文法分析
  • 从零开始学习 Lucene.Net:.NET Core 中的全文搜索与索引管理
  • [密码学基础]GMT 0002-2012 SM4分组密码算法 技术规范深度解析
  • Windows系统C盘深度清理指南
  • 指令与权限
  • 基于大语言模型的自动化单元测试生成系统及测试套件评估方法
  • 【多线程5】面试常考锁知识点
  • java ai 图像处理
  • Shiro-550 动调分析与密钥正确性判断
  • 【网络编程】TCP数据流套接字编程
  • 基础数学知识-线性代数
  • 【C++ Qt】信号和槽(内配思维导图 图文并茂 通俗易懂)
  • 代码规范之命名方式
  • 相机模型--CMOS和CCD的区别
  • Linux网络编程 深入解析Linux TCP:TCP实操,三次握手和四次挥手的底层分析
  • 第七周作业
  • Neovim插件深度解析:mcphub.nvim如何用MCP协议重构开发体验
  • 数字孪生赋能管理系统,降本增效立竿见影
  • Manus技术架构、实现内幕及分布式智能体项目实战
  • 海量聊天数据处理:基于Spring Boot与SharingJDBC的分库分表策略及ClickHouse冷热数据分离
  • 三大上市猪企:前瞻应对饲料原材料价格波动
  • 美国季度GDP时隔三年再现负增长,特朗普政府关税政策对美国经济负面影响或将持续
  • 证监会:坚决拥护党中央对王建军进行纪律审查和监察调查决定
  • 中央网信办部署开展“清朗·整治AI技术滥用”专项行动
  • 三大白电巨头去年净利近900亿元:美的持续领跑,格力营收下滑
  • 王毅会见泰国外长玛里:坚决有力打击电诈等跨境犯罪