StarRocks SSD磁盘配置使用

一、背景

在很多业务场景中,较近时间段的数据通常是查询最频繁的,时间较久的历史数据查询频率可能就会低很多。StarRocks支持在一个BE中使用多种存储介质(HDD/SSD/Mem),这样我们就可以将最新数据所在的分区放在SSD上,利用SSD的随机读写性能来提高查询性能。而老的数据会自动迁移至HDD盘中,以节省数据存储的成本。

此外,StarRocks也是支持内存表的,但这部分功能很久没有优化了,目前不推荐使用。

首先明确一点,若集群服务器的存储介质单一(只有机械磁盘,又或者全为固态硬盘),我们就不需要再单独设置什么。例如集群中的磁盘全为SSD,虽然StarRocks在不额外设置参数时默认展示磁盘为HDD,但由于SSD带来的性能提升是源自物理层面的,所以并不会影响实际性能。

二、配置 be.conf

当同一台服务器中既有SSD又有HDD时,StarRocks并不会自动识别磁盘的类型,我们需要在be.conf中为storage_root_path显式的指定存储介质类型。

  • 示例1
storage_root_path=/data/starrocks/be/storage,medium:HDD;/data1/starrocks/be/storage,medium:SSD

# /data, capacity limit is 45T, HDD;

# /data1, capacity limit is 8T, SSD;

- 示例2 已经弃用,2.3开始已经加了校验,使用后会导致之前的数据丢失

storage_root_path=/data/starrocks/be/storage.HDD;/data1/starrocks/be/storage.SSD

# /data/starrocks/be/storage.HDD,表示存储介质是HDD;

# /data1/starrocks/be/storages.SSD,表示存储介质是SSD;

# /data1/starrocks/be/storage,存储介质默认为HDD

上面这两种写法都支持,官方建议使用示例1 ,更规范明了

StarRocks的冷热分区目前有以下几个使用方式:

1、在建表时,指定表级别的存储介质及存储到期时间;

2、建表完成后,修改分区的存储介质及存储到期时间;

3、建表完成后,新增分区时设置分区的存储介质及存储到期时间;

4、当前不支持在建表时为某个分区单独设置分区的到期时间,同样,也不支持设置动态分区自动创建的新分区的到期时间。

三、创建测试表

举个例子,在集群的be.conf中设置完SSD及HDD后,创建表table_ssd:

-- 分区表
CREATE  TABLE `example_db`.table_ssd
(
   `partition_day` date COMMENT "分区时间(yyyy-mm)",
  `tb` STRING COMMENT "表名",
  `db`  STRING COMMENT "数据库",
  `time` STRING  COMMENT "时间"
) ENGINE = OLAP
DUPLICATE KEY(`partition_day`,`tb`)
COMMENT "test ssd/hdd tables" 
PARTITION BY RANGE(`partition_day`)
(
START ("2022-01-01") END ("2022-12-31") EVERY (INTERVAL 1 day)
)
DISTRIBUTED BY HASH(`partition_day`) BUCKETS 2
PROPERTIES (
"replication_num" = "3",
"dynamic_partition.enable" = "true",
"dynamic_partition.time_unit" = "DAY",
"dynamic_partition.time_zone" = "Asia/Shanghai",
"dynamic_partition.end" = "1",
"dynamic_partition.prefix" = "p",
"dynamic_partition.buckets" = "2",
"storage_medium" = "SSD",
"storage_cooldown_time" = "2022-11-17 15:00:00"
);
-- 非分区表
CREATE  TABLE `example_db`.table_ssd01
(
   `tb` STRING COMMENT "表名",
  `db`  STRING COMMENT "数据库",
  `time` STRING  COMMENT "时间"
) ENGINE = OLAP
DUPLICATE KEY(`tb`)
DISTRIBUTED BY HASH(`time`) BUCKETS 2
PROPERTIES (
"replication_num" = "3",
"storage_medium" = "SSD",
"storage_cooldown_time" = "2022-11-17 17:00:00"
);

table_ssd的PROPERTIES中的几个参数释义如下:

