CREATE RESOURCE GROUP
你可以使用 CREATE RESOURCE GROUP
语句来创建资源组。
语法
- CreateResourceGroupStmt
- IfNotExists
- ResourceGroupName
- ResourceGroupOptionList
- DirectResourceGroupOption
- ResourceGroupPriorityOption
- ResourceGroupRunawayOptionList
- DirectResourceGroupRunawayOption
- WatchDurationOption
- ResourceGroupRunawayWatchOption
- ResourceGroupRunawayActionOption
CreateResourceGroupStmt ::=
"CREATE" "RESOURCE" "GROUP" IfNotExists ResourceGroupName ResourceGroupOptionList
IfNotExists ::=
('IF' 'NOT' 'EXISTS')?
ResourceGroupName ::=
Identifier
| "DEFAULT"
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"
| "BACKGROUND" EqOpt '(' BackgroundOptionList ')'
| "BACKGROUND" EqOpt '(' ')'
| "BACKGROUND" EqOpt "NULL"
ResourceGroupPriorityOption ::=
LOW
| MEDIUM
| HIGH
ResourceGroupRunawayOptionList ::=
DirectResourceGroupRunawayOption
| ResourceGroupRunawayOptionList DirectResourceGroupRunawayOption
| ResourceGroupRunawayOptionList ',' DirectResourceGroupRunawayOption
DirectResourceGroupRunawayOption ::=
"EXEC_ELAPSED" EqOpt stringLit
| "PROCESSED_KEYS" EqOpt intLit
| "RU" EqOpt intLit
| "ACTION" EqOpt ResourceGroupRunawayActionOption
| "WATCH" EqOpt ResourceGroupRunawayWatchOption WatchDurationOption
WatchDurationOption ::=
("DURATION" EqOpt stringLit | "DURATION" EqOpt "UNLIMITED")?
ResourceGroupRunawayWatchOption ::=
EXACT
| SIMILAR
| PLAN
ResourceGroupRunawayActionOption ::=
DRYRUN
| COOLDOWN
| KILL
| "SWITCH_GROUP" '(' ResourceGroupName ')'
资源组名称参数(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 | 如果设置了 BURSTABLE 属性,TiDB 允许对应资源组在超出配额时使用可用的系统资源。 | |
QUERY_LIMIT | 当查询执行满足该条件时,查询会被识别为异常查询并执行相应操作。 | QUERY_LIMIT=(EXEC_ELAPSED='60s', ACTION=KILL, WATCH=EXACT DURATION='10m') 表示当查询执行时间超过 60 秒时,该查询会被识别为异常查询并被终止。所有 SQL 文本相同的 SQL 语句将在接下来的 10 分钟内被立即终止。QUERY_LIMIT=() 或 QUERY_LIMIT=NULL 表示未启用异常查询控制。详见 异常查询。 |
示例
创建两个资源组 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 兼容性
MySQL 也支持 CREATE RESOURCE GROUP。但其可接受的参数与 TiDB 不同,因此两者不兼容。