1、资源管理配置
用户可以通过以下两个参数(hawq-site.xml中)配置资源管理器可以分配的资源数量。
● hawq_rm_memory_limit_perseg: 配置每个节点可以使用的内存大小,缺省值为64GB
● hawq_rm_nvcore_limit_perseg: 配置每个节点可以使用的vcore数,缺省值为16
如果我们有8个slave节点,配置如下,则我们在这个OushuDB集群中可以使用的资源数为:128GB 8 = 1024GB内存,16 8 = 128 vcore。
<property><name>hawq_rm_memory_limit_perseg</name><value>128GB</value></property><property><name>hawq_rm_nvcore_limit_perseg</name><value>16</value></property>
在资源队列树中,只有叶子节点可以关联用户接受查询。儿子节点的资源是从父节点中分配出来的。其中一个父节点的所有儿子节点的MEMORY_LIMIT_CLUSTER和 CORE_LIMIT_CLUSTER比例值之和必须小于等于100%。
2、资源队列高级配置
通常情况下,创建资源队列时用户只需要指定下面三个参数:
● ACTIVE_STATEMENTS:资源队列允许的最大并发查询数,超过这个并发的连接则会排队等待。资源管理器会均匀分配资源到队列中并发的查询。
● MEMORY_LIMIT_CLUSTER:资源队列可以使用的父队列内存的比例
● CORE_LIMIT_CLUSTER:资源队列可以使用的父队列CPU的比例
但在某些情况下用户可以指定一些高级参数来配置资源管理队列。
3、设置Virtual Segment内存使用
VSEG_RESOURCE_QUOTA指的是一个virtual segment中使用的内存数量。默认值是256MB。比如一个资源管理队列可以使用的资源是8GB,如果VSEG_RESOURCE_QUOTA为256MB,则这个资源管理队列可以分配的最大virtual segment数为8GB/256MB = 32个。如果我们使用512MB,则最多可以分配8GB/512MB = 16个。
VSEG_RESOURCE_QUOTA=‘mem:{128mb | 256mb | 512mb | 1024mb | 2048mb | 4096mb | 8192mb | 16384mb | 1gb | 2gb | 4gb | 8gb | 16gb}’
使用大的VSEG_RESOURCE_QUOTA有时可以避免聚集,连接等操作的spilling,因为每个segment可以使用更多的内存。
如果发现有些语句频繁出现spilling,可以适当调大VSEG_RESOURCE_QUOTA。
例如:
CREATE RESOURCE QUEUE adhoc2 WITH (PARENT='department3', ACTIVE_STATEMENTS=3,MEMORY_LIMIT_CLUSTER=50%, CORE_LIMIT_CLUSTER=50%, VSEG_RESOURCE_QUOTA='mem:512MB');