ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

GBase 集群执行计划的 union 优化

2022-01-11 16:32:56  阅读:160  来源: 互联网

标签:hash union id4 节点 集群 x1 GBase select


union 执行方式 

 集群计划对 union 的固有的执行方式有以下三种方式: 

1、直接下发:能在各个节点上执行 union 操作,结果不需要汇总直接返回客 户端 如:

 select id4 from x1 union select id4 from x2; 

x1 和 x2 是 hash 分布表,且两表的 id4 是 hash 分布列 

select entry_id,id4 from x1 minus select entry_id,id2 from r1; 

x1 是 hash 分布表,id4 是 x1 的 hash 分布列,r1 是复制表。

 2、单节点执行:只需要在一个节点上执行返回结果 如:

 select * from r1 union select * from r2; 

r1 和 r2 是复制表

 select entry_id from x1 where x1.id4=10 union select id2 from x2 where x2.id4=10; 

x1 和 x2 是 hash 分布表,且两个表的分布列都是 id4. 

3、先执行再汇总:各个节点先执行 union,结果汇总到一个节点上,再在汇总节点上执行 distinct。

union 优化原理:

该优化受参数控制,优化主要是增加了计算节点数目,在节点数较多时(10 个以上),性能提升明显。具体优化方式如下: 能够满足“直接下发”和“单节点执行”的,按“直接下发”和“单节点执 行”进行执行;对于不能满足的,通过拉表转换成“直接下发”或“单节点 执行”进行执行,优先转换成直接下发执行。拉表包括拉复制表和 hash 重分布拉表。

union 优化控制参数 

  •  _t_gcluster_union_redist_optimize 

控制是否开启 union 重分布优化.

取值范围[0,1,2] 

默认值为 0 代表关闭

1 表示开启不支持 union 两边对应为 int 和 decimal 列进行重分布优化 

2 表示开启,支持 union 两边对应为 int 和 decimal 列进行重分布优化,

重分布前会将 int 列转换为 decimal 类型,进行重分布 

注: hash 重分布是指将表中的数据按照 union 操作时临时指定的列作为 hash 分布 列进行 hash 重分布。不同的数据类型有不同的 hash 算法,union 优化要求各 子句对应位置上的 hash 列数据类型要相同,如果不相同需转为一致的数据类 型。目前只支持 int->decimal 的数据类型转换,其他类型之间的转换均不支 持。

  • _t_gcluster_union_redist_distinct 

控制子查询拉表时是否带上 distinct。

取值范围[0,1] 默认值为 1,表示带 distinct 

注: 对需要去重的情况,union 子查询拉表时,通常会在投影列中增加 distinct 关 键字先进行一次去重以减少拉表和下一步计算的数据量。当子查询数据重复率较低,进行一次 distinct 减少的数据量不大时,可以设置该参数为 0,减少 一次 distinct。

标签:hash,union,id4,节点,集群,x1,GBase,select
来源: https://blog.csdn.net/Mr_dar/article/details/122435553

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有