GBase 8a调整内存参数降低内存使用解决内存占用高的现象

在某些项目中,不允许操作系统内存达到一定比例,比如90%,或者有其它应用运行在同一个主机上,则必须对GBase的内存进行控制,不允许独占。本文介绍如何通过GBase 8a的参数配置,降低数据库使用操作系统内存容量的方法。

参考

GBase 8a集群限制元数据占用的temp堆内存大小
GBase 8a集群常见内存配置参数

背景 

GBase 8a占用操作系统内存高,包括出现SWAP,需要降低占用,减少swap带来的性能影响。

涉及的参数

其中三个内存参数(gbase_heap_data,gbase_heap_large ,gbase_heap_temp),默认是按照物理内存的10/16=62.5%评估,比例是6:3:1, 等同于 6/16、 3/16 和 1/16。
参数降低的功能影响: 
整体降低后,如出现不足,还是会从操作系统分配,这部分内存一旦占用,是不释放的。但最高不能超过gbase_memory_pct_target 参数的最大值。

注意:在V952 的2022年之后的版本里,有参数不再从操作系统直接malloc,而是走temp堆,具体看后面的参数_gbase_memory_turn_to_heap

建议

降低所有内存的初始值,但不降低最大值(pct),留出更多的内存,让数据库自行动态调度(从操作系统malloc的内存会尽量尽快归还的)。

_gbase_express_table_metadata_limit

针对元数据metadata。用于保存表的meta信息。默认是gbase_heap_temp的一半。 在某些场景下,会是内存占用高的原因。比如针对33亿行,几百列的表,metadata需要2G的内存,而主副本就需要4G. 如果有10个表,则需要40G。

该内存可以定时释放,但如果被释放的表处于使用状态,则会被忽略,等待下次检测。这也是测试环境,如果负载降低,内存占用也会降低的原因。

gbase_memory_pct_target

最大允许的内存占用比例,默认0.8等于80%。 内存总量=物理内存+SWAP内存。如超过,SQL会返回malloc分配内存失败错误。

注意,在V95 2022年之后的版本里,该参数忽略了SWAP,只考虑物理内存的百分比,由参数_gbase_memory_use_swap控制,默认为OFF不使用。

降低参数影响:

会导致在更少的并发查询时,就出现内存分配超限的报错。

gbase_heap_data

热数据缓冲。将查询用到的数据,缓冲在内存里,减少磁盘读写来提高性能。 默认值是物理内存的 60%*60% = 36%
降低参数影响:影响性能。
在系统存在热数据时,比如频繁访问的表,会导致更多的磁盘IO,性能会下降;
如果不存在热数据,或者内存不足以报错所有的热数据,比如经常有大表访问导致现有热数据被换出,则影响减少。

gbase_heap_large

针对算子,比如group,join、sort等操作的专用内存。每个连接允许使用的最大值。 默认值是物理内存的 60%*30%=15%。比如128G的,默认分配46G.
降低参数影响:影响性能。
算子计算每次能在内存进行的数据量减少,循环轮次增加,性能会有下降。

gbase_heap_temp

临时堆。除了算子,包括加载等需要临时申请空间的,都是从这个堆。也包括智能索引等。默认值是物理内存的 60%*10%=6%
降低参数影响:无性能影响。

修改建议

gbase_memory_pct_target

该参数是内存比例,可以严格降低内存占用率。128G物理内存+SWAP共160G,80%是128G,70%是112G。 如果项目中,机器只有GBase在使用,考虑到gclusterd等也占用部分内存,建议修改到0.7即可。

如果系统有其它应用运行,且占用内存较高,可以考虑适当降低该参数。当然同时也要对应的降低初始评估的参数值。

gbase_heap_data

该内存默认使用最大(60%),优先建议调整。将其变相转移给__gbase_express_table_metadata_limit、gbase_heap_large、gbase_heap_temp使用。
注意:如果只修改此参数,不修改pct参数,可能出现该参数从操作系统malloc很多内存的情况,导致swap,比如当有多个大表参与查询时。所以一般建议和gbase_memory_pct_target 配合使用。

gbase_heap_large

该内存默认是物理内存的30%,如果系统并发不高,可以考虑降低默认值,留给系统自行分配(malloc)。

_gbase_memory_turn_to_heap

不再从操作系统mallco内存,而是从heap上分配,避免内存使用超限导致被OOM。在新的95版本里默认是on。 如关闭,则从操作系统malloc。

总结

降低内存参数,从理论上会降低性能(等于使用了更小内存的机器)。但内存参数高,出现SWAP,也会降低性能。其中的比例需要根据项目测试结果决定。从中选择更小的一个。

另外从其它角度看,降低业务并发数,增加机器内存,比如增加到256G,也是可以考虑的方案。