关于parallel_fragment_exec_instance_num的疑问

【StarRocks版本】例如:2.2.2
在官方的文档中是这样描述这个参数的:


问题:一个查询可能包含多个fragment,如果设置的并行数量parallel_fragment_exec_instance_num=20,假如fragment0查询的表的tablet是10个,而fragemnt1查询的表的tablet是30个,那么这个时候查询真正执行的时候,fragment0的并行度只有10个,而fragment1也只有20个,如果这样,那么文档中的"所以一个查询的并行度为一个fragment实例的并行数量"是否有误?2个frgment执行的并行度不一致,这个时候查询的并行度应该怎么算?算10还是20?

并行度是指单个be上一个fragment实例的并行数。以tablet数目为上限,所以fragment0并行度为10,fragment1并行度为20,这个和上述结论并不冲突,不知道这样说您能不能李理解。

在我举的例子中:
一个查询包括fragment0和fragment1两个fragment,
fragment0上查询表tablet是10个,
fragment1上查询表tablet是30个,
我设置的并行度是20,
那么在执行的时候,
fragment0实际并行度是10
fragment1实际并行度是20
那么这个查询的并行度到底是10还是20?

请问下你这块说的fragment0和fragment1指的是一个be上面还是两个be上面?

并行度的概念是:默认1代表的是每个be上面只有一个并行扫描数据,从scan算子到后面的其他算子。
如果并行度配置为10,有3个be,分别为be1、be2和be3,一个表在3个be上面的分桶个数分别为be1:8个,be2:10个,be3:20个,那么最终的并行度在3个be分别为be1:8,be2:10和be3:10

1赞

在你的解答里是不同的fragment在不同的be上,这部分解释我看懂了。在一个be上这个并行度怎么算?一个桶数少于并行度,一个大于并行度,是不是按照小于并行度的算?

一个be上面也是同样的道理。比如a表在be1上4个桶,b表在be1上8个桶,现在并行度设置为6,那么最终两个表扫描时候的并行度分别为a表4和b表6,两个表如果有join的话,那就是取两个里面大的那个作为join的并行,比如a表和b表join,join并行就是6

1赞

好的,明白了,感谢。