设置查询最大和最小并发度

通常,一个查询的并行度会影响一个查询的性能以及系统的吞吐量。资源管理器分配给一个查询的virtual segment个数决定了一个查询的并行度。 一般情况下,用户不需要人为干预资源管理器对virtaul segment个数的分配,OushuDB资源管理器会很好的管理查询的并行度。但有些时候,用户可能想要控制一个查询的并发度,OushuDB提供了多个 可供用户调控的手段。

  • 通过hawq_rm_nvseg_perquery_limit:这个是资源管理器针对一个查询可以分配的最大virtual segment数。默认值为512。用户可以调整这个值来放松或者加紧对并行度的限制。
  • NVSEG_UPPER_LIMIT/NVSEG_LOWER_LIMIT:这两个值可以在创建资源队列时指定。决定了一个资源队列中的查询使用的最小和最大virtual segment个数。如果不指定这两个值,这两个参数默认处于不生效状态。
  • NVSEG_UPPER_LIMIT_PERSEG/NVSEG_LOWER_LIMIT_PERSEG:这两个值可以在创建资源队列时指定。决定了一个资源队列中的查询在每个节点上使用的最小和最大virtual segment个数。如果不指定这两个值,这两个参数默认处于不生效状态。 如果节点数为10,NVSEG_UPPER_LIMIT_PERSEG为2,则该资源队列的查询最大可以使用10 * 2 = 20个virtual segment。下面的语句可以对该值进行设置:
CREATE RESOURCE QUEUE adhoc2 WITH (PARENT='department3', ACTIVE_STATEMENTS=3,
MEMORY_LIMIT_CLUSTER=50%, CORE_LIMIT_CLUSTER=50%, NVSEG_UPPER_LIMIT_PERSEG=2);

hawq_rm_nvseg_perquery_limit是一个硬性限制,NVSEG_UPPER_LIMIT/NVSEG_LOWER_LIMIT和NVSEG_UPPER_LIMIT_PERSEG/NVSEG_LOWER_LIMIT_PERSEG的设置也不能突破hawq_rm_nvseg_perquery_limit的限制。