greenplum的几个内存配置

max_statement_mem
设置每个查询最大使用的内存量,该参数是防止statement_mem参数设置的内存过大导致的内存溢出

statement_mem
设置每个查询在segment主机中可用的内存,该参数设置的值不能超过max_statement_mem设置的值,如果配置了资源队列,则不能超过资源队列设置的值,其计算公式为( gp_vmem_protect_limitGB * .9 ) / max_expected_concurrent_queries
例如:
gp_vmem_protect_limit 设置为 8192MB (8GB) ,查询的最大并发量为40,其中10%为缓存空间,则statement_mem计算如下:
(8GB * .9) / 40 = .18GB = 184MB

如果设置了资源队列,则该值的最大值为:min(MEMORY_LIMIT, max_statement_mem)

gp_vmem_protect_limit
设置segment中所有的进程可用的内存,如果查询所使用的内存超过该内存值,则查询失败。该参数为本地参数,需要对所有的primary和mirror进行设置

资源队列:
MEMORY_LIMIT
该值不应超过一台segment物理机节点的内存,该值设置队列中所有活跃查询在计算节点中可使用的最大内存值。每个查询可用的内存为该值除以active_statements的值。
例如:MEMORY_LIMIT的值为2000MB,active_statements的值为10,则队列中的每个查询默认分配的内存为200MB.在session级别,该值可以被系统参数statement_mem 覆盖,这样允许当前查询使用对应资源队列里的所有内存,而不影响其他的资源队列。
例如:
=> SET statement_mem=’2GB’;
=> SELECT * FROM my_big_table WHERE column=’value’ ORDER BY id;
=> RESET statement_mem;

注意:
1、当一个查询开始知道结束,将直接使用200M内存,即使实际使用的内存没有200M
2、当使用statement_mem参数覆盖默认MEMORY_LIMIT 值时候,可能会发生还未达到active_statements的值,但是内存被耗尽的情况,当出现这种情况的时候,队列中的其他查询会等待
MEMORY_LIMIT
队列中可以执行的查询的总数(最大并发数),当该值被消耗完,则新的查询需要等待
PRIORITY
查询中cpu的使用率,该值可以设置为以下级别:LOW, MEDIUM,
HIGH, MAX
MAX_COST
限制查询计划的消耗

注意:
1、官方建议使用MEMORY_LIMIT 和ACTIVE_STATEMENTS 来替代max_cost
2、如果队列中未设置MEMORY_LIMIT,则每个查询可用的内存值为系统参数statement_mem的值,最大可用内存为statement_mem /ACTIVE_STATEMENTS
3、并不是所有语句都受资源队列限制,默认情况下,只有SELECT, SELECT INTO, CREATE TABLE AS SELECT, 和DECLARE CURSOR受限,如果配置参数resource_select_only = off,则INSERT, UPDATE,DELETE语句也会受限。

  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值