声明:文中观点为作者的个人观点、不代表官方、如需更多帮助,请联系Pivotal官方·转载必须注明出处

针对Greenplum中主要的内存设置参数做如下说明(不涉及OS级别参数):

statement_mem:

ERROR: insufficient memory reserved for statement (memquota.c:228)

当扫描一张分区特别多的表时,会出现该错误,此时需要将默认的125MB的配置提高,建议在500MB左右或者更高一些。

不过,如果需要做系统级别的修改需要谨慎对待,后面会结合几个参数说明。

gp_vmem_protect_limit:

"ERROR","53200","Out of memory.Failed on request of size 156 bytes.(context 'CacheMemoryContext') (aset.c:840)"

"ERROR","53400","Out of memory (seg13 slice13 sdw1-1:40001 pid=10183)","VM Protect failed to allocate 8388608 bytes, 6 MB available"

该错误是Greenplum系统无法从OS申请到所需要的内存导致的错误,因为gp_vmem_protect_limit配置高于OS所能提供的能力,当Greenplum

申请超过OS能力时,会得到该异常信息。解决办法是确保内存消耗不超过gp_vmem_protect_limit配置,官方建议不超过其90%。

针对最常见的内存错误OOM,需要说明(针对4.1之后版本,早起版本请前去查询相关文档):

单语句的内存消耗受3个参数控制:gp_resqueue_memory_policy、statement_mem、max_statement_mem

A、缺省gp_resqueue_memory_policy配置为eager_free,在此情况下,内存将物尽其用(我从词面理解的,官方并未给出详细说明),但

不能超过max_statement_mem的限制以及resource queue的memory_limit限制,此时如果resource queue未做限制(缺省资源队列

均无内存限制),既存在OOM缺口,而此时statement_mem将不具备严格限制功能,同时max_statement_mem的缺省值为2000MB。

B、当gp_resqueue_memory_policy配置为auto时,内存消耗将受statement_mem和resource queue的memory_limit限制,同样,

缺省资源队列无内存限制,不过,statement_mem的缺省值为125MB。

综合考虑内存限制参数,由于资源队列的memory_limit缺省是没有限制的,我们假设有10个需要消耗1000MB的语句同时提交。

对于A情况来说,需要向OS申请1000MB×10≈10GB的内存,这已经大于gp_vmem_protect_limit的缺省限制,此时,如果

gp_vmem_protect_limit×节点节点实例数>>节点内存,则极有可能出现OOM错误,此时通过放大gp_vmem_protect_limit是可能带来

缓解的,但并非良措,因为超过物理内存部分的内存申请需要SWAP来响应。而且,很容易超过物理内存+SWAP的总和,将继续出现OOM且

将进入无解状态。

对于B情况来说,需要向OS申请125MB×10≈1.25GB<<10GB的内存,通常的硬件环境,每个Instance不至于少于2GB的内存。

如果按照gp_vmem_protect_limit缺省为8192来计算,对于A情况,每个Instance需要向系统申请8GB内存,其余的2GB需要pgsql_tmp

目录来响应。而对于B情况,每个Instance需要向系统申请2GB的内存,其余的8GB需要pgsql_tmp目录来响应。由于pgsql_tmp位于性能高于

SWAP的数据盘(通常的环境是如此,不排除高福帅配置),性能有一定保障,B情况通常不会出现OOM,且可承受的并发数远大于A情况。

以上比较详细的说明了GP内存控制的几个关键参数,若要避免OOM,最好还是综合考虑,GP从4.1版本之后设置缺省的A情况也有其合理性,因为,

如果按照B情况设置,多数情况下内存不能物尽其用,且需要性能较低的pgsql_tmp来承担内存的角色,实在不划算。可以尝试设置资源队列的

memory_limit参数,但此方式也有一些小问题,比如超限SQL或被自动cancel掉等等。最好的办法还是充分优化那些低劣的高内存消耗的SQL,合理

安排高内存消耗SQL的并发度。数据库的智能程度是有限的。因为Greenplum定位在数据仓库上,对任何SQL都会尽量调动所有可调动的资源去完成

计算,其资源控制上必然不能做到完美,关键还是深入的去理解数据库工作机制,让驴拉磨,牛犁地,物尽人用。

