diff --git a/releases/release-7.4.0.md b/releases/release-7.4.0.md index 0f9b6eca738a..686d8e4007e0 100644 --- a/releases/release-7.4.0.md +++ b/releases/release-7.4.0.md @@ -296,6 +296,7 @@ TiDB 版本:7.4.0 | [`tidb_cloud_storage_uri`](/system-variables.md#tidb_cloud_storage_uri-从-v740-版本开始引入) | 新增 | 该变量用于指定[全局排序](/tidb-global-sort.md)中使用的云存储的 URI。 | | [`tidb_opt_enable_hash_join`](/system-variables.md#tidb_opt_enable_hash_join-从-v740-版本开始引入) | 新增 | 控制优化器是否会选择表的哈希连接。默认打开 (`ON`)。设置为 `OFF` 时,除非没有计划可用,否则优化器会避免选择表的哈希连接。 | | [`tidb_opt_objective`](/system-variables.md#tidb_opt_objective-从-v740-版本开始引入) | 新增 | 该变量用于设置优化器优化目标。`moderate` 维持旧版本的默认行为,优化器会利用更多信息尝试生成更优的计划;`determinate` 则倾向于保守,保持执行计划稳定。 | +| [`tidb_request_source_type`](/system-variables.md#tidb_request_source_type-从-v740-版本开始引入) | 新增 | 该变量用于显式指定当前会话的任务类型,用于[资源管控](/tidb-resource-control.md)识别并控制。如 `SET @@tidb_request_source_type = "background"`。 | | [`tidb_schema_version_cache_limit`](/system-variables.md#tidb_schema_version_cache_limit-从-v740-版本开始引入) | 新增 | 该变量用于限制 TiDB 实例可以缓存多少个历史版本的表结构信息。默认值为 `16`,即默认缓存 16 个历史版本的表结构信息。| | [`tidb_service_scope`](/system-variables.md#tidb_service_scope-从-v740-版本开始引入) | 新增 | 该变量是一个实例级别的变量,用于控制 [TiDB 后端任务分布式框架](/tidb-distributed-execution-framework.md)下各 TiDB 节点的服务范围。当设置 TiDB 节点的 `tidb_service_scope` 为 `background` 时,后端任务分布式框架将调度该节点执行后端任务(如 [`ADD INDEX`](/sql-statements/sql-statement-add-index.md) 和 [`IMPORT INTO`](/sql-statements/sql-statement-import-into.md))。 | | [`tidb_session_alias`](/system-variables.md#tidb_session_alias-从-v740-版本开始引入) | 新增 | 用来自定义当前会话相关日志中 `session_alias` 列的值。 | diff --git a/system-variables.md b/system-variables.md index 1880080bf168..60fa15cac27d 100644 --- a/system-variables.md +++ b/system-variables.md @@ -4086,6 +4086,15 @@ EXPLAIN FORMAT='brief' SELECT COUNT(1) FROM t WHERE a = 1 AND b IS NOT NULL; - 这个变量用于控制 TiDB 的 Follower Read 功能的行为。 - 关于使用方式与实现原理,见 [Follower Read](/follower-read.md)。 +### `tidb_request_source_type` 从 v7.4.0 版本开始引入 + +- 作用域:SESSION +- 是否受 Hint [SET_VAR](/optimizer-hints.md#set_varvar_namevar_value) 控制:否 +- 类型:字符串 +- 默认值:`""` +- 可选值:`"ddl"`、`"stats"`、`"br"`、`"lightning"`、`"background"` +- 显式指定当前会话的任务类型,用于[资源管控](/tidb-resource-control.md)识别并控制。如 `SET @@tidb_request_source_type = "background"`。 + ### `tidb_retry_limit` - 作用域:SESSION | GLOBAL diff --git a/tidb-resource-control.md b/tidb-resource-control.md index 9671e0f317ff..9b6fa8d7568c 100644 --- a/tidb-resource-control.md +++ b/tidb-resource-control.md @@ -56,7 +56,7 @@ Request Unit (RU) 是 TiDB 对 CPU、IO 等系统资源的统一抽象的计量 Write - 1 storage write batch 消耗 1 RU * 副本数 + 1 storage write batch 消耗 1 RU 1 storage write request 消耗 1 RU @@ -71,13 +71,11 @@ Request Unit (RU) 是 TiDB 对 CPU、IO 等系统资源的统一抽象的计量 -目前 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 @@ -368,33 +366,58 @@ 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-从-v740-版本开始引入) 系统变量指定当前会话的任务类型为 `background`。 + +默认情况下,被标记为后台任务的任务类型为 `""`,此时后台任务的管理功能处于关闭状态。如需开启后台任务管理功能,你需要手动修改 `default` 资源组的后台任务类型以开启后台任务管理。后台任务类型被识别匹配后,资源管控会自动进行,即当系统资源紧张时,后台任务会自动降为最低优先级,保证前台任务的执行。 -默认情况下,被标记为后台任务的任务类型为空,此时后台任务的管理功能处于关闭状态,其行为与 TiDB v7.4.0 之前版本保持一致。你需要手动修改 `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=""); + 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"; + /* 添加 background 任务类型 */ + ALTER RESOURCE GROUP `default` BACKGROUND=(TASK_TYPES="background"); + /* 在当前会话中执行 LOAD DATA */ + LOAD DATA INFILE "s3://resource-control/Lightning/test.customer.aaaa.csv" ``` ## 关闭资源管控特性