WLM

更新时间: 2023-07-24 16:24:09

本文介绍如何使用Workload Manager命令进行创建、启用、屏蔽和删除工作负载管理规则。

前提条件

AnalyticDB MySQL集群需要同时满足以下条件:
  • 集群系列需为数仓版(3.0)集群。
  • 集群的内核版本需为3.1.6.3及以上版本。
    说明 如何查看集群内核版本,请参见如何查看实例版本信息。如需升级内核版本,请联系技术支持。

注意事项

  • Workload Manager命令不支持修改规则,规则配置错误后需要删除重建。

  • AnalyticDB MySQL对规则采用软删除策略,要求规则名称唯一,所以重建的新规则不能与已删除规则使用相同的规则名称。

创建规则

语法

wlm add_rule
name=<ruleName>
type=query      
action=<ruleAtion>    
predicate='<property><operator><value> && <property><operator><value>'
[attrs='<ruleAttrs>']
[resource_group=<ruleResource_group>]
[description=<ruleDescription>]
[compatible_group=<compatible_group_name>]
[enabled=<ruleEnabled>]
[priority=<rulePriority>]
[valid_begin=<ruleValid_begin>]
[valid_end=<ruleValid_end>]
说明

等号两侧不允许有空格。

参数说明

参数名称

是否必填

参数说明

name

规则名称。

说明

规则名称要求唯一,新建规则不能与已删除规则使用相同的规则名称。

type

规则类型,固定为query。

action

工作负载管理提供的控制手段,满足匹配条件后,会触发操作。

控制手段的详细说明,请参见控制手段

predicate

谓词条件。

predicate语法:

  • 不同匹配条件之间是“与”关系,用&&连接。

  • 单匹配条件格式:$属性 $运算符 $数值

  • 支持的运算符:>、<、>=、<=、=、!=、in、equal等。

说明
  • 属性和运算符的详细说明,请参见属性运算符

  • 运算符in两侧必须有空格,否则无法区分;其他运算符不需要空格。

  • 填写该参数时,两侧需要使用单引号。

attrs

当action为RESUBMIT_RESOURCE_GROUPADD_PROPERTIESBLOCK_WITH_PROB时attrs为必填项。

如何填写attrs,请参见控制手段的配置方法。

说明

填写该参数时,两侧需要使用单引号。

resource_group

资源组名称,默认为user_default。

说明

您可以登录云原生数据仓库AnalyticDB MySQL控制台,单击目标集群ID,在资源组管理页面查看集群的资源组。

description

描述信息。

说明

填写该参数时,两侧需要使用单引号。

compatible_group

相容组。

默认情况下,匹配规则的方式是从规则的优先级由高到低依次匹配规则,匹配到一条就直接结束。也可以将同时匹配多条规则的需求设置为同一个相容组。在规则匹配时,优先匹配优先级最高的规则,如果已匹配的规则存在相容组,相容组中剩余规则如有能同时匹配的,则同时匹配。

enabled

是否启用规则,取值说明:

  • true(默认):启用。

  • false:不启用。

priority

启用优先级高的规则,默认为0。

每次匹配规则,只会匹配一条优先级最高的规则,优先级相同时,则根据创建时间越早的规则先进行匹配。

valid_begin

规则生效时间,格式:yyyy-MM-dd或yyyy-MM-dd HH:mm:ss。

说明
  • 只配置该参数时,则规则在生效时间之后永久生效。

  • 当该参数和valid_end都不配置时,创建的规则永久生效。

valid_end

规则失效时间,格式:yyyy-MM-dd或yyyy-MM-dd HH:mm:ss。

说明
  • 只配置该参数时,在失效时间之前,规则一直生效。

  • 当该参数和valid_begin都不配置时,创建的规则永久生效。

