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

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

相关推荐
zhang98800001 分钟前
储能领域大数据平台的设计中如何使用 Hadoop、Spark、Flink 等组件实现数据采集、清洗、存储及实时 / 离线计算,支持储能系统分析与预测
大数据·hadoop·spark
老蒋新思维6 分钟前
存量竞争下的破局之道:品牌与IP的双引擎策略|创客匠人
大数据·网络·知识付费·创客匠人·知识变现
Lx3521 小时前
Hadoop日志分析实战:快速定位问题的技巧
大数据·hadoop
喂完待续4 小时前
【Tech Arch】Hive技术解析:大数据仓库的SQL桥梁
大数据·数据仓库·hive·hadoop·sql·apache
SelectDB5 小时前
5000+ 中大型企业首选的 Doris,在稳定性的提升上究竟花了多大的功夫?
大数据·数据库·apache
最初的↘那颗心5 小时前
Flink Stream API 源码走读 - window 和 sum
大数据·hadoop·flink·源码·实时计算·窗口函数
Yusei_05237 小时前
迅速掌握Git通用指令
大数据·git·elasticsearch
一只栖枝13 小时前
华为 HCIE 大数据认证中 Linux 命令行的运用及价值
大数据·linux·运维·华为·华为认证·hcie·it
喂完待续18 小时前
Apache Hudi:数据湖的实时革命
大数据·数据仓库·分布式·架构·apache·数据库架构
青云交18 小时前
Java 大视界 -- 基于 Java 的大数据可视化在城市交通拥堵治理与出行效率提升中的应用(398)
java·大数据·flink·大数据可视化·拥堵预测·城市交通治理·实时热力图