title | summary |
---|---|
CREATE RESOURCE GROUP |
TiDB 数据库中 CREATE RESOURCE GROUP 的使用概况。 |
CREATE RESOURCE GROUP
语句用于在当前所选数据库中创建资源组。
CreateResourceGroupStmt ::=
"CREATE" "RESOURCE" "GROUP" IfNotExists ResourceGroupName ResourceGroupOptionList
IfNotExists ::=
('IF' 'NOT' 'EXISTS')?
ResourceGroupName ::=
Identifier
ResourceGroupOptionList ::=
DirectResourceGroupOption
| ResourceGroupOptionList DirectResourceGroupOption
| ResourceGroupOptionList ',' DirectResourceGroupOption
DirectResourceGroupOption ::=
"RU_PER_SEC" EqOpt stringLit
| "PRIORITY" EqOpt ResourceGroupPriorityOption
| "BURSTABLE"
| "BURSTABLE" EqOpt Boolean
| "QUERY_LIMIT" EqOpt '(' ResourceGroupRunawayOptionList ')'
| "QUERY_LIMIT" EqOpt '(' ')'
| "QUERY_LIMIT" EqOpt "NULL"
ResourceGroupPriorityOption ::=
LOW
| MEDIUM
| HIGH
ResourceGroupRunawayOptionList ::=
DirectResourceGroupRunawayOption
| ResourceGroupRunawayOptionList DirectResourceGroupRunawayOption
| ResourceGroupRunawayOptionList ',' DirectResourceGroupRunawayOption
DirectResourceGroupRunawayOption ::=
"EXEC_ELAPSED" EqOpt stringLit
| "ACTION" EqOpt ResourceGroupRunawayActionOption
| "WATCH" EqOpt ResourceGroupRunawayWatchOption "DURATION" EqOpt stringLit
ResourceGroupRunawayWatchOption ::=
EXACT
| SIMILAR
ResourceGroupRunawayActionOption ::=
DRYRUN
| COOLDOWN
| KILL
资源组的 ResourceGroupName
是全局唯一的,不允许重复。
TiDB 支持以下 DirectResourceGroupOption
, 其中 Request Unit (RU) 是 TiDB 对 CPU、IO 等系统资源统一抽象的单位。
参数 | 含义 | 举例 |
---|---|---|
RU_PER_SEC |
每秒 RU 填充的速度 | RU_PER_SEC = 500 表示此资源组每秒回填 500 个 RU。 |
PRIORITY |
任务在 TiKV 上处理的绝对优先级 | PRIORITY = HIGH 表示优先级高。若未指定,则默认为 MEDIUM 。 |
BURSTABLE |
允许对应的资源组超出配额后使用空余的系统资源。 | |
QUERY_LIMIT |
当查询执行满足该条件时,识别该查询为 Runaway Query 并进行相应的控制 | QUERY_LIMIT=(EXEC_ELAPSED='60s', ACTION=KILL, WATCH=EXACT DURATION='10m') 表示当执行时间超过 60 秒后识别为 Runaway Query,对该查询执行终止操作,并在 10 分钟内对同样的 SQL 直接执行终止操作。QUERY_LIMIT=() 或 QUERY_LIMIT=NULL 则表示不进行 Runaway 控制。具体参数介绍详见管理资源消耗超出预期的查询 (Runaway Queries)。 | |
注意:
CREATE RESOURCE GROUP
语句只能在全局变量tidb_enable_resource_control
设置为ON
时才能执行。- TiDB 集群在初始化时会自动创建
default
资源组,其RU_PER_SEC
的默认值为UNLIMITED
(等同于INT
类型最大值,即2147483647
),且为BURSTABLE
模式。所有未绑定资源组的请求都将自动绑定至此资源组。在新建配置其他资源组时,建议根据实际情况修改default
资源组的配置。
创建 rg1
和 rg2
两个资源组。
DROP RESOURCE GROUP IF EXISTS rg1;
Query OK, 0 rows affected (0.22 sec)
CREATE RESOURCE GROUP IF NOT EXISTS rg1
RU_PER_SEC = 100
PRIORITY = HIGH
BURSTABLE;
Query OK, 0 rows affected (0.08 sec)
CREATE RESOURCE GROUP IF NOT EXISTS rg2
RU_PER_SEC = 200 QUERY_LIMIT=(EXEC_ELAPSED='100ms', ACTION=KILL);
Query OK, 0 rows affected (0.08 sec)
SELECT * FROM information_schema.resource_groups WHERE NAME ='rg1' or NAME = 'rg2';
+------+------------+----------+-----------+---------------------------------+
| NAME | RU_PER_SEC | PRIORITY | BURSTABLE | QUERY_LIMIT |
+------+------------+----------+-----------+---------------------------------+
| rg1 | 100 | HIGH | YES | NULL |
| rg2 | 200 | MEDIUM | NO | EXEC_ELAPSED=100ms, ACTION=KILL |
+------+------------+----------+-----------+---------------------------------+
2 rows in set (1.30 sec)
MySQL 也支持 CREATE RESOURCE GROUP,但是接受的参数和 TiDB 不同,两者并不兼容。