查询失败并显示“错误:由于 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 批量插入失败并显示“绑定变量?未设置”

将 Grafana 连接到 MySQL 显示查询失败,为啥?

查询按日期范围分隔的行数

Hive 查询失败并出现分析异常

Viewstate 仅在 IE 中失败