Greenplum中内存设置不合理导致的报错相关推荐

  1. Linux中进行用户UID测试导致系统报错

    2019独角兽企业重金招聘Python工程师标准>>> 今天在Ubuntu14.04下进行了一个小测试,即修改系统文件/etc/passwd的用户UID值,却导致系统Bug,无法正常 ...

  2. laravel 提交Request 请求后会莫名多出一个s参数,导致数据库报错问题的解决方法

    项目场景: apache运行laravel框架开发的系统. 问题描述: 提交post或者其他请求,会在request中存在s参数,导致数据库报错. 原因分析: apache的.htaccess文件中的 ...

  3. pom.xml中的artifactId标签与工程名不对应,可能会导致运行报错。

    pom.xml中的artifactId标签与工程名不对应,可能会导致运行报错. 默认Id名和项目名保持一致,也决定了meven名,通常出现不一致的情况是你全部复制了别人的xml文件,因此你如果要复制别 ...

  4. 解决MySQL事务未提交导致死锁报错 避免死锁的方法

    版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/xuheng8600/article/d ...

  5. import提升导致Fundebug报错:“请配置apikey”

    摘要: 解释一下"请配置apikey"报错的原因. 部分Fundebug用户使用import来导入js文件时,出现了"请配置apikey"的报错,这是由于imp ...

  6. java 中for循环中重复定义的变量 为什么不报错?

    java 中for循环中重复定义的变量 为什么不报错? public class Test1 {public static void main(String[] args) {int[] arr = ...

  7. Log4j2 日志 依赖 jar包 缺失 导致启动报错 解决方法

    Log4j2 日志 依赖 jar包 缺失 导致启动报错 解决方法. 一个Java老项目,更新了日志工具,升级为Log4j2,在引入log4j-api-2.14.0.jar 和log4j-core-2. ...

  8. 普元 AppServer在window2019中无法启动server,也没有报错信息

    [问题] 在window2019 中无法启动server,也没有报错信息,日志信息如下: [解答] 原因:在路径:../primeton/PAS/pas6/pas/domains/domain1/co ...

  9. Canvas引入跨域的图片导致toDataURL()报错的问题的解决

    本文介绍了Canvas引入跨域的图片导致toDataURL()报错的问题的解决,分享给大家,具体如下: [场景] 用户打开网页,则请求腾讯COS(图片服务器)上的图片js代码.使用canvas绘图. ...

最新文章

  1. java获得单元格的值_java – 从单元格值Apache POI获取单元格索引
  2. python语音翻译-python利用有道翻译实现“语言翻译器”的功能
  3. 离散对数(同余理论-BSGS算法)
  4. iOS Storyboard unwind segues使用小结
  5. linux下常用的关机命令有:shutdown、halt、poweroff、init;重启命令有:reboot。下面本文就主要介绍一些常用的关机命令以及各种关机命令之间的区别和具体用法。
  6. [zz]母牛生牛问题解析
  7. jitter单位_产生jitter的原因
  8. canal java_易用的 canal java 客户端 canal-client
  9. 记录一下2019年-2020年期间的学习、工作经历
  10. 单片机C语言程序设计心得,单片机课程设计心得体会
  11. h5制作的简易单机球球大作战
  12. 快压和360压缩哪个好?快压和360压缩对比介绍
  13. gmp计算机分类,GMP附录——计算机化系统汇总.pptx
  14. ncnn paramdictmodelbin
  15. GSM/CDMA/GPRS介绍
  16. 基于SONY CCD ICX285的成像电路设计
  17. 《沉思录卷一》闪耀在私人生活圈的品质
  18. 微信图片怎样在pc 端打开查看并导出
  19. JSP用户登录连接数据库
  20. vba:消息框基础,msgbox

热门文章

  1. linux环境下搭建PHP运行环境
  2. 解决No converter for [class java.util.ArrayList] with preset Content-Type ‘null‘问题
  3. Hapi.js 起步 - 写给前端开发的 Node Web 框架入门
  4. 局域网分配适合的网络前缀
  5. OpenCV-Python Feature2D 特征点检测(含ORB/KAZE/FAST/BRISK/AKAZE)
  6. 自变量趋于无穷大时函数的极限
  7. adobe cs5全线作品
  8. css中字体大小font-size的设置
  9. he Enigma Protector一字节过注册
  10. Latex(Ctex)出现编译错误 ! Misplaced alignment tab character .