Workload Group

云数据库 SelectDB 版支持通过Workload Group特性进行集群内的计算资源软隔离。本文将介绍云数据库 SelectDB 版中的Workload Group特性,帮助用户管理计算资源。

概述

Workload Group通过限制组内任务在单个计算节点上的计算资源和内存资源的使用,从而限制任务在计算集群内的资源使用。

若在业务场景下,您对高负载的查询和导入具备管控的能力且期望能够充分利用计算集群的资源,比如在SelectDB中执行定时离线计算任务,这种情况下可以把这类计算任务进行划分,放到独立的Workload Group中管理。此外,如果您的业务具备比较明显的早高峰午高峰的特征,这些业务间的资源隔离也可以考虑使用Workload Group管理。

若使用Workload Group进行资源隔离,在充分考虑业务场景的基础上,可以从以下方面进行Workload Group的划分。

  • 以大查询和小查询为依据进行划分。

  • 以短查询和长查询为依据进行划分。

  • 以冷数据查询和热数据查询为依据进行划分。

  • 以离线导入和实时导入进行划分。

Workload Group用法

以下分别介绍Workload Group的创建、删除、修改和查看。

说明

进行Workload Group操作时建议使用最高权限admin账户。

创建Workload Group

该语句用于创建Workload Group。Workload Group可实现计算集群层面CPU资源和内存资源的隔离。

语法

CREATE WORKLOAD GROUP [IF NOT EXISTS] 'rg_name'
PROPERTIES (
    property_list
);

参数说明

参数名称

必选

参数说明

rg_name

Workload Group名称。

PROPERTIES的参数说明如下。

参数名称

必选

参数说明

cpu_share

用于设置资源组获取CPU时间的多少,可以实现CPU资源软隔离。cpu_share是相对值,表示正在运行的资源组可获取CPU资源的权重。

例如,用户创建了3个Workload Group,分别为rg-arg-brg-ccpu_share分别为10、30、40。某一时刻rg-arg-b下有任务正在执行,而rg-c没有任务,此时rg-a可获得 (10 / (10 + 30)) = 25% 的CPU资源,而资源组rg-b可获得75%的CPU资源。

如果系统只有一个Workload Group正在运行,则不管其cpu_share的值为多少,它都可以获取全部的CPU资源。

memory_limit

用于设置资源组可以使用的计算集群内存的百分比。

Workload Group内存限制的绝对值为:物理内存 * mem_limit * memory_limit,其中mem_limit为计算集群配置项,修改该参数配置详情请参见参数管理

Workload Group在绝大多数情况下保证组内任务可使用memory_limit的内存,当Workload Group内存使用超出该限制后,组内内存占用较大的任务可能会被取消以释放超出的内存。

说明

系统所有的Workload Group的memory_limit总和不可超过100%,否则会出现报错。

enable_memory_overcommit

用于开启Workload Group内存软隔离,默认为false。

如果设置为false,则该Workload Group为内存硬隔离,系统检测到资源组内存使用超出限制后将立即取消组内内存占用最大的若干个任务,以释放超出的内存。

如果设置为true,则该Workload Group为内存软隔离,如果系统有空闲内存资源,则该资源组在超出memory_limit的限制后可继续使用系统内存,在系统总内存紧张时会取消组内内存占用最大的若干个任务,释放部分超出的内存以缓解系统内存压力。

建议在有个别Workload Group开启该配置时,所有Workload Group的memory_limit总和应该低于100%,剩余部分用于Workload Group内存超发。

max_concurrency

用于规定当前Workload Group允许的最大查询数控制变量。默认为无限制。

云数据库 SelectDB 版环境下,最大并发的查询数 = max_concurrency * 2,超过最大并发的查询数时,新的查询会进入排队逻辑。

max_queue_size

用于界定查询排队的长度。默认为无限制。

云数据库 SelectDB 版环境下,最大查询排队长度 = max_queue_size * 2。当队列满了之后,新的查询会被拒绝。

queue_timeout

