配置工作负载管理规则

AnalyticDB for MySQL在数据库系统中提供了工作负载管理模块,您可以使用Workload Manager命令配置工作负载管理规则,并通过多个规则对不同负载进行精细化控制,提高集群的整体运行状态。本文介绍如何配置工作负载管理规则。

前提条件

AnalyticDB for MySQL集群需要同时满足以下条件:

  • 集群系列需为数仓版

  • 集群的内核版本需为3.1.6.3及以上版本。

    说明

    如何查看和升级集群内核版本,请参见查看和升级版本

注意事项

  • 3.1.10.0及以上内核版本的集群支持使用WLM命令修改规则。

  • AnalyticDB for 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>]
说明

等号两侧不允许有空格。

参数说明

参数名称

是否必填

参数说明

name

规则名称。

说明

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

type

规则类型,固定为query。

action

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

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

predicate

谓词条件。

predicate语法:

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

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

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

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

  • 运算符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。

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

示例

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

    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 && source_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的所有查询全部结束。

    wlm add_rule
    name=testRule3
    type=query
    resource_group=testResourceGroup
    description='just a test'
    priority=5
    action=kill
    predicate='user=test && query_task_type=1';

    返回结果如下:

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

修改规则

重要

3.1.10.0及以上内核版本的集群支持使用WLM命令修改规则。

如何查看集群内核版本,请参见如何查看实例版本信息。如需升级内核版本,请联系技术支持。

语法

wlm update_rule
id=<ruleId>
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>]
说明

等号两侧不允许有空格。

参数说明

参数名称

是否必填

参数说明

id

规则ID。规则ID是唯一的,用于匹配相应规则,且不支持修改。

说明

您可以通过wlm list_rule语句查询规则ID。详情请参见查询规则

name

规则名称。修改规则名称时,需要使用规则ID匹配相应规则。

说明

修改后的规则不能与已创建的规则使用相同的规则名称,否则会覆盖已创建的同名规则。

type

规则类型,固定为query。

action

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

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

predicate

谓词条件。

predicate语法:

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

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

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

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

  • 运算符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。

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

示例

  • 示例1:将规则ID为2的规则名称修改为Rule。

    wlm update_rule 
    id=2
    name=Rule;

    返回结果如下:

    +-----------------+
    | result          |
    +-----------------+
    | update rule 2   |
    +-----------------+
  • 示例2:将testRule1规则的条件修改为当用户名为test且Pattern历史执行时间50分位值大于80000 ms时结束查询。

    wlm update_rule
    name=testRule1
    predicate='user=test && PATTERN_RT_P50>80000';

    或使用testRule1规则所对应的规则ID修改:

    wlm update_rule 
    id=1
    predicate='user=test && PATTERN_RT_P50>80000';

    返回结果如下:

    +-----------------+
    | result          |
    +-----------------+
    | update rule 1   |
    +-----------------+
  • 示例3:将满足testRule1规则的查询投递至testgroup资源组继续执行。

    修改前,testRule1规则为kill掉满足条件的查询:

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

    修改testRule1规则,把当前资源组的查询都投递到testgroup资源组执行:

    wlm update_rule
    name=testRule1
    action=RESUBMIT_RESOURCE_GROUP
    attrs='{
        "resubmit":{
        "resource_group": "testgroup"
        }
    }'
    说明

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

    返回结果如下:

    +-----------------+
    | result          |
    +-----------------+
    | update rule 1   |
    +-----------------+

查询规则

语法

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

参数说明

参数名称

是否必填

参数说明

id

规则ID。

说明

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

name

规则名称。

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

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

\G

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

示例

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

    wlm list_rule 
    id=1 \G;

    返回结果如下:

                id: 1
                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.source_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=1 
    name='testRule4' \G;

    返回结果如下:

                id: 1
                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.source_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=1;

    返回结果如下:

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

    wlm list_rule id=1\G;

    返回结果如下:

                id: 1
                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.source_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=1;

    返回结果如下:

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

    wlm list_rule id=1\G;

    返回结果如下:

                id: 1
                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.source_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=1;

    返回结果如下:

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

    wlm list_rule id=1\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命令即会打印帮助信息。

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                 |
| update_rule id=[x]        | update 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/REPLACE INTO 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:运算符

运算符

适用的数据类型

说明

>

数值

<

数值

=

数值、字符串

>=

数值

<=

数值

!=

数值、字符串

in

字符串列表

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

contains

字符串

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

重要

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

附录3:控制手段

控制手段

说明

attrs配置方法

KILL

结束查询。

RESUBMIT_RESOURCE_GROUP

停止当前资源组内满足条件查询,并提交到另一个资源组执行。

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

resource_group_name:资源组名称。

说明

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

ADD_PROPERTIES

修改查询的属性。通常用于修改查询优先级,也可以修改Hint配置的其他查询属性。

{ "add_prop": {"query_priority": "<Priority level>", "force":"false"}}

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

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

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

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

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

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

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

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

  • force:是否强制覆盖已设置的查询属性。

    • true(默认值):覆盖。

    • false:不覆盖。

    说明

    3.1.9.4以下内核版本的集群不支持force属性,默认不覆盖已配置的查询属性。如何查看集群内核版本,请参见查看实例版本信息

BLOCK_WITH_PROB

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

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

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