跳到主要内容
版本:Latest-3.2

CREATE RESOURCE GROUP

功能

创建资源组。关于资源组的更多信息,参见资源隔离

提示

该操作需要 SYSTEM 级 CREATE RESOURCE GROUP 权限。请参考 GRANT 为用户赋权。

语法

CREATE RESOURCE GROUP resource_group_name
TO CLASSIFIER1, CLASSIFIER2, ...
WITH resource_limit

参数说明

  • resource_group_name:需要创建的资源组名称。

  • CLASSIFIER:用于区分需要被施加资源限制的查询的分类器,采用 "key"="value" 对形式。您可以为同一个资源组设置多个分类器。

    • 分类器可以包含以下参数:

      参数必选说明
      user用户名。
      role用户所属角色名。
      query_type需要被施加资源限制的查询类型,目前支持 SELECTINSERT (2.5 及以后)。当 query_typeinsert 的资源组有导入任务正在运行时,当前 BE 节点会为其预留相应的计算资源。
      source_ip发起查询的 IP 地址,类型为 CIDR。
      db查询所访问的数据库,可以为逗号(,)分割的字符串。
      plan_cpu_cost_range估计的查询 CPU 开销范围。该值与 fe.audit.log 中的 PlanCpuCost 字段含义相同,无单位。格式为 [DOUBLE, DOUBLE)。默认为 NULL,表示没有该限制。自 v3.1.4 起支持。
      plan_mem_cost_range估计的查询内存开销范围。该值与 fe.audit.log 中的 PlanMemCost 字段含义相同,无单位。格式为 [DOUBLE, DOUBLE)。默认为 NULL,表示没有该限制。自 v3.1.4 起支持。
  • resource_limit:为当前资源组设置的资源限制,采用 "key"="value" 对形式。您可以为同一个资源组设置多个资源限制。

    • 资源限制可以包含以下参数:

      参数必选说明
      cpu_core_limit该资源组在当前 BE 节点可使用的 CPU 核数软上限,实际使用的 CPU 核数会根据节点资源空闲程度按比例弹性伸缩。取值为正整数。
      mem_limit该资源组在当前 BE 节点可使用于查询的内存(query_pool)占总内存的百分比(%)。取值范围为 (0,1)。
      concurrency_limit资源组中并发查询数的上限,用以防止并发查询提交过多而导致的过载。
      max_cpu_cores资源组在单个 BE 节点中使用的 CPU 核数上限。仅在设置为大于 0 后生效。取值范围:[0, avg_be_cpu_cores],其中 avg_be_cpu_cores 表示所有 BE 的 CPU 核数的平均值。默认值为 0。自 v3.1.4 起支持。
      big_query_cpu_second_limit大查询任务可以使用 CPU 的时间上限,其中的并行任务将累加 CPU 使用时间。单位为秒。
      big_query_scan_rows_limit大查询任务可以扫描的行数上限。
      big_query_mem_limit大查询任务可以使用的内存上限。单位为 Byte。
      type资源组类型。有效取值包括:
      short_query:当 short_query 资源组有查询正在运行时,当前 BE 节点会为其预留 short_query.cpu_core_limit 的 CPU 资源,所有 normal 资源组的总 CPU 核数使用上限会被硬限制为 BE 节点核数减 short_query.cpu_core_limit
      normal:当 short_query 资源组没有查询正在运行时,所有 normal 资源组的 CPU 核数没有硬限制。
      注意:同一集群中,您最多只能创建一个 short_query 资源组。

示例

示例一:基于多个分类器创建资源组 rg1

CREATE RESOURCE GROUP rg1
TO
(user='rg1_user1', role='rg1_role1', query_type in ('select'), source_ip='192.168.x.x/24'),
(user='rg1_user2', query_type in ('select'), source_ip='192.168.x.x/24'),
(user='rg1_user3', source_ip='192.168.x.x/24'),
(user='rg1_user4'),
(db='db1')
WITH ('cpu_core_limit' = '10',
'mem_limit' = '20%',
'type' = 'normal',
'big_query_cpu_second_limit' = '100',
'big_query_scan_rows_limit' = '100000',
'big_query_mem_limit' = '1073741824'
);