【发布时间】:2020-05-12 23:36:05
【问题描述】:
我们有一个小型 Greenplum 集群,其中一些查询中止。
系统相关信息:
Greenplum Version: 6.3
Master Host: 1
Segment Host: 2
RAM per Segmenthost: 32GB
SWAP per Segmenthost: 32GB
TOTAL segment: 8 Primary + 0 mirror
segment per host: 4
vm_overcommmit_ratio: 95
gp_vmem_protect_limit: 8072MB
statement_mem: 250MB
查询由非超级用户执行。
症状:
查询失败,出现以下错误消息:
Canceling query because of high VMEM usage. Used: 7245MB, available 801MB, red zone: 7264MB (runaway_cleaner.c:189)
我们尝试了什么:
-
我们使用以下信息计算 Greenplum 参数:https://gpdb.docs.pivotal.io/6-3/best_practices/sysconfig.html
这有助于我们进行一些“简单”的查询,但对于更复杂的查询,错误再次发生。
-
在下一步中,我们配置了 max_statement_mem:2000MB
这对段主机的内存消耗没有任何影响。我们通过以下查询跟踪这一点:
select segid, sum (vmem_mb) from session_state.session_level_memory_consumption
where query like '%<some snippet of the query>%'
group by segid
order by segid;
内存消耗增加非常快,错误再次发生。
- 我们尝试通过为用户设置以下资源队列来限制内存消耗:
CREATE RESOURCE QUEUE adhoc with (ACTIVE_STATEMENTS=6, MEMORY_LIMIT=6291);
ALTER ROLE user1 RESOURCE QUEUE adhoc;
数据库设置为使用参数gp_resource_manager: queue的资源队列
当我们执行“rsqmemoryvalue”为 1048 的语句时,我们在表“gp_toolkit.gp_resqueue_status”中看到,但 session_state.session_level_memory_consumption 表中的内存消耗显示段的更高值,直到再次发生错误。
有没有人可以解决这个问题?
【问题讨论】:
-
为什么不使用资源组,你启用了吗?
-
感谢您的提示。我会尝试并给你反馈。
标签: greenplum