GBase 8a
性能调优
文章

数据库调优--数据库系统参数配置之GCluster 参数优化(1)

发表于2024-12-30 18:39:2941次浏览3个评论

本篇主要介绍查询优化等参数,并发相关优化在下一篇中介绍。

  • 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 时,才会开启本优化。

  •  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 值。

评论

登录后才可以发表评论
枫溪发表于 8个月前
666
崔哥发表于 6个月前
晨起开门雪满山,雪晴云淡日光寒。檐流未滴梅花冻,一种清孤不等闲。
用户头像
levvel发表于 4个月前
听说评论可以拿积分,我试一下子