Greenplum是一个进程模型的MPP数据库,对内存的要求相对较高。
Greenplum中也有一些关于内存如何合理配置的要求,包括官方文档。
可参考Greenplum-内存配置概述
在GP环境中有时候我们会遇到“could not fork new process for connection: Cannot allocate memory” 这样的报错,有时可能是整个节点的segment都会宕机。那么有可能就是内存相关的参数配置有误。
一般情况下,这种报错可能有两种原因:
Values on all segments are consistent
GUC : gp_vmem_protect_limit
Coordinator value: 243712
Segment value: 81920
上次输出表示协调者配置243G,segment配置82G内存。
如果按照文章的推荐配置(256G总内存,SWAP为4G),假如是在3个primary的情况下,推荐设置的值为:
gp_vmem = ((SWAP + RAM) – (7.5GB + 0.05 * RAM)) / 1.17
= (256-20) / 1.17
= 201
gp_vmem_protect_limit = gp_vmem / maximum_acting_primary_segments
= 201/3
= 67
root@test~]# sysctl -n kernel.pid_max
kernel.pid_max = 49152
那么我们可以适当调大一下这个值。
临时增加总进程数 pid_max,
root@uos-pc:~# sysctl -w kernel.pid_max=65535
kernel.pid_max = 65535
永久修改总进程数 pid_max,使配置立即生效。
root@uos-pc:~# echo "kernel.pid_max = 65535" >> /etc/sysctl.conf
root@uos-pc:~# sysctl -p
kernel.pid_max = 65535