GBase 8a
性能调优
文章

GBase 8a 性能优化方法分享(1)分布列优化

发表于2024-03-14 15:09:57641次浏览2个评论

    GBase8a集群性能取决于各个节点整体的性能,每个节点存储的数据量对于集群性能有很大影响,为了尽可能达到最好的性能,所有的数据节点应该尽量存储等量的数据,因此在数据库表规划定义阶段要考虑表是复制表还是分布表,以及对分布表上的某一些列设置为分布列进行hash分布。

    例如根据数据的分布特性设计,可以把字典表或者维度表建成复制表的方式将数据存储到各个节点上,不须对其数据进行分片存储,因为字典表的数据量相对较小,虽然在各个节点进行存储有一定的数据冗余,但和事实表的JOIN 运算就可在本地进行,避免节点间搬动数据。对于事实表(大表)可将数据分片到不同的节点上存储,分片方法可采用(range, round robin, hash)等不同方法,SQL执行的查询条件满足只在其中部分节点时,查询优化可决定SQL的执行仅在这些节点执行即可。

建Hash分布列的原则基本如下:

  • 尽量选择count(distinct)值大的列做Hash分布列,让数据均匀分布。

  • 优先考虑大表间的JOIN,尽量让大表JOIN条件的列为Hash分布列(相关子查询的相关JOIN也可以参考此原则),以使得大表间的JOIN可以直接分布式执行。

  • 其次考虑GROUP BY,尽量让GROUP BY带有Hash分布列,让分组聚合一步完成。

  • 通常是等值查询的列,并且使用的频率很高的应考虑建立为hash分布列。

  • 选择某数据列随机性很大的字段,避免部分节点的热查询。

    注意事项:

  • hash分布键支持联合分部键选择、最多选择10列

  • hash分布键只能选择整数型、浮点型、字符型

  • 作为hash分布列的列不能进行update

  • 尽量保持hash join的等值关联列在类型定义上完全相同,如char和varchar类型进行关联,可能出现结果为空情况,原因是char型不足最大长度时用空格补齐,varchar则没有空格,如果关联则需要trim空格

评论

登录后才可以发表评论
崔哥发表于 2个月前
红满苔阶绿满枝,杜宇声声,杜宇声悲!交欢未久又分离,彩凤孤飞,彩凤孤栖。别后相思是几时,后会难知,后会难期。此情何以表相思,一首情词,一首情诗。雨打梨花深闭门,忘了青春,误了青春。赏心乐事共谁论,花下销魂,月下销魂。愁聚眉峰尽日颦,千点啼痕,万点啼痕。晓看天色暮看云,行也思君,坐也思君。
GBase用户47954发表于 1个月前
感谢作者的精彩分享!