集群多表Join查询,cpu使用率低

【详述】
1、SR2.1.1 集群多表Join查询,cpu使用率低(单机环境单核使用率可以达到70%+,集群环境集中在单核使用率高,其余核未使用),集群查询cpu使用情况如下:


2、集群使用pipline引擎后单并发查询效率变低,耗时如下:
并发数 | 未使用pipline引擎,16并行度 | 使用pipline引擎
1 | 15203 ms | 32486ms
5 | 66054 ms | 35935ms
10 | 132736ms | 40173ms

3、具体的建表语句和pipline执行引擎下5并发查询的prodile,explain文件见附件,
4、补充下表的数据量:
tb1:136
tb2:1461163
tb3:36239136
tb4:72164999
tb5:90176573

麻烦问下各位大佬,有何可以优化的配置?

【StarRocks版本】2.1.1
【集群规模】1fe(1 follower)+3be(fe与be混部)
【机器信息】三机器集群,单机配置:80C/512G/千兆
【附件】
create.sql (2.6 KB) profile.txt (83.4 KB)
explain.txt (70.9 KB)

您好,您发的profile是没有开启pipeline下的吧

这个是开了pipline之后的profile文件,
通过show variables 查看,此时相关配置如下:
enable_pipline_engine=true
parallel_fragment_exec_instance_num=1
pipline_dop=1

您好,麻烦问下怎么从profile中确认开启了pipline呢?

set pipline_dop=0看看

看profile中没有pipeline相关信息

笔误了,pipline_dop这个配置想就是0的,一直是默认值没有改过

刚才经过对比单机和集群的配置信息,如下的和pipline的配置是一样的
enable_pipline_engine=true
parallel_fragment_exec_instance_num=1
pipline_dop=0
但是单机的profile中是有pipline相关信息的,集群的profile确实没有piplineDriver相关信息,
请问一下,有什么原因可能会导致这种现象吗?或者排查方案?

您好,您说的单机和集群说的是有两个集群?

是的,有一个单机的和一个三台服务器的集群

你好,确认了下,pipeline的profile中会有pipeline关键字信息的,建议您set global enable_pipline_engine=true再看下profile。另外2.1版本的pipeline目前可能会有一些性能问题,建议您后面使用2.2版本测试pipeline性能。

非常感谢。
刚才再次去确认,发现是enable_pipline_engine 这个参数在集群中没有设置为global导致的。之前CPU使用率较低原因是网络数据交换,网卡基本跑满导致的。

不过,目前发现1个新的问题是,如果在非pipline模式,并发度设置为1,网络数据交互的数量大大减少(后期几乎无网络流量),导致并发度上来之后,pipline+并发度为1的效果是最好的,后期提高并发,pipline+并发度为1耗时影响较小,并行度较大或者pipline模式,提高并行度(由于受到网络影响)耗时几乎是线性的。
使用jmeter进行5并发测试结果大概为:

模式 耗时
非pipline+1并行度 36s
非pipline+16并行度 68s
pipline模式 75s

以下附件是运行时的prodie文件:
5bingfa_pip_parallel.txt (544.6 KB) 5bingfa_unpip_1_parallel.txt (83.5 KB) 5bingfa_unpip_16_parallel.txt (419.7 KB)

感觉这块是不是还可以进行优化,像并行度为1时那样,减少网络交互,提高效率?

你好,pipeline模式下就是为了让大家不用设置并行度这个参数的哈。开启pipeline情况下,并行度parallel_fragment_exec_instance_num设置为1即可,pipeline会自适应调节。调大parallel_fragment_exec_instance_num反而可能会有负增益。

我目前的疑惑是,在非pipline模式,16并行度的时候,会进行大量的网络交互,导致并发后耗时呈现线性增加,但是1并行度是没有这种现象的。这一块感觉是不是有什么可以优化的点