diff --git a/system-variables.md b/system-variables.md index 062bedc3c50b..3235bcca36fd 100644 --- a/system-variables.md +++ b/system-variables.md @@ -2448,7 +2448,8 @@ Query OK, 0 rows affected (0.09 sec) > **注意:** > -> 如果 PD leader 的 TSO RPC 延迟升高,但其现象并非由 CPU 使用率达到瓶颈而导致(可能存在网络等问题),此时,打开 TSO Follower Proxy 可能会导致 TiDB 的语句执行延迟上升,从而影响集群的 QPS 表现。 +> - 如果 PD leader 的 TSO RPC 延迟升高,但其现象并非由 CPU 使用率达到瓶颈而导致(可能存在网络等问题),此时,打开 TSO Follower Proxy 可能会导致 TiDB 的语句执行延迟上升,从而影响集群的 QPS 表现。 +> - 该功能与 [`tidb_tso_client_rpc_mode`](#tidb_tso_client_rpc_mode-从-v840-版本开始引入) 不兼容。启用该功能将导致 [`tidb_tso_client_rpc_mode`](#tidb_tso_client_rpc_mode-从-v840-版本开始引入) 不生效。 ### `tidb_enable_unsafe_substitute` 从 v6.3.0 版本开始引入 @@ -5065,7 +5066,37 @@ Query OK, 0 rows affected, 1 warning (0.00 sec) > **注意:** > -> 如果 PD leader 的 TSO RPC 延迟升高,但其现象并非由 CPU 使用率达到瓶颈而导致(可能存在网络等问题),此时,调高 `tidb_tso_client_batch_max_wait_time` 可能会导致 TiDB 的语句执行延迟上升,影响集群的 QPS 表现。 +> - 如果 PD leader 的 TSO RPC 延迟升高,但其现象并非由 CPU 使用率达到瓶颈而导致(可能存在网络等问题),此时,调高 `tidb_tso_client_batch_max_wait_time` 可能会导致 TiDB 的语句执行延迟上升,影响集群的 QPS 表现。 +> - 该功能与 [`tidb_tso_client_rpc_mode`](#tidb_tso_client_rpc_mode-从-v840-版本开始引入) 不兼容。该变量设为非零值将导致 [`tidb_tso_client_rpc_mode`](#tidb_tso_client_rpc_mode-从-v840-版本开始引入) 不生效。 + +### `tidb_tso_client_rpc_mode` 从 v8.4.0 版本开始引入 + +- 作用域:GLOBAL +- 是否持久化到集群:是 +- 是否受 Hint [SET_VAR](/optimizer-hints.md#set_varvar_namevar_value) 控制:否 +- 类型:枚举型 +- 默认值:`DEFAULT` +- 可选值:`DEFAULT`、`PARALLEL`、`PARALLEL-FAST` +- 这个变量用来设置 TiDB 向 PD 发送 TSO RPC 请求时使用的模式。这里的模式将用于控制 TSO RPC 请求是否并行,调节获取 TS 时消耗在请求攒批阶段的时间,从而在某些场景中减少执行查询时等待 TS 阶段的时间。 + + - `DEFAULT`:默认模式。TiDB 会将一段时间内当前节点的所有取 TS 操作攒批到一个 TSO RPC 请求中发送给 PD 批量获取 TS,因而每次取 TS 操作的耗时由等待攒批的时间和进行 RPC 请求的时间组成。在默认模式下,不同的 TSO RPC 请求之间是串行进行的,每个取 TS 操作的平均耗时是实际 TSO RPC 耗时的 1.5 倍左右。 + - `PARALLEL`:并行模式。在该模式下,TiDB 会尝试将每次攒批的时间缩短到默认模式的 1/2 左右,并尽可能保持两个 TSO RPC 请求同时进行。这样,每个取 TS 的操作的平均耗时理论上最多能缩短到实际 TSO RPC 耗时的 1.25 倍左右,即默认模式的 83% 左右。但是,攒批的效果会降低,TSO RPC 请求的数量会上升到默认模式的两倍左右。 + - `PARALLEL-FAST`:快速并行模式。与 `PARALLEL` 模式类似,在该模式下,TiDB 会尝试将每次攒批的时间缩短到默认模式 1/4 左右,并尽可能保持 4 个 TSO RPC 请求同时进行。这样,每个取 TS 操作的平均耗时理论上最多能缩短到实际 TSO RPC 耗时的 1.125 倍左右,即默认模式的 75% 左右。但是,攒批的效果会进一步降低,TSO RPC 请求的数量会上升到默认模式的 4 倍左右。 + +- 当满足以下条件时,可以考虑将该变量设置为 `PARALLEL` 或 `PARALLEL-FAST` 来获得一定的性能提升: + + - TSO 等待时间在 SQL 查询的整体耗时中占比显著。 + - PD 的 TSO 分配未达到瓶颈。 + - PD 和 TiDB 节点的 CPU 资源比较充足。 + - TiDB 到 PD 的网络延迟显著高于 PD 进行 TSO 分配的耗时,即 TSO RPC 请求的耗时主要由网络延迟构成。 + - TSO RPC 请求的耗时可以通过 Grafana 的 TiDB 面板中 PD Client 分类下的 **PD TSO RPC Duration** 查看。 + - PD 进行 TSO 分配的耗时可以通过 Grafana 的 PD 面板中 TiDB 分类下的 **PD server TSO handle duration** 查看。 + - 可以接受 TiDB 到 PD 的 TSO RPC 请求的数量增加 2 倍(对于 `PARALLEL` 模式)或 4 倍(对于 `PARALLEL-FAST`)所带来的额外网络流量。 + +> **注意:** +> +> - `PARALLEL` 和 `PARALLEL-FAST` 这两种模式与 [`tidb_tso_client_batch_max_wait_time`](#tidb_tso_client_batch_max_wait_time-从-v530-版本开始引入) 和 [`tidb_enable_tso_follower_proxy`](#tidb_enable_tso_follower_proxy-从-v530-版本开始引入) 不兼容。如果 [`tidb_tso_client_batch_max_wait_time`](#tidb_tso_client_batch_max_wait_time-从-v530-版本开始引入) 被设为非零值或者 [`tidb_enable_tso_follower_proxy`](#tidb_enable_tso_follower_proxy-从-v530-版本开始引入) 被启用,则 `tidb_tso_client_rpc_mode` 的设置不会生效,并按照 `DEFAULT` 模式执行。 +> - `PARALLEL` 和 `PARALLEL-FAST` 主要用于降低 TiDB 取 TS 操作的平均耗时。对于某些延迟波动较大的情况,如长尾、尖刺问题,这两种模式可能无法带来显著性能改善。 ### `tidb_ttl_delete_rate_limit` 从 v6.5.0 版本开始引入