Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add new resource control action SWITCH_GROUP #18501

Merged
merged 5 commits into from
Oct 15, 2024
Merged
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Next Next commit
Add new resource control action SWITCH_GROUP
Signed-off-by: JmPotato <ghzpotato@gmail.com>
  • Loading branch information
JmPotato committed Sep 23, 2024
commit b984e26bedd7a693d4b24d337f6b0c2e5e82c50d
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 起引入,将识别到的查询切换到指定的资源组继续执行。
JmPotato marked this conversation as resolved.
Show resolved Hide resolved

hfxsd marked this conversation as resolved.
Show resolved Hide resolved
为了避免并发的 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` 在此类场景下可能会出现无法及时将查询切换到目标资源组的情况。
hfxsd marked this conversation as resolved.
Show resolved Hide resolved

#### 示例

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