Skip to content

Commit

Permalink
system var: Active PD follower for handling region request (pingcap#1…
Browse files Browse the repository at this point in the history
  • Loading branch information
CabinfeverB authored Jan 19, 2024
1 parent 960d0fd commit ad005ac
Show file tree
Hide file tree
Showing 2 changed files with 34 additions and 3 deletions.
18 changes: 17 additions & 1 deletion system-variables.md
Original file line number Diff line number Diff line change
Expand Up @@ -711,6 +711,22 @@ mysql> SHOW GLOBAL VARIABLES LIKE 'max_prepared_stmt_count';
- 范围:`[0, 4294967295]`
- 该变量用于建立密码重用策略,使 TiDB 基于经过时间限制密码重复使用。该变量默认值为 0,表示禁用基于密码经过时间的密码重用策略。当设置该变量为一个正整数 N 时,表示不允许重复使用最近 N 天内使用过的密码。

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

> **警告:**
>
> [Active PD Follower](/tune-region-performance.md#通过-active-pd-follower-提升-pd-region-信息查询服务的扩展能力) 目前为实验特性,不建议在生产环境中使用。该功能可能会在未事先通知的情况下发生变化或删除。如果发现 bug,请在 GitHub 上提 [issue](https://github.com/pingcap/tidb/issues) 反馈。
- 作用域:GLOBAL
- 是否持久化到集群:是
- 是否受 Hint [SET_VAR](/optimizer-hints.md#set_varvar_namevar_value) 控制:否
- 类型:布尔型
- 默认值:`OFF`
- 这个变量用于控制是否开启 Active PD Follower 特性(目前该特性只适用于处理获取 Region 信息的相关请求)。当该值为 `OFF` 时,TiDB 仅从 PD leader 获取 Region 信息。当该值为 `ON` 时,TiDB 在获取 Region 信息时会将请求均匀地发送到所有 PD 节点上,因此 PD follower 也可以处理 Region 信息请求,从而减轻 PD leader 的 CPU 压力。
- 适合开启 Active PD Follower 的场景:
- 集群 Region 数量较多,PD leader 由于处理心跳和调度任务的开销大,导致 CPU 资源紧张。
- 集群中 TiDB 实例数量较多,Region 信息请求并发量较大,PD leader CPU 压力大。

### `plugin_dir`

- 作用域:GLOBAL
Expand Down Expand Up @@ -2319,7 +2335,7 @@ Query OK, 0 rows affected (0.09 sec)
- 是否受 Hint [SET_VAR](/optimizer-hints.md#set_varvar_namevar_value) 控制:否
- 类型:布尔型
- 默认值:`OFF`
- 这个变量用来开启 TSO Follower Proxy 特性。当该值为 `OFF` 时,TiDB 仅会从 PD leader 获取 TSO。开启该特性之后,TiDB 在获取 TSO 时会将请求均匀地发送到所有 PD 节点上,通过 PD follower 转发 TSO 请求,从而降低 PD leader 的 CPU 压力。
- 这个变量用于控制是否开启 TSO Follower Proxy 特性。当该值为 `OFF` 时,TiDB 仅会从 PD leader 获取 TSO。当该值为 `ON`,TiDB 在获取 TSO 时会将请求均匀地发送到所有 PD 节点上,因此 PD follower 也可以处理 TSO 请求,从而减轻 PD leader 的 CPU 压力。
- 适合开启 TSO Follower Proxy 的场景:
* PD leader 因高压力的 TSO 请求而达到 CPU 瓶颈,导致 TSO RPC 请求的延迟较高。
* 集群中的 TiDB 实例数量较多,且调高 [`tidb_tso_client_batch_max_wait_time`](/system-variables.md#tidb_tso_client_batch_max_wait_time-从-v530-版本开始引入) 并不能缓解 TSO RPC 请求延迟高的问题。
Expand Down
19 changes: 17 additions & 2 deletions tune-region-performance.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ summary: 了解如何通过调整 Region 大小等方法对 Region 进行性能

# Region 性能调优

本文介绍了如何通过调整 Region 大小等方法对 Region 进行性能调优以及如何在大 Region 下使用 bucket 进行并发查询优化。
本文介绍了如何通过调整 Region 大小等方法对 Region 进行性能调优以及如何在大 Region 下使用 bucket 进行并发查询优化。同时,本文还介绍了通过开启 Active PD Follower 特性来提升 PD 为 TiDB 节点提供 Region 信息的服务能力。

## 概述

Expand Down Expand Up @@ -33,4 +33,19 @@ Region 的大小可以通过 [`coprocessor.region-split-size`](/tikv-configurati
>
> 当前该功能为实验特性,不建议在生产环境中使用。
Region 调大以后,如需进一步提高查询的并发度,可以设置 [`coprocessor.enable-region-bucket`](/tikv-configuration-file.md#enable-region-bucket-从-v610-版本开始引入)`true`。这个配置会将每个 Region 划分为更小的区间 bucket,并且以这个更小的区间作为并发查询单位,以提高扫描数据的并发度。bucket 的大小通过 [`coprocessor.region-bucket-size`](/tikv-configuration-file.md#region-bucket-size-从-v610-版本开始引入) 来控制。
Region 调大以后,如需进一步提高查询的并发度,可以设置 [`coprocessor.enable-region-bucket`](/tikv-configuration-file.md#enable-region-bucket-从-v610-版本开始引入)`true`。这个配置会将每个 Region 划分为更小的区间 bucket,并且以这个更小的区间作为并发查询单位,以提高扫描数据的并发度。bucket 的大小通过 [`coprocessor.region-bucket-size`](/tikv-configuration-file.md#region-bucket-size-从-v610-版本开始引入) 来控制。

## 通过 Active PD Follower 提升 PD Region 信息查询服务的扩展能力

> **警告:**
>
> Active PD Follower 目前为实验特性,不建议在生产环境中使用。该功能可能会在未事先通知的情况下发生变化或删除。如果发现 bug,请在 GitHub 上提 [issue](https://github.com/pingcap/tidb/issues) 反馈。
当集群的 Region 数量较多时,PD leader 处理心跳和调度任务的开销也较大,可能导致 CPU 资源紧张。如果同时集群中的 TiDB 实例数量较多,查询 Region 信息请求并发量较大,PD leader CPU 压力将变得更大,可能会造成 PD 服务不可用。

为确保服务的高可用性,PD leader 会将 Region 信息实时同步给 PD follower。PD follower 在内存中维护保存 Region 信息,从而具备处理 Region 信息请求的能力。你可以通过设置系统变量 [`pd_enable_follower_handle_region`](/system-variables.md#pd_enable_follower_handle_region-从-v760-版本开始引入) 开启 Active PD Follower 特性。启用该特性后,TiDB 在获取 Region 信息时会将请求均匀地发送到所有 PD 节点上,使 PD follower 也可以直接处理 Region 请求,从而降低减轻 PD leader 的 CPU 压力。

PD 通过维护 Region 同步流的状态,并结合 TiKV client-go 的 fallback 机制,确保 TiDB 中的 Region 信息始终是最新的。

- 当 PD leader 与 follower 之间网络不稳定或 follower 不可用导致 Region 同步流断开时,PD follower 将拒绝处理 Region 请求。此时,TiDB 会自动向 PD leader 重试请求,并将该 follower 暂时标记为不可用状态。
- 当网络稳定时,由于 PD leader 和 follower 之间的同步可能存在延迟,从 follower 获取的部分 Region 信息可能是过时的。在这种情况下,如果 Region 对应的 KV Request 失败,TiDB 会重新向 PD leader 请求最新的 Region 信息,并再次向 TiKV 发送 KV Request。

0 comments on commit ad005ac

Please sign in to comment.