GBase 8a
其他
文章

如何通过trace判断join算子无法并行

发表于2025-12-25 11:02:5416次浏览2个评论

出现数据量太少或系统剩余线程不足时join会退化为串行执行,出了trace里算子为串行外,还多一行

get DOP = 1: idle=xxx, parallel_degree=0, max_parallel=xxx

下面是两种出现join无法并行的trace示例,是在一个8核的机器上的trace

A.数据太少                               

BEGIN Join                                                                                                 

cnd(0):      t1.i = t3.a                                                                    

prepare to use hash join                                                                     

traverse dim: 80 tuples, match dim: 7168 tuples 

get DOP = 1: idle=16,parallel_degree=0, max_parallel=16       

Hybrid hash join: data will be split into 1 partitions

BEGIN hybrid hash join: partition(-1/1):                 

并发数太多

BEGIN Join 

cnd(0):      t1.i = t3.a 

prepare to use hash join

traverse dim: 80 tuples, match dim: 114688 tuples 

get DOP = 1: idle=6,parallel_degree=0, max_parallel=16

Hybrid hash join: data will be split into 1 partitions

BEGIN hybrid hash join: partition(-1/1):

 

在hybrid hash join中, match表的数据小于65536行会认为数据太少

当需要申请的线程大于idle数时,如申请8, 剩余6, 会退化为1

评论

登录后才可以发表评论
用户头像
levvel发表于 2个月前
太赞了!
曾浩轩发表于 2个月前
谢谢分享