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 doc related to fast-create #18214

Merged
merged 10 commits into from
Aug 14, 2024
Merged
Show file tree
Hide file tree
Changes from 6 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 2 additions & 18 deletions accelerated-table-creation.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,9 @@ aliases: ['/zh/tidb/dev/ddl-v2/']

TiDB v7.6.0 引入了系统变量 [`tidb_ddl_version`](https://docs.pingcap.com/zh/tidb/v7.6/system-variables#tidb_ddl_version-从-v760-版本开始引入) 实现支持加速建表,可提升大批量建表的速度。从 v8.0.0 开始,该系统变量更名为 [`tidb_enable_fast_create_table`](/system-variables.md#tidb_enable_fast_create_table-从-v800-版本开始引入)。

TiDB 中,对元数据对象的更改采用的是 online DDL 算法(即在线异步变更算法)。所有的 DDL Job 会提交到 `mysql.tidb_ddl_job` 表里,由 owner 节点拉取 DDL Job,执行完 online DDL 算法中的各个阶段后,将该 DDL Job 标记为已完成,移入 `mysql.tidb_ddl_history` 表中。因此 DDL 只能在 owner 节点执行,无法线性拓展
开启加速建表后,同时提交到同一个 TiDB 节点的相同 schema 的建表语句会被合并为批量建表语句,以提高建表性能。因此为了提高建表性能,需要尽量连接相同的 TiDB 节点并发创建同一个 schema 下的表,并适当提高并发度
hfxsd marked this conversation as resolved.
Show resolved Hide resolved

然而,对于某些 DDL 而言,并不需要严格按照 online DDL 算法执行。如 `CREATE TABLE` 语句,Job 只有 `none` 和 `public` 两个状态,因此可以简化 DDL 的运行流程,使得建表语句可以在非 owner 节点执行,从而实现加速建表
合并后的批量建表语句在同一个事务内执行,如果其中一个失败,所有语句都会失败
hfxsd marked this conversation as resolved.
Show resolved Hide resolved

> **警告:**
>
Expand Down Expand Up @@ -39,19 +39,3 @@ SET GLOBAL tidb_enable_fast_create_table = ON;
```sql
SET GLOBAL tidb_enable_fast_create_table = OFF;
```

## 实现原理

TiDB 加速建表的实现步骤如下:

1. 创建 `CREATE TABLE` Job。

通过解析 `CREATE TABLE` 语句生成相应的 DDL Job。

2. 执行 `CREATE TABLE` Job。

由接收该 `CREATE TABLE` 语句的 TiDB 节点直接执行建表语句,将表结构持久化到 TiKV 中。同时,将 `CREATE TABLE` Job 标记为已完成,插入到 `mysql.tidb_ddl_history` 表中。

3. 同步表信息。

TiDB 通知其他节点同步该新建的表结构。
1 change: 1 addition & 0 deletions upgrade-tidb-using-tiup.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ summary: TiUP 可用于 TiDB 升级。升级过程中需注意不支持 TiFlash
> 3. 集群中有 DDL 语句正在被执行时(通常为 `ADD INDEX` 和列类型变更等耗时较久的 DDL 语句),**请勿进行**升级操作。在升级前,建议使用 [`ADMIN SHOW DDL`](/sql-statements/sql-statement-admin-show-ddl.md) 命令查看集群中是否有正在进行的 DDL Job。如需升级,请等待 DDL 执行完成或使用 [`ADMIN CANCEL DDL`](/sql-statements/sql-statement-admin-cancel-ddl.md) 命令取消该 DDL Job 后再进行升级。
> 4. 从 TiDB v7.1 版本升级至更高的版本时,可以不遵循上面的限制 2 和 3,请参考[平滑升级 TiDB 的限制](/smooth-upgrade-tidb.md#使用限制)。
> 5. 在使用 TiUP 升级 TiDB 集群之前,务必阅读[用户操作限制](/smooth-upgrade-tidb.md#用户操作限制)。
> 6. 如果当前集群版本为 TiDB v7.6.0 - v8.2.0,升级目标版本为 v8.3.0 或更高版本,并且开启了加速建表 [`tidb_enable_fast_create_table`](/system-variables.md#tidb_enable_fast_create_table-new-in-v800) 特性,请先关闭该特性,等升级完成后再按需开启。否则集群中会残留部分该特性新增的元数据 KV。从 v8.3.0 开始,对该特性做了优化,升级到高更高版本,不会再产生并残留该类元数据 KV。
hfxsd marked this conversation as resolved.
Show resolved Hide resolved

> **注意:**
>
Expand Down
Loading