更新时间:2022-08-16 GMT+08:00
query band负载识别
背景信息
GaussDB(DWS)实现基于query band的负载识别和队列内优先级控制,一方面提供了更为灵活的负载识别手段,可根据作业类型、应用名称、脚本名称等识别负载队列,使用户根据业务场景可灵活配置query band识别队列;另一方面实现了队列内作业下发优先级控制,后续将逐步实现队列内资源优先级控制。
管理员用户可根据业务场景及作业类别配置query_band所关联队列及估算内存限制等实现更为灵活的负载控制与资源管控。如果业务未配置query_band或用户未将query_band关联行为时,作业会默认使用用户关联队列和队列内优先级。
前提条件
负载管理控制功能use_workload_manager已设置为“on”。
操作步骤
- 设置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)
- 修改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)
- 修改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)
- 修改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所示:
类别 |
行为 |
行为表现 |
---|---|---|
负载(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)
|
父主题: 资源负载管理