暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

gbase性能优化数据库参数配置(三)

原创 欧阳无敌 2022-07-29
765

接着前文继续

GCluster参数优化
1. 查询优化参数
gcluster_hash_redistribute_groupby_optimize
Cluster use hash redistribute groupby mode, default is 1(0 - OFF, 1 - ON) 如果开启此选项,进行分组(group by)运算之前,将会把临时结果利用哈
希算法重分布到各个运算节点,再由各个节点进行分组运算。由于数据在分到各个节点之前已经做了哈希,因此产生的结果直接汇总即可得到最终结果,不再需要由汇总节点再做一次分组。

gcluster_hash_redistribute_join_optimize
这个参数用于控制是否启用Hash重分布的JOIN模式,默认1(0 – 拉复制表,1 – 动态hash,2-自动评估) 如果开启此选项,在两个分布表进行等值join 运算时,将对其中一个表的数
据根据连接条件列的值进行动态哈希。然后利用各个运算节点上动态哈希后的临时表和另一个表进行join 运算。这样,各节点的运算结果直接汇总即可
得到最终结果。这种策略不会将其中一个分布表在所有运算节点上拉成复制表,每个运算节点只需接收这个表的一部分数据。如果参数设置为2 则当两
表的数据量相差不超过20% 时,使用哈希重分布JOIN;否则不使用。gcluster_special_correlated_optimize 

该参数用于控制是否开启相关子查询hash重分布优化。父子查询是相关子查
询关系,并且存在等值JOIN关系,则将父子查询按JOIN列进行hash重分布后执行。
• 参数 = 0 关闭;
• 参数 = 1 启用;
• 该参数的默认值是1。
使 用 等 值 hash 重分布相关子查询功能需要配合参数
gcluster_crossjoin_use_hash_distribution来一起使用,使用原则如下:

当gcluster_special_correlated_optimize = 0时,无论如何设置参数
gcluster_crossjoin_use_hash_distribution的值,都不会开启本优化。
• 当gcluster_special_correlated_optimize = 1,而
gcluster_crossjoin_use_hash_distribution = 0时,也不会开启本优化。
• 当gcluster_special_correlated_optimize = 1,并且
gcluster_crossjoin_use_hash_distribution = 1时,才会开启本优化。
示例如下:
SELECT COUNT(*) FROM x1 WHERE EXISTS (SELECT 1 FROM x2 WHERE
x1.id2 = x2.id2);
等值hash相关子查询优化,分别对x1,x2进行动态重分布。

gcluster_crossjoin_use_hash_distribution
这个参数用于设置当JOIN两边都不是hash列时,是否仍强制走hash重分布
JOIN。
• 参数 = 0:表示关闭,即当JOIN两边都不是hash列时,不使用hash重
分布JOIN功能;
• 参数 = 1:表示开启,即当JOIN两边都不是hash列时,使用hash重分
布JOIN功能;
• 该参数的默认值是1。
gcluster_empty_result_set_optimize 这个参数用于设置是否启用空结果集优化功能。默认为 0(0 – OFF, 1 - ON)。
空结果集优化,如果优化阶段可判断结果集为空,则直接返回,而不需要让
执行器进行执行。

gcluster_single_hash_node_optimize 单表hash条件的优化,当单表包含hash列的等值条件时,进行hash优化,sql
语句仅仅发送给单个节点。默认为1(0 - OFF, 1 - ON)。
 gcluster_hash_join_complex_optimize
子查询和父查询满足hash关系的优化,可当作一个整体部分来执行。这个参
数用于控制是否在子查询和父查询满足hash关系的优化时,当作一个整体部
分来执行。
• 参数 = 0 禁用,满足hash关系的优化时,不当作一个整体部分执行;
• 参数 = 1 启用,满足hash关系的优化时,当作一个整体部分执行。
• 该参数的默认值是1。

gcluster_union_optimize
这个参数用于设置是否使用union优化。使用union优化时,union 优化尽量把union 语句发送到节点执行,避免把所有需要union的表都拉成复制表。即利用union的结果集去重的特性,直接将union发送到下层去执行。这样

在某些情况下,可以大大减小汇总节点的中间结果集的大小。
• 参数 = 0:不使用union优化;
• 参数 = 1:使用union优化。
• 默认值为1
gcluster_starschema_join_estimate_optimize 设置评估两表join结果的方式,0:按照两表行数相乘进行评估;1:按照两
表中的大表的行数进行评估,默认值是1。
gcluster_delayed_group_by_optimize 设置group by是否下发到gnode执行,当group by下发到gnode 执行后结果
集并没有明显减少时,请设置该参数为1,(0 - OFF, 1 - ON)。
gcluster_count_optimize 设置对单表进行count(*)时,不产生中间结果表,gcluster直接计算结果值。
• 0:按照产生中间表的方式执行;
• 1:gcluster 直接计算count值。

优化点: count(*) 时原来的策略是先在发起节点上的gnode上创建一个临时
的汇总表, 把各个节点的执行结果汇总到该临时的汇总表上,然后对该临时
的汇总表再做sum的汇总,汇总完成后再删除临时的汇总表,当有高并发时,
频繁的创建和删除临时的汇总表将降低性能, 现在修改为不创建临时的汇总
表,把各个节点的执行结果收集到gcluster上,由gcluster直接计算,因此不
需要创建和删除临时的汇总表,从而提高性能。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论