StarRocks 存算分离性能测试报告

StarRocks 存算分离性能测试报告

                                                                —— 2023/4/27 任伟

一、业务场景

公司从2021年开始引入StarRocks 存算一体架构作为主要的OLAP引擎,随着业务的发展,我们发现了如下几类问题:

1、集群数据量和计算量的增长并不完全匹配,单个集群数据存储年增量可能达到了200%,而内存、CPU的增长可能只有40%。通常面对CPU、内存、磁盘存储不足的情况,都是通过横向增加集群机器的方式来进行扩容,没有对资源进行精细化的成本控制;

2、集群资源使用率朝夕现象明显,StarRocks作为线上报表的OLAP引擎,其资源使用与客户的使用规律息息相关, 白天查询资源使用率高,晚上基本没使用。在月底、季度底、年底的特殊时期,客户会进行月度、季度、年度核算,这个时候的查询负载都特别高。如果不进行查询优化处理,集群整体的查询响应会变慢。

基于上述问题,我们想要针对性解决的主要是2个点:

1、降本。降低计算存储成本,当集群需要扩容的时候,不再是简单通过增加物理机器的方式来进行扩容,而是计算存储独立按需扩展。

2、弹性。当查询负载增加的时候,能迅速、动态增加计算资源,提高集群的处理能力。 当查询负载降低的时候,能迅速、动态减少计算资源,按需分配。

StarRocks 3.x的存算分离架构为解决上述问题带来了可能性。在存算分离的模式下,StarRocks 将数据存储在兼容 S3 协议的对象存储(例如 AWS S3、OSS 以及 MinIO)或 HDFS 中,而本地盘作为热数据缓存,用以加速查询。

通过存储计算分离架构,可以降低存储成本,针对计算节点可以按需弹性扩容。在查询命中缓存的情况下,存算分离集群的查询性能与普通集群性能一致。因此我们对StarRocks 3.0进行了测试。

二、测试预期

StarRocks 3.0存算分离的查询性能和存算一体基本持平

StarRocks 3.0能快速(至少比存算一体数据rebalance快)的增加计算节点提高集群整体的并发、查询响应能力

三、硬件配置

机器配置 (存储,网络带宽等)

四、其他条件

测试数据集

SSB

Star Schema Benchmark(以下简称 SSB)是学术界和工业界广泛使用的一个星型模型测试集(来源论文),通过这个测试集合可以方便的对比各种 OLAP 产品的基础性能指标。

表名 解释 100G 数据行数
lineorder SSB 商品订单表 6亿
customer SSB 客户表 300万
part SSB 零部件表 140万
supplier SSB 供应商表 20万
dates 日期表 2556
lineorder_flat SSB 打平后的宽表 6亿

DDL 、Query参考 https://docs.starrocks.io/zh-cn/3.0/benchmarking/SSB_Benchmarking

TPC-H

TPC-H 是美国交易处理效能委员会 TPC(Transaction Processing Performance Council)组织制定的用来模拟决策支持类应用的测试集。它包括一整套面向业务的 ad-hoc 查询和并发数据修改。

表名 解释 100G 数据行数
customer 用户表 1500万
lineitem 订单明细表 6亿
nation 国家信息 25
orders 零售订单表 1.5亿
part 配件表 2000万
partsupp 配件供应表 8000万
region 地区信息 5
supplier 供应商信息 100万

DDL 、Query参考:https://docs.starrocks.io/zh-cn/3.0/benchmarking/TPC-H_Benchmark

参数配置

#建表属性
#是否启用本地磁盘缓存
enable_storage_cache = true
#本地磁盘中缓存热数据的存活时间,单位s
storage_cache_ttl = 2592000
#是否允许数据异步写入对象存储
enable_async_write_back = false
# BE配置
# 预读缓冲区的调整 默认是128KB
starlet_fs_stream_buffer_size_bytes = 1048576
# 避免可能的倾斜问题
connector_scan_node_always_shared_scan = false

五、测试结果

Shared_nothing VS Shared_data

分别搭建StarRocks 2.4存算一体版本、StarRocks 3.0 存算分离版本,通过依次增加查询并发的方式,对SSB和TPCH进行压测,得到如下测试结果。通过下面的图表(横坐标为并发数,纵坐标为响应时长,单位s)可知:

针对单表查询场景, Shard_data的查询性能强于 Shard_nothing,此处可能跟2.4与3.0实现优化有关系;

针对关联查询场景,Shard_data的查询性能 与 Shard_nothing基本持平;
WechatIMG85

WechatIMG87

Shared_data 查询性能扩展能力

搭建StarRocks 3.0 存算分离版本,通过增加BE计算节点的方式,对SSB和TPCH进行压测,得到如下测试结果。通过下面的图表(横坐标为BE数量,纵坐标为响应时长,单位s)可知:

集群整体的查询能力随计算节点数增加而非线性的增加;
Q11 BE
Q9 BE

Shared_data 无cache VS 有cache

搭建StarRocks 3.0 存算分离版本,通过删除本地缓存的方式,对SSB和TPCH进行压测,得到如下测试结果。通过下面的图表(横坐标为有cache或无cache,纵坐标为响应时长,单位s)可知:

冷热数据(本地是否有磁盘 cache)SSB全部SQL有2.5倍左右的性能差距,TPCH全部SQL有1.5倍左右的性能差距;部分SQL (如SSB Q11、TPCH Q9) 有10倍的性能差距;

对冷数据的查询,可以根据具体业务场景通过analyze full table table_name 对缓存进行预热,StarRocks支持表级别的缓存预热;

WechatIMG88
WechatIMG83

六、总结

StarRocks 3.X 由于引入存算分离的架构,计算存储独立按需扩展,可以更加精细化的进行计算、存储资源成本控制。性能方面,在Local Cache命中的情况下,查询延时与存算一体架构持平。在后续StarRocks 3.x迭代更高版本,更加稳定之后,可以尝试替换现有存算一体的架构,提供成本更低,性能可弹的OLAP分析服务。

22赞

你好, 能把存算一体和存算分离的硬件消耗情况显示一下么, 特别是CPU,内存,磁盘IO和网络的使用情况。 我们在其他的olap测试场景中,发现存算分离的情况下, 网络的消耗是非常巨大的。

2赞

请问下测试时有关闭 page cache 吗