Starrocks基于主机和容器的读写测试

背景介绍

在云原生时代,存算分离架构显然已经是当下大数据架构的必备选型,但是在不同的虚拟化计算资源(主机、容器)之上,是否能有差异点以及对于不同服务的性能损耗程度如何?来判断应该在什么样的场景下选择什么样的资源配比将是存算分离引擎的调优手段之一。

本文的测试目的在于查看基于容器部署的Starrocks集群相较于主机部署的Starrocks集群,在数据读写上面是否有明显的差异点以及在集群配置CPU和内存资源配比上面找到较为合适的资源比例。

资源配置

Starorcks版本:3.2.0 存算分离 ,采用默认配置 (下篇会基于不同特性开启下的性能差异对比)

机器资源:

  • 机器类型:性能保障型X6 * 5台

  • 机器规格:8C32G

  • 云盘类型:ESSD_PL1

测试数据集:

  • 社区提供的标准TPC-H数据集(100G、200G)

https://docs.starrocks.io/zh/docs/benchmarking/TPC-H_Benchmarking/

不同规格下数据写入速度

|---------------------------|------------|------------|
| | 8C32G | 16C64G |
| 100G 数据集 stream load 写入时间 | 9m42.586s | 10m21.843s |
| 200G 数据集 stream load 写入时间 | 20m32.206s | 20m12.313s |

数据读取测试

  1. 200G单并发主机和容器读取耗时对比
  1. 200G5并发主机和容器读取耗时对比

监控分析

200G tpch 数据 5 并发测试监控 如下图所示,第一行是 16 核 64G 集群的 cpu 利用率、网络流量和内存使用监控,第二行是 8 核 32G 集群的监控

  • 16 核 64G 集群的 cpu :24 * 68% = 16.32

  • 8 核 32G 集群的 cpu :12 * 70% = 8.4

容器环境并发测试

内存瓶颈分析

在之前的测试中,当并发量到一定程度之后,就会出现部分查询语句失败的现象,而失败的原因全部都是超出了 BE 进程的内存限制,错误日志如下所示

现在以最容易失败的 Q9 为例,查看查询失败时 BE 节点的内存使用。其中 Q9 是一个涉及 6 张表 join 的复杂查询。

select
  nation,
  o_year,
  sum(amount) as sum_profit
from
  (
    select
    n_name as nation,
    extract(year from o_orderdate) as o_year,
    l_extendedprice * (1 - l_discount) - ps_supplycost * l_quantity as amount
    from
    part,
    supplier,
    lineitem,
    partsupp,
    orders,
    nation
    where
    s_suppkey = l_suppkey
    and ps_suppkey = l_suppkey
    and ps_partkey = l_partkey
    and p_partkey = l_partkey
    and o_orderkey = l_orderkey
    and s_nationkey = n_nationkey
    and p_name like '%green%'
  ) as profit
group by
  nation,
  o_year
order by
  nation,
  o_year desc

以 Q9 的 30 并发为例,持续进行请求,下图是 BE 节点的 cpu & mem 监控截图,可以看出,内存一直在高点附近。

然后分析具体的内存占用,如下图所示,BE 进程的总内存 51G 已经到达了软限制,其中在这 51G 内存中,占用内存最多的是 query_pool 和 column_pool,分别代表 BE 查询层使用总内存和 column pool 内存大小,其中 column_pool 用于加速存储层数据读取的 Column Cache。很不幸的是,关于这两项内存占用,并没有相关配置可以进行调节。也就是说由于高并发导致的内存报错,只能通过修改 sql 语句和提升节点规格进行解决。

接下来再针对内存瓶颈,以 Q9 为例,进行一系列详细测试,测试结果如下

|--------|-----|------|------|------|
| | 5并发 | 10并发 | 20并发 | 25并发 |
| 8c32g | 成功 | 失败 | 失败 | 失败 |
| 8c64g | 成功 | 成功 | 失败 | 失败 |
| 16c64g | 成功 | 成功 | 成功 | 失败 |

其中,8c64g 的 20 并发是失败的,这一点值得讨论一下,因为 16c64g 的 20 并发是成功的,8c64g 的 20 并发错误日志和内存分析如下,可以看出错误原因发生了变化,这次是达到了 query pool 的内存限制,不过依旧无法通过调节配置进行解决

通过以上分析可以得出下述结论:

  • 扩大 BE 节点内存可以缓解内存报错的现象

  • 相同内存大小下,1:4 的 cpu 内存比要优于 1:8 的 cpu 内存比,不仅可以提升读性能,而且可以减少内存不足的风险

CPU瓶颈分析

该测试本想通过打满 8c64g 集群的 CPU,然后升级 cpu 规格来验证 cpu 的瓶颈。但是无论加多少并发,cpu 利用率始终很低,反而是升级 cpu 规格之后,利用率得到有效提升,最终的结论分析与上面的结论完全一致。

以 Q22 的 50 并发为例,测试结果记录如下。其中上面两张图是 8C64G 的 cpu 和 mem 监控截图,下面两张图是 16C64G 的 cpu 和 mem 监控截图。

本文总结

本文重点从基础性能方面对Starorcks进行了再不同规格、不同资源类型、不同并发下面的性能对比,从而也验证了在CPU和内存配比方面,1:4的配比是更为合适的资源配比,这对于Starorcks的资源选型方面提供了一定参考意义。

后面我们还有对于Starrocks不同特性开启之后,对于读写性能的提升,比如异步物化视图、查询队列、中间结果落盘、Pipeline Engine 、QueryCache等相关特性的提升来输出相关报告

如果想进一步交流的话,欢迎加我 V:kubedata

我们宗旨:分享创造价值、交流促进成长,欢迎关注:云原生大数据技术荟

相关推荐
gma9991 小时前
ES 基本使用与二次封装
大数据·数据库·c++·elasticsearch·搜索引擎
shuxunAPI1 小时前
营业执照 OCR 识别 API 的应用前景
大数据·云计算·ocr·csdn开发云
zxn09112 小时前
大数据实战之搭建Linux虚拟机
大数据·linux
FreeIPCC3 小时前
部署一套开源客服系统,用户需要准备什么设备?
大数据·人工智能·语言模型·机器人·开源·信息与通信
派可数据BI可视化11 小时前
数据指标与标签在数据分析中的关系与应用
大数据·数据仓库·商业智能bi
java1234_小锋11 小时前
详细描述一下Elasticsearch索引文档的过程?
大数据·elasticsearch·搜索引擎
黄焖鸡能干四碗11 小时前
【软件设计文档】详细设计说明书模板和实际项目案例参照,概要设计说明书,需求设计书,软件设计报告(Word原件)
大数据·软件需求·设计规范·规格说明书·1024程序员节
股票GPT分析12 小时前
《Python 股票交易分析:开启智能投资新时代》(二)
大数据·服务器·python·c#·fastapi
Viktor_Ye13 小时前
实现金蝶云星空与钉钉数据无缝集成的技术方法
java·大数据·钉钉
Mephisto.java14 小时前
【大数据学习 | Spark-Core】关于distinct算子
大数据·hive·hadoop·redis·spark·hbase