查询失败,出现“错误:由于VMEM使用率过高而取消查询”
问题描述:
我们有一小群gpdb集群。在这,几个疑问是失败查询失败,出现“错误:由于VMEM使用率过高而取消查询”
系统相关信息
TOTAL RAM =30G
SWAP =15G
gp_vmem_protect_limit= 2700MB
TOTAL segment = 8 Primary + 8 mirror = 16
SEGMENT HOST=2
VM_OVERCOMMIT RATIO =72
Used this calc : http://greenplum.org/calc/#
症状
查询失败,错误消息如下所示:
ERROR: XX000: Canceling query because of high VMEM usage. Used: 2433MB, available 266MB, red zone: 2430MB (runaway_cleaner.c:135) (seg2 slice74 DATANODE01:40002 pid=11294) (cdbdisp.c:1320)
我们尝试:
改变以下参数 statement_mem从125 MB到8 GB MAX_STATEMENT内存从200 MB到16 GB
不知道究竟需要here.still改变,试图了解错误的根本原因。
任何帮助,将不胜感激?
答
gp_vmem_protect_limit适用于每段。你有16段。根据你的细分市场和vm_protect,你需要2700MB×16的总内存。
谢谢,我们必须提供总可用内存= 45 GB。在这种情况下,vmprotect的限制是1400? – vs0731
2段主机服务器上的16段。 – vs0731
overcommit比例设置为75,我不认为你有45GB的vmem。 30 * 0.75 + 15〜= 37.5G。您需要为OS预留内存。假设你为GPDB保留32G,那么32/16 = 2GB。将vm保护设置为2048MB。 请注意,GPDB不喜欢内存过量使用。你有30G的物理内存,但是你目前拥有37.5G的vmem地址。 此外,根据您的cpu核心分配段的数量。你也不希望gpdb过度使用CPU。 –