更新时间:2022-07-29 GMT+08:00

query band负载识别

背景信息

GaussDB(DWS)实现基于query band的负载识别和队列内优先级控制,一方面提供了更为灵活的负载识别手段,可根据作业类型、应用名称、脚本名称等识别负载队列,使用户根据业务场景可灵活配置query band识别队列;另一方面实现了队列内作业下发优先级控制,后续将逐步实现队列内资源优先级控制。

管理员用户可根据业务场景及作业类别配置query_band所关联队列及估算内存限制等实现更为灵活的负载控制与资源管控。如果业务未配置query_band或用户未将query_band关联行为时,作业会默认使用用户关联队列和队列内优先级。

前提条件

负载管理控制功能use_workload_manager已设置为“on”。

操作步骤

  1. 设置query_band“JobName=abc”关联资源池p1、队列内优先级Rush、次序为1。

    1
    2
    3
    4
    5
    SELECT * FROM gs_wlm_set_queryband_action('JobName=abc','respool=p1;priority=rush',1);
    gs_wlm_set_queryband_action
    -----------------------------
     t
    (1 row)
    

  2. 修改query_band“JobName=abc”的关联资源池为p2。

    1
    2
    3
    4
    5
    SELECT * FROM gs_wlm_set_queryband_action('JobName=abc','respool=p2');
    gs_wlm_set_queryband_action
    -----------------------------
     t
    (1 row)
    

  3. 修改query_band“JobName=abc”的队列内优先级为High。

    1
    2
    3
    4
    5
    SELECT * FROM gs_wlm_set_queryband_action('JobName=abc','priority=high');
    gs_wlm_set_queryband_action
    -----------------------------
     t
    (1 row)
    

  4. 修改query_band“JobName=abc”的次序为3。

    1
    2
    3
    4
    5
    SELECT * FROM gs_wlm_set_queryband_order('JobName=abc',3);
    gs_wlm_set_queryband_order
    -----------------------------
     t
    (1 row)
    

  • pg_workload_action跨库系统表用于存储query_band行为和次序,详见PG_WORKLOAD_ACTION
  • query_band作为标识符,除负载识别外没有特殊含义,为防止系统表过大,因此默认行为在系统表中不存储(例:默认资源池或Medium优先级),query_band具体行为可通过pg_queryband_action视图查询;
  • gs_wlm_set_queryband_action函数设置query_band行为:其中第一个参数即queryband键值对的长度上限为63个字符;第二个参数action不区分大小写,多个action使用分号分隔;order为缺省参数,默认为-1。query_band支持关联行为包括:资源池及队列内优先级,详见资源管理函数中的“gs_wlm_set_queryband_action”。
  • gs_wlm_set_queryband_order函数设置query_band次序:其中第一个参数即queryband键值对的长度上限为63个字符;query_band次序必须大于等于-1,除默认次序-1外不存在两个次序相同的query_band。设置query_band次序时如果存在相同次序的query_band,则将原query_band次序+1,详见资源管理函数中的“gs_wlm_set_queryband_order”。
  • gs_wlm_get_queryband_action函数查询query_band行为:详见资源管理函数中的“gs_wlm_set_queryband_action”。
  • pg_queryband_action系统视图查询所有query_band行为:详见PG_QUERYBAND_ACTION
  • query_band关联资源池:query_band支持关联队列,作业执行时,若query_band指定了队列,则使用query_band关联的队列,否则使用用户关联的队列。
    • query_band关联资源池时,资源池不存在报错退出,关联失败。
    • query_band关联资源池时,记录query_band与资源池依赖关系。
    • query_band关联资源池删除时,提示有query_band依赖,资源池删除失败。
  • query_band关联队列内优先级:query_band支持关联作业优先级,支持高中低(High/Medium/Low)三个优先级,同时提供Rush作为特殊优先级(绿色通道),默认优先级为Medium。正常实践过程中,大部分作业使用Medium优先级,优先级较低作业使用Low优先级,特权作业使用High优先级,High作业不建议过多。Rush优先级作为特殊场景下应急使用,平时不建议使用。

    队列内优先级实现队列内排队优先级:

    • 静态负载管理场景下,CN并发不足时,触发CN全局队列排队,CN全局队列为优先级队列。
    • 动态负载管理场景下,DN内存不足时,触发CCN全局排队,CCN全局队列为优先级队列。
    • 资源池并发或内存不足时,触发资源池排队,资源池队列为优先级队列。

    以上优先级队列均遵守以下调度规则:

    • 优先级高作业优先调度。
    • 优先级高作业全部调度完之后调度优先级低作业。
    • 动态负载管理场景下,CN全局队列不支持query_band优先级。
  • query_band优先级在负载管理视图中显示为int型,数字和优先级的对应关系如下:
    • 0:表示该作业不受负载管理管控;
    • 1:LOW;
    • 2:MEDIUM;
    • 4:HIGH;
    • 8:RUSH;
  • 默认行为和次序在系统表pg_workload_action不存储,query_band有设置非默认行为的,查询其行为默认行为也显示;查询行为和次序都为默认的query_band行为时,显示<query_band information not found>。
  • query_band使用键值对方式设置,即'key=value';session内支持设置多个query_band键值对,多个键值对之间使用分号分隔。query_band键值对和query_band参数值长度的上限均为1024个字符。
  • query_band键值对支持的有效字符包括:数字0~9、大写字母A~Z、小写字母a-z、'.'、'-'、'_' 以及'#'。
  • session内设置多个query_band键值对时,使用次序较小的query_band键值对作为负载识别的query_band,次序最小为0,默认次序-1为最大次序;次序都为默认次序时,使用设置靠前的query_band作为负载识别的query_band。举例:set query_band='b=1;a=3;c=1'; b=1,其中次序-1,a=3次序4,c=1次序1,则使用c=1作为负载识别的query_band,此设计可提供负载管理员对负载调度调整能力。
  • 权限控制:除初始用户外,被授权用户才具有设置和查询query_band权限。
  • 批量取消所有运行作业或队列并发上限是1且只有一个队列有作业运行的情况下,可能会触发CN自动唤醒作业导致作业不按照优先级下发。

query band行为

query band目前支持的行为,如表1所示:

表1 QUERY_BAND支持行为

类别

行为

行为表现

负载(workload)

资源池(respool)

query_band关联资源池

负载(workload)

优先级(priority)

队列内优先级

次序(order)

队列(respool)

目前为无效字段,主要用于后续扩展。

query_band搜索次序

查询query_band行为,操作如下:
1
2
3
4
5
6
7
SELECT * FROM pg_queryband_action;
 qband | respool_id | respool | priority | qborder
-------+------------+---------+----------+---------
 a=2   |          0 | NULL    | high     |       2
 a=3   |      16388 | p1      | rush     |       1
 a=1   |      16388 | p1      | Medium   |      -1
(3 rows)