查询失败,出现“错误:由于VMEM使用率过高而取消查询”

查询失败,出现“错误:由于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的总内存。

+0

谢谢,我们必须提供总可用内存= 45 GB。在这种情况下,vmprotect的限制是1400? – vs0731

+0

2段主机服务器上的16段。 – vs0731

+1

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。 –