GBase 8a
性能调优
文章
GBase 8a MPP Cluster的hash分布列选取策略
发表于2024-04-03 10:47:08803次浏览2个评论
哈希分布表
选择有效的哈希分布策略,是保障数据均匀分布和提升性能体验的关键所在。下文将分享GBase 8a 对于 hash 分布列的选择建议~
选择的依据:
- 如果经常进行大表 join 连接,优先把 join 连接字段定义成 hash 分布列,这样使大表间的 join 尽量在本地运算,减少节点间数据的拉表操作;【相关子查询也可参考此原则】
- 其次考虑使用频率高的 group by 字段作为hash字段;
- 最后尽量保证使用频率较高的 where 等值查询列,努力保障其产生的结果集的存储也相对均匀的,避免在出现某些节点过于繁忙或清闲的情况;
- 针对上述三个条件判有多个选择时,优先挑选表中重复值较少的列,即选择count(distinct col)值大的列做 hash 分布列,以此保障所有节点的数据均匀存放,避免有节点出现数据分布过多或过少情况。
限制说明:
- hash 分布列支持选择多列,最多支持10个字段;
- hash 分布列支持整数型(int | bigint | smallint | tinyint)、浮点型(decimal | numeric)、字符型(varchar | varbinary);
- hash 列在使用过程中,禁止加类似 LTRIM 等函数操作,此举会破坏 hash 分布;
- hash 列的值,不允许进行 update 更新操作;
建议:
- 当 join 的等值关联条件中有 hash 列时,尽量保持两个等值关联列在字段类型定义上完全相同;
- 当 group by 语句中如果有 hash 列,请将 hash 列放到最前面;(多个 group 列时)
- 当有多个 hash 分布列时,join 条件中应尽量包含所有 hash 列。
语法样例:
- 创建哈希分布表
create table tb_name(col1 int,col2 varchar(20),col3 datetime) distributied by ('col1');
- 将已有表改为哈希分布表
create table hash_tb_namedistributed by ('col_name')as select col1,col2,... from tb_name;
- 将已有哈希分布表(hash)改为随机分布表(random)
drop distributed col_hash on hash_tb_name;
评论
登录后才可以发表评论
levvel发表于 5个月前
进来看看,应该有收获
GBase用户47954发表于 1个月前
感谢作者的精彩分享!
热门帖子
- 12025-12-01浏览数:182759
- 22023-05-09浏览数:25044
- 42023-09-25浏览数:18519
- 52020-05-11浏览数:17526