Skip to content

Commit

Permalink
Add new resource control action SWITCH_GROUP
Browse files Browse the repository at this point in the history
Signed-off-by: JmPotato <[email protected]>
  • Loading branch information
JmPotato committed Sep 5, 2024
1 parent db3b3d0 commit 02f6350
Showing 1 changed file with 14 additions and 3 deletions.
17 changes: 14 additions & 3 deletions tidb-resource-control.md
Original file line number Diff line number Diff line change
Expand Up @@ -226,6 +226,7 @@ Runaway Query 是指执行时间或消耗资源超出预期的查询(仅指 `S
- `DRYRUN`:对执行 Query 不做任何操作,仅记录识别的 Runaway Query。主要用于观测设置条件是否合理。
- `COOLDOWN`:将查询的执行优先级降到最低,查询仍旧会以低优先级继续执行,不占用其他操作的资源。
- `KILL`:识别到的查询将被自动终止,报错 `Query execution was interrupted, identified as runaway query`
- `SWITCH_GROUP`: 自 v8.4.0 起引入,将识别到的查询切换到指定的资源组继续执行。

为了避免并发的 Runaway Query 过多导致系统资源耗尽,资源管控引入了 Runaway Query 监控机制,能够快速识别并隔离 Runaway Query。该功能通过 `WATCH` 子句实现,当某一个查询被识别为 Runaway Query 之后,会提取这个查询的匹配特征(由 `WATCH` 后的匹配方式参数决定),在接下来的一段时间里(由 `DURATION` 定义),这个 Runaway Query 的匹配特征会被加入到监控列表,TiDB 实例会将查询和监控列表进行匹配,匹配到的查询直接标记为 Runaway Query,而不再等待其被条件识别,并按照当前应对操作进行隔离。其中 `KILL` 会终止该查询,并报错 `Quarantined and interrupted because of being in runaway watch list`

Expand All @@ -244,9 +245,13 @@ Runaway Query 是指执行时间或消耗资源超出预期的查询(仅指 `S
| 参数 | 含义 | 备注 |
|---------------|--------------|--------------------------------------|
| `EXEC_ELAPSED` | 当查询执行时间超过该值后被识别为 Runaway Query | EXEC_ELAPSED =`60s` 表示查询的执行时间超过 60 秒则被认为是 Runaway Query。 |
| `ACTION` | 当识别到 Runaway Query 时进行的动作 | 可选值有 `DRYRUN``COOLDOWN``KILL`。 |
| `ACTION` | 当识别到 Runaway Query 时进行的动作 | 可选值有 `DRYRUN``COOLDOWN``KILL``SWITCH_GROUP`。 |
| `WATCH` | 快速匹配已经识别到的 Runaway Query,即在一定时间内再碰到相同或相似查询直接进行相应动作 | 可选项,配置例如 `WATCH=SIMILAR DURATION '60s'``WATCH=EXACT DURATION '1m'``WATCH=PLAN`。 |

> **注意:**
>
> 推荐通过 [`QUERY WATCH`](/tidb-resource-control.md#query-watch-语句说明) 语句来搭配 `SWITCH_GROUP` 进行使用。因为 `QUERY_LIMIT` 只有在查询执行时间超过所配置 `EXEC_ELAPSED` 时才会触发对应 `ACTION` 操作,所以 `SWITCH_GROUP` 在此类场景下可能会出现无法及时将查询切换到目标资源组的情况。

#### 示例

1. 创建 `rg1` 资源组,限额是每秒 500 RU,并且定义超过 60 秒为 Runaway Query,并对 Runaway Query 降低优先级执行。
Expand Down Expand Up @@ -292,7 +297,13 @@ Runaway Query 是指执行时间或消耗资源超出预期的查询(仅指 `S
QUERY WATCH ADD RESOURCE GROUP rg1 SQL TEXT SIMILAR TO 'select * from test.t2';
```

- 通过 PLAN Digest 为 `rg1` 资源组的 Runaway Queries 监控列表添加监控匹配特征。
- 通过将 SQL 解析成 SQL Digest,为 `rg1` 资源组的 Runaway Queries 监控列表添加监控匹配特征,并指定 `ACTION``SWITCH_GROUP(rg2)`

```sql
QUERY WATCH ADD RESOURCE GROUP rg1 ACTION SWITCH_GROUP(rg2) SQL TEXT SIMILAR TO 'select * from test.t2';
```

- 通过 PLAN Digest 为 `rg1` 资源组的 Runaway Queries 监控列表添加监控匹配特征,并指定 `ACTION``KILL`

```sql
QUERY WATCH ADD RESOURCE GROUP rg1 ACTION KILL PLAN DIGEST 'd08bc323a934c39dc41948b0a073725be3398479b6fa4f6dd1db2a9b115f7f57';
Expand Down Expand Up @@ -351,7 +362,7 @@ Runaway Query 是指执行时间或消耗资源超出预期的查询(仅指 `S
> **警告:**
>
> 该功能目前为实验特性,不建议在生产环境中使用。该功能可能会在未事先通知的情况下发生变化或删除。如果发现 bug,请[提交 issue](/support.md) 反馈。
>
>
> 资源管控的后台任务管理是基于 TiKV 的 CPU/IO 的资源利用率动态调整资源配额的,因此它依赖各个实例可用资源上限 (Quota)。如果在单个服务器混合部署多个组件或实例,需要通过 cgroup 为各个实例设置合适的资源上限 (Quota)。TiUP Playground 这类共享资源的配置很难表现出预期效果。

后台任务是指那些优先级不高但是需要消耗大量资源的任务,如数据备份和自动统计信息收集等。这些任务通常定期或不定期触发,在执行的时候会消耗大量资源,从而影响在线的高优先级任务的性能。
Expand Down

0 comments on commit 02f6350

Please sign in to comment.