示例

  • 示例1:创建一条规则名称为testRule1的规则,当用户名为test且Pattern历史执行时间50分位值大于60000ms时结束查询。

    wlm add_rule 
    name=testRule1
    type=query 
    action=kill 
    predicate='user=test && PATTERN_RT_P50>60000';

    返回结果如下:

    +---------------------------------+
    | result                          |
    +---------------------------------+
    | insert rule 'testRule1' success |
    +---------------------------------+
  • 示例2:创建一条规则名称为testRule2的规则,将用户名为test且用户IP在(10.10.10.10,192.168.0.1,192.0.2.1)中的查询,增加query_priority=low的Hint,将查询优先级设置为low。

    wlm add_rule 
    name=testRule2 
    type=query 
    action=ADD_PROPERTIES 
    attrs='{"add_prop":{"query_priority":"low"}}' 
    predicate='user=test && ip in 10.10.10.10,192.168.0.1,192.0.2.1';

    返回结果如下:

    +---------------------------------+
    | result                          |
    +---------------------------------+
    | insert rule 'testRule2' success |
    +---------------------------------+
  • 示例3:为testResourceGroup资源组创建一条规则名称为testRule3的规则,优先级为5,将用户名为test且类型为select的所有查询全部结束,有效期为2023-01-01 08:00:00至2023-01-02 08:00:00。

    wlm add_rule
    name=testRule3
    type=query
    resource_group=testResourceGroup
    description='just a test'
    priority=5
    action=kill
    valid_begin='2023-01-01 08:00:00'
    valid_end='2023-01-02 08:00:00'
    predicate='user=test && query_task_type=1';

    返回结果如下。

    +---------------------------------+
    | result                          |
    +---------------------------------+
    | insert rule 'testRule3' success |
    +---------------------------------+

查询规则

语法

wlm list_rule
[id=<ruleID>]
[name='<ruleName>'\G]

参数说明

参数名称

是否必填

参数说明

id

规则ID。

说明

不填写ID和name将查询所有未被删除的规则,包括规则ID。

name

规则名称。

说明
  • 填写该参数时,两侧需要使用单引号。

  • 不填写ID和name将查询所有未被删除的规则,包括规则名称。

\G

将查询结果按列打印,将每个字段打印到单独的行。

示例

  • 示例1:查询规则ID为testID1的规则。

    wlm list_rule 
    id=testID1 \G;

    返回结果如下。

                id: testID1
                name: testRule4
         description: NULL
                type: QUERY
      resource_group: user_default
             enabled: 1
            priority: 0
             version: 1
          life_cycle: BEFORE_QUEUEING
    compatible_group:
         valid_begin: null
           valid_end: null
             creator: kepler
         update_user: kepler
         create_time: 2022-09-16 14:00:18
         update_time: 2022-09-16 14:00:18
           predicate: [{"property":"${session.user}","value":"test","operator":"equal"},{"property":"${session.ip}","value":"1,2,3","operator":"in"}]
              action: ADD_PROPERTIES
               attrs: {"add_prop":{"query_priority":"low"}}
    1 row in set (0.11 sec)
  • 示例2:查询规则ID为testID1,规则名称为testRule4的规则。

    mysql> wlm list_rule 
    id=testID1 
    name='testRule4' \G;

    返回结果如下。

                id: testID1
                name: testRule4
         description: NULL
                type: QUERY
      resource_group: user_default
             enabled: 1
            priority: 0
             version: 1
          life_cycle: BEFORE_QUEUEING
    compatible_group:
         valid_begin: null
           valid_end: null
             creator: kepler
         update_user: kepler
         create_time: 2022-09-16 14:00:18
         update_time: 2022-09-16 14:00:18
           predicate: [{"property":"${session.user}","value":"test","operator":"equal"},{"property":"${session.ip}","value":"1,2,3","operator":"in"}]
              action: ADD_PROPERTIES
               attrs: {"add_prop":{"query_priority":"low"}}
    1 row in set (0.09 sec)

屏蔽规则

语法

wlm disable_rule id=<ruleID>

参数说明

参数名称

是否必填

参数说明

id

规则ID。

说明

您可以执行wlm list_rule命令,查询规则ID。详细信息,请参见查询规则

