内存使用情况说明
内存使用说明¶
在SeaboxMPP数据库系统中,内存是一项关键的资源,对其的高效使用可以保证优秀的性能和输出,这一节描述了executor主机内存是在executor之间的分配方式,以及管理员可用的配置方法。
SeaboxMPP数据库的每个executor主机都会运行多个SeaboxSQL的实例,它们会共享主机的内存。executor在同时进行查询时都会使用同一个配置,并同时消耗相近的量的内存,CPU和磁盘输入/输出。
为了得到最佳的查询输出,内存配置需要精细的管理。在SeaboxMPP数据库中,从操作系统参数,到利用资源组管理资源,每个层级都有对应的内存配置,可以设置单个查询分配到的内存大小。
executor节点内存概述¶
在SeaboxMPP数据库的executor主机上,所有正在运行的进程会共享可用的主机内存,其中包括了操作系统、SeaboxMPP数据库executor实例,以及其他应用进程。管理员必须要判断并有效地分配SeaboxMPP数据库进程和非SeaboxMPP数据库进程使用的内存大小。与此同时,监控SeaboxMPP数据库或其他进程是否有异常的内存消耗行为也是很重要的。
配置executor主机内存的选项¶
主机内存将会由executor主机上所有的应用共享。你可以通过以下方式来配置主机内存的分配方式:
-
增加节点的RAM以增加物理内存。
-
配置Swap空间来增加虚拟内存。
-
设置核心参数
vm.overcommit_memory
和vm.overcommit_ratio
以配置操作系统处理对内存需求量较大的请求时的方法。
物理RAM和操作系统的配置通常由平台团队和系统管理员管理。有关推荐的核心参数请参考SeaboxMPP数据库安装指南。
预留给操作系统和其他进程的内存量是取决于你的负载。推荐的操作系统内存大小是32GB,但如果SeaboxMPP数据库中存在太多的并发的话,可将内存增加到64GB。SLAB是使用最多操作系统内存的进程,其内存使用量也会随着SeaboxMPP数据库并发和使用的套接字数量的增加而增加。
vm.overcommit_memory
核心参数应该保持为0,这是对SeaboxMPP来说最安全的数值。
vm.overcommit_ratio
核心参数设置了应用进程能够使用的RAM的百分比,剩下的内存就会留给操作系统。Red Hat系统默认的值是50(50%),如果将该参数设置得过高,可能会导致executor主机失效或数据库失效,一般来说比较保险的默认数值是50。该参数如果设置得过低会减少并发数,以及以减少SeaboxMPP数据可用内存为代价来同时处理的查询行为的复杂程度。
在增加vm.overcommit_ratio
的数值的时候,要记住还要为操作系统的活动保留一定量的内存。
请根据需要调整操作系统vm.overcommit_ratio
。如果您的内存利用率太低,请增加该值;如果您的内存或交换分区使用率太高,请减少该值。
数据库内存配置¶
SeaboxMPP数据库内存指的是所有SeaboxMPP数据库executor实例可用的内存大小。
在你搭建SeaboxMPP数据库时,你需要确认每个主机运行的主executor数量,以及每个executor消耗的内存大小。基于不同的CPU核心数、物理RAM大小以及负载特性,通常一台主机上会运行4到8个executor。在启用了executor镜像的情况下,内存必须按照该主机上可运行的最大主executor数量来分配,以防出现系统故障。当你使用默认分组镜像的配置时,一台executor主机故障将会加倍其镜像executor所在的主机上的活跃主executor数量。将每台主机上的镜像分散到其他主机上的镜像配置可以降低最大值,允许每台executor分配到更多的可用内存。例如,如果你使用了区组(block)镜像配置,每个区组有4个主机,每个主机上有8个主executor,单个主机的故障会导致区组中其他主机出现最多11个活跃主executor,而使用默认组镜像配置的话则会产生最多16个。
为了防止SeaboxMPP内存过量使用导致seaboxsql进程被操作系统OOM杀掉,应当限值SeaboxMPP的内存使用量。多个配置参数与此有关,其中,sc_vmem_protect_limit
参数非常重要,限值了单个executor的内存使用上限。
一般地,SeaboxMPP安装程序会根据系统内存大小自动配置sc_vmem_protect_limit
参数值,如果用户有特殊需要也可以自行配置。