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

*: update resource control about background example #15469

Merged
merged 7 commits into from
Nov 23, 2023
Merged
Show file tree
Hide file tree
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
8 changes: 8 additions & 0 deletions system-variables.md
Original file line number Diff line number Diff line change
Expand Up @@ -4782,6 +4782,14 @@ Query OK, 0 rows affected, 1 warning (0.00 sec)
- 这个变量用于设置 window 算子的并行度。
- 默认值 `-1` 表示使用 `tidb_executor_concurrency` 的值。

### `tidb_request_source_type` <span class="version-mark">从 v7.4.0 版本开始引入</span>

- 作用域:SESSION
- 是否受 Hint [SET_VAR](/optimizer-hints.md#set_varvar_namevar_value) 控制:否
- 类型:字符串
- 默认值:`""`
- 显示指定当前会话的任务类型,用于资源控制能识别并进行控制。如 `set @@tidb_request_source_type = "background"`。

### `tiflash_fastscan` <span class="version-mark">从 v6.3.0 版本开始引入</span>

- 作用域:SESSION | GLOBAL
Expand Down
45 changes: 31 additions & 14 deletions tidb-resource-control.md
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ Request Unit (RU) 是 TiDB 对 CPU、IO 等系统资源的统一抽象的计量
</tr>
<tr>
<td rowspan="3">Write</td>
<td>1 storage write batch 消耗 1 RU * 副本数</td>
<td>1 storage write batch 消耗 1 RU</td>
</tr>
<tr>
<td>1 storage write request 消耗 1 RU</td>
Expand All @@ -71,13 +71,11 @@ Request Unit (RU) 是 TiDB 对 CPU、IO 等系统资源的统一抽象的计量
</tbody>
</table>

目前 TiFlash 资源管控仅考虑 SQL CPU(即查询的 pipeline task 运行所占用的 CPU 时间)以及 read request payload。

> **注意:**
>
> - 每个写操作最终都被会复制到所有副本(TiKV 默认 3 个数据副本),并且每次复制都被认为是一个不同的写操作。
> - 除了用户执行的查询之外,RU 还可以被后台任务消耗,例如自动统计信息收集。
> - 上表只列举了本地部署的 TiDB 计算 RU 时涉及的相关资源,其中不包括网络和存储部分。TiDB Serverless 的 RU 可参考 [TiDB Serverless Pricing Details](https://www.pingcap.com/tidb-cloud-serverless-pricing-details/)。
> - 目前 TiFlash 资源管控仅考虑 SQL CPU(即查询的 pipeline task 运行所占用的 CPU 时间)以及 read request payload。

## 估算 SQL 所消耗的 RU

Expand Down Expand Up @@ -368,33 +366,52 @@ Runaway Query 是指执行时间或消耗资源超出预期的查询。下面使
- `br`:使用 [BR](/br/backup-and-restore-overview.md) 执行数据备份和恢复。目前不支持 PITR。
- `ddl`:对于 Reorg DDL,控制批量数据回写阶段的资源使用。
- `stats`:对应手动执行或系统自动触发的[收集统计信息](/statistics.md#统计信息的收集)任务。
- `background`: 预留的一个任务类型,可使用 [tidb_request_source_type](/system-variables.md#tidb_request_source_type) 系统变量指定当前会话的任务类型为 `background`.


默认情况下,被标记为后台任务的任务类型为空,此时后台任务的管理功能处于关闭状态,其行为与 TiDB v7.4.0 之前版本保持一致。你需要手动修改 `default` 资源组的后台任务类型以开启后台任务管理。
默认情况下,被标记为后台任务的任务类型为`空`,此时后台任务的管理功能处于关闭状态。如需开启后台任务管理功能,你需要手动修改 `default` 资源组的后台任务类型以开启后台任务管理。后台任务类型被识别匹配后,资源控制会自动控制。具体行为为当系统资源紧张,后台任务会自动降为最低优先级,保证前台任务的执行。

> **注意:**
>
> 目前所有资源组的后台任务默认都会绑定到默认资源组 `default` 下面进行管控,可以通过 `default` 全局管控后台任务类型,还不支持将后台任务绑定到其他资源组。

#### 示例

1. 创建 `rg1` 资源组,并将 `br` 和 `stats` 标记为后台任务。
1. 修改 `default` 资源组, `br` 和 `ddl` 标记为后台任务。

```sql
CREATE RESOURCE GROUP IF NOT EXISTS rg1 RU_PER_SEC = 500 BACKGROUND=(TASK_TYPES='br,stats');
ALTER RESOURCE GROUP `default` BACKGROUND=(TASK_TYPES='br,ddl');
```

2. 修改 `rg1` 资源组,将 `br` 和 `ddl` 标记为后台任务
2. 修改 `default` 资源组,将后台任务的类型还原为默认值

```sql
ALTER RESOURCE GROUP rg1 BACKGROUND=(TASK_TYPES='br,ddl');
ALTER RESOURCE GROUP `default` BACKGROUND=NULL;
```

3. 修改 `rg1` 资源组,将后台任务的类型还原为默认值。此时后台任务的类型将使用 `default` 资源组的配置
3. 修改 `default` 资源组,将后台任务的类型设置为空,此时此资源组的所有任务类型都不会作为后台任务处理

```sql
ALTER RESOURCE GROUP rg1 BACKGROUND=NULL;
ALTER RESOURCE GROUP `default` BACKGROUND=(TASK_TYPES="");
```

4. 修改 `rg1` 资源组,将后台任务的类型设置为空,此时此资源组的所有任务类型都不会作为后台任务处理。
4. 查看 `default` 资源组的后台任务类型。

```sql
ALTER RESOURCE GROUP rg1 BACKGROUND=(TASK_TYPES="");
mysql> select * from information_schema.resource_groups where name="default";
+---------+------------+----------+-----------+-------------+---------------------+
| NAME | RU_PER_SEC | PRIORITY | BURSTABLE | QUERY_LIMIT | BACKGROUND |
+---------+------------+----------+-----------+-------------+---------------------+
| default | UNLIMITED | MEDIUM | YES | NULL | TASK_TYPES='br,ddl' |
+---------+------------+----------+-----------+-------------+---------------------+
```
5. 某些情况下,用户也希望显示将会话里面的任务标记为后台类型。使用 `tidb_request_source_type`,可以显示指定任务类型,如:

``` sql
set @@tidb_request_source_type="background";
/* then we can add task type */
alter resource group default background=(task_types="background");
/* then run the command in this session */
load data infile "s3://resource-control/Lightning/test.customer.aaaa.csv"
```

## 关闭资源管控特性
Expand Down