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 the doc of BR batch create table #8786

Merged
23 changes: 14 additions & 9 deletions br/br-batch-create-table.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,14 +5,14 @@ summary: 了解如何使用 BR 批量建表功能。在恢复备份数据时,B

# BR 批量建表

使用 Backup & Restore (BR) 执行数据恢复任务时,BR 会先在下游 TiDB 集群创建库和表,再进行数据恢复。TiDB v6.0 之前,在数据恢复阶段创建表时,BR 采用了[串行执行](#实现原理)的方案。然而,当需要恢复的数据中带有大量的表(约 50000 张)时,该方案会在创建表上消耗较多时间。
使用 Backup & Restore (BR) 执行数据恢复任务时,BR 会先在目标 TiDB 集群上创建库和表,再进行数据恢复。TiDB v6.0.0 之前,在数据恢复阶段创建表时,BR 采用了[串行执行](#实现原理)的方案。然而,当需要恢复的数据中带有大量的表(约 50000 张)时,该方案会在创建表上消耗较多时间。

为了通过加快创建表的速度和减少数据恢复的时间,从 TiDB v6.0 起,BR 引入了批量建表功能,此功能默认开启。
为了加快创建表的速度,以减少数据恢复的时间,TiDB v6.0.0 中引入了 BR 批量建表功能,此功能默认开启。

> **注意:**
>
> - 为使用 BR 建表功能,TiDB 和 BR 都必须为 v6.0 或以上版本。如果 TiDB 或 BR 的任意一方的版本低于 v6.0,BR 会采用原来的串行建表方案。
> - 如果你在使用 TiUP 等集群管理工具,而且你使用的 TiDB 和 BR 是 v6.0 或以上版本,或是从 v6.0 以下版本升级至该版本,此时,BR 会默认开启批量建表功能,你不需要额外进行相关配置。
> - 为使用 BR 建表功能,TiDB 和 BR 都必须为 v6.0.0 或以上版本。如果 TiDB 或 BR 的任意一方的版本低于 v6.0.0,BR 会采用原来的串行建表方案。
> - 如果你在使用 TiUP 等集群管理工具,而且你使用的 TiDB 和 BR 是 v6.0.0 或以上版本,或是从 v6.0.0 以下版本升级至该版本,此时,BR 会默认开启批量建表功能,你不需要额外进行相关配置。

## 使用场景

Expand All @@ -22,9 +22,9 @@ summary: 了解如何使用 BR 批量建表功能。在恢复备份数据时,B

## 使用方法

BR 默认开启了批量建表功能,在 v6.0 或以上版本中默认设置了 `--ddl-batch-size=128`(即 BR 以 128 张表为一批,并发创建多批表),以加快恢复时的建表速度。因此,你不需要额外配置该参数。
BR 默认开启了批量建表功能,在 v6.0.0 或以上版本中默认设置了 `--ddl-batch-size=128`(即 BR 以 128 张表为一批,并发创建多批表),以加快恢复时的建表速度。因此,你不需要额外配置该参数。

如果需要关闭此功能,你可以通过以下命令将 `--ddl-batch-size` 的值设置为 `0`:
如果需要关闭此功能,你可以参考以下命令将 `--ddl-batch-size` 的值设置为 `0`:

{{< copyable "shell-regular" >}}

Expand All @@ -36,12 +36,17 @@ br restore full -s local:///br_data/ --pd 172.16.5.198:2379 --log-file restore.l

## 实现原理

- v6.0 前的串行建表方案:在 v6.0 之前的版本,BR 采用了串行建表方案。在使用 BR 执行数据恢复任务时,BR 会先在目标 TiDB 创建库和表后,再开始进行数据恢复。建表时,BR 会在调用 TiDB 接口后,使用 SQL 语句 `Create Table` 创建表。建表任务由 TiDB DDL owner 依次串行执行。在每张表被创建时,各会引起一次 schema 版本的变更,而每次的 schema 版本的变更都需要同步到其他 BR 和其他 TiDB DDL worker。因此,当需要创建的表的数量比较多时,串行建表方案会导致建表时间过长。
- v6.0 起的批量建表方案:批量建表功能采用了并发批量建表方案。从 v6.0 起,在默认情况下,BR 会以 128 张表为一批,并发创建多批表。采用该方案后,BR 每建一批表时,TiDB schema 版本只会变更一次。此方法极大地提高了建表速度。
- v6.0.0 前的串行建表方案:

在使用 BR 执行数据恢复任务时,BR 会先在目标 TiDB 集群创建库和表后,再开始进行数据恢复。建表时,BR 会调用 TiDB 内部 API 后创建表,其运作方式看似像 BR 在执行 SQL `Create Table` 语句。建表任务由 TiDB DDL owner 依次串行执行。在每张表被创建时,各会引起一次 DDL schema 版本的变更,而每次的 schema 版本的变更都需要同步到其他 TiDB DDL worker(含 BR)。因此,当需要创建的表的数量比较多时,串行建表方案会导致建表时间过长。

- v6.0.0 起的批量建表方案:

从 v6.0.0 起,在默认情况下,BR 会以 128 张表为一批,并发创建多批表。采用该方案后,BR 每建一批表时,TiDB schema 版本只会变更一次。此方法极大地提高了建表速度。

## 功能测试

以下是在 TiDB v6.0 集群中测试批量建表功能的内容。具体的测试环境如下:
以下是在 TiDB v6.0.0 集群中测试批量建表功能的内容。具体的测试环境如下:

- 集群配置:
- 15 个 TiKV 实例,每个 TiKV 实例共有 16 个 CPU 核心、80 GB 内存、16 个处理 RPC 请求的线程(即 [`import.num-threads`](/tikv-configuration-file.md#num-threads) = 16)
Expand Down