示例

  • 示例1:屏蔽ID为testID1的规则。

    wlm disable_rule id=testID1;

    返回结果如下。

    +----------------------+
    | result               |
    +----------------------+
    | disable rule testID1 |
    +----------------------+
  • 示例2:查询ID为testID1的规则。

    wlm list_rule id=testID1\G;

    返回结果如下。

                id: testID1
                name: testRule4
         description: NULL
                type: QUERY
      resource_group: user_default
             enabled: 0
            priority: 0
             version: 1
          life_cycle: BEFORE_QUEUEING
    compatible_group:
         valid_begin: null
           valid_end: null
             creator: kepler
         update_user: kepler
         create_time: 2022-09-16 14:00:18
         update_time: 2022-09-16 14:00:18
           predicate: [{"property":"${session.user}","value":"test","operator":"equal"},{"property":"${session.ip}","value":"1,2,3","operator":"in"}]
              action: ADD_PROPERTIES
               attrs: {"add_prop":{"query_priority":"low"}}

启用规则

语法

wlm enable_rule id=<ruleID>

参数说明

参数名称

是否必填

参数说明

id

规则ID。

说明

您可以执行wlm list_rule命令,查询规则ID。详细信息,请参见查询规则

示例

  • 示例1:启用ID为testID1的规则。

    wlm enable_rule id=testID1;

    返回结果如下。

    +----------------------+
    | result               |
    +----------------------+
    | enable rule testID1  |
    +----------------------+
  • 示例2:

    查询ID为testID1的规则。

    wlm list_rule id=testID1\G;

    返回结果如下。

                id: testID1
                name: testRule4
         description: NULL
                type: QUERY
      resource_group: user_default
             enabled: 1
            priority: 0
             version: 1
          life_cycle: BEFORE_QUEUEING
    compatible_group:
         valid_begin: null
           valid_end: null
             creator: kepler
         update_user: kepler
         create_time: 2022-09-16 14:00:18
         update_time: 2022-09-16 14:00:18
           predicate: [{"property":"${session.user}","value":"test","operator":"equal"},{"property":"${session.ip}","value":"1,2,3","operator":"in"}]
              action: ADD_PROPERTIES
               attrs: {"add_prop":{"query_priority":"low"}}

删除规则

语法

wlm delete_rule id=<ruleID>

参数说明

参数名称

是否必填

参数说明

id

规则ID。

说明

您可以执行wlm list_rule命令,查询规则ID。详细信息,请参见查询规则

示例

  • 示例1:删除ID为testID1的规则。

    wlm delete_rule id=testID1;

    返回结果如下。

    +----------------------+
    | result               |
    +----------------------+
    | delete rule testID1  |
    +----------------------+
  • 示例2:查询ID为testID1的规则。

    wlm list_rule id=testID1\G;

    返回结果如下。

    Empty set

计算pattern_hash

语法

wlm calc_pattern_hash <SQL>

参数说明

参数说明

是否必填

说明

SQL

SELECT语句或带有SELECT的写入语句。

示例

计算查询语句的pattern_hash。

wlm calc_pattern_hash select * from t where a=1 and b=2;

返回结果如下。

+-----------------------------------+----------------------+
| raw_sql                           | pattern_hash         |
+-----------------------------------+----------------------+
| select * from t where a=1 and b=2 | -4759960226441980963 |
+-----------------------------------+----------------------+

打印帮助信息

不带任何参数执行wlm命令即会打印帮助信息。

wlm;

返回结果如下。

+---------------------------+-------------------------------------+
| command                   | description                         |
+---------------------------+-------------------------------------+
| calc_pattern_hash         | calculate pattern_hash of query     |
| add_rule                  | add a new rule                      |
| list_rule id=[x]|name=[x] | list all rules OR filter by id/name |
| disable_rule id=[x]       | disable a rule by id                |
| enable_rule id=[x]        | enable a rule by id                 |
| delete_rule id=[x]        | delete a rule by id                 |
+---------------------------+-------------------------------------+

附录

附录1:属性

类别

字段

数据类型

说明

查询属性

user

字符串

发送查询的用户。

source_ip

字符串

发送查询的IP。

query_task_type

数值

查询的类型,取值说明:

  • 1:SELECT

  • 2:DELETE

  • 3:UPDATE

  • 4:INSERT INTO SELECT/INSERT OVERWRITE SELECT

  • 5:CREATE VIEW

query_table_list

字符串列表

查询扫描到的表。

query_db_list

字符串列表

查询扫描到的数据库。

pattern_hash

数值

查询Pattern的Hash值,用于确定同类Pattern的查询。

