跳到主要内容

本地磁盘分层存储

Doris 支持在 SSD 与 HDD 之间进行层级存储。通过结合动态分区,系统可以根据数据冷热特性,将热数据保留在 SSD、将冷数据自动迁移到 HDD,从而在保障热数据高性能读写的同时降低整体存储成本。

适用场景

本文档适用于以下场景:

  • 表数据按时间分区,且具有明显的冷热访问特征
  • 集群同时具备 SSD 与 HDD 存储介质
  • 希望对近期热数据使用 SSD 加速查询,对历史冷数据使用 HDD 节约成本
  • 希望通过动态分区自动管理数据生命周期,避免人工迁移

快速导航

核心概念

层级存储基于动态分区实现。Doris 会根据分区的活跃程度自动选择存储介质,并在冷却时间到达后将数据迁移到目标介质。

热分区与冷分区

类型说明存储介质性能特点
热分区最近活跃、频繁访问的分区SSD高 IOPS,低延迟
冷分区历史数据,访问频率较低HDD容量大,成本低

工作机制

层级存储的执行流程如下:

  1. 创建表时启用动态分区,并指定 dynamic_partition.storage_medium = HDD
  2. 通过 dynamic_partition.hot_partition_num 指定最近 N 个分区为热分区,存放在 SSD 上。
  3. 系统为每个热分区设置 storage_cooldown_time(冷却时间)。
  4. 冷却时间到达后,分区数据从 SSD 自动迁移至 HDD。

更多动态分区相关内容,请参考:数据划分 - 动态分区

参数说明

层级存储依赖以下两个动态分区参数:

参数作用默认值备注
dynamic_partition.hot_partition_num指定最近多少个分区为热分区,存储在 SSD 上必须配合 storage_medium = HDD 使用
dynamic_partition.storage_medium指定动态分区的最终存储介质HDD设为 SSD 时 hot_partition_num 不再生效

dynamic_partition.hot_partition_num

  • 功能:指定最近 N 个分区为热分区,这些分区存储在 SSD 上,其余分区存储在 HDD 上。
  • 使用条件
    • 必须同时设置 dynamic_partition.storage_medium = HDD,否则该参数不会生效。
    • 存储路径下必须存在 SSD 设备,否则分区创建会失败。

示例说明

假设当前日期为 2021-05-20,按天分区,动态分区配置如下:

dynamic_partition.hot_partition_num = 2
dynamic_partition.start = -3
dynamic_partition.end = 3

系统会自动创建以下分区,并配置对应的存储介质和冷却时间:

p20210517:["2021-05-17", "2021-05-18") storage_medium=HDD storage_cooldown_time=9999-12-31 23:59:59
p20210518:["2021-05-18", "2021-05-19") storage_medium=HDD storage_cooldown_time=9999-12-31 23:59:59
p20210519:["2021-05-19", "2021-05-20") storage_medium=SSD storage_cooldown_time=2021-05-21 00:00:00
p20210520:["2021-05-20", "2021-05-21") storage_medium=SSD storage_cooldown_time=2021-05-22 00:00:00
p20210521:["2021-05-21", "2021-05-22") storage_medium=SSD storage_cooldown_time=2021-05-23 00:00:00
p20210522:["2021-05-22", "2021-05-23") storage_medium=SSD storage_cooldown_time=2021-05-24 00:00:00
p20210523:["2021-05-23", "2021-05-24") storage_medium=SSD storage_cooldown_time=2021-05-25 00:00:00

dynamic_partition.storage_medium

  • 功能:指定动态分区的最终存储介质,可选 HDD(默认)或 SSD
  • 注意事项
    • 当设置为 SSD 时,hot_partition_num 参数失效。
    • 此时所有分区均使用 SSD 存储,冷却时间统一为 9999-12-31 23:59:59,即不进行迁移。

使用示例

下述步骤展示如何创建一张支持层级存储的表,并验证分区的存储介质分布。

步骤一:创建分层存储表

目的:建表并启用 SSD/HDD 分层存储,最近 2 个分区使用 SSD,其余使用 HDD。

CREATE TABLE tiered_table (k DATE)
PARTITION BY RANGE(k)()
DISTRIBUTED BY HASH (k) BUCKETS 5
PROPERTIES
(
"dynamic_partition.storage_medium" = "hdd",
"dynamic_partition.enable" = "true",
"dynamic_partition.time_unit" = "DAY",
"dynamic_partition.hot_partition_num" = "2",
"dynamic_partition.end" = "3",
"dynamic_partition.prefix" = "p",
"dynamic_partition.buckets" = "5",
"dynamic_partition.create_history_partition" = "true",
"dynamic_partition.start" = "-3"
);

步骤二:检查分区存储介质

目的:确认分区是否按预期分配到 SSD 和 HDD。

SHOW PARTITIONS FROM tiered_table;

预期输出:共 7 个分区,其中 5 个使用 SSD,2 个使用 HDD。

p20210517:["2021-05-17", "2021-05-18") storage_medium=HDD storage_cooldown_time=9999-12-31 23:59:59
p20210518:["2021-05-18", "2021-05-19") storage_medium=HDD storage_cooldown_time=9999-12-31 23:59:59
p20210519:["2021-05-19", "2021-05-20") storage_medium=SSD storage_cooldown_time=2021-05-21 00:00:00
p20210520:["2021-05-20", "2021-05-21") storage_medium=SSD storage_cooldown_time=2021-05-22 00:00:00
p20210521:["2021-05-21", "2021-05-22") storage_medium=SSD storage_cooldown_time=2021-05-23 00:00:00
p20210522:["2021-05-22", "2021-05-23") storage_medium=SSD storage_cooldown_time=2021-05-24 00:00:00
p20210523:["2021-05-23", "2021-05-24") storage_medium=SSD storage_cooldown_time=2021-05-25 00:00:00

常见问题(FAQ)

Q1:hot_partition_num 不生效怎么办?

请确认是否同时设置了 dynamic_partition.storage_medium = HDD。仅当最终介质为 HDD 时,热分区配置才会生效。

Q2:可以只用 SSD 存储吗?

可以。将 dynamic_partition.storage_medium 设置为 SSD,所有分区都会使用 SSD,并且不会发生冷却迁移。此时无需配置 hot_partition_num

Q3:冷却时间到达后数据如何迁移?

当分区的 storage_cooldown_time 到达后,系统会自动将该分区数据从 SSD 迁移到 HDD,无需人工干预。

Q4:层级存储和冷热数据归档(如对象存储)的区别?

SSD/HDD 层级存储用于本地不同磁盘介质间的数据流动,适合中短期冷热分离。若需将历史数据归档到对象存储(S3/HDFS 等),请参考冷热数据分层存储相关文档。

故障排查(Troubleshooting)

错误现象可能原因解决方案
分区创建失败存储路径下没有 SSD 设备在 BE 节点上配置 SSD 存储路径,或调整为仅使用 HDD 存储
hot_partition_num 设置无效未设置 storage_medium = HDD同时配置 dynamic_partition.storage_medium = HDD
所有分区均为 SSD,未冷却到 HDDstorage_medium 被设置为 SSDstorage_medium 改为 HDD,并配置 hot_partition_num
数据未按预期迁移到 HDDstorage_cooldown_time 尚未到达等待冷却时间到达,或检查时间设置是否正确