查询失败并显示“错误:由于 VMEM 使用率高而取消查询”
Posted
技术标签:
【中文标题】查询失败并显示“错误:由于 VMEM 使用率高而取消查询”【英文标题】:Query failing with "ERROR: Canceling query because of high VMEM usage" 【发布时间】:2017-09-05 20:00:23 【问题描述】:我们有少量的 gpdb 集群。在这方面,很少有查询失败
系统相关信息
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 到 8GB MAX_STATEMENT 内存从 200 MB 到 16 GB
不确定这里究竟需要更改什么。仍然,试图了解错误的根本原因。
任何帮助将不胜感激?
【问题讨论】:
【参考方案1】:gp_vmem_protect_limit 适用于每个段。你有 16 段。根据您的段和 vm_protect,您需要 2700MB X 16 总内存。
【讨论】:
谢谢,我们必须将可用的 vm 总内存 = 45 GB。在这种情况下,vmprotect limit 1400 应该是多少? 2 段主机服务器上的 16 段。 overcommit ratio 设置为 75,我不认为你有 45GB vmem。 30*0.75 + 15 ~= 37.5G。您需要为操作系统预留内存。假设您为 GPDB 保留 32G,那么 32/16=2GB。将虚拟机保护设置为 2048MB。请注意,GPDB 不喜欢内存过度使用。你有 30G 物理内存,但你当前有 37.5G vmem 地址。此外,根据您的 cpu 核心分配段数。你也不希望 gpdb 过度使用 cpu。 这个错误是由 runaway_detector 触发的。您可以禁用 runaway_detector 或避免以“gpadmin”身份运行查询。 感谢您的好主意。我要检查环境。以上是关于查询失败并显示“错误:由于 VMEM 使用率高而取消查询”的主要内容,如果未能解决你的问题,请参考以下文章
Django 迁移失败并显示“__fake__.DoesNotExist:权限匹配查询不存在”。
使用“?::TIMESTAMP_NTZ”在查询中指定类型时,Snowflake JDBC 批量插入失败并显示“绑定变量?未设置”