sql

字符串

查询原始的SQL语句。

重要

仅3.1.8.3及以上内核版本的集群支持该属性。

查询运行时指标

说明

查询运行时指标用于在查询进入队列后,对查询进行控制。

QUERY_PROCESS_TIME

数值

查询过程中所有Task的耗时总和,可以粗略地衡量一个查询的计算量。单位:ms。

QUERY_EXECUTION_TIME

数值

查询耗时。单位:ms。

QUERY_SUBMITTED_TIME

数值

创建查询的时间戳。

QUERY_TOTAL_TASK

数值

查询物理执行计划Task总数。

QUERY_INPUT_DATA_SIZE

数值

查询的原始输入数据量。单位:MB。

QUERY_SHUFFLE_DATA_SIZE

数值

查询的Shuffle数据量。单位:MB。

QUERY_OUTPUT_DATA_SIZE

数值

查询的输出数据量。单位:MB。

QUERY_PEAK_MEMORY

数值

查询的Peak Memory,单位:MB。

QUERY_TOTAL_STAGES

数值

查询执行计划的Stages总数。

查询Pattern属性

说明

查询Pattern属性可以反映查询历史的执行情况。

PATTERN_RT_P50

数值

Pattern历史执行时间50分位值。单位:ms。

PATTERN_RT_P90

数值

Pattern历史执行时间90分位值。单位:ms。

PATTERN_EXECUTION_TIME_P50

数值

Pattern历史执行时间(去除排队)50分位值。单位:ms。

PATTERN_EXECUTION_TIME_P90

数值

Pattern历史执行时间(去除排队)90分位值。单位:ms。

PATTERN_WALL_TIME_P50

数值

Pattern Wall Time50分位值。单位:ms。

PATTERN_WALL_TIME_P90

数值

Pattern Wall Time90分位值。单位:ms。

PATTERN_SHUFFLE_SIZE_AVG

数值

Pattern Shuffle数据平均值。单位:单位:Byte。

PATTERN_PEAK_MEMORY_AVG

数值

Pattern Peak Memory平均值。单位:Byte。

PATTERN_INPUT_POSITION_AVG

数值

Pattern输入记录数平均值。单位:行。

PATTERN_OUTPUT_POSITION_AVG

数值

Pattern输出记录数平均值。单位:行。

附录2:运算符

运算符

适用的数据类型

说明

>

数值

<

数值

=

数值

>=

数值

<=

数值

!=

数值

equal

字符串

字符串相等。

not_equal

字符串

字符串不相等。

in

字符串列表

字符串列表是否存在交集。

contains

字符串

字符串中是否包含某些特定字符串,用于查询原始的SQL语句。

重要

仅3.1.8.3及以上内核版本的集群支持该运算符。

附录3:控制手段

控制手段

说明

配置方法

KILL

结束查询。

LOG

记录查询。

RESUBMIT_RESOURCE_GROUP

停止查询在当前资源组的执行并提交到另一个资源组执行

{ "resubmit": {"resource_group":"<resource_group_name>"}}

resource_group_name:资源组名称。

说明

您可以登录云原生数据仓库AnalyticDB MySQL控制台,单击目标集群ID,在资源组管理页面查看集群的资源组。

ADD_PROPERTIES

增加查询的属性。通常用来修改查询优先级,也可以用来为查询自动增加Hint。

{ "add_prop": {"query_priority": "<Priority level>"}}

Priority level:查询优先级。取值为整数或字符串,说明如下:

  • 取值为整数时,范围为0~39。数值越大优先级越高。

  • 取值为字符串时,说明如下:

    • LOWEST:优先级最低。对应的整数取值为5。

    • LOW:优先级较低。对应的整数取值为15。

    • NORMAL:优先级普通。对应的整数取值为25。

    • HIGH:优先级最高。对应的整数取值为35。

详细信息,请参见优先级队列与并发控制

BLOCK_WITH_PROB

以一定概率在查询入队前结束查询。通常用于限流。

{ "block_prob": {"prob":<prob_value>}}

prob_value:结束查询的概率,取值范围为0~1。

阿里云首页 云原生数据仓库AnalyticDB MySQL版 相关技术圈