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

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

  • 通过 VC 属性 max_nvseg_perquery:这个是资源管理器针对一个查询可以分配的最大 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 vc_default.adhoc2 WITH (PARENT='department3', ACTIVE_STATEMENTS=3,
MEMORY_LIMIT_CLUSTER=50%, CORE_LIMIT_CLUSTER=50%, NVSEG_UPPER_LIMIT_PERSEG=2);

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