GBase 8a
性能调优
文章

南大通用GBase8a多列动态重分布hash join参数_t_gcluster_join_multi_hash_optimize_level介绍

发表于2024-09-20 09:48:40249次浏览1个评论

参数名称:_t_gcluster_join_multi_hash_optimize_level

取值:[1|2]

默认值:1

说明:多列 hash 优化等级

1. 只支持静态多列

2. 支持静态和动态重分布多列。

修改方式:可使用 set 语句修改值也可在配置文件中修改值。适用于 session、global范围均可。

详细解释及示例:

该参数控制2表join的行为,当两表join,且两表均为分布表,参与join的等值关联条件列非两表相同的hash分别列时:

取值为1时的执行计划策略为重分布,重分布按照等值条件中的最后一个等值条件进行数据重分布,

取值为2时的执行计划将其中一张表按照另一张表的hash分布列进行重分布,如果hash分布列为多列hash将以多列hash形式进行重分布

如下例:

1)当join两表一张表为多列hash,另一张表为随机分布表时:

 CREATE TABLE corrsub1 (
 hcol1 int(11) DEFAULT NULL,
 hcol2 varchar(10) DEFAULT NULL,
 col3 varchar(10) DEFAULT NULL
)  DISTRIBUTED BY('hcol1','hcol2')  – 多列hash分布表

CREATE TABLE corrsubr2 (
 col1 int(11) DEFAULT NULL,
 col2 varchar(10) DEFAULT NULL,
 col3 varchar(10) DEFAULT NULL
)  – 随机分布表

set _t_gcluster_join_multi_hash_optimize_level = 1 时执行计划

按照join等值列表中的最后一个关联列 t1表hcol2和t2表col2,对两表进行重分布

set _t_gcluster_join_multi_hash_optimize_level = 2 时执行计划

按照 t1表的多列hash分布列hcol1和hcol2,对t2表进行重分布

2)当两表均为随机分布表时:

CREATE TABLE corrsubr1 (
 col1 int(11) DEFAULT NULL,
 col2 varchar(10) DEFAULT NULL,
 col3 varchar(10) DEFAULT NULL
)  – 随机分布表

CREATE TABLE corrsubr2 (
 col1 int(11) DEFAULT NULL,
 col2 varchar(10) DEFAULT NULL,
 col3 varchar(10) DEFAULT NULL
)  – 随机分布表

set _t_gcluster_join_multi_hash_optimize_level = 1 时执行计划

按照t1表和t2表等值join列中的最后一个列进行t1和t2表的动态重分布

set _t_gcluster_join_multi_hash_optimize_level = 2 时执行计划

按照t1和t2表等值join列中的全部列进行动态重分布

3)需要注意:当两表分别为hash分布表,但join列表无法对上时,如果有单列hash表,会按照单列进行重分布:

 CREATE TABLE corrsub1 (
 hcol1 int(11) DEFAULT NULL,
 hcol2 varchar(10) DEFAULT NULL,
 col3 varchar(10) DEFAULT NULL
)  DISTRIBUTED BY('hcol1','hcol2')  – 多列hash分布表

 CREATE TABLE corrsub2 (
 hcol1 int(11) DEFAULT NULL,
 col2 varchar(10) DEFAULT NULL,
 col3 varchar(10) DEFAULT NULL
)  DISTRIBUTED BY('hcol1')  – 单列hash分布表

set _t_gcluster_join_multi_hash_optimize_level = 2 时执行计划

评论

登录后才可以发表评论
紫菀发表于 2个月前
谢谢分享