HashData 内存相关参数说明

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 语句也会受限。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值