From e71eb008bff3decc5fd723017e658c545cbae779 Mon Sep 17 00:00:00 2001 From: ekexium <eke@fastmail.com> Date: Wed, 5 Mar 2025 15:53:26 +0800 Subject: [PATCH 01/10] variable: tidb_pipelined_dml_resource_policy Signed-off-by: ekexium <eke@fastmail.com> --- pipelined-dml.md | 1 + system-variables.md | 16 ++++++++++++++++ 2 files changed, 17 insertions(+) diff --git a/pipelined-dml.md b/pipelined-dml.md index dd2e8fd26839..d2907fd0db8c 100644 --- a/pipelined-dml.md +++ b/pipelined-dml.md @@ -100,6 +100,7 @@ SELECT @@tidb_last_txn_info; ## 相关配置 - 系统变量 [`tidb_dml_type`](/system-variables.md#tidb_dml_type-从-v800-版本开始引入) 用于控制是否在会话级别启用 Pipelined DML。 +- 系统变量 [`tidb_pipelined_dml_resource_policy`](/system-variables.md#tidb_pipelined_dml_resource_policy) 用于控制 Pipelined DML 的资源分配策略。在 Pipelined DML 造成过大压力影响其它业务时可以考虑调整为 `conservative`。 - 当 [`tidb_dml_type`](/system-variables.md#tidb_dml_type-从-v800-版本开始引入) 设置为 `"bulk"` 时,配置项 [`pessimistic-auto-commit`](/tidb-configuration-file.md#pessimistic-auto-commit) 的效果等同于设置为 `false`。 - 以 Pipelined DML 方式执行事务时,事务的大小不受 TiDB 配置项 [`txn-total-size-limit`](/tidb-configuration-file.md#txn-total-size-limit) 的限制。 - 以 Pipelined DML 方式执行超大事务时,事务耗时可能较长。对于这种模式的事务,其事务锁的最大 TTL 为 [`max-txn-ttl`](/tidb-configuration-file.md#max-txn-ttl) 与 24 小时中的较大值。 diff --git a/system-variables.md b/system-variables.md index bbcb96bba310..ae113dc1e205 100644 --- a/system-variables.md +++ b/system-variables.md @@ -4229,6 +4229,22 @@ SHOW WARNINGS; > - 该选项目前仅对需要上锁单个 key 的语句有效。如果一个语句需要对多行同时上锁,则该选项不会对此类语句生效。 > - 该功能从 v6.6.0 版本引入。在 v6.6.0 版本中,该功能由变量 [`tidb_pessimistic_txn_aggressive_locking`](https://docs.pingcap.com/zh/tidb/v6.6/system-variables#tidb_pessimistic_txn_aggressive_locking-%E4%BB%8E-v660-%E7%89%88%E6%9C%AC%E5%BC%80%E5%A7%8B%E5%BC%95%E5%85%A5) 控制,默认关闭。 +### `tidb_pipelined_dml_resource_policy` + +- 作用域:SESSION | GLOBAL +- 是否持久化到集群:是 +- 是否受 Hint [SET_VAR](/optimizer-hints.md#set_varvar_namevar_value) 控制:否 +- 类型:字符串型 +- 默认值:`standard` +- 可选值:`standard`,`conservative`,`custom{...}` +- 该变量指定了 Pipelined DML 使用资源的策略。它仅在 [`tidb_dml_type`](#tidb_dml_type-从-v800-版本开始引入) 是`bulk`时生效。各选项含义如下: + - `standard`:默认的资源使用策略。 + - `conservative`:Pipelined DML 使用更少的资源,但执行速度更慢。 + - `custom{option1=value1,option2=value2,...}` 格式:自定义资源使用策略。可以只指定需要的子项。例如 `custom{concurrency=8,write_throttle_ratio=0.5}`。支持的自定义项包括 + - `concurrency`:flush 操作的并发度,影响 Pipelined DML 的执行速度和资源使用。 + - `resolve_concurrency`:异步 resolve lock 操作的并发度。不影响 Pipelined DML 执行速度,只影响资源使用。 + - `write_throttle_ratio`:取值范围为 `[0,1)`。通过主动 throttle 降低资源使用,该值指定了 throttle 时间在总时间中的占比,0 代表不进行 throttle。 + ### `tidb_placement_mode` <span class="version-mark">从 v6.0.0 版本开始引入</span> - 作用域:SESSION | GLOBAL From 33f1581b0acc04812dce04efbc1f6f7fbf879aae Mon Sep 17 00:00:00 2001 From: ekexium <ekexium@gmail.com> Date: Wed, 5 Mar 2025 15:57:12 +0800 Subject: [PATCH 02/10] Apply suggestions from code review --- system-variables.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/system-variables.md b/system-variables.md index ae113dc1e205..25f24850b16f 100644 --- a/system-variables.md +++ b/system-variables.md @@ -4243,7 +4243,7 @@ SHOW WARNINGS; - `custom{option1=value1,option2=value2,...}` 格式:自定义资源使用策略。可以只指定需要的子项。例如 `custom{concurrency=8,write_throttle_ratio=0.5}`。支持的自定义项包括 - `concurrency`:flush 操作的并发度,影响 Pipelined DML 的执行速度和资源使用。 - `resolve_concurrency`:异步 resolve lock 操作的并发度。不影响 Pipelined DML 执行速度,只影响资源使用。 - - `write_throttle_ratio`:取值范围为 `[0,1)`。通过主动 throttle 降低资源使用,该值指定了 throttle 时间在总时间中的占比,0 代表不进行 throttle。 + - `write_throttle_ratio`:通过主动 throttle 降低资源使用,该值指定了 throttle 时间在总时间中的占比,0 代表不进行 throttle。取值范围为 `[0,1)` ### `tidb_placement_mode` <span class="version-mark">从 v6.0.0 版本开始引入</span> From 9870452883ba7aff2b8d1d75b3e724682cca5373 Mon Sep 17 00:00:00 2001 From: ekexium <eke@fastmail.com> Date: Wed, 5 Mar 2025 19:40:43 +0800 Subject: [PATCH 03/10] highlight the double quotes Signed-off-by: ekexium <eke@fastmail.com> --- system-variables.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/system-variables.md b/system-variables.md index ae113dc1e205..a400dd07b979 100644 --- a/system-variables.md +++ b/system-variables.md @@ -4235,12 +4235,12 @@ SHOW WARNINGS; - 是否持久化到集群:是 - 是否受 Hint [SET_VAR](/optimizer-hints.md#set_varvar_namevar_value) 控制:否 - 类型:字符串型 -- 默认值:`standard` -- 可选值:`standard`,`conservative`,`custom{...}` +- 默认值:`"standard"` +- 可选值:`"standard"`,`"conservative"`,`"custom{...}"` - 该变量指定了 Pipelined DML 使用资源的策略。它仅在 [`tidb_dml_type`](#tidb_dml_type-从-v800-版本开始引入) 是`bulk`时生效。各选项含义如下: - - `standard`:默认的资源使用策略。 - - `conservative`:Pipelined DML 使用更少的资源,但执行速度更慢。 - - `custom{option1=value1,option2=value2,...}` 格式:自定义资源使用策略。可以只指定需要的子项。例如 `custom{concurrency=8,write_throttle_ratio=0.5}`。支持的自定义项包括 + - `"standard"`:默认的资源使用策略。 + - `"conservative"`:Pipelined DML 使用更少的资源,但执行速度更慢。 + - `"custom{option1=value1,option2=value2,...}"` 格式:自定义资源使用策略。可以只指定需要的子项。例如 `"custom{concurrency=8,write_throttle_ratio=0.5}"`。注意需要用双引号包括该值。支持的自定义项包括: - `concurrency`:flush 操作的并发度,影响 Pipelined DML 的执行速度和资源使用。 - `resolve_concurrency`:异步 resolve lock 操作的并发度。不影响 Pipelined DML 执行速度,只影响资源使用。 - `write_throttle_ratio`:取值范围为 `[0,1)`。通过主动 throttle 降低资源使用,该值指定了 throttle 时间在总时间中的占比,0 代表不进行 throttle。 From c849e0c9f73e67663cf906815e5955f607d0c506 Mon Sep 17 00:00:00 2001 From: ekexium <eke@fastmail.com> Date: Wed, 5 Mar 2025 19:41:20 +0800 Subject: [PATCH 04/10] can be set by hint Signed-off-by: ekexium <eke@fastmail.com> --- system-variables.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/system-variables.md b/system-variables.md index beb735a3e82f..e7f62d3a8a11 100644 --- a/system-variables.md +++ b/system-variables.md @@ -4233,7 +4233,7 @@ SHOW WARNINGS; - 作用域:SESSION | GLOBAL - 是否持久化到集群:是 -- 是否受 Hint [SET_VAR](/optimizer-hints.md#set_varvar_namevar_value) 控制:否 +- 是否受 Hint [SET_VAR](/optimizer-hints.md#set_varvar_namevar_value) 控制:是 - 类型:字符串型 - 默认值:`"standard"` - 可选值:`"standard"`,`"conservative"`,`"custom{...}"` From 3d81d1297a97c3cd0a9df859c3e93f593e6e4cf3 Mon Sep 17 00:00:00 2001 From: ekexium <eke@fastmail.com> Date: Wed, 5 Mar 2025 19:45:29 +0800 Subject: [PATCH 05/10] describe value range Signed-off-by: ekexium <eke@fastmail.com> --- system-variables.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/system-variables.md b/system-variables.md index e7f62d3a8a11..af47ed0f70d0 100644 --- a/system-variables.md +++ b/system-variables.md @@ -4241,8 +4241,8 @@ SHOW WARNINGS; - `"standard"`:默认的资源使用策略。 - `"conservative"`:Pipelined DML 使用更少的资源,但执行速度更慢。 - `"custom{option1=value1,option2=value2,...}"` 格式:自定义资源使用策略。可以只指定需要的子项。例如 `"custom{concurrency=8,write_throttle_ratio=0.5}"`。注意需要用双引号包括该值。支持的自定义项包括: - - `concurrency`:flush 操作的并发度,影响 Pipelined DML 的执行速度和资源使用。 - - `resolve_concurrency`:异步 resolve lock 操作的并发度。不影响 Pipelined DML 执行速度,只影响资源使用。 + - `concurrency`:flush 操作的并发度,影响 Pipelined DML 的执行速度和资源使用。取值范围为`[1,8192]`。 + - `resolve_concurrency`:异步 resolve lock 操作的并发度。不影响 Pipelined DML 执行速度,只影响资源使用。取值范围为`[1,8192]`。 - `write_throttle_ratio`:通过主动 throttle 降低资源使用,该值指定了 throttle 时间在总时间中的占比,0 代表不进行 throttle。取值范围为 `[0,1)` ### `tidb_placement_mode` <span class="version-mark">从 v6.0.0 版本开始引入</span> From 721623524e9952da1d2af6456cb1fc4e002840e8 Mon Sep 17 00:00:00 2001 From: ekexium <eke@fastmail.com> Date: Tue, 18 Mar 2025 10:40:46 +0800 Subject: [PATCH 06/10] address comments Signed-off-by: ekexium <eke@fastmail.com> --- pipelined-dml.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/pipelined-dml.md b/pipelined-dml.md index d2907fd0db8c..88ebc89eccf4 100644 --- a/pipelined-dml.md +++ b/pipelined-dml.md @@ -100,7 +100,10 @@ SELECT @@tidb_last_txn_info; ## 相关配置 - 系统变量 [`tidb_dml_type`](/system-variables.md#tidb_dml_type-从-v800-版本开始引入) 用于控制是否在会话级别启用 Pipelined DML。 -- 系统变量 [`tidb_pipelined_dml_resource_policy`](/system-variables.md#tidb_pipelined_dml_resource_policy) 用于控制 Pipelined DML 的资源分配策略。在 Pipelined DML 造成过大压力影响其它业务时可以考虑调整为 `conservative`。 +- 系统变量 [`tidb_pipelined_dml_resource_policy`](/system-variables.md#tidb_pipelined_dml_resource_policy) 用于控制 Pipelined DML 的资源使用策略。当出现以下资源竞争情况时,可以考虑将其调整为 `conservative` 来降低 Pipelined DML 对集群的影响: + - TiKV 节点出现写入热点,TiKV 负载过高 + - OLTP 业务的请求延迟显著上升 + - 集群写入吞吐量明显下降 - 当 [`tidb_dml_type`](/system-variables.md#tidb_dml_type-从-v800-版本开始引入) 设置为 `"bulk"` 时,配置项 [`pessimistic-auto-commit`](/tidb-configuration-file.md#pessimistic-auto-commit) 的效果等同于设置为 `false`。 - 以 Pipelined DML 方式执行事务时,事务的大小不受 TiDB 配置项 [`txn-total-size-limit`](/tidb-configuration-file.md#txn-total-size-limit) 的限制。 - 以 Pipelined DML 方式执行超大事务时,事务耗时可能较长。对于这种模式的事务,其事务锁的最大 TTL 为 [`max-txn-ttl`](/tidb-configuration-file.md#max-txn-ttl) 与 24 小时中的较大值。 From 540edaa1ebd40285589b3f9c974d9342d76b23e9 Mon Sep 17 00:00:00 2001 From: ekexium <ekexium@gmail.com> Date: Mon, 24 Mar 2025 16:35:31 +0800 Subject: [PATCH 07/10] Apply suggestions from code review Co-authored-by: Grace Cai <qqzczy@126.com> --- pipelined-dml.md | 2 +- system-variables.md | 18 +++++++++--------- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/pipelined-dml.md b/pipelined-dml.md index 88ebc89eccf4..3d3cd92a7eb2 100644 --- a/pipelined-dml.md +++ b/pipelined-dml.md @@ -100,7 +100,7 @@ SELECT @@tidb_last_txn_info; ## 相关配置 - 系统变量 [`tidb_dml_type`](/system-variables.md#tidb_dml_type-从-v800-版本开始引入) 用于控制是否在会话级别启用 Pipelined DML。 -- 系统变量 [`tidb_pipelined_dml_resource_policy`](/system-variables.md#tidb_pipelined_dml_resource_policy) 用于控制 Pipelined DML 的资源使用策略。当出现以下资源竞争情况时,可以考虑将其调整为 `conservative` 来降低 Pipelined DML 对集群的影响: +- 系统变量 [`tidb_pipelined_dml_resource_policy`](/system-variables.md#tidb_pipelined_dml_resource_policy-从-v900-版本开始引入) 用于控制 Pipelined DML 的资源使用策略。当出现以下资源竞争情况时,可以考虑将其调整为 `conservative` 来降低 Pipelined DML 对集群性能的影响: - TiKV 节点出现写入热点,TiKV 负载过高 - OLTP 业务的请求延迟显著上升 - 集群写入吞吐量明显下降 diff --git a/system-variables.md b/system-variables.md index af47ed0f70d0..bbea9d5747c6 100644 --- a/system-variables.md +++ b/system-variables.md @@ -4229,21 +4229,21 @@ SHOW WARNINGS; > - 该选项目前仅对需要上锁单个 key 的语句有效。如果一个语句需要对多行同时上锁,则该选项不会对此类语句生效。 > - 该功能从 v6.6.0 版本引入。在 v6.6.0 版本中,该功能由变量 [`tidb_pessimistic_txn_aggressive_locking`](https://docs.pingcap.com/zh/tidb/v6.6/system-variables#tidb_pessimistic_txn_aggressive_locking-%E4%BB%8E-v660-%E7%89%88%E6%9C%AC%E5%BC%80%E5%A7%8B%E5%BC%95%E5%85%A5) 控制,默认关闭。 -### `tidb_pipelined_dml_resource_policy` +### `tidb_pipelined_dml_resource_policy` <span class="version-mark">从 v9.0.0 版本开始引入</span> - 作用域:SESSION | GLOBAL - 是否持久化到集群:是 - 是否受 Hint [SET_VAR](/optimizer-hints.md#set_varvar_namevar_value) 控制:是 - 类型:字符串型 - 默认值:`"standard"` -- 可选值:`"standard"`,`"conservative"`,`"custom{...}"` -- 该变量指定了 Pipelined DML 使用资源的策略。它仅在 [`tidb_dml_type`](#tidb_dml_type-从-v800-版本开始引入) 是`bulk`时生效。各选项含义如下: - - `"standard"`:默认的资源使用策略。 - - `"conservative"`:Pipelined DML 使用更少的资源,但执行速度更慢。 - - `"custom{option1=value1,option2=value2,...}"` 格式:自定义资源使用策略。可以只指定需要的子项。例如 `"custom{concurrency=8,write_throttle_ratio=0.5}"`。注意需要用双引号包括该值。支持的自定义项包括: - - `concurrency`:flush 操作的并发度,影响 Pipelined DML 的执行速度和资源使用。取值范围为`[1,8192]`。 - - `resolve_concurrency`:异步 resolve lock 操作的并发度。不影响 Pipelined DML 执行速度,只影响资源使用。取值范围为`[1,8192]`。 - - `write_throttle_ratio`:通过主动 throttle 降低资源使用,该值指定了 throttle 时间在总时间中的占比,0 代表不进行 throttle。取值范围为 `[0,1)` +- 可选值:`"standard"`、`"conservative"`、`"custom{...}"` +- 该变量控制 [Pipelined DML](/pipelined-dml.md) 的资源使用策略,仅在 [`tidb_dml_type`](#tidb_dml_type-从-v800-版本开始引入) 为 `bulk` 时生效。可选值含义如下: + - `"standard"`:默认的资源使用策略。 + - `"conservative"`:Pipelined DML 使用更少的资源,但执行速度更慢,适用于对资源使用较敏感的场景。 + - `"custom{option1=value1,option2=value2,...}"` 格式:自定义资源使用策略。可以只指定需要的子项。例如 `"custom{concurrency=8,write_throttle_ratio=0.5}"`。注意需要用双引号包括该值。支持的自定义项包括: + - `concurrency`:flush 操作的并发度,影响 Pipelined DML 的执行速度和资源使用。取值范围为`[1,8192]`。 + - `resolve_concurrency`:异步 resolve lock 操作的并发度。只影响 Pipelined DML 资源使用,不影响 Pipelined DML 执行速度。取值范围为`[1,8192]`。 + - `write_throttle_ratio`:主动限流(throttle)的时间比例。值越大表示 throttle 时间在总时间中的占比越高,从而减少资源使用。0 表示不进行限流。取值范围为 `[0,1)`。 ### `tidb_placement_mode` <span class="version-mark">从 v6.0.0 版本开始引入</span> From a3de4f8a7dc03221f044650656068da8b8522f34 Mon Sep 17 00:00:00 2001 From: Grace Cai <qqzczy@126.com> Date: Mon, 24 Mar 2025 17:45:05 +0800 Subject: [PATCH 08/10] minor format updates --- system-variables.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/system-variables.md b/system-variables.md index bbea9d5747c6..989de5cb8aa8 100644 --- a/system-variables.md +++ b/system-variables.md @@ -4243,7 +4243,7 @@ SHOW WARNINGS; - `"custom{option1=value1,option2=value2,...}"` 格式:自定义资源使用策略。可以只指定需要的子项。例如 `"custom{concurrency=8,write_throttle_ratio=0.5}"`。注意需要用双引号包括该值。支持的自定义项包括: - `concurrency`:flush 操作的并发度,影响 Pipelined DML 的执行速度和资源使用。取值范围为`[1,8192]`。 - `resolve_concurrency`:异步 resolve lock 操作的并发度。只影响 Pipelined DML 资源使用,不影响 Pipelined DML 执行速度。取值范围为`[1,8192]`。 - - `write_throttle_ratio`:主动限流(throttle)的时间比例。值越大表示 throttle 时间在总时间中的占比越高,从而减少资源使用。0 表示不进行限流。取值范围为 `[0,1)`。 + - `write_throttle_ratio`:主动限流(throttle)的时间比例。值越大表示 throttle 时间在总时间中的占比越高,从而减少资源使用。`0` 表示不进行限流。取值范围为 `[0,1)`。 ### `tidb_placement_mode` <span class="version-mark">从 v6.0.0 版本开始引入</span> From ad2198f76d9441edb9ada9f5606ccbffa8450a0f Mon Sep 17 00:00:00 2001 From: Grace Cai <qqzczy@126.com> Date: Thu, 27 Mar 2025 10:39:42 +0800 Subject: [PATCH 09/10] minor wording updates Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- system-variables.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/system-variables.md b/system-variables.md index 473d835b9bd4..6ad14f4e33ac 100644 --- a/system-variables.md +++ b/system-variables.md @@ -4266,7 +4266,7 @@ SHOW WARNINGS; - 可选值:`"standard"`、`"conservative"`、`"custom{...}"` - 该变量控制 [Pipelined DML](/pipelined-dml.md) 的资源使用策略,仅在 [`tidb_dml_type`](#tidb_dml_type-从-v800-版本开始引入) 为 `bulk` 时生效。可选值含义如下: - `"standard"`:默认的资源使用策略。 - - `"conservative"`:Pipelined DML 使用更少的资源,但执行速度更慢,适用于对资源使用较敏感的场景。 + - `"conservative"`:Pipelined DML 使用更少的资源,但执行速度比默认策略慢,适用于对资源使用较敏感的场景。 - `"custom{option1=value1,option2=value2,...}"` 格式:自定义资源使用策略。可以只指定需要的子项。例如 `"custom{concurrency=8,write_throttle_ratio=0.5}"`。注意需要用双引号包括该值。支持的自定义项包括: - `concurrency`:flush 操作的并发度,影响 Pipelined DML 的执行速度和资源使用。取值范围为`[1,8192]`。 - `resolve_concurrency`:异步 resolve lock 操作的并发度。只影响 Pipelined DML 资源使用,不影响 Pipelined DML 执行速度。取值范围为`[1,8192]`。 From 53895f442dc6a93556dd92c2e670e1503abf6c55 Mon Sep 17 00:00:00 2001 From: Grace Cai <qqzczy@126.com> Date: Wed, 9 Apr 2025 16:02:20 +0800 Subject: [PATCH 10/10] Apply suggestions from code review Co-authored-by: Aolin <aolinz@outlook.com> --- system-variables.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/system-variables.md b/system-variables.md index 6ad14f4e33ac..eb44e7cba5b6 100644 --- a/system-variables.md +++ b/system-variables.md @@ -4268,9 +4268,9 @@ SHOW WARNINGS; - `"standard"`:默认的资源使用策略。 - `"conservative"`:Pipelined DML 使用更少的资源,但执行速度比默认策略慢,适用于对资源使用较敏感的场景。 - `"custom{option1=value1,option2=value2,...}"` 格式:自定义资源使用策略。可以只指定需要的子项。例如 `"custom{concurrency=8,write_throttle_ratio=0.5}"`。注意需要用双引号包括该值。支持的自定义项包括: - - `concurrency`:flush 操作的并发度,影响 Pipelined DML 的执行速度和资源使用。取值范围为`[1,8192]`。 - - `resolve_concurrency`:异步 resolve lock 操作的并发度。只影响 Pipelined DML 资源使用,不影响 Pipelined DML 执行速度。取值范围为`[1,8192]`。 - - `write_throttle_ratio`:主动限流(throttle)的时间比例。值越大表示 throttle 时间在总时间中的占比越高,从而减少资源使用。`0` 表示不进行限流。取值范围为 `[0,1)`。 + - `concurrency`:flush 操作的并发度,影响 Pipelined DML 的执行速度和资源使用。取值范围为 `[1, 8192]`。 + - `resolve_concurrency`:异步 resolve lock 操作的并发度。只影响 Pipelined DML 资源使用,不影响 Pipelined DML 执行速度。取值范围为 `[1, 8192]`。 + - `write_throttle_ratio`:主动限流 (throttle) 的时间比例。值越大表示 throttle 时间在总时间中的占比越高,从而减少资源使用。`0` 表示不进行限流。取值范围为 `[0, 1)`。 ### `tidb_placement_mode` <span class="version-mark">从 v6.0.0 版本开始引入</span>