用于界定查询在队列中等待的时间。默认为无限制。

云数据库 SelectDB 版环境下,最大查询等待时间 = queue_timeout * 2。如果查询等待时间超过这个值,那么查询会被拒绝,单位为毫秒。

示例

创建名为g1的Workload Group,示例如下。

 CREATE WORKLOAD GROUP IF NOT EXISTS g1
 PROPERTIES (
     "cpu_share"="10",
     "memory_limit"="30%",
     "enable_memory_overcommit"="true"
 );

删除Workload Group

该语句用于删除Workload Group。

语法

DROP WORKLOAD GROUP [IF EXISTS] 'rg_name'

示例

删除名为g1的Workload Group,示例如下。

DROP WORKLOAD GROUP IF EXISTS g1;

修改Workload Group

该语句用于修改Workload Group。

语法

ALTER WORKLOAD GROUP  "rg_name"
PROPERTIES (
    property_list
);

参数说明

PROPERTIES的参数说明详情请参见参数说明

示例

修改名为g1的Workload Group,示例如下。

ALTER WORKLOAD GROUP g1
PROPERTIES (
    "cpu_share"="30",
    "memory_limit"="30%"
);
说明
  • 修改memory_limit属性时不可使所有memory_limit值的总和超过100%。

  • 支持修改部分属性,例如只修改cpu_share,PROPERTIES里只填cpu_share即对应的参数值即可。

查看Workload Group

该语句用于展示当前用户具有usage_priv权限的Workload Group

语法

SHOW WORKLOAD GROUPS;

示例

展示所有Workload Group,示例如下。

mysql> SHOW WORKLOAD GROUPS;
+----------+--------+--------------------------+---------+
| Id       | Name   | Item                     | Value   |
+----------+--------+--------------------------+---------+
| 10343386 | normal | cpu_share                | 10      |
| 10343386 | normal | memory_limit             | 30%     |
| 10343386 | normal | enable_memory_overcommit | true    |
| 10352416 | g1     | memory_limit             | 20%     |
| 10352416 | g1     | cpu_share                | 10      |
+----------+--------+--------------------------+---------+

使用示例

如下介绍如何在SelectDB集群中启用Workload Group

  1. 开启enable_workload_group配置项,在FE配置项中设置:

enable_workload_group=true
说明
  • 该配置项暂未提供设置,如有需要请创建阿里云工单咨询。

  • 该配置为动态配置,以普通配置的方式修改并重启实例的场景,系统会自动创建名为normal的默认Workload Group。以动态配置的方式生效的场景若未重启实例,则系统不会创建默认Workload Group。具体修改方式请在阿里云工单中咨询。

  1. 在启用配置项后,创建Workload Group。

CREATE WORKLOAD GROUP IF NOT EXISTS g1
properties (
    "cpu_share"="10",
    "memory_limit"="30%",
    "enable_memory_overcommit"="true"
);
  1. Workload Group的CPU隔离基于Pipeline执行引擎实现,因此需设置Session变量,开启Pipeline执行引擎。

set experimental_enable_pipeline_engine = true;
  1. 为使得Workload Group生效,需要进行绑定。如下两种方式可以用来绑定。

  • 设置User property将用户默认绑定到Workload Group,在创建默认Workload Group后,该值默认为normal

    set property 'default_workload_group' = 'g1';

    上述语句将设置当前用户的查询默认使用'g1'。

  • 通过Session变量指定Workload Group, 默认为空。

    set workload_group = 'g1';

    Session变量中设置的workload_group生效优先级高于User property中的default_workload_group。即在workload_group为空时,查询将绑定到default_workload_group, 在Session变量workload_group不为空时,查询将绑定到workload_group

    如果是非Admin用户,需要先执行SHOW-WORKLOAD-GROUPS命令确认当前用户能否看到该Workload Group,不能看到的Workload Group可能不存在或者当前用户没有权限,执行查询时会报错。

  1. 完成以上设置后,执行查询,查询将关联到指定的Workload Group,此时Workload Group中规定的资源限制将生效。