replication_num:设置副本数,默认为3

dynamic_partition.enable:是否开启动态分区特性,可指定为TRUE或FALSE。如果该参数等号后不填写值,则默认代表TRUE。

dynamic_partition.time_unit:动态分区调度的粒度,可指定为DAY/WEEK/MONTH。

不同分区粒度下动态分区自动创建分区的名称后缀不同,指定为DAY时,分区名后缀为yyyyMMdd,例如table07中的20211009。指定为WEEK时,分区名后缀为yyyy_ww,例如2021_40代表2021年第40周。指定为MONTH时,动态创建的分区名后缀格式为yyyyMM,例如202110。这里注意,我们前面创建静态分区时,分区命名也建议和动态分区自动创建的规则保持一致。

dynamic_partition.time_zone:动态分区的时区,如果不填写,则默认为当前机器的系统的时区

dynamic_partition.end:用于指定提前创建的分区数量。值必须大于 0。

dynamic_partition.prefix: 用于指定创建的分区名前缀,例如分区名前缀为 p,则自动创建分区名为 p20200108。

dynamic_partition.buckets:动态创建的分区所对应的分桶数量。

storage_medium:设置表的存储介质为SSD

storage_cooldown_time:表的存储介质为SSD到期时间,到期后会设置成HDD。(参数若不显式设置,默认为1个月,默认时间可以通过fe.conf中storage_cooldown_second参数调整。)

以上属性在建表完成后也可以进行修改,例如关闭动态分区属性:

通过show语句,查看分区存储介质及其到期时间:

show partitions from `example_db`.table_ssd;

在这里插入图片描述

StorageMedium为SSD;

CooldownTime为2022-11-17 12:00:00。

修改分区p3的存储到期时间:

-- 分区表
ALTER TABLE `example_db`.table_ssd MODIFY PARTITION p20220101 SET("storage_medium"="SSD", "storage_cooldown_time"="2022-11-17 17:00:00");
-- 非分区表
ALTER TABLE `example_db`.table_ssd01 MODIFY PARTITION (*) SET("storage_medium"="SSD", "storage_cooldown_time"="2022-11-17 18:00:00");

在这里插入图片描述
在这里插入图片描述

新增分区p20230101,指定存储介质及存储到期时间:

-- 先关闭开启动态分区特性
ALTER TABLE `example_db`.table_ssd SET ("dynamic_partition.enable" = "false") ;
-- 新增分区,指定存储介质及存储到期时间
ALTER TABLE `example_db`.table_ssd  ADD PARTITION p20230101 VALUES LESS THAN ('2023-01-01') ("storage_medium" = "SSD","storage_cooldown_time"="2023-01-01 12:00:00");
-- 开启动态分区特性
ALTER TABLE `example_db`.table_ssd SET ("dynamic_partition.enable" = "true") ;

在这里插入图片描述

四、总结

在table_ssd 中,我们虽然在PROPERTIES 中设置了"storage_medium" = “SSD"和"storage_cooldown_time”,但这个属性仅会用于表创建时的三个分区,后面新建的分区若不指定,还是会使用HDD(也就没有所谓的存储到期时间了)。这里的默认存储介质类型受fe.conf中的default_storage_medium参数控制,默认为HDD,我们可以设置为:default_storage_medium=SSD

注意,只有SSD的存储到期时间有意义,在HDD中,到期时间都为9999-12-31,也即为无到期时间。当时钟到达分区存储到期时间后,会触发迁移逻辑,该分区存储在SSD中的数据会向HDD中迁移。

这里同样引出一个注意事项,当我们的存储介质全为SSD时,我们前面提到过,完全可以不单独设置参数,也即be.conf和建表语句中都不用设置。此时,若我们在建表语句中设置了"storage_medium" = “SSD”,那同时就需要注意给一个较大的"storage_cooldown_time"到期时间,以避免分区到期后后台不断触发迁移逻辑。

参考借鉴:
https://blog.csdn.net/ult_me/article/details/122287723
https://docs.starrocks.io/zh-cn/latest/introduction/StarRocks_intro

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值