GBase 8a
性能调优
文章

数据库调优--数据库系统参数配置之GNode 参数优化

发表于2024-12-30 18:27:46121次浏览0个评论

系统参数在服务器初始化时从配置文件读取设定值,未设置值的参数使用系统默认值。

 设置系统参数

• 在配置文件中设置,需要重新启动服务才能生效。

• 连接数据库后设置。

set [global] 系统变量 = 值    

在当前 session 或者全局生效,当服务重启之后就不再生效。

查看系统参数的值:

 show variables like “参数名称”;

 

GNode 的内存参数

1. Heap 参数(global)

gbase_heap_data 主要设计用途是缓存数据(DC),应分配最多的内存。

gbase_heap_large 用于管理不频繁申请、释放的内存。

gbase_heap_temp 用来分配较为琐碎的和小块儿的临时内存,较少使用。

gbase_memory_pct_target 设置内存的可用比例,默认 0.8。

参数下限:

gbase_heap_data >= 512MB

gbase_heap_large >= 256MB

gbase_heap_temp >= 256MB

 参数上限:

(gbase_heap_data + gbase_heap_large + gbase_heap_temp ) <= total memory *gbase_memory_pct_target

2. 算子 buffer(session)

算子 buffer 均为 session 级别,即如果设置 gbase_buffer_result=1G,且并发数为 30,则在执行并发的过程中,30 并发总共占用的 gbase_buffer_result 就为1G*30 = 30G,而且是在不计算其他的算子 buffer 的情况下。

所以如果在高并发环境中将某一个算子 buffer 设置很大的话,很有可能就会出现内存不足无法分配的情况。

常用的 buffer 如下:

•gbase_buffer_distgrby:用于保存 distinct 操作的中间结果;

•gbase_buffer_hgrby:用于保存 shash group by 操作的中间结果;

•gbase_buffer_hj:用于保存 hash join 操作的中间结果;

•gbase_buffer_insert:用于保存 insert values 的中间结果;

•gbase_buffer_result:用于保存物化的中间结果;

•gbase_buffer_rowset:用于保存 join 计算的中间结果集;

•gbase_buffer_sj:用于保存 sort merge join 的中间结果,当 join 条件是 a>=b或者 a<=b 时,可能会使用 sort merge join;

•gbase_buffer_sort:用于保存 sort 操作的中间结果。

算子 buffer 的设置原则:

一般情况下(非高并发场景),根据系统内存大小,算子 buffer 可以按照如

下方法设置:

•gbase_buffer_hgrby 和 gbase_buffer_hj 最大不超过 4G;

•gbase_buffer_result 最大不超过 2G;

•gbase_buffer_rowset 最大不超过 1G;

•其他算子使用系统估算即可。

•如果在高并发场景下,则不需要设置过大的算子 buffer,一般以系统自动评估为准。但如果并发数过大,不排除需要人为将算子 buffer 设置更小的情况。即并发数乘以总算子 buffer 大小不超过 gbase_heap_large 为宜,但最大也不能超过系统总内存大小。

修改算子 buffer 的其它场景:

如果某条 sql 由于某个算子执行过慢(瓶颈点可参考单机 trace),可以适当调大与之对应算子 buffer。例如根据 trace 发现 join 较慢,可以适当调大gbase_buffer_hj 的值。但是需要注意,调整该值时必须不能影响其他 SQL 的执行。

 

Gnode 的并发控制参数

1. gbase_parallel_execution

 用于设置是否启用并行开关。

0 关闭。

1 开启,默认为开启。

适用场景:当发现 CPU 利用率低时,可开启并行。并行原理是将数据切分成多块,多块并行处理,最后合并结果集适合并发量不大的复杂 SQL 场景。

2. gbase_parallel_max_thread_in_pool

 用于配置并行执行器线程池中的最大线程个数,默认为系统 CPU 核数的 2倍。

取值范围:0~4096,默认为系统 CPU 核数,不应设置超过 cpu 核数的 4 倍。

3. gbase_parallel_degree

控制每个 SQL 的最大并行度

取值范围:0~ gbase_parallel_max_thread_in_pool,最大取值范围不超过线程池最大可用线程数。

1 表示不启动并行,即单线程执行。

0 表 示 默 认 并 行 度 为 线 程 池 gbase_parallel_max_thread_in_pool 的 1/2(gbase_parallel_max_thread_in_pool 为奇数会只取整数部分)。

评论

登录后才可以发表评论