From 27bffa6ec9d2a9c1cc45afeac74b10f4d60ee01c Mon Sep 17 00:00:00 2001 From: Frank945946 <108602632+Frank945946@users.noreply.github.com> Date: Thu, 16 Nov 2023 16:45:48 +0800 Subject: [PATCH 01/31] GA- tidb-distributed-execution-framework (#15448) --- system-variables.md | 4 ---- tidb-distributed-execution-framework.md | 4 ---- 2 files changed, 8 deletions(-) diff --git a/system-variables.md b/system-variables.md index b993f6717229..1880080bf168 100644 --- a/system-variables.md +++ b/system-variables.md @@ -1396,10 +1396,6 @@ mysql> SELECT job_info FROM mysql.analyze_jobs ORDER BY end_time DESC LIMIT 1; ### `tidb_enable_dist_task` 从 v7.1.0 版本开始引入 -> **警告:** -> -> 该功能目前为实验特性,不建议在生产环境中使用。 - - 作用域:GLOBAL - 是否持久化到集群:是 - 是否受 Hint [SET_VAR](/optimizer-hints.md#set_varvar_namevar_value) 控制:否 diff --git a/tidb-distributed-execution-framework.md b/tidb-distributed-execution-framework.md index 53193c1313d6..242f6c2b9bc0 100644 --- a/tidb-distributed-execution-framework.md +++ b/tidb-distributed-execution-framework.md @@ -5,10 +5,6 @@ summary: 了解 TiDB 后端任务分布式框架的使用场景与限制、使 # TiDB 后端任务分布式框架 -> **警告:** -> -> 当前该功能为实验特性,不建议在生产环境中使用。 - TiDB 采用计算存储分离架构,具有出色的扩展性和弹性的扩缩容能力。从 v7.1.0 开始,TiDB 引入了一个后端任务分布式执行框架,以进一步发挥分布式架构的资源优势。该框架的目标是实现对所有后端任务的统一调度与分布式执行,并为接入的后端任务提供统一的资源管理能力,从整体和单个后端任务两个维度提供资源管理的能力,更好地满足用户对于资源使用的预期。 本文档介绍了 TiDB 后端任务分布式框架的使用场景与限制、使用方法和实现原理。 From 18ba66ac1ffc6075899fd1a9e052ffb97aeaae40 Mon Sep 17 00:00:00 2001 From: Aolin Date: Mon, 20 Nov 2023 14:56:40 +0800 Subject: [PATCH 02/31] develop: fix broken links (#15456) --- develop/dev-guide-sample-application-golang-gorm.md | 2 +- develop/dev-guide-sample-application-golang-sql-driver.md | 2 +- develop/dev-guide-sample-application-java-hibernate.md | 2 +- develop/dev-guide-sample-application-java-jdbc.md | 2 +- develop/dev-guide-sample-application-java-mybatis.md | 2 +- develop/dev-guide-sample-application-java-spring-boot.md | 2 +- develop/dev-guide-sample-application-nodejs-mysql2.md | 2 +- develop/dev-guide-sample-application-nodejs-mysqljs.md | 2 +- develop/dev-guide-sample-application-nodejs-prisma.md | 2 +- develop/dev-guide-sample-application-nodejs-typeorm.md | 2 +- develop/dev-guide-sample-application-python-django.md | 2 +- develop/dev-guide-sample-application-python-mysql-connector.md | 2 +- develop/dev-guide-sample-application-python-mysqlclient.md | 2 +- develop/dev-guide-sample-application-python-peewee.md | 2 +- develop/dev-guide-sample-application-python-pymysql.md | 2 +- develop/dev-guide-sample-application-python-sqlalchemy.md | 2 +- develop/dev-guide-sample-application-ruby-mysql2.md | 2 +- develop/dev-guide-sample-application-ruby-rails.md | 2 +- 18 files changed, 18 insertions(+), 18 deletions(-) diff --git a/develop/dev-guide-sample-application-golang-gorm.md b/develop/dev-guide-sample-application-golang-gorm.md index 495bae367139..7ac7ea942bd1 100644 --- a/develop/dev-guide-sample-application-golang-gorm.md +++ b/develop/dev-guide-sample-application-golang-gorm.md @@ -225,7 +225,7 @@ db.Delete(&Player{ID: "id"}) - 关于 GORM 的更多使用方法,可以参考 [GORM 官方文档](https://gorm.io/zh_CN/docs/index.html) 及 GORM 官方文档中的 [TiDB 章节](https://gorm.io/zh_CN/docs/connecting_to_the_database.html#TiDB)。 - 你可以继续阅读开发者文档,以获取更多关于 TiDB 应用开发的最佳实践。例如:[插入数据](/develop/dev-guide-insert-data.md)、[更新数据](/develop/dev-guide-update-data.md)、[删除数据](/develop/dev-guide-delete-data.md)、[单表读取](/develop/dev-guide-get-data-from-single-table.md)、[事务](/develop/dev-guide-transaction-overview.md)、[SQL 性能优化](/develop/dev-guide-optimize-sql-overview.md)等。 -- 如果你更倾向于参与课程进行学习,我们也提供专业的 [TiDB 开发者课程](https://cn.pingcap.com/courses-catalog/back-end-developer/?utm_source=docs-cn-dev-guide)支持,并在考试后提供相应的[资格认证](https://learn.pingcap.com/learner/certification-center)。 +- 如果你更倾向于参与课程进行学习,我们也提供专业的 [TiDB 开发者课程](https://cn.pingcap.com/courses-catalog/category/back-end-developer/?utm_source=docs-cn-dev-guide)支持,并在考试后提供相应的[资格认证](https://learn.pingcap.com/learner/certification-center)。 ## 需要帮助? diff --git a/develop/dev-guide-sample-application-golang-sql-driver.md b/develop/dev-guide-sample-application-golang-sql-driver.md index ae1fc25c24e0..ab25e9022ae5 100644 --- a/develop/dev-guide-sample-application-golang-sql-driver.md +++ b/develop/dev-guide-sample-application-golang-sql-driver.md @@ -275,7 +275,7 @@ Golang 驱动程序提供对数据库的底层访问,但要求开发者: - 关于 Go-MySQL-Driver 的更多使用方法,可以参考 [Go-MySQL-Driver 官方文档](https://github.com/go-sql-driver/mysql/blob/master/README.md)。 - 你可以继续阅读开发者文档,以获取更多关于 TiDB 应用开发的最佳实践。例如:[插入数据](/develop/dev-guide-insert-data.md)、[更新数据](/develop/dev-guide-update-data.md)、[删除数据](/develop/dev-guide-delete-data.md)、[单表读取](/develop/dev-guide-get-data-from-single-table.md)、[事务](/develop/dev-guide-transaction-overview.md)、[SQL 性能优化](/develop/dev-guide-optimize-sql-overview.md)等。 -- 如果你更倾向于参与课程进行学习,我们也提供专业的 [TiDB 开发者课程](https://cn.pingcap.com/courses-catalog/back-end-developer/?utm_source=docs-cn-dev-guide)支持,并在考试后提供相应的[资格认证](https://learn.pingcap.com/learner/certification-center)。 +- 如果你更倾向于参与课程进行学习,我们也提供专业的 [TiDB 开发者课程](https://cn.pingcap.com/courses-catalog/category/back-end-developer/?utm_source=docs-cn-dev-guide)支持,并在考试后提供相应的[资格认证](https://learn.pingcap.com/learner/certification-center)。 ## 需要帮助? diff --git a/develop/dev-guide-sample-application-java-hibernate.md b/develop/dev-guide-sample-application-java-hibernate.md index 40439695b421..5ff28ee21108 100644 --- a/develop/dev-guide-sample-application-java-hibernate.md +++ b/develop/dev-guide-sample-application-java-hibernate.md @@ -246,7 +246,7 @@ try (Session session = sessionFactory.openSession()) { - 关于 Hibernate 的更多使用方法,可以参考 [Hibernate 官方文档](https://hibernate.org/orm/documentation)。 - 你可以继续阅读开发者文档,以获取更多关于 TiDB 应用开发的最佳实践。例如:[插入数据](/develop/dev-guide-insert-data.md)、[更新数据](/develop/dev-guide-update-data.md)、[删除数据](/develop/dev-guide-delete-data.md)、[单表读取](/develop/dev-guide-get-data-from-single-table.md)、[事务](/develop/dev-guide-transaction-overview.md)、[SQL 性能优化](/develop/dev-guide-optimize-sql-overview.md)等。 -- 如果你更倾向于参与课程进行学习,我们也提供专业的 [TiDB 开发者课程](https://cn.pingcap.com/courses-catalog/back-end-developer/?utm_source=docs-cn-dev-guide)支持,并在考试后提供相应的[资格认证](https://learn.pingcap.com/learner/certification-center)。 +- 如果你更倾向于参与课程进行学习,我们也提供专业的 [TiDB 开发者课程](https://cn.pingcap.com/courses-catalog/category/back-end-developer/?utm_source=docs-cn-dev-guide)支持,并在考试后提供相应的[资格认证](https://learn.pingcap.com/learner/certification-center)。 - 我们还额外提供针对 Java 开发者的课程:[使用 Connector/J - TiDB v6](https://learn.pingcap.com/learner/course/840002/?utm_source=docs-cn-dev-guide) 及[在 TiDB 上开发应用的最佳实践 - TiDB v6](https://learn.pingcap.com/learner/course/780002/?utm_source=docs-cn-dev-guide)。 ## 需要帮助? diff --git a/develop/dev-guide-sample-application-java-jdbc.md b/develop/dev-guide-sample-application-java-jdbc.md index aae478fa728e..8dc25f5b0eac 100644 --- a/develop/dev-guide-sample-application-java-jdbc.md +++ b/develop/dev-guide-sample-application-java-jdbc.md @@ -280,7 +280,7 @@ Java 驱动程序提供对数据库的底层访问,但要求开发者: - 关于 MySQL Connector/J 的更多使用方法,可以参考 [MySQL Connector/J 官方文档](https://dev.mysql.com/doc/connector-j/8.1/en/)。 - 你可以继续阅读开发者文档,以获取更多关于 TiDB 应用开发的最佳实践。例如:[插入数据](/develop/dev-guide-insert-data.md)、[更新数据](/develop/dev-guide-update-data.md)、[删除数据](/develop/dev-guide-delete-data.md)、[单表读取](/develop/dev-guide-get-data-from-single-table.md)、[事务](/develop/dev-guide-transaction-overview.md)、[SQL 性能优化](/develop/dev-guide-optimize-sql-overview.md)等。 -- 如果你更倾向于参与课程进行学习,我们也提供专业的 [TiDB 开发者课程](https://cn.pingcap.com/courses-catalog/back-end-developer/?utm_source=docs-cn-dev-guide)支持,并在考试后提供相应的[资格认证](https://learn.pingcap.com/learner/certification-center)。 +- 如果你更倾向于参与课程进行学习,我们也提供专业的 [TiDB 开发者课程](https://cn.pingcap.com/courses-catalog/category/back-end-developer/?utm_source=docs-cn-dev-guide)支持,并在考试后提供相应的[资格认证](https://learn.pingcap.com/learner/certification-center)。 - 我们还额外提供针对 Java 开发者的课程:[使用 Connector/J - TiDB v6](https://learn.pingcap.com/learner/course/840002/?utm_source=docs-cn-dev-guide) 及[在 TiDB 上开发应用的最佳实践 - TiDB v6](https://learn.pingcap.com/learner/course/780002/?utm_source=docs-cn-dev-guide)。 ## 需要帮助? diff --git a/develop/dev-guide-sample-application-java-mybatis.md b/develop/dev-guide-sample-application-java-mybatis.md index a6671ed02c23..ce28fba352b5 100644 --- a/develop/dev-guide-sample-application-java-mybatis.md +++ b/develop/dev-guide-sample-application-java-mybatis.md @@ -296,7 +296,7 @@ public SqlSessionFactory getSessionFactory() { - 关于 MyBatis 的更多使用方法,可以参考 [MyBatis 官方文档](http://www.mybatis.org/mybatis-3/)。 - 你可以继续阅读开发者文档,以获取更多关于 TiDB 应用开发的最佳实践。例如:[插入数据](/develop/dev-guide-insert-data.md)、[更新数据](/develop/dev-guide-update-data.md)、[删除数据](/develop/dev-guide-delete-data.md)、[单表读取](/develop/dev-guide-get-data-from-single-table.md)、[事务](/develop/dev-guide-transaction-overview.md)、[SQL 性能优化](/develop/dev-guide-optimize-sql-overview.md)等。 -- 如果你更倾向于参与课程进行学习,我们也提供专业的 [TiDB 开发者课程](https://cn.pingcap.com/courses-catalog/back-end-developer/?utm_source=docs-cn-dev-guide)支持,并在考试后提供相应的[资格认证](https://learn.pingcap.com/learner/certification-center)。 +- 如果你更倾向于参与课程进行学习,我们也提供专业的 [TiDB 开发者课程](https://cn.pingcap.com/courses-catalog/category/back-end-developer/?utm_source=docs-cn-dev-guide)支持,并在考试后提供相应的[资格认证](https://learn.pingcap.com/learner/certification-center)。 - 我们还额外提供针对 Java 开发者的课程:[使用 Connector/J - TiDB v6](https://learn.pingcap.com/learner/course/840002/?utm_source=docs-cn-dev-guide) 及[在 TiDB 上开发应用的最佳实践 - TiDB v6](https://learn.pingcap.com/learner/course/780002/?utm_source=docs-cn-dev-guide)。 ## 需要帮助? diff --git a/develop/dev-guide-sample-application-java-spring-boot.md b/develop/dev-guide-sample-application-java-spring-boot.md index eba7811eb443..4213b46603cd 100644 --- a/develop/dev-guide-sample-application-java-spring-boot.md +++ b/develop/dev-guide-sample-application-java-spring-boot.md @@ -249,7 +249,7 @@ playerRepository.deleteById(id); - [Spring Data JPA 官方文档](https://spring.io/projects/spring-data-jpa) - [Hibernate 官方文档](https://hibernate.org/orm/documentation) - 你可以继续阅读开发者文档,以获取更多关于 TiDB 应用开发的最佳实践。例如:[插入数据](/develop/dev-guide-insert-data.md)、[更新数据](/develop/dev-guide-update-data.md)、[删除数据](/develop/dev-guide-delete-data.md)、[单表读取](/develop/dev-guide-get-data-from-single-table.md)、[事务](/develop/dev-guide-transaction-overview.md)、[SQL 性能优化](/develop/dev-guide-optimize-sql-overview.md)等。 -- 如果你更倾向于参与课程进行学习,我们也提供专业的 [TiDB 开发者课程](https://cn.pingcap.com/courses-catalog/back-end-developer/?utm_source=docs-cn-dev-guide)支持,并在考试后提供相应的[资格认证](https://learn.pingcap.com/learner/certification-center)。 +- 如果你更倾向于参与课程进行学习,我们也提供专业的 [TiDB 开发者课程](https://cn.pingcap.com/courses-catalog/category/back-end-developer/?utm_source=docs-cn-dev-guide)支持,并在考试后提供相应的[资格认证](https://learn.pingcap.com/learner/certification-center)。 - 我们还额外提供针对 Java 开发者的课程:[使用 Connector/J - TiDB v6](https://learn.pingcap.com/learner/course/840002/?utm_source=docs-cn-dev-guide) 及[在 TiDB 上开发应用的最佳实践 - TiDB v6](https://learn.pingcap.com/learner/course/780002/?utm_source=docs-cn-dev-guide)。 ## 需要帮助? diff --git a/develop/dev-guide-sample-application-nodejs-mysql2.md b/develop/dev-guide-sample-application-nodejs-mysql2.md index 573b74b96ac9..e49a7502b92f 100644 --- a/develop/dev-guide-sample-application-nodejs-mysql2.md +++ b/develop/dev-guide-sample-application-nodejs-mysql2.md @@ -285,4 +285,4 @@ console.log(rsh.affectedRows); - 关于 node-mysql2 的更多使用方法,可以参考 [node-mysql2 的 GitHub 仓库](https://github.com/sidorares/node-mysql2)。 - 你可以继续阅读开发者文档的其它章节来获取更多 TiDB 应用开发的最佳实践。例如:[插入数据](/develop/dev-guide-insert-data.md),[更新数据](/develop/dev-guide-update-data.md),[删除数据](/develop/dev-guide-delete-data.md),[单表读取](/develop/dev-guide-get-data-from-single-table.md),[事务](/develop/dev-guide-transaction-overview.md),[SQL 性能优化](/develop/dev-guide-optimize-sql-overview.md)等。 -- 如果你更倾向于参与课程进行学习,我们也提供专业的 [TiDB 开发者课程](https://cn.pingcap.com/courses-catalog/back-end-developer/?utm_source=docs-cn-dev-guide)支持,并在考试后提供相应的[资格认证](https://learn.pingcap.com/learner/certification-center)。 \ No newline at end of file +- 如果你更倾向于参与课程进行学习,我们也提供专业的 [TiDB 开发者课程](https://cn.pingcap.com/courses-catalog/category/back-end-developer/?utm_source=docs-cn-dev-guide)支持,并在考试后提供相应的[资格认证](https://learn.pingcap.com/learner/certification-center)。 \ No newline at end of file diff --git a/develop/dev-guide-sample-application-nodejs-mysqljs.md b/develop/dev-guide-sample-application-nodejs-mysqljs.md index 3153d53b74ca..b2693a49f201 100644 --- a/develop/dev-guide-sample-application-nodejs-mysqljs.md +++ b/develop/dev-guide-sample-application-nodejs-mysqljs.md @@ -316,4 +316,4 @@ conn.query('DELETE FROM players WHERE id = ?;', [1], (err, ok) => { - 关于 mysql.js 驱动的更多使用方法,可以参考 [mysql.js 的 GitHub 仓库](https://github.com/mysqljs/mysql)。 - 你可以继续阅读开发者文档的其它章节来获取更多 TiDB 应用开发的最佳实践。例如:[插入数据](/develop/dev-guide-insert-data.md),[更新数据](/develop/dev-guide-update-data.md),[删除数据](/develop/dev-guide-delete-data.md),[单表读取](/develop/dev-guide-get-data-from-single-table.md),[事务](/develop/dev-guide-transaction-overview.md),[SQL 性能优化](/develop/dev-guide-optimize-sql-overview.md)等。 -- 如果你更倾向于参与课程进行学习,我们也提供专业的 [TiDB 开发者课程](https://cn.pingcap.com/courses-catalog/back-end-developer/?utm_source=docs-cn-dev-guide)支持,并在考试后提供相应的[资格认证](https://learn.pingcap.com/learner/certification-center)。 \ No newline at end of file +- 如果你更倾向于参与课程进行学习,我们也提供专业的 [TiDB 开发者课程](https://cn.pingcap.com/courses-catalog/category/back-end-developer/?utm_source=docs-cn-dev-guide)支持,并在考试后提供相应的[资格认证](https://learn.pingcap.com/learner/certification-center)。 \ No newline at end of file diff --git a/develop/dev-guide-sample-application-nodejs-prisma.md b/develop/dev-guide-sample-application-nodejs-prisma.md index e5bdf38e8418..18063cdcae94 100644 --- a/develop/dev-guide-sample-application-nodejs-prisma.md +++ b/develop/dev-guide-sample-application-nodejs-prisma.md @@ -358,4 +358,4 @@ await prisma.player.delete({ - 关于 Prisma 的更多使用方法,可以参考 [Prisma 的官方文档](https://www.prisma.io/docs)。 - 你可以继续阅读开发者文档的其它章节来获取更多 TiDB 应用开发的最佳实践。例如:[插入数据](/develop/dev-guide-insert-data.md),[更新数据](/develop/dev-guide-update-data.md),[删除数据](/develop/dev-guide-delete-data.md),[单表读取](/develop/dev-guide-get-data-from-single-table.md),[事务](/develop/dev-guide-transaction-overview.md),[SQL 性能优化](/develop/dev-guide-optimize-sql-overview.md)等。 -- 如果你更倾向于参与课程进行学习,我们也提供专业的 [TiDB 开发者课程](https://cn.pingcap.com/courses-catalog/back-end-developer/?utm_source=docs-cn-dev-guide)支持,并在考试后提供相应的[资格认证](https://learn.pingcap.com/learner/certification-center)。 \ No newline at end of file +- 如果你更倾向于参与课程进行学习,我们也提供专业的 [TiDB 开发者课程](https://cn.pingcap.com/courses-catalog/category/back-end-developer/?utm_source=docs-cn-dev-guide)支持,并在考试后提供相应的[资格认证](https://learn.pingcap.com/learner/certification-center)。 \ No newline at end of file diff --git a/develop/dev-guide-sample-application-nodejs-typeorm.md b/develop/dev-guide-sample-application-nodejs-typeorm.md index b1c76fc0dc4c..e55660130908 100644 --- a/develop/dev-guide-sample-application-nodejs-typeorm.md +++ b/develop/dev-guide-sample-application-nodejs-typeorm.md @@ -360,7 +360,7 @@ export class ActionLog { - 关于 TypeORM 的更多使用方法,可以参考 [TypeORM 的官方文档](https://typeorm.io)。 - 你可以继续阅读开发者文档的其它章节来获取更多 TiDB 应用开发的最佳实践。例如:[插入数据](/develop/dev-guide-insert-data.md),[更新数据](/develop/dev-guide-update-data.md),[删除数据](/develop/dev-guide-delete-data.md),[单表读取](/develop/dev-guide-get-data-from-single-table.md),[事务](/develop/dev-guide-transaction-overview.md),[SQL 性能优化](/develop/dev-guide-optimize-sql-overview.md)等。 -- 如果你更倾向于参与课程进行学习,我们也提供专业的 [TiDB 开发者课程](https://cn.pingcap.com/courses-catalog/back-end-developer/?utm_source=docs-cn-dev-guide)支持,并在考试后提供相应的[资格认证](https://learn.pingcap.com/learner/certification-center)。 +- 如果你更倾向于参与课程进行学习,我们也提供专业的 [TiDB 开发者课程](https://cn.pingcap.com/courses-catalog/category/back-end-developer/?utm_source=docs-cn-dev-guide)支持,并在考试后提供相应的[资格认证](https://learn.pingcap.com/learner/certification-center)。 ## 需要帮助? diff --git a/develop/dev-guide-sample-application-python-django.md b/develop/dev-guide-sample-application-python-django.md index 5229eff5cdbb..203177bd5248 100644 --- a/develop/dev-guide-sample-application-python-django.md +++ b/develop/dev-guide-sample-application-python-django.md @@ -310,7 +310,7 @@ Player.objects.filter(coins=100).delete() - 关于 Django 的更多使用方法,可以参考 [Django 官方文档](https://www.djangoproject.com/)。 - 你可以继续阅读开发者文档,以获取更多关于 TiDB 应用开发的最佳实践。例如:[插入数据](/develop/dev-guide-insert-data.md)、[更新数据](/develop/dev-guide-update-data.md)、[删除数据](/develop/dev-guide-delete-data.md)、[单表读取](/develop/dev-guide-get-data-from-single-table.md)、[事务](/develop/dev-guide-transaction-overview.md)、[SQL 性能优化](/develop/dev-guide-optimize-sql-overview.md)等。 -- 如果你更倾向于参与课程进行学习,我们也提供专业的 [TiDB 开发者课程](https://cn.pingcap.com/courses-catalog/back-end-developer/?utm_source=docs-cn-dev-guide)支持,并在考试后提供相应的[资格认证](https://learn.pingcap.com/learner/certification-center)。 +- 如果你更倾向于参与课程进行学习,我们也提供专业的 [TiDB 开发者课程](https://cn.pingcap.com/courses-catalog/category/back-end-developer/?utm_source=docs-cn-dev-guide)支持,并在考试后提供相应的[资格认证](https://learn.pingcap.com/learner/certification-center)。 ## 需要帮助? diff --git a/develop/dev-guide-sample-application-python-mysql-connector.md b/develop/dev-guide-sample-application-python-mysql-connector.md index 6fb47ac4640c..3831f37ad447 100644 --- a/develop/dev-guide-sample-application-python-mysql-connector.md +++ b/develop/dev-guide-sample-application-python-mysql-connector.md @@ -263,7 +263,7 @@ Python 驱动程序提供对数据库的底层访问,但要求开发者: - 关于 mysql-connector-python 的更多使用方法,可以参考 [MySQL Connector/Python 官方文档](https://dev.mysql.com/doc/connector-python/en/)。 - 你可以继续阅读开发者文档,以获取更多关于 TiDB 应用开发的最佳实践。例如:[插入数据](/develop/dev-guide-insert-data.md)、[更新数据](/develop/dev-guide-update-data.md)、[删除数据](/develop/dev-guide-delete-data.md)、[单表读取](/develop/dev-guide-get-data-from-single-table.md)、[事务](/develop/dev-guide-transaction-overview.md)、[SQL 性能优化](/develop/dev-guide-optimize-sql-overview.md)等。 -- 如果你更倾向于参与课程进行学习,我们也提供专业的 [TiDB 开发者课程](https://cn.pingcap.com/courses-catalog/back-end-developer/?utm_source=docs-cn-dev-guide)支持,并在考试后提供相应的[资格认证](https://learn.pingcap.com/learner/certification-center)。 +- 如果你更倾向于参与课程进行学习,我们也提供专业的 [TiDB 开发者课程](https://cn.pingcap.com/courses-catalog/category/back-end-developer/?utm_source=docs-cn-dev-guide)支持,并在考试后提供相应的[资格认证](https://learn.pingcap.com/learner/certification-center)。 ## 需要帮助? diff --git a/develop/dev-guide-sample-application-python-mysqlclient.md b/develop/dev-guide-sample-application-python-mysqlclient.md index 0e533098ca14..97ed22f96afa 100644 --- a/develop/dev-guide-sample-application-python-mysqlclient.md +++ b/develop/dev-guide-sample-application-python-mysqlclient.md @@ -264,7 +264,7 @@ Python 驱动程序提供对数据库的底层访问,但要求开发者: - 关于 mysqlclient 的更多使用方法,可以参考 [mysqlclient 官方文档](https://mysqlclient.readthedocs.io/)。 - 你可以继续阅读开发者文档,以获取更多关于 TiDB 应用开发的最佳实践。例如:[插入数据](/develop/dev-guide-insert-data.md)、[更新数据](/develop/dev-guide-update-data.md)、[删除数据](/develop/dev-guide-delete-data.md)、[单表读取](/develop/dev-guide-get-data-from-single-table.md)、[事务](/develop/dev-guide-transaction-overview.md)、[SQL 性能优化](/develop/dev-guide-optimize-sql-overview.md)等。 -- 如果你更倾向于参与课程进行学习,我们也提供专业的 [TiDB 开发者课程](https://cn.pingcap.com/courses-catalog/back-end-developer/?utm_source=docs-cn-dev-guide)支持,并在考试后提供相应的[资格认证](https://learn.pingcap.com/learner/certification-center)。 +- 如果你更倾向于参与课程进行学习,我们也提供专业的 [TiDB 开发者课程](https://cn.pingcap.com/courses-catalog/category/back-end-developer/?utm_source=docs-cn-dev-guide)支持,并在考试后提供相应的[资格认证](https://learn.pingcap.com/learner/certification-center)。 ## 需要帮助? diff --git a/develop/dev-guide-sample-application-python-peewee.md b/develop/dev-guide-sample-application-python-peewee.md index e1fcfae6e1e3..a6e1af0ac669 100644 --- a/develop/dev-guide-sample-application-python-peewee.md +++ b/develop/dev-guide-sample-application-python-peewee.md @@ -287,7 +287,7 @@ Player.delete().where(Player.coins == 100).execute() - 关于 peewee 的更多使用方法,可以参考 [peewee 官方文档](https://docs.peewee-orm.com/)。 - 你可以继续阅读开发者文档,以获取更多关于 TiDB 应用开发的最佳实践。例如:[插入数据](/develop/dev-guide-insert-data.md)、[更新数据](/develop/dev-guide-update-data.md)、[删除数据](/develop/dev-guide-delete-data.md)、[单表读取](/develop/dev-guide-get-data-from-single-table.md)、[事务](/develop/dev-guide-transaction-overview.md)、[SQL 性能优化](/develop/dev-guide-optimize-sql-overview.md)等。 -- 如果你更倾向于参与课程进行学习,我们也提供专业的 [TiDB 开发者课程](https://cn.pingcap.com/courses-catalog/back-end-developer/?utm_source=docs-cn-dev-guide)支持,并在考试后提供相应的[资格认证](https://learn.pingcap.com/learner/certification-center)。 +- 如果你更倾向于参与课程进行学习,我们也提供专业的 [TiDB 开发者课程](https://cn.pingcap.com/courses-catalog/category/back-end-developer/?utm_source=docs-cn-dev-guide)支持,并在考试后提供相应的[资格认证](https://learn.pingcap.com/learner/certification-center)。 ## 需要帮助? diff --git a/develop/dev-guide-sample-application-python-pymysql.md b/develop/dev-guide-sample-application-python-pymysql.md index 5b45bdb9a6ed..13c10e7e5316 100644 --- a/develop/dev-guide-sample-application-python-pymysql.md +++ b/develop/dev-guide-sample-application-python-pymysql.md @@ -267,7 +267,7 @@ Python 驱动程序提供对数据库的底层访问,但要求开发者: - 关于 PyMySQL 的更多使用方法,可以参考 [PyMySQL 官方文档](https://pymysql.readthedocs.io)。 - 你可以继续阅读开发者文档,以获取更多关于 TiDB 应用开发的最佳实践。例如:[插入数据](/develop/dev-guide-insert-data.md)、[更新数据](/develop/dev-guide-update-data.md)、[删除数据](/develop/dev-guide-delete-data.md)、[单表读取](/develop/dev-guide-get-data-from-single-table.md)、[事务](/develop/dev-guide-transaction-overview.md)、[SQL 性能优化](/develop/dev-guide-optimize-sql-overview.md)等。 -- 如果你更倾向于参与课程进行学习,我们也提供专业的 [TiDB 开发者课程](https://cn.pingcap.com/courses-catalog/back-end-developer/?utm_source=docs-cn-dev-guide)支持,并在考试后提供相应的[资格认证](https://learn.pingcap.com/learner/certification-center)。 +- 如果你更倾向于参与课程进行学习,我们也提供专业的 [TiDB 开发者课程](https://cn.pingcap.com/courses-catalog/category/back-end-developer/?utm_source=docs-cn-dev-guide)支持,并在考试后提供相应的[资格认证](https://learn.pingcap.com/learner/certification-center)。 ## 需要帮助? diff --git a/develop/dev-guide-sample-application-python-sqlalchemy.md b/develop/dev-guide-sample-application-python-sqlalchemy.md index 2f581b281f79..2f97c7dfa226 100644 --- a/develop/dev-guide-sample-application-python-sqlalchemy.md +++ b/develop/dev-guide-sample-application-python-sqlalchemy.md @@ -276,7 +276,7 @@ with Session() as session: - 关于 SQLAlchemy 的更多使用方法,可以参考 [SQLAlchemy 官方文档](https://www.sqlalchemy.org/)。 - 你可以继续阅读开发者文档,以获取更多关于 TiDB 应用开发的最佳实践。例如:[插入数据](/develop/dev-guide-insert-data.md)、[更新数据](/develop/dev-guide-update-data.md)、[删除数据](/develop/dev-guide-delete-data.md)、[单表读取](/develop/dev-guide-get-data-from-single-table.md)、[事务](/develop/dev-guide-transaction-overview.md)、[SQL 性能优化](/develop/dev-guide-optimize-sql-overview.md)等。 -- 如果你更倾向于参与课程进行学习,我们也提供专业的 [TiDB 开发者课程](https://cn.pingcap.com/courses-catalog/back-end-developer/?utm_source=docs-cn-dev-guide)支持,并在考试后提供相应的[资格认证](https://learn.pingcap.com/learner/certification-center)。 +- 如果你更倾向于参与课程进行学习,我们也提供专业的 [TiDB 开发者课程](https://cn.pingcap.com/courses-catalog/category/back-end-developer/?utm_source=docs-cn-dev-guide)支持,并在考试后提供相应的[资格认证](https://learn.pingcap.com/learner/certification-center)。 ## 需要帮助? diff --git a/develop/dev-guide-sample-application-ruby-mysql2.md b/develop/dev-guide-sample-application-ruby-mysql2.md index e711c3a32974..2950a49836a5 100644 --- a/develop/dev-guide-sample-application-ruby-mysql2.md +++ b/develop/dev-guide-sample-application-ruby-mysql2.md @@ -295,7 +295,7 @@ end - 从 [mysql2 的文档](https://github.com/brianmario/mysql2#readme)中了解更多关于 mysql2 驱动的使用情况。 - 你可以继续阅读开发者文档的其它章节来获取更多 TiDB 应用开发的最佳实践。例如:[插入数据](/develop/dev-guide-insert-data.md),[更新数据](/develop/dev-guide-update-data.md),[删除数据](/develop/dev-guide-delete-data.md),[单表读取](/develop/dev-guide-get-data-from-single-table.md),[事务](/develop/dev-guide-transaction-overview.md),[SQL 性能优化](/develop/dev-guide-optimize-sql-overview.md)等。 -- 如果你更倾向于参与课程进行学习,我们也提供专业的 [TiDB 开发者课程](https://cn.pingcap.com/courses-catalog/back-end-developer/?utm_source=docs-cn-dev-guide)支持,并在考试后提供相应的[资格认证](https://learn.pingcap.com/learner/certification-center)。 +- 如果你更倾向于参与课程进行学习,我们也提供专业的 [TiDB 开发者课程](https://cn.pingcap.com/courses-catalog/category/back-end-developer/?utm_source=docs-cn-dev-guide)支持,并在考试后提供相应的[资格认证](https://learn.pingcap.com/learner/certification-center)。 ## 需要帮助? diff --git a/develop/dev-guide-sample-application-ruby-rails.md b/develop/dev-guide-sample-application-ruby-rails.md index 5d74d507aab8..898fae33925e 100644 --- a/develop/dev-guide-sample-application-ruby-rails.md +++ b/develop/dev-guide-sample-application-ruby-rails.md @@ -270,7 +270,7 @@ player.destroy - 从 [ActiveRecord 文档](https://guides.rubyonrails.org/active_record_basics.html)中了解更多关于 ActiveRecord ORM 的用法。 - 你可以继续阅读开发者文档的其它章节来获取更多 TiDB 应用开发的最佳实践。例如:[插入数据](/develop/dev-guide-insert-data.md),[更新数据](/develop/dev-guide-update-data.md),[删除数据](/develop/dev-guide-delete-data.md),[单表读取](/develop/dev-guide-get-data-from-single-table.md),[事务](/develop/dev-guide-transaction-overview.md),[SQL 性能优化](/develop/dev-guide-optimize-sql-overview.md)等。 -- 如果你更倾向于参与课程进行学习,我们也提供专业的 [TiDB 开发者课程](https://cn.pingcap.com/courses-catalog/back-end-developer/?utm_source=docs-cn-dev-guide)支持,并在考试后提供相应的[资格认证](https://learn.pingcap.com/learner/certification-center)。 +- 如果你更倾向于参与课程进行学习,我们也提供专业的 [TiDB 开发者课程](https://cn.pingcap.com/courses-catalog/category/back-end-developer/?utm_source=docs-cn-dev-guide)支持,并在考试后提供相应的[资格认证](https://learn.pingcap.com/learner/certification-center)。 ## 需要帮助? From 1f28badb2d9e66a5fdcdfdb41bdffb67a6af91a1 Mon Sep 17 00:00:00 2001 From: Aolin Date: Mon, 20 Nov 2023 17:59:41 +0800 Subject: [PATCH 03/31] upgrade using tiup: add FAQ for concurrent DDL (#15434) --- upgrade-tidb-using-tiup.md | 29 +++++++++++++++++++++++++++-- 1 file changed, 27 insertions(+), 2 deletions(-) diff --git a/upgrade-tidb-using-tiup.md b/upgrade-tidb-using-tiup.md index 67bbe6cf1ff6..306a1c072d61 100644 --- a/upgrade-tidb-using-tiup.md +++ b/upgrade-tidb-using-tiup.md @@ -23,6 +23,7 @@ aliases: ['/docs-cn/dev/upgrade-tidb-using-tiup/','/docs-cn/dev/how-to/upgrade/u > **注意:** > > - 如果原集群是 3.0 或 3.1 或更早的版本,不支持直接升级到 v7.4.0 及后续修订版本。你需要先从早期版本升级到 4.0 后,再从 4.0 升级到 v7.4.0 及后续修订版本。 +> - 如果原集群是 6.2 之前的版本,升级到 6.2 及以上版本时,部分场景会遇到升级卡住的情况,你可以参考[如何解决升级卡住的问题](#42-升级到-v620-及以上版本时如何解决升级卡住的问题)。 > - 配置参数 [`server-version`](/tidb-configuration-file.md#server-version) 的值会被 TiDB 节点用于验证当前 TiDB 的版本。因此在进行 TiDB 集群升级前,请将 `server-version` 的值设置为空或者当前 TiDB 真实的版本值,避免出现非预期行为。 ## 1. 升级兼容性说明 @@ -262,7 +263,31 @@ Cluster version: v7.4.0 tiup cluster replay ``` -### 4.2 升级过程中 evict leader 等待时间过长,如何跳过该步骤快速升级 +### 4.2 升级到 v6.2.0 及以上版本时,如何解决升级卡住的问题 + +从 v6.2.0 开始,TiDB 默认开启[并发 DDL 框架](/ddl-introduction.md#tidb-在线-ddl-异步变更的原理)执行并发 DDL。该框架改变了 DDL 作业存储方式,由 KV 队列变为表队列。这一变化可能会导致部分升级场景卡住。下面是一些会触发该问题的场景及解决方案: + +- 加载插件导致的卡住 + + 升级过程中加载部分插件时需要执行 DDL 语句,此时会卡住升级。 + + **解决方案**:升级过程中避免加载插件。待升级完成后再执行插件加载。 + +- 使用 `kill -9` 命令停机升级导致的卡住 + + - 预防措施:避免使用 `kill -9` 命令停机升级。如需使用,应在 2 分钟后再启动新版本 TiDB 节点。 + - 如果升级已经被卡住:重启受影响的 TiDB 节点。如果问题刚发生,建议等待 2 分钟后再重启。 + +- DDL Owner 变更导致的卡住 + + 在多 TiDB 实例场景升级时,网络或机器故障可能引起 DDL Owner 变更。如果此时存在未完成的升级阶段 DDL 语句,升级可能会卡住。 + + **解决方案**: + + 1. 先 Kill 卡住的 TiDB 节点(避免使用 `kill -9`)。 + 2. 重新启动新版本 TiDB 节点。 + +### 4.3 升级过程中 evict leader 等待时间过长,如何跳过该步骤快速升级 可以指定 `--force`,升级时会跳过 `PD transfer leader` 和 `TiKV evict leader` 过程,直接重启并升级版本,对线上运行的集群性能影响较大。命令如下,其中 `` 为升级的目标版本,例如 `v7.4.0`: @@ -272,7 +297,7 @@ Cluster version: v7.4.0 tiup cluster upgrade --force ``` -### 4.3 升级完成后,如何更新 pd-ctl 等周边工具版本 +### 4.4 升级完成后,如何更新 pd-ctl 等周边工具版本 可通过 TiUP 安装对应版本的 `ctl` 组件来更新相关工具版本: From 1457c4c71f054257c949c56381b23ce8b7b230a9 Mon Sep 17 00:00:00 2001 From: D3Hunter Date: Mon, 20 Nov 2023 21:47:41 +0800 Subject: [PATCH 04/31] import into 7.5 (#15367) --- sql-statements/sql-statement-import-into.md | 24 +++++++++++++++------ tidb-global-sort.md | 4 ++++ 2 files changed, 21 insertions(+), 7 deletions(-) diff --git a/sql-statements/sql-statement-import-into.md b/sql-statements/sql-statement-import-into.md index 65751f28b6fb..7d76a2af7e72 100644 --- a/sql-statements/sql-statement-import-into.md +++ b/sql-statements/sql-statement-import-into.md @@ -7,10 +7,6 @@ summary: TiDB 数据库中 IMPORT INTO 的使用概况。 `IMPORT INTO` 语句使用 TiDB Lightning 的[物理导入模式](/tidb-lightning/tidb-lightning-physical-import-mode.md),用于将 `CSV`、`SQL`、`PARQUET` 等格式的数据导入到 TiDB 的一张空表中。 -> **警告:** -> -> 目前该语句为实验特性,不建议在生产环境中使用。 - `IMPORT INTO` 支持导入存储在 Amazon S3、GCS、Azure Blob Storage 和 TiDB 本地的数据文件。 - 对于存储在 S3、GCS 或 Azure Blob Storage 的数据文件,`IMPORT INTO` 支持通过[后端任务分布式框架](/tidb-distributed-execution-framework.md)运行。 @@ -22,7 +18,7 @@ summary: TiDB 数据库中 IMPORT INTO 的使用概况。 ## 使用限制 -- 目前该语句支持导入 1 TiB 以内的数据。 +- 目前该语句支持导入 10 TiB 以内的数据。 - 只支持导入数据到数据库中已有的空表。 - 不支持事务,也无法回滚。在显式事务 (`BEGIN`/`END`) 中执行会报错。 - 在导入完成前会阻塞当前连接,如果需要异步执行,可以添加 `DETACHED` 选项。 @@ -33,6 +29,9 @@ summary: TiDB 数据库中 IMPORT INTO 的使用概况。 - TiDB [临时目录](/tidb-configuration-file.md#temp-dir-从-v630-版本开始引入)至少需要有 90 GiB 的可用空间。建议预留大于等于所需导入数据的存储空间,以保证最佳导入性能。 - 一个导入任务只支持导入数据到一张目标表中。如需导入数据到多张目标表,需要在一张目标表导入完成后,再新建一个任务导入下一张目标表。 - TiDB 集群升级期间不支持使用该语句。 +- 当使用[全局排序](/tidb-global-sort.md)导入数据时,单行数据的总长度不能超过 32 MiB。 +- 当使用全局排序导入数据时,如果 TiDB 集群在导入任务尚未完成时被删除了,Amazon S3 上可能会残留用于全局排序的临时数据。该场景需要手动删除这些数据,以免增加 S3 存储成本。 +- 所需导入的数据不能存在主键或非空唯一索引冲突的记录,否则会导致任务失败。 ## 导入前准备 @@ -131,7 +130,7 @@ SET 表达式左侧只能引用 `ColumnNameOrUserVarList` 中没有的列名。 | `MAX_WRITE_SPEED=''` | 所有格式 | 控制写入到单个 TiKV 的速度,默认无速度限制。例如设置为 `1MiB`,则限制写入速度为 1 MiB/s。| | `CHECKSUM_TABLE=''` | 所有格式 | 配置是否在导入完成后对目标表是否执行 CHECKSUM 检查来验证导入的完整性。可选的配置项为 `"required"`(默认)、`"optional"` 和 `"off"`。`"required"` 表示在导入完成后执行 CHECKSUM 检查,如果 CHECKSUM 检查失败,则会报错退出。`"optional"` 表示在导入完成后执行 CHECKSUM 检查,如果报错,会输出一条警告日志并忽略报错。`"off"` 表示导入结束后不执行 CHECKSUM 检查。 | | `DETACHED` | 所有格式 | 该参数用于控制 `IMPORT INTO` 是否异步执行。开启该参数后,执行 `IMPORT INTO` 会立即返回该导入任务的 `Job_ID` 等信息,且该任务会在后台异步执行。 | -| `CLOUD_STORAGE_URI` | 所有格式 | 指定编码后的 KV 数据[全局排序](#全局排序)的目标存储地址。未指定该参数时,`IMPORT INTO` 会根据系统变量 [`tidb_cloud_storage_uri`](/system-variables.md#tidb_cloud_storage_uri-从-v740-版本开始引入) 的值来确定是否使用全局排序,如果该系统变量指定了目标存储地址,就使用指定的地址进行全局排序。当指定该参数时,如果参数值不为空,`IMPORT INTO` 会使用该参数值作为目标存储地址;如果参数值为空,则表示强制使用本地排序。目前目标存储地址仅支持 Amazon S3,具体 Amazon S3 URI 格式配置,请参见 [Amazon S3 URI 格式](/external-storage-uri.md#amazon-s3-uri-格式)。注意当使用该功能时,所有 TiDB 节点都需要有目标 Amazon S3 bucket 的读写权限。 | +| `CLOUD_STORAGE_URI` | 所有格式 | 指定编码后的 KV 数据[全局排序](/tidb-global-sort.md)的目标存储地址。未指定该参数时,`IMPORT INTO` 会根据系统变量 [`tidb_cloud_storage_uri`](/system-variables.md#tidb_cloud_storage_uri-从-v740-版本开始引入) 的值来确定是否使用全局排序,如果该系统变量指定了目标存储地址,就使用指定的地址进行全局排序。当指定该参数时,如果参数值不为空,`IMPORT INTO` 会使用该参数值作为目标存储地址;如果参数值为空,则表示强制使用本地排序。目前目标存储地址仅支持 Amazon S3,具体 Amazon S3 URI 格式配置,请参见 [Amazon S3 URI 格式](/external-storage-uri.md#amazon-s3-uri-格式)。注意当使用该功能时,所有 TiDB 节点都需要有目标 Amazon S3 bucket 的读写权限。 | ## 压缩文件 @@ -149,6 +148,10 @@ SET 表达式左侧只能引用 `ColumnNameOrUserVarList` 中没有的列名。 ## 全局排序 +> **警告:** +> +> 全局排序为实验特性,不建议在生产环境中使用。 + `IMPORT INTO` 会将源数据文件的导入拆分到多个子任务中,各个子任务独立进行编码排序并导入。如果各个子任务编码后的 KV (TiDB 将数据编码为 KV 的方式,参考 [TiDB 数据库的计算](/tidb-computing.md)) range 重叠过多,导入时 TiKV 需要不断地进行 compaction,会降低导入的性能和稳定性。 在以下情况中,可能存在较多的 KV range 重叠: @@ -157,7 +160,14 @@ SET 表达式左侧只能引用 `ColumnNameOrUserVarList` 中没有的列名。 - 说明:`IMPORT INTO` 会按数据文件遍历顺序来划分子任务,一般遍历文件按文件名字典序来排列。 - 如果目标表索引较多,或索引列值在数据文件中较分散,那么各个子任务编码后产生的索引 KV 也会存在重叠。 -当开启[后端任务分布式框架](/tidb-distributed-execution-framework.md) 时,可通过 `IMPORT INTO` 的 `CLOUD_STORAGE_URI` 参数,或者使用系统变量 [`tidb_cloud_storage_uri`](/system-variables.md#tidb_cloud_storage_uri-从-v740-版本开始引入) 指定编码后的 KV 数据的目标存储地址来开启全局排序。注意目前仅支持使用 S3 作为全局排序存储地址。开启全局排序后,`IMPORT INTO` 会将编码后的 KV 数据写入云存储,并在云存储进行全局排序,之后再将全局排序后的索引数据和表数据并行导入到 TiKV,从而避免因 KV 重叠导致的问题,以提升导入的稳定性。 +当开启[后端任务分布式框架](/tidb-distributed-execution-framework.md) 时,可通过 `IMPORT INTO` 的 `CLOUD_STORAGE_URI` 参数,或者使用系统变量 [`tidb_cloud_storage_uri`](/system-variables.md#tidb_cloud_storage_uri-从-v740-版本开始引入) 指定编码后的 KV 数据的目标存储地址来开启[全局排序](/tidb-global-sort.md)。注意目前仅支持使用 S3 作为全局排序存储地址。开启全局排序后,`IMPORT INTO` 会将编码后的 KV 数据写入云存储,并在云存储进行全局排序,之后再将全局排序后的索引数据和表数据并行导入到 TiKV,从而避免因 KV 重叠导致的问题,以提升导入的稳定性。 + +全局排序对内存资源的使用较高,在数据导入开始前,建议先设置 [`tidb_server_memory_limit_gc_trigger`](/system-variables.md#tidb_server_memory_limit_gc_trigger-从-v640-版本开始引入) 和 [`tidb_server_memory_limit`](/system-variables.md#tidb_server_memory_limit-从-v640-版本开始引入) 两个变量,避免频繁触发 golang GC 从而影响导入效率: + +```sql +SET GLOBAL tidb_server_memory_limit_gc_trigger=0.99; +SET GLOBAL tidb_server_memory_limit='88%'; +``` > **注意:** > diff --git a/tidb-global-sort.md b/tidb-global-sort.md index e25f4850d088..f40744bc0d07 100644 --- a/tidb-global-sort.md +++ b/tidb-global-sort.md @@ -41,6 +41,10 @@ TiDB 全局排序功能增强了数据导入和 DDL(数据定义语言)操 SET GLOBAL tidb_cloud_storage_uri = 's3://my-bucket/test-data?role-arn=arn:aws:iam::888888888888:role/my-role' ``` +> **注意:** +> +> [`IMPORT INTO`](/sql-statements/sql-statement-import-into.md) 也可使用 [`CLOUD_STORAGE_URI`](/sql-statements/sql-statement-import-into.md#withoptions) 参数来控制云存储路径。如果 [`tidb_cloud_storage_uri`](/system-variables.md#tidb_cloud_storage_uri-从-v740-版本开始引入) 和 `CLOUD_STORAGE_URI` 都设置了有效的云存储路径,[`IMPORT INTO`](/sql-statements/sql-statement-import-into.md) 将以 `CLOUD_STORAGE_URI` 参数的配置为准。 + ## 实现原理 全局排序功能的算法如下图所示: From 2b4203b27604d217e5ba98b5bccdcb4870970f89 Mon Sep 17 00:00:00 2001 From: Frank945946 <108602632+Frank945946@users.noreply.github.com> Date: Tue, 21 Nov 2023 14:23:40 +0800 Subject: [PATCH 05/31] Update disk space requirements for import into (#15468) --- hardware-and-software-requirements.md | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/hardware-and-software-requirements.md b/hardware-and-software-requirements.md index 515698b88801..504d755ba147 100644 --- a/hardware-and-software-requirements.md +++ b/hardware-and-software-requirements.md @@ -90,7 +90,7 @@ TiDB 支持部署和运行在 Intel x86-64 架构的 64 位通用硬件服务器 | **组件** | **CPU** | **内存** | **本地存储** | **网络** | **实例数量(最低要求)** | | --- | --- | --- | --- | --- | --- | -| TiDB | 8 核+ | 16 GB+ | 无特殊要求 | 千兆网卡 | 1(可与 PD 同机器) | +| TiDB | 8 核+ | 16 GB+ | [磁盘空间要求](#磁盘空间要求) | 千兆网卡 | 1(可与 PD 同机器) | | PD | 4 核+ | 8 GB+ | SAS, 200 GB+ | 千兆网卡 | 1(可与 TiDB 同机器) | | TiKV | 8 核+ | 32 GB+ | SSD, 200 GB+ | 千兆网卡 | 3 | | TiFlash | 32 核+ | 64 GB+ | SSD, 200 GB+ | 千兆网卡 | 1 | @@ -102,7 +102,6 @@ TiDB 支持部署和运行在 Intel x86-64 架构的 64 位通用硬件服务器 > - 如进行性能相关的测试,避免采用低性能存储和网络硬件配置,防止对测试结果的正确性产生干扰。 > - TiKV 的 SSD 盘推荐使用 NVME 接口以保证读写更快。 > - 如果仅验证功能,建议使用 [TiDB 数据库快速上手指南](/quick-start-with-tidb.md)进行单机功能测试。 -> - TiDB 对于磁盘的使用以存放日志为主,因此在测试环境中对于磁盘类型和容量并无特殊要求。 > - 从 v6.3.0 开始,在 Linux AMD64 架构的硬件平台部署 TiFlash 时,CPU 必须支持 AVX2 指令集。确保命令 `cat /proc/cpuinfo | grep avx2` 有输出。而在 Linux ARM64 架构的硬件平台部署 TiFlash 时,CPU 必须支持 ARMv8 架构。确保命令 `cat /proc/cpuinfo | grep 'crc32' | grep 'asimd'` 有输出。通过使用向量扩展指令集,TiFlash 的向量化引擎能提供更好的性能。 ### 生产环境 @@ -167,7 +166,7 @@ TiDB 作为开源一栈式实时 HTAP 数据库,其正常运行需要网络环 | 组件 | 磁盘空间要求 | 健康水位使用率 | | :-- | :-- | :-- | -| TiDB |
  • 日志盘建议最少预留 30 GB。
  • v6.5.0 及以上版本默认启用了 Fast Online DDL 对添加索引等 DDL 操作进行加速(通过变量 [`tidb_ddl_enable_fast_reorg`](/system-variables.md#tidb_ddl_enable_fast_reorg-从-v630-版本开始引入) 控制)。如果业务中可能存在针对大对象的 DDL 操作,推荐为 TiDB 准备额外的 SSD 磁盘空间(建议 100 GB+)。配置方式详见[设置 TiDB 节点的临时空间](/check-before-deployment.md#设置-tidb-节点的临时空间推荐)。
| 低于 90% | +| TiDB |
  • 日志盘建议最少预留 30 GB。
  • v6.5.0 及以上版本默认启用了 Fast Online DDL 对添加索引等 DDL 操作进行加速(通过变量 [`tidb_ddl_enable_fast_reorg`](/system-variables.md#tidb_ddl_enable_fast_reorg-从-v630-版本开始引入) 控制)。如果业务中可能存在针对大对象的 DDL 操作,或需要使用 [IMPORT INTO](/sql-statements/sql-statement-import-into.md) SQL 语句导入数据,推荐为 TiDB 准备额外的 SSD 磁盘空间(建议 100 GB+)。配置方式详见[设置 TiDB 节点的临时空间](/check-before-deployment.md#设置-tidb-节点的临时空间推荐)。
| 低于 90% | | PD | 数据盘和日志盘建议最少各预留 20 GB | 低于 90% | | TiKV | 数据盘和日志盘建议最少各预留 100 GB | 低于 80% | | TiFlash | 数据盘建议最少预留 100 GB,日志盘建议最少预留 30 GB | 低于 80% | From 19f889472975c291b768bc5ac662dee30e9b0687 Mon Sep 17 00:00:00 2001 From: kaaaaaaang Date: Tue, 21 Nov 2023 17:05:41 +0800 Subject: [PATCH 06/31] update tiup doc (#15442) --- tiup/tiup-cluster-topology-reference.md | 39 +++++++++++++++++++++++++ upgrade-tidb-using-tiup.md | 23 +++++++++++++++ 2 files changed, 62 insertions(+) diff --git a/tiup/tiup-cluster-topology-reference.md b/tiup/tiup-cluster-topology-reference.md index 165dbf0e7649..88f6fa83462e 100644 --- a/tiup/tiup-cluster-topology-reference.md +++ b/tiup/tiup-cluster-topology-reference.md @@ -15,6 +15,7 @@ title: 通过 TiUP 部署 TiDB 集群的拓扑文件配置 - [global](/tiup/tiup-cluster-topology-reference.md#global):集群全局配置,其中一些是集群的默认值,可以在实例里面单独配置 - [monitored](/tiup/tiup-cluster-topology-reference.md#monitored):监控服务配置,即 blackbox exporter 和 node exporter,每台机器上都会部署一个 node exporter 和一个 blackbox exporter - [server_configs](/tiup/tiup-cluster-topology-reference.md#server_configs):组件全局配置,可单独针对每个组件配置,若在实例中存在同名配置项,那么以实例中配置的为准 +- [component_versions](/tiup/tiup-cluster-topology-reference.md#component_versions):组件版本号,当某个组件需要使用与集群不一致的版本时使用此配置。tiup-cluster v1.14.0 引入该配置 - [pd_servers](/tiup/tiup-cluster-topology-reference.md#pd_servers):PD 实例的配置,用来指定 PD 组件部署到哪些机器上 - [tidb_servers](/tiup/tiup-cluster-topology-reference.md#tidb_servers):TiDB 实例的配置,用来指定 TiDB 组件部署到哪些机器上 - [tikv_servers](/tiup/tiup-cluster-topology-reference.md#tikv_servers):TiKV 实例的配置,用来指定 TiKV 组件部署到哪些机器上 @@ -36,6 +37,7 @@ title: 通过 TiUP 部署 TiDB 集群的拓扑文件配置 - `group`:自动创建用户时指定用户所属的用户组,默认和 `` 字段值相同,若指定的组不存在,则自动创建 - `ssh_port`:指定连接目标机器进行操作的时候使用的 SSH 端口,默认值:22 - `enable_tls`:是否对集群启用 TLS。启用之后,组件之间、客户端与组件之间都必须使用生成的 TLS 证书进行连接,默认值:false +- `listen_host`:默认使用的监听 IP。如果为空,每个实例会根据其 `host` 字段是否包含 `:` 来自动设置为 `::` 或 `0.0.0.0`。tiup-cluster v1.14.0 引入该配置 - `deploy_dir`:每个组件的部署目录,默认值:"deploy"。其应用规则如下: - 如果在实例级别配置了绝对路径的 `deploy_dir`,那么实际部署目录为该实例设定的 `deploy_dir` - 对于每个实例,如果用户未配置 `deploy_dir`,其默认值为相对路径 `-` @@ -118,6 +120,43 @@ server_configs: 上述配置指定了 TiDB 和 TiKV 的全局配置。 +### `component_versions` + +> **注意:** +> +> 对于 TiDB、TiKV、PD、TiCDC 等共用版本号的组件,尚未有完整的测试保证它们在跨版本混合部署的场景下能正常工作。请仅在测试场景或在[获取支持](/support.md)的情况下使用此配置。 + +`component_versions` 用于指定某个组件的版本号。 + +- 如果没有配置 `component_versions`,各个组件默认使用与 TiDB 集群相同的版本号(如 PD、TiKV),或使用组件的最新版本号(如 Alertmanager)。 +- 如果配置了该字段,对应的组件将会固定使用对应的版本,并且在后续的扩容和升级集群操作中都使用该版本。 + +请仅在需要使用某个固定组件的版本号时配置该参数。 + +`component_versions` 区块主要包含以下字段: + +- `tikv`:TiKV 组件的版本 +- `tiflash`:TiFlash 组件的版本 +- `pd`:PD 组件的版本 +- `tidb_dashboard`:独立部署的 TiDB Dashboard 组件的版本 +- `pump`:Pump 组件的版本 +- `drainer`:Drainer 组件的版本 +- `cdc`:CDC 组件的版本 +- `kvcdc`:TiKV-CDC 组件的版本 +- `tiproxy`:TiProxy 组件的版本 +- `prometheus`:Prometheus 组件的版本 +- `grafana`:Grafana 组件的版本 +- `alertmanager`:Alertmanager 组件的版本 + +`component_versions` 配置示例: + +```yaml +component_versions: + kvcdc: "v1.1.1" +``` + +上述配置指定了 TiKV-CDC 的版本号为 v1.1.1。 + ### `pd_servers` `pd_servers` 指定了将 PD 的服务部署到哪些机器上,同时可以指定每台机器上的服务配置。`pd_servers` 是一个数组,每个数组的元素包含以下字段: diff --git a/upgrade-tidb-using-tiup.md b/upgrade-tidb-using-tiup.md index 306a1c072d61..af7569245504 100644 --- a/upgrade-tidb-using-tiup.md +++ b/upgrade-tidb-using-tiup.md @@ -195,6 +195,29 @@ tiup cluster upgrade v7.4.0 > 3. reload 整个集群:`tiup cluster reload `。此时,TiFlash 也会正常启动,无需额外操作。 > - 在对使用 TiDB Binlog 的集群进行滚动升级过程中,请避免新创建聚簇索引表。 +#### 升级时指定组件版本 + +从 tiup-cluster v1.14.0 开始,支持在升级集群的时候指定其中某些组件到特定版本。指定的组件在后续升级中保持固定版本,除非重新指定版本。 + +> **注意:** +> +> 对于 TiDB、TiKV、PD、TiCDC 等共用版本号的组件,尚未有完整的测试保证它们在跨版本混合部署的场景下能正常工作。请仅在测试场景或在[获取支持](/support.md)的情况下使用此配置。 + +```shell +tiup cluster upgrade -h | grep "version string" + --alertmanager-version string Fix the version of alertmanager and no longer follows the cluster version. + --blackbox-exporter-version string Fix the version of blackbox-exporter and no longer follows the cluster version. + --cdc-version string Fix the version of cdc and no longer follows the cluster version. + --ignore-version-check Ignore checking if target version is bigger than current version. + --node-exporter-version string Fix the version of node-exporter and no longer follows the cluster version. + --pd-version string Fix the version of pd and no longer follows the cluster version. + --tidb-dashboard-version string Fix the version of tidb-dashboard and no longer follows the cluster version. + --tiflash-version string Fix the version of tiflash and no longer follows the cluster version. + --tikv-cdc-version string Fix the version of tikv-cdc and no longer follows the cluster version. + --tikv-version string Fix the version of tikv and no longer follows the cluster version. + --tiproxy-version string Fix the version of tiproxy and no longer follows the cluster version. +``` + #### 停机升级 在停机升级前,首先需要将整个集群关停。 From eafe0fd8d2b9c627fa00335a8aa302e63e8c89f6 Mon Sep 17 00:00:00 2001 From: xixirangrang Date: Tue, 21 Nov 2023 18:04:11 +0800 Subject: [PATCH 07/31] ticdc: change encoder tool (#15475) --- ticdc/ticdc-changefeed-config.md | 2 +- ticdc/ticdc-sink-to-mysql.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/ticdc/ticdc-changefeed-config.md b/ticdc/ticdc-changefeed-config.md index 1cff9c43e750..6b17fd78071d 100644 --- a/ticdc/ticdc-changefeed-config.md +++ b/ticdc/ticdc-changefeed-config.md @@ -26,7 +26,7 @@ Info: {"upstream_id":7178706266519722477,"namespace":"default","id":"simple-repl [scheme]://[userinfo@][host]:[port][/path]?[query_parameters] ``` - URI 中包含特殊字符时,如 `! * ' ( ) ; : @ & = + $ , / ? % # [ ]`,需要对 URI 特殊字符进行转义处理。你可以在 [URI Encoder](https://meyerweb.com/eric/tools/dencoder/) 中对 URI 进行转义。 + URI 中包含特殊字符时,如 `! * ' ( ) ; : @ & = + $ , / ? % # [ ]`,需要对 URI 特殊字符进行转义处理。你可以在 [URI Encoder](https://www.urlencoder.org/) 中对 URI 进行转义。 - `--start-ts`:指定 changefeed 的开始 TSO。TiCDC 集群将从这个 TSO 开始拉取数据。默认为当前时间。 - `--target-ts`:指定 changefeed 的目标 TSO。TiCDC 集群拉取数据直到这个 TSO 停止。默认为空,即 TiCDC 不会自动停止。 diff --git a/ticdc/ticdc-sink-to-mysql.md b/ticdc/ticdc-sink-to-mysql.md index c59a2eec5b64..2e7665938578 100644 --- a/ticdc/ticdc-sink-to-mysql.md +++ b/ticdc/ticdc-sink-to-mysql.md @@ -80,7 +80,7 @@ MTIzNDU2 > **注意:** > -> 当 Sink URI 中包含特殊字符时,如 `! * ' ( ) ; : @ & = + $ , / ? % # [ ]`,需要对 URI 特殊字符进行转义处理。你可以使用 [URI Encoder](https://meyerweb.com/eric/tools/dencoder/) 工具对 URI 进行转义。 +> 当 Sink URI 中包含特殊字符时,如 `! * ' ( ) ; : @ & = + $ , / ? % # [ ]`,需要对 URI 特殊字符进行转义处理。你可以使用 [URI Encoder](https://www.urlencoder.org/) 工具对 URI 进行转义。 ## 灾难场景的最终一致性复制 From fec6918305423414a97dc12eaa0a67461efff70d Mon Sep 17 00:00:00 2001 From: Grace Cai Date: Tue, 21 Nov 2023 21:53:41 +0800 Subject: [PATCH 08/31] string-functions: convert the table of supported functions to a list (#15473) --- functions-and-operators/string-functions.md | 291 ++++++++++++++++---- 1 file changed, 231 insertions(+), 60 deletions(-) diff --git a/functions-and-operators/string-functions.md b/functions-and-operators/string-functions.md index a4803fcc10cc..587e0450e2e3 100644 --- a/functions-and-operators/string-functions.md +++ b/functions-and-operators/string-functions.md @@ -11,66 +11,237 @@ TiDB 支持使用大部分 MySQL 5.7 中提供的[字符串函数](https://dev.m ## 支持的函数 -| 函数名 | 功能描述 | -|:----------|:-----------------------| -| [`ASCII()`](https://dev.mysql.com/doc/refman/8.0/en/string-functions.html#function_ascii) | 返回最左字符的数值 | -| [`BIN()`](https://dev.mysql.com/doc/refman/8.0/en/string-functions.html#function_bin) | 返回一个数的二进制值的字符串表示 | -| [`BIT_LENGTH()`](https://dev.mysql.com/doc/refman/8.0/en/string-functions.html#function_bit-length) | 返回字符串的位长度 | -| [`CHAR()`](https://dev.mysql.com/doc/refman/8.0/en/string-functions.html#function_char)    | 返回由整数的代码值所给出的字符组成的字符串 | -| [`CHAR_LENGTH()`](https://dev.mysql.com/doc/refman/8.0/en/string-functions.html#function_char-length) | 返回字符串的字符长度 | -| [`CHARACTER_LENGTH()`](https://dev.mysql.com/doc/refman/8.0/en/string-functions.html#function_character-length) | 与 `CHAR_LENGTH()` 功能相同 | -| [`CONCAT()`](https://dev.mysql.com/doc/refman/8.0/en/string-functions.html#function_concat) | 返回连接的字符串 | -| [`CONCAT_WS()`](https://dev.mysql.com/doc/refman/8.0/en/string-functions.html#function_concat-ws) | 返回由分隔符连接的字符串 | -| [`ELT()`](https://dev.mysql.com/doc/refman/8.0/en/string-functions.html#function_elt) | 返回指定位置的字符串 | -| [`EXPORT_SET()`](https://dev.mysql.com/doc/refman/8.0/en/string-functions.html#function_export-set) | 返回一个字符串,其中值位中设置的每个位,可以得到一个 on 字符串,而每个未设置的位,可以得到一个 off 字符串 | -| [`FIELD()`](https://dev.mysql.com/doc/refman/8.0/en/string-functions.html#function_field) | 返回参数在后续参数中出现的第一个位置 | -| [`FIND_IN_SET()`](https://dev.mysql.com/doc/refman/8.0/en/string-functions.html#function_find-in-set) | 返回第一个参数在第二个参数中出现的位置 | -| [`FORMAT()`](https://dev.mysql.com/doc/refman/8.0/en/string-functions.html#function_format) | 返回指定小数位数格式的数字 | -| [`FROM_BASE64()`](https://dev.mysql.com/doc/refman/8.0/en/string-functions.html#function_from-base64) | 解码 base-64 表示的字符串,并返回结果 | -| [`HEX()`](https://dev.mysql.com/doc/refman/8.0/en/string-functions.html#function_hex) | 返回一个十进制数或字符串值的 16 进制表示 | -| [`INSERT()`](https://dev.mysql.com/doc/refman/8.0/en/string-functions.html#function_insert) | 在指定位置插入一个子字符串,最多不超过指定字符数 | -| [`INSTR()`](https://dev.mysql.com/doc/refman/8.0/en/string-functions.html#function_instr) | 返回第一次出现的子字符串的索引 | -| [`LCASE()`](https://dev.mysql.com/doc/refman/8.0/en/string-functions.html#function_lcase) | 与 `LOWER()` 功能相同 | -| [`LEFT()`](https://dev.mysql.com/doc/refman/8.0/en/string-functions.html#function_left) | 返回最左侧指定长度的字符 | -| [`LENGTH()`](https://dev.mysql.com/doc/refman/8.0/en/string-functions.html#function_length) | 返回字符串长度,单位为字节 | -| [`LIKE`](https://dev.mysql.com/doc/refman/8.0/en/string-comparison-functions.html#operator_like) | 进行简单模式匹配 | -| [`LOCATE()`](https://dev.mysql.com/doc/refman/8.0/en/string-functions.html#function_locate) | 返回第一次出现的子字符串的位置 | -| [`LOWER()`](https://dev.mysql.com/doc/refman/8.0/en/string-functions.html#function_lower) | 返回全小写的参数 | -| [`LPAD()`](https://dev.mysql.com/doc/refman/8.0/en/string-functions.html#function_lpad) | 返回字符串参数,左侧添加指定字符串 | -| [`LTRIM()`](https://dev.mysql.com/doc/refman/8.0/en/string-functions.html#function_ltrim) | 去掉前缀空格 | -| [`MAKE_SET()`](https://dev.mysql.com/doc/refman/8.0/en/string-functions.html#function_make-set) | 返回一组用逗号分隔的字符串,这些字符串的位数与给定的 bits 参数对应 | -| [`MID()`](https://dev.mysql.com/doc/refman/8.0/en/string-functions.html#function_mid) | 返回一个以指定位置开始的子字符串 | -| [`NOT LIKE`](https://dev.mysql.com/doc/refman/8.0/en/string-comparison-functions.html#operator_not-like) | 否定简单模式匹配 | -| [`NOT REGEXP`](https://dev.mysql.com/doc/refman/8.0/en/regexp.html#operator_not-regexp) | `REGEXP` 的否定形式 | -| [`OCT()`](https://dev.mysql.com/doc/refman/8.0/en/string-functions.html#function_oct) | 返回一个数值的八进制表示,形式为字符串 | -| [`OCTET_LENGTH()`](https://dev.mysql.com/doc/refman/8.0/en/string-functions.html#function_octet-length) | 与 `LENGTH()` 功能相同 | -| [`ORD()`](https://dev.mysql.com/doc/refman/8.0/en/string-functions.html#function_ord) | 返回该参数最左侧字符的字符编码 | -| [`POSITION()`](https://dev.mysql.com/doc/refman/8.0/en/string-functions.html#function_position) | 与 `LOCATE()` 功能相同 | -| [`QUOTE()`](https://dev.mysql.com/doc/refman/8.0/en/string-functions.html#function_quote) | 使参数逃逸,为了在 SQL 语句中使用 | -| [`REGEXP`](https://dev.mysql.com/doc/refman/8.0/en/regexp.html#operator_regexp) | 使用正则表达式匹配模式 | -| [`REGEXP_INSTR()`](https://dev.mysql.com/doc/refman/8.0/en/regexp.html#function_regexp-instr) | 返回满足正则的子字符串的第一个索引位置(与 MySQL 不完全兼容,具体请参考[正则函数与 MySQL 的兼容性](#正则函数与-mysql-的兼容性)) | -| [`REGEXP_LIKE()`](https://dev.mysql.com/doc/refman/8.0/en/regexp.html#function_regexp-like) | 判断字符串是否满足正则表达式(与 MySQL 不完全兼容,具体请参考[正则函数与 MySQL 的兼容性](#正则函数与-mysql-的兼容性)) | -| [`REGEXP_REPLACE()`](https://dev.mysql.com/doc/refman/8.0/en/regexp.html#function_regexp-replace) | 替换满足正则表达式的子字符串(与 MySQL 不完全兼容,具体请参考[正则函数与 MySQL 的兼容性](#正则函数与-mysql-的兼容性)) | -| [`REGEXP_SUBSTR()`](https://dev.mysql.com/doc/refman/8.0/en/regexp.html#function_regexp-substr) | 返回满足正则表达式的子字符串(与 MySQL 不完全兼容,具体请参考[正则函数与 MySQL 的兼容性](#正则函数与-mysql-的兼容性)) | -| [`REPEAT()`](https://dev.mysql.com/doc/refman/8.0/en/string-functions.html#function_repeat) | 以指定次数重复一个字符串 | -| [`REPLACE()`](https://dev.mysql.com/doc/refman/8.0/en/string-functions.html#function_replace) | 替换所有出现的指定字符串 | -| [`REVERSE()`](https://dev.mysql.com/doc/refman/8.0/en/string-functions.html#function_reverse) | 反转字符串里的所有字符 | -| [`RIGHT()`](https://dev.mysql.com/doc/refman/8.0/en/string-functions.html#function_right) | 返回指定数量的最右侧的字符 | -| [`RLIKE`](https://dev.mysql.com/doc/refman/8.0/en/regexp.html#operator_regexp) | 与 `REGEXP` 功能相同 | -| [`RPAD()`](https://dev.mysql.com/doc/refman/8.0/en/string-functions.html#function_rpad) | 以指定次数添加字符串 | -| [`RTRIM()`](https://dev.mysql.com/doc/refman/8.0/en/string-functions.html#function_rtrim) | 去掉后缀空格 | -| [`SPACE()`](https://dev.mysql.com/doc/refman/8.0/en/string-functions.html#function_space) | 返回指定数量的空格,形式为字符串 | -| [`STRCMP()`](https://dev.mysql.com/doc/refman/8.0/en/string-comparison-functions.html#function_strcmp) | 比较两个字符串 | -| [`SUBSTR()`](https://dev.mysql.com/doc/refman/8.0/en/string-functions.html#function_substr) | 返回指定的子字符串 | -| [`SUBSTRING()`](https://dev.mysql.com/doc/refman/8.0/en/string-functions.html#function_substring) | 返回指定的子字符串 | -| [`SUBSTRING_INDEX()`](https://dev.mysql.com/doc/refman/8.0/en/string-functions.html#function_substring-index) | 从一个字符串中返回指定出现次数的定界符之前的子字符串 | -| [`TO_BASE64()`](https://dev.mysql.com/doc/refman/8.0/en/string-functions.html#function_to-base64) | 返回转化为 base-64 表示的字符串参数 | -| [`TRANSLATE()`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/TRANSLATE.html#GUID-80F85ACB-092C-4CC7-91F6-B3A585E3A690) | 将字符串中出现的所有指定字符替换为其它字符。这个函数不会像 Oracle 一样将空字符串视为`NULL` | -| [`TRIM()`](https://dev.mysql.com/doc/refman/8.0/en/string-functions.html#function_trim) | 去掉前缀和后缀空格 | -| [`UCASE()`](https://dev.mysql.com/doc/refman/8.0/en/string-functions.html#function_ucase) | 与 `UPPER()` 功能相同 | -| [`UNHEX()`](https://dev.mysql.com/doc/refman/8.0/en/string-functions.html#function_unhex) | 返回一个数的十六进制表示,形式为字符串 | -| [`UPPER()`](https://dev.mysql.com/doc/refman/8.0/en/string-functions.html#function_upper) | 参数转换为大写形式 | -| [`WEIGHT_STRING()`](https://dev.mysql.com/doc/refman/8.0/en/string-functions.html#function_weight-string) | 返回字符串的权重 | +### [`ASCII()`](https://dev.mysql.com/doc/refman/8.0/en/string-functions.html#function_ascii) + +返回最左字符的数值 + +### [`BIN()`](https://dev.mysql.com/doc/refman/8.0/en/string-functions.html#function_bin) + +返回一个数的二进制值的字符串表示 + +### [`BIT_LENGTH()`](https://dev.mysql.com/doc/refman/8.0/en/string-functions.html#function_bit-length) + +返回字符串的位长度 + +### [`CHAR()`](https://dev.mysql.com/doc/refman/8.0/en/string-functions.html#function_char) + +返回由整数的代码值所给出的字符组成的字符串 + +### [`CHAR_LENGTH()`](https://dev.mysql.com/doc/refman/8.0/en/string-functions.html#function_char-length) + +返回字符串的字符长度 + +### [`CHARACTER_LENGTH()`](https://dev.mysql.com/doc/refman/8.0/en/string-functions.html#function_character-length) + +与 `CHAR_LENGTH()` 功能相同 + +### [`CONCAT()`](https://dev.mysql.com/doc/refman/8.0/en/string-functions.html#function_concat) + +返回连接的字符串 + +### [`CONCAT_WS()`](https://dev.mysql.com/doc/refman/8.0/en/string-functions.html#function_concat-ws) + +返回由分隔符连接的字符串 + +### [`ELT()`](https://dev.mysql.com/doc/refman/8.0/en/string-functions.html#function_elt) + +返回指定位置的字符串 + +### [`EXPORT_SET()`](https://dev.mysql.com/doc/refman/8.0/en/string-functions.html#function_export-set) + +返回一个字符串,其中值位中设置的每个位,可以得到一个 on 字符串,而每个未设置的位,可以得到一个 off 字符串 + +### [`FIELD()`](https://dev.mysql.com/doc/refman/8.0/en/string-functions.html#function_field) + +返回参数在后续参数中出现的第一个位置 + +### [`FIND_IN_SET()`](https://dev.mysql.com/doc/refman/8.0/en/string-functions.html#function_find-in-set) + +返回第一个参数在第二个参数中出现的位置 + +### [`FORMAT()`](https://dev.mysql.com/doc/refman/8.0/en/string-functions.html#function_format) + +返回指定小数位数格式的数字 + +### [`FROM_BASE64()`](https://dev.mysql.com/doc/refman/8.0/en/string-functions.html#function_from-base64) + +解码 base-64 表示的字符串,并返回结果 + +### [`HEX()`](https://dev.mysql.com/doc/refman/8.0/en/string-functions.html#function_hex) + +返回一个十进制数或字符串值的 16 进制表示 + +### [`INSERT()`](https://dev.mysql.com/doc/refman/8.0/en/string-functions.html#function_insert) + +在指定位置插入一个子字符串,最多不超过指定字符数 + +### [`INSTR()`](https://dev.mysql.com/doc/refman/8.0/en/string-functions.html#function_instr) + +返回第一次出现的子字符串的索引 + +### [`LCASE()`](https://dev.mysql.com/doc/refman/8.0/en/string-functions.html#function_lcase) + +与 `LOWER()` 功能相同 + +### [`LEFT()`](https://dev.mysql.com/doc/refman/8.0/en/string-functions.html#function_left) + +返回最左侧指定长度的字符 + +### [`LENGTH()`](https://dev.mysql.com/doc/refman/8.0/en/string-functions.html#function_length) + +返回字符串长度,单位为字节 + +### [`LIKE`](https://dev.mysql.com/doc/refman/8.0/en/string-comparison-functions.html#operator_like) + +进行简单模式匹配 + +### [`LOCATE()`](https://dev.mysql.com/doc/refman/8.0/en/string-functions.html#function_locate) + +返回第一次出现的子字符串的位置 + +### [`LOWER()`](https://dev.mysql.com/doc/refman/8.0/en/string-functions.html#function_lower) + +返回全小写的参数 + +### [`LPAD()`](https://dev.mysql.com/doc/refman/8.0/en/string-functions.html#function_lpad) + +返回字符串参数,左侧添加指定字符串 + +### [`LTRIM()`](https://dev.mysql.com/doc/refman/8.0/en/string-functions.html#function_ltrim) + +去掉前缀空格 + +### [`MAKE_SET()`](https://dev.mysql.com/doc/refman/8.0/en/string-functions.html#function_make-set) + +返回一组用逗号分隔的字符串,这些字符串的位数与给定的 bits 参数对应 + +### [`MID()`](https://dev.mysql.com/doc/refman/8.0/en/string-functions.html#function_mid) + +返回一个以指定位置开始的子字符串 + +### [`NOT LIKE`](https://dev.mysql.com/doc/refman/8.0/en/string-comparison-functions.html#operator_not-like) + +否定简单模式匹配 + +### [`NOT REGEXP`](https://dev.mysql.com/doc/refman/8.0/en/regexp.html#operator_not-regexp) + +`REGEXP` 的否定形式 + +### [`OCT()`](https://dev.mysql.com/doc/refman/8.0/en/string-functions.html#function_oct) + +返回一个数值的八进制表示,形式为字符串 + +### [`OCTET_LENGTH()`](https://dev.mysql.com/doc/refman/8.0/en/string-functions.html#function_octet-length) + +与 `LENGTH()` 功能相同 + +### [`ORD()`](https://dev.mysql.com/doc/refman/8.0/en/string-functions.html#function_ord) + +返回该参数最左侧字符的字符编码 + +### [`POSITION()`](https://dev.mysql.com/doc/refman/8.0/en/string-functions.html#function_position) + +与 `LOCATE()` 功能相同 + +### [`QUOTE()`](https://dev.mysql.com/doc/refman/8.0/en/string-functions.html#function_quote) + +使参数逃逸,为了在 SQL 语句中使用 + +### [`REGEXP`](https://dev.mysql.com/doc/refman/8.0/en/regexp.html#operator_regexp) + +使用正则表达式匹配模式 + +### [`REGEXP_INSTR()`](https://dev.mysql.com/doc/refman/8.0/en/regexp.html#function_regexp-instr) + +返回满足正则的子字符串的第一个索引位置(与 MySQL 不完全兼容,具体请参考[正则函数与 MySQL 的兼容性](#正则函数与-mysql-的兼容性)) + +### [`REGEXP_LIKE()`](https://dev.mysql.com/doc/refman/8.0/en/regexp.html#function_regexp-like) + +判断字符串是否满足正则表达式(与 MySQL 不完全兼容,具体请参考[正则函数与 MySQL 的兼容性](#正则函数与-mysql-的兼容性)) + +### [`REGEXP_REPLACE()`](https://dev.mysql.com/doc/refman/8.0/en/regexp.html#function_regexp-replace) + +替换满足正则表达式的子字符串(与 MySQL 不完全兼容,具体请参考[正则函数与 MySQL 的兼容性](#正则函数与-mysql-的兼容性)) + +### [`REGEXP_SUBSTR()`](https://dev.mysql.com/doc/refman/8.0/en/regexp.html#function_regexp-substr) + +返回满足正则表达式的子字符串(与 MySQL 不完全兼容,具体请参考[正则函数与 MySQL 的兼容性](#正则函数与-mysql-的兼容性)) + +### [`REPEAT()`](https://dev.mysql.com/doc/refman/8.0/en/string-functions.html#function_repeat) + +以指定次数重复一个字符串 + +### [`REPLACE()`](https://dev.mysql.com/doc/refman/8.0/en/string-functions.html#function_replace) + +替换所有出现的指定字符串 + +### [`REVERSE()`](https://dev.mysql.com/doc/refman/8.0/en/string-functions.html#function_reverse) + +反转字符串里的所有字符 + +### [`RIGHT()`](https://dev.mysql.com/doc/refman/8.0/en/string-functions.html#function_right) + +返回指定数量的最右侧的字符 + +### [`RLIKE`](https://dev.mysql.com/doc/refman/8.0/en/regexp.html#operator_regexp) + +与 `REGEXP` 功能相同 + +### [`RPAD()`](https://dev.mysql.com/doc/refman/8.0/en/string-functions.html#function_rpad) + +以指定次数添加字符串 + +### [`RTRIM()`](https://dev.mysql.com/doc/refman/8.0/en/string-functions.html#function_rtrim) + +去掉后缀空格 + +### [`SPACE()`](https://dev.mysql.com/doc/refman/8.0/en/string-functions.html#function_space) + +返回指定数量的空格,形式为字符串 + +### [`STRCMP()`](https://dev.mysql.com/doc/refman/8.0/en/string-comparison-functions.html#function_strcmp) + +比较两个字符串 + +### [`SUBSTR()`](https://dev.mysql.com/doc/refman/8.0/en/string-functions.html#function_substr) + +返回指定的子字符串 + +### [`SUBSTRING()`](https://dev.mysql.com/doc/refman/8.0/en/string-functions.html#function_substring) + +返回指定的子字符串 + +### [`SUBSTRING_INDEX()`](https://dev.mysql.com/doc/refman/8.0/en/string-functions.html#function_substring-index) + +从一个字符串中返回指定出现次数的定界符之前的子字符串 + +### [`TO_BASE64()`](https://dev.mysql.com/doc/refman/8.0/en/string-functions.html#function_to-base64) + +返回转化为 base-64 表示的字符串参数 + +### [`TRANSLATE()`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/TRANSLATE.html#GUID-80F85ACB-092C-4CC7-91F6-B3A585E3A690) + +将字符串中出现的所有指定字符替换为其它字符。这个函数不会像 Oracle 一样将空字符串视为`NULL` + +### [`TRIM()`](https://dev.mysql.com/doc/refman/8.0/en/string-functions.html#function_trim) + +去掉前缀和后缀空格 + +### [`UCASE()`](https://dev.mysql.com/doc/refman/8.0/en/string-functions.html#function_ucase) + +与 `UPPER()` 功能相同 + +### [`UNHEX()`](https://dev.mysql.com/doc/refman/8.0/en/string-functions.html#function_unhex) + +返回一个数的十六进制表示,形式为字符串 + +### [`UPPER()`](https://dev.mysql.com/doc/refman/8.0/en/string-functions.html#function_upper) + +参数转换为大写形式 + +### [`WEIGHT_STRING()`](https://dev.mysql.com/doc/refman/8.0/en/string-functions.html#function_weight-string) + +返回字符串的权重 ## 不支持的函数 From bb88a5629582ef919a60848a60fb00ca50e8aa9b Mon Sep 17 00:00:00 2001 From: Frank945946 <108602632+Frank945946@users.noreply.github.com> Date: Wed, 22 Nov 2023 15:01:11 +0800 Subject: [PATCH 09/31] Add a limitation for "Import into " SQL statement (#15480) --- sql-statements/sql-statement-import-into.md | 1 + 1 file changed, 1 insertion(+) diff --git a/sql-statements/sql-statement-import-into.md b/sql-statements/sql-statement-import-into.md index 7d76a2af7e72..34405d46bc6b 100644 --- a/sql-statements/sql-statement-import-into.md +++ b/sql-statements/sql-statement-import-into.md @@ -32,6 +32,7 @@ summary: TiDB 数据库中 IMPORT INTO 的使用概况。 - 当使用[全局排序](/tidb-global-sort.md)导入数据时,单行数据的总长度不能超过 32 MiB。 - 当使用全局排序导入数据时,如果 TiDB 集群在导入任务尚未完成时被删除了,Amazon S3 上可能会残留用于全局排序的临时数据。该场景需要手动删除这些数据,以免增加 S3 存储成本。 - 所需导入的数据不能存在主键或非空唯一索引冲突的记录,否则会导致任务失败。 +- 已知问题:在 TiDB 节点配置文件中的 PD 地址与当前集群 PD 拓扑不一致时(如曾经缩容过 PD,但没有对应更新 TiDB 配置文件或者更新该文件后未重启 TiDB 节点),执行 `IMPORT INTO` 会失败。 ## 导入前准备 From 5792f87316ad96d0937e4f63dc1666b58fcfce10 Mon Sep 17 00:00:00 2001 From: dongmen <20351731+asddongmen@users.noreply.github.com> Date: Wed, 22 Nov 2023 17:19:12 +0800 Subject: [PATCH 10/31] add ticdc aws glue schema registry config docs (#15356) --- ticdc/ticdc-changefeed-config.md | 9 +++++++++ ticdc/ticdc-sink-to-kafka.md | 22 ++++++++++++++++++++++ 2 files changed, 31 insertions(+) diff --git a/ticdc/ticdc-changefeed-config.md b/ticdc/ticdc-changefeed-config.md index 6b17fd78071d..93dba5339ffb 100644 --- a/ticdc/ticdc-changefeed-config.md +++ b/ticdc/ticdc-changefeed-config.md @@ -233,6 +233,15 @@ sasl-oauth-grant-type = "client_credentials" # Kafka SASL OAUTHBEARER 认证机制中的 audience。默认值为空。在使用该认证机制时,该参数可选填。 sasl-oauth-audience="kafka" +# 以下配置仅在选用 avro 作为协议,并且使用 AWS Glue Schema Registry 时需要配置 +# 请参考 "同步数据到 Kafka" 这一文档中 "使用 AWS Glue Schema Registry" 这一节内容:https://docs.pingcap.com/zh/tidb/dev/ticdc-sink-to-kafka#ticdc-集成-aws-glue-schema-registry +# [sink.kafka-config.glue-schema-registry-config] +# region="us-west-1" +# registry-name="ticdc-test" +# access-key="xxxx" +# secret-access-key="xxxx" +# tokne="xxxx" + # 以下参数仅在下游为 Pulsar 时生效。 [sink.pulsar-config] # 使用 token 进行 Pulsar 服务端的认证,此处为 token 的值。 diff --git a/ticdc/ticdc-sink-to-kafka.md b/ticdc/ticdc-sink-to-kafka.md index 860487008e7c..24cf4541231c 100644 --- a/ticdc/ticdc-sink-to-kafka.md +++ b/ticdc/ticdc-sink-to-kafka.md @@ -157,6 +157,28 @@ dispatchers = [ 集成具体步骤详见[与 Confluent Cloud 进行数据集成](/ticdc/integrate-confluent-using-ticdc.md)。 +### TiCDC 集成 AWS Glue Schema Registry + +从 v7.4.0 开始,TiCDC 支持在用户选择 Avro 协议同步数据时使用 [AWS Glue Schema Registry](https://docs.aws.amazon.com/glue/latest/dg/schema-registry.html) 作为 Schema Registry。配置样例如下所示: + +```shell +./cdc cli changefeed create --server=127.0.0.1:8300 --changefeed-id="kafka-glue-test" --sink-uri="kafka://127.0.0.1:9092/topic-name?&protocol=avro&replication-factor=3" --config changefeed_glue.toml +``` + +```toml +[sink] +[sink.kafka-config.glue-schema-registry-config] +region="us-west-1" +registry-name="ticdc-test" +access-key="xxxx" +secret-access-key="xxxx" +tokne="xxxx" +``` + +在以上配置中,`region` 和 `registry-name` 是必填项,`access-key`、`secret-access-key` 和 `token` 是可选项。最佳实践是将 AWS 连接凭证设置为环境变量或存储在 `~/.aws/credentials` 文件中,而不是将它们设置在 changefeed 的配置文件中。 + +更多信息,请参阅 [AWS官方文档](https://aws.github.io/aws-sdk-go-v2/docs/configuring-sdk/#specifying-credentials)。 + ## 自定义 Kafka Sink 的 Topic 和 Partition 的分发规则 ### Matcher 匹配规则 From cc3d73a694b60a58beb01b32850779887356b578 Mon Sep 17 00:00:00 2001 From: Cathy <24819510+benmaoer@users.noreply.github.com> Date: Thu, 23 Nov 2023 10:20:42 +0800 Subject: [PATCH 11/31] tidb-binlog: depreciate binlog as a data sync tool (#15342) --- .../bidirectional-replication-between-tidb-clusters.md | 5 ++++- tidb-binlog/tidb-binlog-overview.md | 8 +++++--- tidb-binlog/upgrade-tidb-binlog.md | 6 ++++++ 3 files changed, 15 insertions(+), 4 deletions(-) diff --git a/tidb-binlog/bidirectional-replication-between-tidb-clusters.md b/tidb-binlog/bidirectional-replication-between-tidb-clusters.md index 7a6786e36e14..aebb26241b9d 100644 --- a/tidb-binlog/bidirectional-replication-between-tidb-clusters.md +++ b/tidb-binlog/bidirectional-replication-between-tidb-clusters.md @@ -7,7 +7,10 @@ aliases: ['/docs-cn/dev/tidb-binlog/bidirectional-replication-between-tidb-clust > **警告:** > -> 目前双向同步属于实验特性,尚未经过完备的测试,不建议在生产环境中使用该功能。 +> - 目前双向同步属于实验特性,尚未经过完备的测试,不建议在生产环境中使用该功能。 +> - TiDB Binlog 与 TiDB v5.0 开始引入的一些特性不兼容,无法一起使用,详情参照[注意事项](/tidb-binlog/tidb-binlog-overview.md#注意事项)。 +> - 从 TiDB v7.5.0 开始,TiDB Binlog 组件的数据同步功能不再提供技术支持,强烈建议使用 [TiCDC](/ticdc/ticdc-overview.md) 作为数据同步的替代方案。 +> - 尽管 TiDB v7.5.0 仍支持 TiDB Binlog 组件的实时备份和恢复,但该组件在未来版本中将被完全废弃,推荐使用 [PITR](/br/br-pitr-guide.md) 作为数据恢复的替代方案。 本文档介绍如何将一个 TiDB 集群的数据双向同步到另一个 TiDB 集群、双向同步的实现原理、如何开启双向同步、以及如何同步 DDL 操作。 diff --git a/tidb-binlog/tidb-binlog-overview.md b/tidb-binlog/tidb-binlog-overview.md index 6cb7d1297640..26fbebe7889f 100644 --- a/tidb-binlog/tidb-binlog-overview.md +++ b/tidb-binlog/tidb-binlog-overview.md @@ -9,12 +9,14 @@ TiDB Binlog 是一个用于收集 TiDB 的 binlog,并提供准实时备份和 TiDB Binlog 支持以下功能场景: -- **数据同步**:同步 TiDB 集群数据到其他数据库 -- **实时备份和恢复**:备份 TiDB 集群数据,同时可以用于 TiDB 集群故障时恢复 +- **数据同步**:同步 TiDB 集群数据到其他数据库。 +- **实时备份和恢复**:备份 TiDB 集群数据,同时可以用于 TiDB 集群故障时恢复。 > **注意:** > -> TiDB Binlog 与 TiDB v5.0 版本开始引入的一些特性不兼容,无法一起使用,详情参照[注意事项](#注意事项)。建议使用 [TiCDC](/ticdc/ticdc-overview.md) 替代 TiDB Binlog。 +> - TiDB Binlog 与 TiDB v5.0 开始引入的一些特性不兼容,无法一起使用,详情参照[注意事项](#注意事项)。 +> - 从 TiDB v7.5.0 开始,TiDB Binlog 组件的数据同步功能不再提供技术支持,强烈建议使用 [TiCDC](/ticdc/ticdc-overview.md) 作为数据同步的替代方案。 +> - 尽管 TiDB v7.5.0 仍支持 TiDB Binlog 组件的实时备份和恢复,但该组件在未来版本中将被完全废弃,推荐使用 [PITR](/br/br-pitr-guide.md) 作为数据恢复的替代方案。 要快速了解 Binlog 的基本原理和使用方法,建议先观看下面的培训视频(时长 32 分钟)。注意本视频只为学习参考,具体操作步骤和最新功能,请以文档内容为准。 diff --git a/tidb-binlog/upgrade-tidb-binlog.md b/tidb-binlog/upgrade-tidb-binlog.md index e7cd4f7043bc..8a4b36f6a18f 100644 --- a/tidb-binlog/upgrade-tidb-binlog.md +++ b/tidb-binlog/upgrade-tidb-binlog.md @@ -7,6 +7,12 @@ aliases: ['/docs-cn/dev/tidb-binlog/upgrade-tidb-binlog/','/docs-cn/dev/referenc 如未特别指明,文中出现的 TiDB Binlog 均指最新的 [Cluster](/tidb-binlog/tidb-binlog-overview.md) 版本。 +> **注意:** +> +> - TiDB Binlog 与 TiDB v5.0 开始引入的一些特性不兼容,无法一起使用,详情参照[注意事项](/tidb-binlog/tidb-binlog-overview.md#注意事项)。 +> - 从 TiDB v7.5.0 开始,TiDB Binlog 组件的数据同步功能不再提供技术支持,强烈建议使用 [TiCDC](/ticdc/ticdc-overview.md) 作为数据同步的替代方案。 +> - 尽管 TiDB v7.5.0 仍支持 TiDB Binlog 组件的实时备份和恢复,但该组件在未来版本中将被完全废弃,推荐使用 [PITR](/br/br-pitr-guide.md) 作为数据恢复的替代方案。 + 本文介绍通过手动部署的 TiDB Binlog 的版本升级方法,另外有一小节介绍如何从更早的不兼容版本(Kafka/Local 版本)升级到最新版本。 ## 手动部署 From 9460251d60a0eb1bb0505e4e1014805c092d23c9 Mon Sep 17 00:00:00 2001 From: Jianyuan Jiang Date: Thu, 23 Nov 2023 13:35:41 +0800 Subject: [PATCH 12/31] Update ticdc changefeed filter case senssitive default value (#15439) --- ticdc/ticdc-changefeed-config.md | 6 ++--- ticdc/ticdc-manage-changefeed.md | 4 ++-- ticdc/ticdc-open-api-v2.md | 34 ++++++++++++++-------------- ticdc/ticdc-sink-to-cloud-storage.md | 2 +- ticdc/ticdc-sink-to-kafka.md | 2 +- ticdc/ticdc-sink-to-mysql.md | 2 +- ticdc/ticdc-sink-to-pulsar.md | 2 +- 7 files changed, 26 insertions(+), 26 deletions(-) diff --git a/ticdc/ticdc-changefeed-config.md b/ticdc/ticdc-changefeed-config.md index 93dba5339ffb..cc20d0dd8978 100644 --- a/ticdc/ticdc-changefeed-config.md +++ b/ticdc/ticdc-changefeed-config.md @@ -16,7 +16,7 @@ cdc cli changefeed create --server=http://10.0.10.25:8300 --sink-uri="mysql://ro ```shell Create changefeed successfully! ID: simple-replication-task -Info: {"upstream_id":7178706266519722477,"namespace":"default","id":"simple-replication-task","sink_uri":"mysql://root:xxxxx@127.0.0.1:4000/?time-zone=","create_time":"2022-12-19T15:05:46.679218+08:00","start_ts":438156275634929669,"engine":"unified","config":{"case_sensitive":true,"enable_old_value":true,"force_replicate":false,"ignore_ineligible_table":false,"check_gc_safe_point":true,"enable_sync_point":true,"bdr_mode":false,"sync_point_interval":30000000000,"sync_point_retention":3600000000000,"filter":{"rules":["test.*"],"event_filters":null},"mounter":{"worker_num":16},"sink":{"protocol":"","schema_registry":"","csv":{"delimiter":",","quote":"\"","null":"\\N","include_commit_ts":false},"column_selectors":null,"transaction_atomicity":"none","encoder_concurrency":16,"terminator":"\r\n","date_separator":"none","enable_partition_separator":false},"consistent":{"level":"none","max_log_size":64,"flush_interval":2000,"storage":""}},"state":"normal","creator_version":"v6.5.0"} +Info: {"upstream_id":7178706266519722477,"namespace":"default","id":"simple-replication-task","sink_uri":"mysql://root:xxxxx@127.0.0.1:4000/?time-zone=","create_time":"2023-11-28T15:05:46.679218+08:00","start_ts":438156275634929669,"engine":"unified","config":{"case_sensitive":false,"enable_old_value":true,"force_replicate":false,"ignore_ineligible_table":false,"check_gc_safe_point":true,"enable_sync_point":true,"bdr_mode":false,"sync_point_interval":30000000000,"sync_point_retention":3600000000000,"filter":{"rules":["test.*"],"event_filters":null},"mounter":{"worker_num":16},"sink":{"protocol":"","schema_registry":"","csv":{"delimiter":",","quote":"\"","null":"\\N","include_commit_ts":false},"column_selectors":null,"transaction_atomicity":"none","encoder_concurrency":16,"terminator":"\r\n","date_separator":"none","enable_partition_separator":false},"consistent":{"level":"none","max_log_size":64,"flush_interval":2000,"storage":""}},"state":"normal","creator_version":"v7.5.0"} ``` - `--changefeed-id`:同步任务的 ID,格式需要符合正则表达式 `^[a-zA-Z0-9]+(\-[a-zA-Z0-9]+)*$`。如果不指定该 ID,TiCDC 会自动生成一个 UUID(version 4 格式)作为 ID。 @@ -42,8 +42,8 @@ Info: {"upstream_id":7178706266519722477,"namespace":"default","id":"simple-repl # memory-quota = 1073741824 # 指定配置文件中涉及的库名、表名是否为大小写敏感 -# 该配置会同时影响 filter 和 sink 相关配置,默认为 true -case-sensitive = true +# 该配置会同时影响 filter 和 sink 相关配置。自 v7.5.0 起,默认值由 true 改为 false +case-sensitive = false # 是否开启 Syncpoint 功能,从 v6.3.0 开始支持,该功能默认关闭。 # 从 v6.4.0 开始,使用 Syncpoint 功能需要同步任务拥有下游集群的 SYSTEM_VARIABLES_ADMIN 或者 SUPER 权限。 diff --git a/ticdc/ticdc-manage-changefeed.md b/ticdc/ticdc-manage-changefeed.md index a9796bd32b7f..e389699b8563 100644 --- a/ticdc/ticdc-manage-changefeed.md +++ b/ticdc/ticdc-manage-changefeed.md @@ -19,7 +19,7 @@ cdc cli changefeed create --server=http://10.0.10.25:8300 --sink-uri="mysql://ro ```shell Create changefeed successfully! ID: simple-replication-task -Info: {"upstream_id":7178706266519722477,"namespace":"default","id":"simple-replication-task","sink_uri":"mysql://root:xxxxx@127.0.0.1:4000/?time-zone=","create_time":"2022-12-19T15:05:46.679218+08:00","start_ts":438156275634929669,"engine":"unified","config":{"case_sensitive":true,"enable_old_value":true,"force_replicate":false,"ignore_ineligible_table":false,"check_gc_safe_point":true,"enable_sync_point":true,"bdr_mode":false,"sync_point_interval":30000000000,"sync_point_retention":3600000000000,"filter":{"rules":["test.*"],"event_filters":null},"mounter":{"worker_num":16},"sink":{"protocol":"","schema_registry":"","csv":{"delimiter":",","quote":"\"","null":"\\N","include_commit_ts":false},"column_selectors":null,"transaction_atomicity":"none","encoder_concurrency":16,"terminator":"\r\n","date_separator":"none","enable_partition_separator":false},"consistent":{"level":"none","max_log_size":64,"flush_interval":2000,"storage":""}},"state":"normal","creator_version":"v6.5.0"} +Info: {"upstream_id":7178706266519722477,"namespace":"default","id":"simple-replication-task","sink_uri":"mysql://root:xxxxx@127.0.0.1:4000/?time-zone=","create_time":"2023-11-28T15:05:46.679218+08:00","start_ts":438156275634929669,"engine":"unified","config":{"case_sensitive":false,"enable_old_value":true,"force_replicate":false,"ignore_ineligible_table":false,"check_gc_safe_point":true,"enable_sync_point":true,"bdr_mode":false,"sync_point_interval":30000000000,"sync_point_retention":3600000000000,"filter":{"rules":["test.*"],"event_filters":null},"mounter":{"worker_num":16},"sink":{"protocol":"","schema_registry":"","csv":{"delimiter":",","quote":"\"","null":"\\N","include_commit_ts":false},"column_selectors":null,"transaction_atomicity":"none","encoder_concurrency":16,"terminator":"\r\n","date_separator":"none","enable_partition_separator":false},"consistent":{"level":"none","max_log_size":64,"flush_interval":2000,"storage":""}},"state":"normal","creator_version":"v7.5.0"} ``` ## 查询同步任务列表 @@ -91,7 +91,7 @@ cdc cli changefeed query --server=http://10.0.10.25:8300 --changefeed-id=simple- "sort-engine": "unified", "sort-dir": ".", "config": { - "case-sensitive": true, + "case-sensitive": false, "filter": { "rules": [ "*.*" diff --git a/ticdc/ticdc-open-api-v2.md b/ticdc/ticdc-open-api-v2.md index be55ffbacd61..f7da3c39c430 100644 --- a/ticdc/ticdc-open-api-v2.md +++ b/ticdc/ticdc-open-api-v2.md @@ -145,7 +145,7 @@ curl -X GET http://127.0.0.1:8300/api/v2/health "changefeed_id": "string", "replica_config": { "bdr_mode": true, - "case_sensitive": true, + "case_sensitive": false, "check_gc_safe_point": true, "consistent": { "flush_interval": 0, @@ -261,21 +261,21 @@ curl -X GET http://127.0.0.1:8300/api/v2/health `replica_config` 参数说明如下: -| 参数名 | 说明 | -|:--------------------------|:----------------------------------------------------------------------------------------------------| -| `bdr_mode` | `BOOLEAN` 类型,是否开启[双向同步复制](/ticdc/ticdc-bidirectional-replication.md)。默认值为 `false`。(非必选) | -| `case_sensitive` | `BOOLEAN` 类型,过滤表名时大小写是否敏感,默认值为 `true`。(非必选) | -| `check_gc_safe_point` | `BOOLEAN` 类型,是否检查同步任务的开始时间早于 GC 时间,默认值为 `true`。(非必选) | -| `consistent` | Redo log 配置。(非必选) | -| `enable_sync_point` | `BOOLEAN` 类型,是否开启 `sync point` 功能。(非必选) | -| `filter` | filter 配置。(非必选) | -| `force_replicate` | `BOOLEAN` 类型,该值默认为 `false`,当指定为 `true` 时,同步任务会尝试强制同步没有唯一索引的表。(非必选) | -| `ignore_ineligible_table` | `BOOLEAN` 类型,该值默认为 `false`,当指定为 `true` 时,同步任务会忽略无法进行同步的表。(非必选) | -| `memory_quota` | `UINT64` 类型,同步任务的内存 quota。(非必选) | -| `mounter` | 同步任务 `mounter` 配置。(非必选) | -| `sink` | 同步任务的`sink`配置。(非必选) | +| 参数名 | 说明 | +|:--------------------------|:---------------------------------------------------------------------------------------------------------| +| `bdr_mode` | `BOOLEAN` 类型,是否开启[双向同步复制](/ticdc/ticdc-bidirectional-replication.md)。默认值为 `false`。(非必选) | +| `case_sensitive` | `BOOLEAN` 类型,过滤表名时大小写是否敏感。自 v7.5.0 起,默认值由 `true` 改为 `false`。(非必选) | +| `check_gc_safe_point` | `BOOLEAN` 类型,是否检查同步任务的开始时间早于 GC 时间,默认值为 `true`。(非必选) | +| `consistent` | Redo log 配置。(非必选) | +| `enable_sync_point` | `BOOLEAN` 类型,是否开启 `sync point` 功能。(非必选) | +| `filter` | filter 配置。(非必选) | +| `force_replicate` | `BOOLEAN` 类型,该值默认为 `false`,当指定为 `true` 时,同步任务会尝试强制同步没有唯一索引的表。(非必选) | +| `ignore_ineligible_table` | `BOOLEAN` 类型,该值默认为 `false`,当指定为 `true` 时,同步任务会忽略无法进行同步的表。(非必选) | +| `memory_quota` | `UINT64` 类型,同步任务的内存 quota。(非必选) | +| `mounter` | 同步任务 `mounter` 配置。(非必选) | +| `sink` | 同步任务的`sink`配置。(非必选) | | `sync_point_interval` | `STRING` 类型,注意返回值为 `UINT64` 类型的纳秒级时间,`sync point` 功能开启时,对齐上下游 snapshot 的时间间隔。默认值为 `10m`,最小值为 `30s`。(非必选) | -| `sync_point_retention` | `STRING` 类型,注意返回值为 `UINT64` 类型的纳秒级时间,`sync point` 功能开启时,在下游表中保存的数据的时长,超过这个时间的数据会被清理。默认值为 `24h`。(非必选) | +| `sync_point_retention` | `STRING` 类型,注意返回值为 `UINT64` 类型的纳秒级时间,`sync point` 功能开启时,在下游表中保存的数据的时长,超过这个时间的数据会被清理。默认值为 `24h`。(非必选) | `consistent` 参数说明如下: @@ -381,7 +381,7 @@ curl -X POST -H "'Content-type':'application/json'" http://127.0.0.1:8300/api/v2 "checkpoint_ts": 0, "config": { "bdr_mode": true, - "case_sensitive": true, + "case_sensitive": false, "check_gc_safe_point": true, "consistent": { "flush_interval": 0, @@ -585,7 +585,7 @@ curl -X DELETE http://127.0.0.1:8300/api/v2/changefeeds/test1 { "replica_config": { "bdr_mode": true, - "case_sensitive": true, + "case_sensitive": false, "check_gc_safe_point": true, "consistent": { "flush_interval": 0, diff --git a/ticdc/ticdc-sink-to-cloud-storage.md b/ticdc/ticdc-sink-to-cloud-storage.md index 908ac3adfe8e..30cebb1db4fe 100644 --- a/ticdc/ticdc-sink-to-cloud-storage.md +++ b/ticdc/ticdc-sink-to-cloud-storage.md @@ -24,7 +24,7 @@ cdc cli changefeed create \ 输出结果如下: ```shell -Info: {"upstream_id":7171388873935111376,"namespace":"default","id":"simple-replication-task","sink_uri":"s3://logbucket/storage_test?protocol=canal-json","create_time":"2022-11-29T18:52:05.566016967+08:00","start_ts":437706850431664129,"engine":"unified","config":{"case_sensitive":true,"enable_old_value":true,"force_replicate":false,"ignore_ineligible_table":false,"check_gc_safe_point":true,"enable_sync_point":false,"sync_point_interval":600000000000,"sync_point_retention":86400000000000,"filter":{"rules":["*.*"],"event_filters":null},"mounter":{"worker_num":16},"sink":{"protocol":"canal-json","schema_registry":"","csv":{"delimiter":",","quote":"\"","null":"\\N","include_commit_ts":false},"column_selectors":null,"transaction_atomicity":"none","encoder_concurrency":16,"terminator":"\r\n","date_separator":"none","enable_partition_separator":false},"consistent":{"level":"none","max_log_size":64,"flush_interval":2000,"storage":""}},"state":"normal","creator_version":"v6.5.0-master-dirty"} +Info: {"upstream_id":7171388873935111376,"namespace":"default","id":"simple-replication-task","sink_uri":"s3://logbucket/storage_test?protocol=canal-json","create_time":"2023-11-28T18:52:05.566016967+08:00","start_ts":437706850431664129,"engine":"unified","config":{"case_sensitive":false,"enable_old_value":true,"force_replicate":false,"ignore_ineligible_table":false,"check_gc_safe_point":true,"enable_sync_point":false,"sync_point_interval":600000000000,"sync_point_retention":86400000000000,"filter":{"rules":["*.*"],"event_filters":null},"mounter":{"worker_num":16},"sink":{"protocol":"canal-json","schema_registry":"","csv":{"delimiter":",","quote":"\"","null":"\\N","include_commit_ts":false},"column_selectors":null,"transaction_atomicity":"none","encoder_concurrency":16,"terminator":"\r\n","date_separator":"none","enable_partition_separator":false},"consistent":{"level":"none","max_log_size":64,"flush_interval":2000,"storage":""}},"state":"normal","creator_version":"v7.5.0"} ``` - `--server`:TiCDC 集群中任意一个 TiCDC 服务器的地址。 diff --git a/ticdc/ticdc-sink-to-kafka.md b/ticdc/ticdc-sink-to-kafka.md index 24cf4541231c..edc4223ebda9 100644 --- a/ticdc/ticdc-sink-to-kafka.md +++ b/ticdc/ticdc-sink-to-kafka.md @@ -21,7 +21,7 @@ cdc cli changefeed create \ ```shell Create changefeed successfully! ID: simple-replication-task -Info: {"sink-uri":"kafka://127.0.0.1:9092/topic-name?protocol=canal-json&kafka-version=2.4.0&partition-num=6&max-message-bytes=67108864&replication-factor=1","opts":{},"create-time":"2020-03-12T22:04:08.103600025+08:00","start-ts":415241823337054209,"target-ts":0,"admin-job-type":0,"sort-engine":"unified","sort-dir":".","config":{"case-sensitive":true,"filter":{"rules":["*.*"],"ignore-txn-start-ts":null,"ddl-allow-list":null},"mounter":{"worker-num":16},"sink":{"dispatchers":null},"scheduler":{"type":"table-number","polling-time":-1}},"state":"normal","history":null,"error":null} +Info: {"sink-uri":"kafka://127.0.0.1:9092/topic-name?protocol=canal-json&kafka-version=2.4.0&partition-num=6&max-message-bytes=67108864&replication-factor=1","opts":{},"create-time":"2023-11-28T22:04:08.103600025+08:00","start-ts":415241823337054209,"target-ts":0,"admin-job-type":0,"sort-engine":"unified","sort-dir":".","config":{"case-sensitive":false,"filter":{"rules":["*.*"],"ignore-txn-start-ts":null,"ddl-allow-list":null},"mounter":{"worker-num":16},"sink":{"dispatchers":null},"scheduler":{"type":"table-number","polling-time":-1}},"state":"normal","history":null,"error":null} ``` - `--server`:TiCDC 集群中任意一个 TiCDC 服务器的地址。 diff --git a/ticdc/ticdc-sink-to-mysql.md b/ticdc/ticdc-sink-to-mysql.md index 2e7665938578..29ceb8ee9ead 100644 --- a/ticdc/ticdc-sink-to-mysql.md +++ b/ticdc/ticdc-sink-to-mysql.md @@ -21,7 +21,7 @@ cdc cli changefeed create \ ```shell Create changefeed successfully! ID: simple-replication-task -Info: {"sink-uri":"mysql://root:123456@127.0.0.1:3306/","opts":{},"create-time":"2020-03-12T22:04:08.103600025+08:00","start-ts":415241823337054209,"target-ts":0,"admin-job-type":0,"sort-engine":"unified","sort-dir":".","config":{"case-sensitive":true,"filter":{"rules":["*.*"],"ignore-txn-start-ts":null,"ddl-allow-list":null},"mounter":{"worker-num":16},"sink":{"dispatchers":null},"scheduler":{"type":"table-number","polling-time":-1}},"state":"normal","history":null,"error":null} +Info: {"sink-uri":"mysql://root:123456@127.0.0.1:3306/","opts":{},"create-time":"2023-11-28T22:04:08.103600025+08:00","start-ts":415241823337054209,"target-ts":0,"admin-job-type":0,"sort-engine":"unified","sort-dir":".","config":{"case-sensitive":false,"filter":{"rules":["*.*"],"ignore-txn-start-ts":null,"ddl-allow-list":null},"mounter":{"worker-num":16},"sink":{"dispatchers":null},"scheduler":{"type":"table-number","polling-time":-1}},"state":"normal","history":null,"error":null} ``` - `--server`:TiCDC 集群中任意一个 TiCDC 服务器的地址。 diff --git a/ticdc/ticdc-sink-to-pulsar.md b/ticdc/ticdc-sink-to-pulsar.md index a68d2c1fa33d..c560ee9a20db 100644 --- a/ticdc/ticdc-sink-to-pulsar.md +++ b/ticdc/ticdc-sink-to-pulsar.md @@ -23,7 +23,7 @@ cdc cli changefeed create \ Create changefeed successfully! ID: simple-replication-task -Info: {"upstream_id":7277814241002263370,"namespace":"default","id":"simple-replication-task","sink_uri":"pulsar://127.0.0.1:6650/consumer-test?protocol=canal-json","create_time":"2023-09-12T14:42:32.000904+08:00","start_ts":444203257406423044,"config":{"memory_quota":1073741824,"case_sensitive":true,"force_replicate":false,"ignore_ineligible_table":false,"check_gc_safe_point":true,"enable_sync_point":false,"bdr_mode":false,"sync_point_interval":600000000000,"sync_point_retention":86400000000000,"filter":{"rules":["pulsar_test.*"]},"mounter":{"worker_num":16},"sink":{"protocol":"canal-json","csv":{"delimiter":",","quote":"\"","null":"\\N","include_commit_ts":false,"binary_encoding_method":"base64"},"dispatchers":[{"matcher":["pulsar_test.*"],"partition":"","topic":"test_{schema}_{table}"}],"encoder_concurrency":16,"terminator":"\r\n","date_separator":"day","enable_partition_separator":true,"enable_kafka_sink_v2":false,"only_output_updated_columns":false,"delete_only_output_handle_key_columns":false,"pulsar_config":{"connection-timeout":30,"operation-timeout":30,"batching-max-messages":1000,"batching-max-publish-delay":10,"send-timeout":30},"advance_timeout":150},"consistent":{"level":"none","max_log_size":64,"flush_interval":2000,"use_file_backend":false},"scheduler":{"enable_table_across_nodes":false,"region_threshold":100000,"write_key_threshold":0},"integrity":{"integrity_check_level":"none","corruption_handle_level":"warn"}},"state":"normal","creator_version":"v7.4.0-master-dirty","resolved_ts":444203257406423044,"checkpoint_ts":444203257406423044,"checkpoint_time":"2023-09-12 14:42:31.410"} +Info: {"upstream_id":7277814241002263370,"namespace":"default","id":"simple-replication-task","sink_uri":"pulsar://127.0.0.1:6650/consumer-test?protocol=canal-json","create_time":"2023-11-28T14:42:32.000904+08:00","start_ts":444203257406423044,"config":{"memory_quota":1073741824,"case_sensitive":false,"force_replicate":false,"ignore_ineligible_table":false,"check_gc_safe_point":true,"enable_sync_point":false,"bdr_mode":false,"sync_point_interval":600000000000,"sync_point_retention":86400000000000,"filter":{"rules":["pulsar_test.*"]},"mounter":{"worker_num":16},"sink":{"protocol":"canal-json","csv":{"delimiter":",","quote":"\"","null":"\\N","include_commit_ts":false,"binary_encoding_method":"base64"},"dispatchers":[{"matcher":["pulsar_test.*"],"partition":"","topic":"test_{schema}_{table}"}],"encoder_concurrency":16,"terminator":"\r\n","date_separator":"day","enable_partition_separator":true,"enable_kafka_sink_v2":false,"only_output_updated_columns":false,"delete_only_output_handle_key_columns":false,"pulsar_config":{"connection-timeout":30,"operation-timeout":30,"batching-max-messages":1000,"batching-max-publish-delay":10,"send-timeout":30},"advance_timeout":150},"consistent":{"level":"none","max_log_size":64,"flush_interval":2000,"use_file_backend":false},"scheduler":{"enable_table_across_nodes":false,"region_threshold":100000,"write_key_threshold":0},"integrity":{"integrity_check_level":"none","corruption_handle_level":"warn"}},"state":"normal","creator_version":"v7.5.0","resolved_ts":444203257406423044,"checkpoint_ts":444203257406423044,"checkpoint_time":"2023-09-12 14:42:31.410"} ``` 各参数的含义如下: From aa0750617c307a3d90b4db8c209079e1fb807aba Mon Sep 17 00:00:00 2001 From: xixirangrang Date: Thu, 23 Nov 2023 14:56:41 +0800 Subject: [PATCH 13/31] Clarify statement on backup-and-restore-using-dumpling page (#15488) --- ...up-and-restore-using-dumpling-lightning.md | 45 ++++++++++++++----- dm/dm-hardware-and-software-requirements.md | 41 +++++++++++------ migrate-large-mysql-to-tidb.md | 33 +++++++++++--- tidb-lightning/tidb-lightning-requirements.md | 37 ++++++++++----- 4 files changed, 114 insertions(+), 42 deletions(-) diff --git a/backup-and-restore-using-dumpling-lightning.md b/backup-and-restore-using-dumpling-lightning.md index f3c7d854c0d7..16b6a3996d62 100644 --- a/backup-and-restore-using-dumpling-lightning.md +++ b/backup-and-restore-using-dumpling-lightning.md @@ -7,20 +7,22 @@ summary: 了解如何使用 Dumpling 和 TiDB Lightning 备份与恢复集群数 本文档介绍如何使用 Dumpling 和 TiDB Lightning 进行全量备份与恢复。 -在备份与恢复场景中,如果需要全量备份少量数据(例如小于 50 GB),且不要求备份速度,你可以使用 [Dumpling](/dumpling-overview.md) 从 TiDB 数据库导出数据进行备份,再使用 [TiDB Lightning](/tidb-lightning/tidb-lightning-overview.md) 将数据导入至 TiDB 数据库实现恢复。更多备份与恢复的相关信息,参见 [TiDB 备份与恢复概述](/br/backup-and-restore-overview.md)。 +在备份与恢复场景中,如果需要全量备份少量数据(例如小于 50 GiB),且不要求备份速度,你可以使用 [Dumpling](/dumpling-overview.md) 从 TiDB 数据库导出数据进行备份,再使用 [TiDB Lightning](/tidb-lightning/tidb-lightning-overview.md) 将数据导入至 TiDB 数据库实现恢复。 + +如果需要备份大量数据,建议使用 [BR](/br/backup-and-restore-overview.md)。注意,Dumpling 也可以用于导出大量数据,但 BR 是更好的工具。 ## 前提条件 -- 安装和运行 Dumpling: +- 安装 Dumpling: ```shell - tiup install dumpling && tiup dumpling + tiup install dumpling ``` -- 安装和运行 TiDB Lightning: +- 安装 TiDB Lightning: ```shell - tiup install tidb lightning && tiup tidb lightning + tiup install tidb-lightning ``` - [获取 Dumpling 所需上游数据库权限](/dumpling-overview.md#从-tidbmysql-导出数据) @@ -41,14 +43,35 @@ summary: 了解如何使用 Dumpling 和 TiDB Lightning 备份与恢复集群数 - Dumpling 需要能够储存整个数据源的存储空间,即可以容纳要导出的所有上游表的空间。计算方式参考[目标数据库所需空间](/tidb-lightning/tidb-lightning-requirements.md#目标数据库所需空间)。 - TiDB Lightning 导入期间,需要临时空间来存储排序键值对,磁盘空间需要至少能存储数据源的最大单表。 -**说明**:目前无法精确计算 Dumpling 从 TiDB 导出的数据大小,但你可以用下面 SQL 语句统计信息表的 `data_length` 字段估算数据量: +**说明**:目前无法精确计算 Dumpling 从 TiDB 导出的数据大小,但你可以用下面 SQL 语句统计信息表的 `DATA_LENGTH` 字段估算数据量: ```sql -/* 统计所有 schema 大小,单位 MiB,注意修改 ${schema_name} */ -SELECT table_schema,SUM(data_length)/1024/1024 AS data_length,SUM(index_length)/1024/1024 AS index_length,SUM(data_length+index_length)/1024/1024 AS SUM FROM information_schema.tables WHERE table_schema = "${schema_name}" GROUP BY table_schema; - -/* 统计最大单表,单位 MiB,注意修改 ${schema_name} */ -SELECT table_name,table_schema,SUM(data_length)/1024/1024 AS data_length,SUM(index_length)/1024/1024 AS index_length,SUM(data_length+index_length)/1024/1024 AS SUM from information_schema.tables WHERE table_schema = "${schema_name}" GROUP BY table_name,table_schema ORDER BY SUM DESC LIMIT 5; +-- 统计所有 schema 大小 +SELECT + TABLE_SCHEMA, + FORMAT_BYTES(SUM(DATA_LENGTH)) AS 'Data Size', + FORMAT_BYTES(SUM(INDEX_LENGTH)) 'Index Size' +FROM + information_schema.tables +GROUP BY + TABLE_SCHEMA; + +-- 统计最大的 5 个单表 +SELECT + TABLE_NAME, + TABLE_SCHEMA, + FORMAT_BYTES(SUM(data_length)) AS 'Data Size', + FORMAT_BYTES(SUM(index_length)) AS 'Index Size', + FORMAT_BYTES(SUM(data_length+index_length)) AS 'Total Size' +FROM + information_schema.tables +GROUP BY + TABLE_NAME, + TABLE_SCHEMA +ORDER BY + SUM(DATA_LENGTH+INDEX_LENGTH) DESC +LIMIT + 5; ``` ### 目标 TiKV 集群的磁盘空间要求 diff --git a/dm/dm-hardware-and-software-requirements.md b/dm/dm-hardware-and-software-requirements.md index a7c8318b584f..e7a180a0701d 100644 --- a/dm/dm-hardware-and-software-requirements.md +++ b/dm/dm-hardware-and-software-requirements.md @@ -55,20 +55,33 @@ DM 支持部署和运行在 Intel x86-64 架构的 64 位通用硬件服务器 - 索引会占据额外的空间 - RocksDB 的空间放大效应 -可以用下面 SQL 语句统计信息表的 data_length 字段估算数据量: - -统计所有 schema 大小,单位 MiB,注意修改 ${schema_name} - -{{< copyable "sql" >}} - -```sql -select table_schema,sum(data_length)/1024/1024 as data_length,sum(index_length)/1024/1024 as index_length,sum(data_length+index_length)/1024/1024 as sum from information_schema.tables where table_schema = "${schema_name}" group by table_schema; -``` - -统计最大单表,单位 MiB,注意修改 ${schema_name} - -{{< copyable "sql" >}} +可以用下面 SQL 语句统计信息表的 `DATA_LENGTH` 字段估算数据量: ```sql -select table_name,table_schema,sum(data_length)/1024/1024 as data_length,sum(index_length)/1024/1024 as index_length,sum(data_length+index_length)/1024/1024 as sum from information_schema.tables where table_schema = "${schema_name}" group by table_name,table_schema order by sum desc limit 5; +-- 统计所有 schema 大小 +SELECT + TABLE_SCHEMA, + FORMAT_BYTES(SUM(DATA_LENGTH)) AS 'Data Size', + FORMAT_BYTES(SUM(INDEX_LENGTH)) 'Index Size' +FROM + information_schema.tables +GROUP BY + TABLE_SCHEMA; + +-- 统计最大的 5 个单表 +SELECT + TABLE_NAME, + TABLE_SCHEMA, + FORMAT_BYTES(SUM(data_length)) AS 'Data Size', + FORMAT_BYTES(SUM(index_length)) AS 'Index Size', + FORMAT_BYTES(SUM(data_length+index_length)) AS 'Total Size' +FROM + information_schema.tables +GROUP BY + TABLE_NAME, + TABLE_SCHEMA +ORDER BY + SUM(DATA_LENGTH+INDEX_LENGTH) DESC +LIMIT + 5; ``` \ No newline at end of file diff --git a/migrate-large-mysql-to-tidb.md b/migrate-large-mysql-to-tidb.md index d4ba5a1a83f0..875eb2d81ac3 100644 --- a/migrate-large-mysql-to-tidb.md +++ b/migrate-large-mysql-to-tidb.md @@ -29,14 +29,35 @@ summary: 介绍如何从大数据量 MySQL 迁移数据到 TiDB。 - TiDB Lightning 导入期间,需要临时空间来存储排序键值对,磁盘空间需要至少能存储数据源的最大单表。 - 若全量数据量较大,可适当加长上游 binlog 保存时间,以避免增量同步时缺必要 binlog 导致重做。 -**说明**:目前无法精确计算 Dumpling 从 MySQL 导出的数据大小,但你可以用下面 SQL 语句统计信息表的 `data_length` 字段估算数据量: +**说明**:目前无法精确计算 Dumpling 从 MySQL 导出的数据大小,但你可以用下面 SQL 语句统计信息表的 `DATA_LENGTH` 字段估算数据量: ```sql -/* 统计所有 schema 大小,单位 MiB,注意修改 ${schema_name} */ -SELECT table_schema,SUM(data_length)/1024/1024 AS data_length,SUM(index_length)/1024/1024 AS index_length,SUM(data_length+index_length)/1024/1024 AS SUM FROM information_schema.tables WHERE table_schema = "${schema_name}" GROUP BY table_schema; - -/* 统计最大单表,单位 MiB,注意修改 ${schema_name} */ -SELECT table_name,table_schema,SUM(data_length)/1024/1024 AS data_length,SUM(index_length)/1024/1024 AS index_length,SUM(data_length+index_length)/1024/1024 AS SUM from information_schema.tables WHERE table_schema = "${schema_name}" GROUP BY table_name,table_schema ORDER BY SUM DESC LIMIT 5; +-- 统计所有 schema 大小 +SELECT + TABLE_SCHEMA, + FORMAT_BYTES(SUM(DATA_LENGTH)) AS 'Data Size', + FORMAT_BYTES(SUM(INDEX_LENGTH)) 'Index Size' +FROM + information_schema.tables +GROUP BY + TABLE_SCHEMA; + +-- 统计最大的 5 个单表 +SELECT + TABLE_NAME, + TABLE_SCHEMA, + FORMAT_BYTES(SUM(data_length)) AS 'Data Size', + FORMAT_BYTES(SUM(index_length)) AS 'Index Size', + FORMAT_BYTES(SUM(data_length+index_length)) AS 'Total Size' +FROM + information_schema.tables +GROUP BY + TABLE_NAME, + TABLE_SCHEMA +ORDER BY + SUM(DATA_LENGTH+INDEX_LENGTH) DESC +LIMIT + 5; ``` ### 目标 TiKV 集群的磁盘空间要求 diff --git a/tidb-lightning/tidb-lightning-requirements.md b/tidb-lightning/tidb-lightning-requirements.md index d1defe6c9bb8..c86346282ce4 100644 --- a/tidb-lightning/tidb-lightning-requirements.md +++ b/tidb-lightning/tidb-lightning-requirements.md @@ -84,20 +84,35 @@ TiDB Lightning 导入数据时,根据导入方式和启用特性等,需要 - 索引会占据额外的空间 - RocksDB 的空间放大效应 -目前无法精确计算 Dumpling 从 MySQL 导出的数据大小,但你可以用下面 SQL 语句统计信息表的 data_length 字段估算数据量: +目前无法精确计算 Dumpling 从 MySQL 导出的数据大小,但你可以用下面 SQL 语句统计信息表的 `DATA_LENGTH` 字段估算数据量: 统计所有 schema 大小,单位 MiB,注意修改 ${schema_name} -{{< copyable "sql" >}} - ```sql -SELECT table_schema, SUM(data_length)/1024/1024 AS data_length, SUM(index_length)/1024/1024 AS index_length, SUM(data_length+index_length)/1024/1024 AS sum FROM information_schema.tables WHERE table_schema = "${schema_name}" GROUP BY table_schema; -``` - -统计最大单表,单位 MiB,注意修改 ${schema_name} +-- 统计所有 schema 大小 +SELECT + TABLE_SCHEMA, + FORMAT_BYTES(SUM(DATA_LENGTH)) AS 'Data Size', + FORMAT_BYTES(SUM(INDEX_LENGTH)) 'Index Size' +FROM + information_schema.tables +GROUP BY + TABLE_SCHEMA; -{{< copyable "sql" >}} - -```sql -SELECT table_name, table_schema, SUM(data_length)/1024/1024 AS data_length, SUM(index_length)/1024/1024 AS index_length, SUM(data_length+index_length)/1024/1024 AS sum FROM information_schema.tables WHERE table_schema = "${schema_name}" GROUP BY table_name,table_schema ORDER BY sum DESC LIMIT 5; +-- 统计最大的 5 个单表 +SELECT + TABLE_NAME, + TABLE_SCHEMA, + FORMAT_BYTES(SUM(data_length)) AS 'Data Size', + FORMAT_BYTES(SUM(index_length)) AS 'Index Size', + FORMAT_BYTES(SUM(data_length+index_length)) AS 'Total Size' +FROM + information_schema.tables +GROUP BY + TABLE_NAME, + TABLE_SCHEMA +ORDER BY + SUM(DATA_LENGTH+INDEX_LENGTH) DESC +LIMIT + 5; ``` \ No newline at end of file From 0ec25ddceb6ec09d9af1c400695609b8ac0b4f0e Mon Sep 17 00:00:00 2001 From: ShuNing Date: Thu, 23 Nov 2023 15:40:11 +0800 Subject: [PATCH 14/31] *: update resource control about background example (#15469) --- releases/release-7.4.0.md | 1 + system-variables.md | 9 +++++++ tidb-resource-control.md | 49 ++++++++++++++++++++++++++++----------- 3 files changed, 46 insertions(+), 13 deletions(-) diff --git a/releases/release-7.4.0.md b/releases/release-7.4.0.md index 0f9b6eca738a..686d8e4007e0 100644 --- a/releases/release-7.4.0.md +++ b/releases/release-7.4.0.md @@ -296,6 +296,7 @@ TiDB 版本:7.4.0 | [`tidb_cloud_storage_uri`](/system-variables.md#tidb_cloud_storage_uri-从-v740-版本开始引入) | 新增 | 该变量用于指定[全局排序](/tidb-global-sort.md)中使用的云存储的 URI。 | | [`tidb_opt_enable_hash_join`](/system-variables.md#tidb_opt_enable_hash_join-从-v740-版本开始引入) | 新增 | 控制优化器是否会选择表的哈希连接。默认打开 (`ON`)。设置为 `OFF` 时,除非没有计划可用,否则优化器会避免选择表的哈希连接。 | | [`tidb_opt_objective`](/system-variables.md#tidb_opt_objective-从-v740-版本开始引入) | 新增 | 该变量用于设置优化器优化目标。`moderate` 维持旧版本的默认行为,优化器会利用更多信息尝试生成更优的计划;`determinate` 则倾向于保守,保持执行计划稳定。 | +| [`tidb_request_source_type`](/system-variables.md#tidb_request_source_type-从-v740-版本开始引入) | 新增 | 该变量用于显式指定当前会话的任务类型,用于[资源管控](/tidb-resource-control.md)识别并控制。如 `SET @@tidb_request_source_type = "background"`。 | | [`tidb_schema_version_cache_limit`](/system-variables.md#tidb_schema_version_cache_limit-从-v740-版本开始引入) | 新增 | 该变量用于限制 TiDB 实例可以缓存多少个历史版本的表结构信息。默认值为 `16`,即默认缓存 16 个历史版本的表结构信息。| | [`tidb_service_scope`](/system-variables.md#tidb_service_scope-从-v740-版本开始引入) | 新增 | 该变量是一个实例级别的变量,用于控制 [TiDB 后端任务分布式框架](/tidb-distributed-execution-framework.md)下各 TiDB 节点的服务范围。当设置 TiDB 节点的 `tidb_service_scope` 为 `background` 时,后端任务分布式框架将调度该节点执行后端任务(如 [`ADD INDEX`](/sql-statements/sql-statement-add-index.md) 和 [`IMPORT INTO`](/sql-statements/sql-statement-import-into.md))。 | | [`tidb_session_alias`](/system-variables.md#tidb_session_alias-从-v740-版本开始引入) | 新增 | 用来自定义当前会话相关日志中 `session_alias` 列的值。 | diff --git a/system-variables.md b/system-variables.md index 1880080bf168..60fa15cac27d 100644 --- a/system-variables.md +++ b/system-variables.md @@ -4086,6 +4086,15 @@ EXPLAIN FORMAT='brief' SELECT COUNT(1) FROM t WHERE a = 1 AND b IS NOT NULL; - 这个变量用于控制 TiDB 的 Follower Read 功能的行为。 - 关于使用方式与实现原理,见 [Follower Read](/follower-read.md)。 +### `tidb_request_source_type` 从 v7.4.0 版本开始引入 + +- 作用域:SESSION +- 是否受 Hint [SET_VAR](/optimizer-hints.md#set_varvar_namevar_value) 控制:否 +- 类型:字符串 +- 默认值:`""` +- 可选值:`"ddl"`、`"stats"`、`"br"`、`"lightning"`、`"background"` +- 显式指定当前会话的任务类型,用于[资源管控](/tidb-resource-control.md)识别并控制。如 `SET @@tidb_request_source_type = "background"`。 + ### `tidb_retry_limit` - 作用域:SESSION | GLOBAL diff --git a/tidb-resource-control.md b/tidb-resource-control.md index 9671e0f317ff..9b6fa8d7568c 100644 --- a/tidb-resource-control.md +++ b/tidb-resource-control.md @@ -56,7 +56,7 @@ Request Unit (RU) 是 TiDB 对 CPU、IO 等系统资源的统一抽象的计量 Write - 1 storage write batch 消耗 1 RU * 副本数 + 1 storage write batch 消耗 1 RU 1 storage write request 消耗 1 RU @@ -71,13 +71,11 @@ Request Unit (RU) 是 TiDB 对 CPU、IO 等系统资源的统一抽象的计量 -目前 TiFlash 资源管控仅考虑 SQL CPU(即查询的 pipeline task 运行所占用的 CPU 时间)以及 read request payload。 - > **注意:** > > - 每个写操作最终都被会复制到所有副本(TiKV 默认 3 个数据副本),并且每次复制都被认为是一个不同的写操作。 -> - 除了用户执行的查询之外,RU 还可以被后台任务消耗,例如自动统计信息收集。 > - 上表只列举了本地部署的 TiDB 计算 RU 时涉及的相关资源,其中不包括网络和存储部分。TiDB Serverless 的 RU 可参考 [TiDB Serverless Pricing Details](https://www.pingcap.com/tidb-cloud-serverless-pricing-details/)。 +> - 目前 TiFlash 资源管控仅考虑 SQL CPU(即查询的 pipeline task 运行所占用的 CPU 时间)以及 read request payload。 ## 估算 SQL 所消耗的 RU @@ -368,33 +366,58 @@ Runaway Query 是指执行时间或消耗资源超出预期的查询。下面使 - `br`:使用 [BR](/br/backup-and-restore-overview.md) 执行数据备份和恢复。目前不支持 PITR。 - `ddl`:对于 Reorg DDL,控制批量数据回写阶段的资源使用。 - `stats`:对应手动执行或系统自动触发的[收集统计信息](/statistics.md#统计信息的收集)任务。 +- `background`:预留的任务类型,可使用 [`tidb_request_source_type`](/system-variables.md#tidb_request_source_type-从-v740-版本开始引入) 系统变量指定当前会话的任务类型为 `background`。 + +默认情况下,被标记为后台任务的任务类型为 `""`,此时后台任务的管理功能处于关闭状态。如需开启后台任务管理功能,你需要手动修改 `default` 资源组的后台任务类型以开启后台任务管理。后台任务类型被识别匹配后,资源管控会自动进行,即当系统资源紧张时,后台任务会自动降为最低优先级,保证前台任务的执行。 -默认情况下,被标记为后台任务的任务类型为空,此时后台任务的管理功能处于关闭状态,其行为与 TiDB v7.4.0 之前版本保持一致。你需要手动修改 `default` 资源组的后台任务类型以开启后台任务管理。 +> **注意:** +> +> 目前,所有资源组的后台任务默认都会绑定到默认资源组 `default` 下进行管控,你可以通过 `default` 全局管控后台任务类型。暂不支持将后台任务绑定到其他资源组。 #### 示例 -1. 创建 `rg1` 资源组,并将 `br` 和 `stats` 标记为后台任务。 +1. 修改 `default` 资源组,将 `br` 和 `ddl` 标记为后台任务。 ```sql - CREATE RESOURCE GROUP IF NOT EXISTS rg1 RU_PER_SEC = 500 BACKGROUND=(TASK_TYPES='br,stats'); + ALTER RESOURCE GROUP `default` BACKGROUND=(TASK_TYPES='br,ddl'); ``` -2. 修改 `rg1` 资源组,将 `br` 和 `ddl` 标记为后台任务。 +2. 修改 `default` 资源组,将后台任务的类型还原为默认值。 ```sql - ALTER RESOURCE GROUP rg1 BACKGROUND=(TASK_TYPES='br,ddl'); + ALTER RESOURCE GROUP `default` BACKGROUND=NULL; ``` -3. 修改 `rg1` 资源组,将后台任务的类型还原为默认值。此时后台任务的类型将使用 `default` 资源组的配置。 +3. 修改 `default` 资源组,将后台任务的类型设置为空,此时此资源组的所有任务类型都不会作为后台任务处理。 ```sql - ALTER RESOURCE GROUP rg1 BACKGROUND=NULL; + ALTER RESOURCE GROUP `default` BACKGROUND=(TASK_TYPES=""); ``` -4. 修改 `rg1` 资源组,将后台任务的类型设置为空,此时此资源组的所有任务类型都不会作为后台任务处理。 +4. 查看 `default` 资源组的后台任务类型。 ```sql - ALTER RESOURCE GROUP rg1 BACKGROUND=(TASK_TYPES=""); + SELECT * FROM information_schema.resource_groups WHERE NAME="default"; + ``` + + 输出结果如下: + + ``` + +---------+------------+----------+-----------+-------------+---------------------+ + | NAME | RU_PER_SEC | PRIORITY | BURSTABLE | QUERY_LIMIT | BACKGROUND | + +---------+------------+----------+-----------+-------------+---------------------+ + | default | UNLIMITED | MEDIUM | YES | NULL | TASK_TYPES='br,ddl' | + +---------+------------+----------+-----------+-------------+---------------------+ + ``` + +5. 如果希望将当前会话里的任务显式标记为后台类型,你可以使用 `tidb_request_source_type` 显式指定任务类型,如: + + ``` sql + SET @@tidb_request_source_type="background"; + /* 添加 background 任务类型 */ + ALTER RESOURCE GROUP `default` BACKGROUND=(TASK_TYPES="background"); + /* 在当前会话中执行 LOAD DATA */ + LOAD DATA INFILE "s3://resource-control/Lightning/test.customer.aaaa.csv" ``` ## 关闭资源管控特性 From 629789d0c929a946fa6895e49754320cfca2b835 Mon Sep 17 00:00:00 2001 From: Aolin Date: Fri, 24 Nov 2023 14:14:43 +0800 Subject: [PATCH 15/31] update tidb roadmap (#15441) --- tidb-roadmap.md | 104 +++++++++++++++--------------------------------- 1 file changed, 33 insertions(+), 71 deletions(-) diff --git a/tidb-roadmap.md b/tidb-roadmap.md index f33c0aaf5307..06ea2d9cb2ae 100644 --- a/tidb-roadmap.md +++ b/tidb-roadmap.md @@ -28,25 +28,22 @@ TiDB 路线图展示了 TiDB 未来的计划。随着我们发布长期稳定版
  • - Partitioned Raft KV 存储引擎 GA
    支持 PB 级别的集群,提升写入速度、扩缩容操作速度,提升数据整理的稳定性 + 分布式并行执行框架
    + TiDB v7.2.0 引入了用于后台任务(如 DDL 和 analyze)的分布式并行执行框架,为实现这些任务在计算节点间并行化提供了基础。v7.4.0 为分布式 reorg 任务(如 DDL 和 import)引入了全局排序,大幅减少了存储中额外资源的消耗。用户可以使用外部存储简化操作并节省成本

  • -
  • - 增强副本读取功能
    降低 TiKV 跨可用区的数据传输成本 -

  • - 引入性能优化框架,适用于所有相关后台任务,如 DDL、TTL 和集群分析操作
    - 性能优化框架将这些后台任务的工作负载分散到整个集群中,从而提升性能,并减少各个节点上的资源消耗。该框架已经应用于 ADD INDEX 操作。 + 增强执行计划缓存的性能和通用性

  • - TiFlash 存算分离架构、基于 S3 的 TiFlash 存储引擎等功能 GA
    - 实现更具成本效益的弹性 HTAP + 通过分布式并行执行框架实现动态节点扩缩容
    + 动态调整节点分配,以满足后台任务的资源成本,同时保持稳定性和性能预期
@@ -55,6 +52,10 @@ TiDB 路线图展示了 TiDB 未来的计划。随着我们发布长期稳定版
  • 移除事务大小的限制
  • +
  • + 联邦查询 + TiDB 查询 planner 支持 HTAP 场景中多个存储引擎 +
  • @@ -69,45 +70,18 @@ TiDB 路线图展示了 TiDB 未来的计划。随着我们发布长期稳定版 后台任务支持资源管控
    控制后台任务(如数据导入、DDL、TTL、自动分析、数据整理等操作)对前台流量的影响 - - - -
      -
    • - 多租户 -
      基于资源管控实现资源隔离 -
    • -
    - - -
      -
    • - 增强 TiDB 内存管理 -
    • -
    - - - - - SQL 功能 -
    增强 SQL 功能和兼容性 - - -
      -
    • - 兼容 MySQL 8.0 -

    • - 为数据导入、备份恢复、PITR 提供统一的 SQL 接口 + 管控 Runaway Query
      + 一种由运维人员控制的方式,显著提升了出现非预期的高成本查询时的性能稳定性
    • - 优化器支持 Cascades 框架 -
      改进查询优化框架,让优化器更具可扩展性,适应未来的需求 + 解耦 Placement Driver (PD) +
      提升集群的可扩展性和弹性

    @@ -115,15 +89,8 @@ TiDB 路线图展示了 TiDB 未来的计划。随着我们发布长期稳定版
    • - 联邦查询 -
    • -
      -
    • - 全文搜索和 GIS 支持 -
    • -
      -
    • - 用户自定义函数 + 多租户 +
      在资源管控基础上实现资源隔离

    @@ -137,42 +104,41 @@ TiDB 路线图展示了 TiDB 未来的计划。随着我们发布长期稳定版
    • - TiCDC 支持分布式同步单表数据 -
      大幅提高 TiDB 到 TiDB 的数据吞吐量 + TiCDC 与数据仓库或数据湖系统的集成 +

    • - 升级期间自动暂停/恢复 DDL -
      提供平滑的升级体验 + TiDB 节点标签 +
      将 DDL 操作分配到现有的或新添加的 TiDB 节点,以便将 DDL 任务与在线流量使用的计算资源隔离

    • -
    • - TiCDC 原生集成大数据生态 -
      例如集成 Snowflake 和 Iceburg -
    • - TiCDC 支持多个上游数据源 -
      支持从多个 TiDB 集群到 TiCDC (N:1) + SQL 执行计划管理 +
      控制 SQL 执行计划回归的机制 +
    • +
      +
    • + Index Advisor +
      基于工作负载、统计信息和执行计划,向用户提供索引建议
    • - AI 索引 + 物化视图 +
      存储预计算结果作为持久化数据视图,以提升查询性能

    • 支持迁移异构数据库

    • -
    • - 使用 AI 赋能 SQL 性能优化 -
    @@ -193,10 +159,6 @@ TiDB 路线图展示了 TiDB 未来的计划。随着我们发布长期稳定版
    允许针对特定列来授予或限制访问权限
    -
  • - 数据库级别的加密 -
    支持配置数据库级别的静态加密 -
  • @@ -210,6 +172,10 @@ TiDB 路线图展示了 TiDB 未来的计划。随着我们发布长期稳定版 统一的 TLS CA/密钥轮换策略
    统一管理所有 TiDB 组件的证书 +
  • + 支持 AWS FIPS +
    实现 FedRAMP 合规 +
  • @@ -225,10 +191,6 @@ TiDB 路线图展示了 TiDB 未来的计划。随着我们发布长期稳定版
  • 增强数据脱敏
  • -
    -
  • - 增强数据生命周期管理 -
  • @@ -254,7 +216,7 @@ TiDB 路线图展示了 TiDB 未来的计划。随着我们发布长期稳定版 ## 已发布版本 -- [TiDB 7.4.0 Release Notes](/releases/release-7.4.0.md) +- [TiDB 7.4.0 Release Notes](/releases/release-7.4.0.md) - [TiDB 7.3.0 Release Notes](/releases/release-7.3.0.md) - [TiDB 7.2.0 Release Notes](/releases/release-7.2.0.md) - [TiDB 7.1.0 Release Notes](/releases/release-7.1.0.md) From fa7bb76df3fe4aa0b73a31e0c50cc507e9781a98 Mon Sep 17 00:00:00 2001 From: Connor Date: Fri, 24 Nov 2023 15:31:14 +0800 Subject: [PATCH 16/31] dashboard: Add the support of TiKV for heap profiling (#15495) --- dashboard/continuous-profiling.md | 2 +- dashboard/dashboard-profiling.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/dashboard/continuous-profiling.md b/dashboard/continuous-profiling.md index 89b8f3195e8c..3f7e1535b9ba 100644 --- a/dashboard/continuous-profiling.md +++ b/dashboard/continuous-profiling.md @@ -28,7 +28,7 @@ summary: 了解如何持续地收集 TiDB、TiKV、PD 各个实例的性能数 - CPU:TiDB、TiKV、TiFlash、PD 实例上各个内部函数的 CPU 开销情况 -- Heap:TiDB、PD 实例上各个内部函数的内存占用开销情况 +- Heap:TiDB、PD、TiKV 实例上各个内部函数的内存占用开销情况 - Mutex:TiDB、PD 实例上各个处于等待状态的 Mutex 情况 diff --git a/dashboard/dashboard-profiling.md b/dashboard/dashboard-profiling.md index a39ff5ce5d6c..a1e76308d478 100644 --- a/dashboard/dashboard-profiling.md +++ b/dashboard/dashboard-profiling.md @@ -24,7 +24,7 @@ aliases: ['/docs-cn/dev/dashboard/dashboard-profiling/'] > ARM 环境中暂不支持对 TiKV 和 TiFlash 的 CPU 开销情况进行分析。 -- Heap:TiDB、PD 实例上各个内部函数的内存占用开销情况 +- Heap:TiDB、PD、TiKV 实例上各个内部函数的内存占用开销情况 - Mutex:TiDB、PD 实例上各个处于等待状态的 Mutex 情况 From 18870029d208b159bceb218d9eef0c1e39722956 Mon Sep 17 00:00:00 2001 From: yibin Date: Fri, 24 Nov 2023 16:08:44 +0800 Subject: [PATCH 17/31] Add some explanation for tiflash tuning performance doc (#15496) --- tiflash/tune-tiflash-performance.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tiflash/tune-tiflash-performance.md b/tiflash/tune-tiflash-performance.md index 9af8b62becea..b041bac8bb88 100644 --- a/tiflash/tune-tiflash-performance.md +++ b/tiflash/tune-tiflash-performance.md @@ -304,7 +304,7 @@ mysql> explain analyze select max(l_shipdate), max(l_commitdate), max(l_receiptd set @@tidb_max_tiflash_threads = 20; ``` -在以下示例中,`tidb_max_tiflash_threads` 设置前,所有 TiFlash 的算子的执行线程数为 24。`tidb_max_tiflash_threads` 设置后,所有 TiFlash 的算子的执行线程数为 60。 +在以下示例中,设置 `tidb_max_tiflash_threads` 前,单个 TiFlash 实例的 request 执行的并发度为 8 个线程。该集群一共有 3 个 TiFlash 实例,因此所有 TiFlash 实例上的 request 执行的线程总数是 24。当将 `tidb_max_tiflash_threads` 设置为 `20` 后,所有 TiFlash 实例上的 request 执行的线程总数是 60。 `tidb_max_tiflash_threads` 设置前: From cf0dd0b3dc6e0fcb69202eb6197f3c2d5bb49a78 Mon Sep 17 00:00:00 2001 From: pepezzzz <35323945+pepezzzz@users.noreply.github.com> Date: Fri, 24 Nov 2023 21:20:45 +0800 Subject: [PATCH 18/31] tidb-lightning: rename tables and databases (#15440) --- tidb-lightning/tidb-lightning-data-source.md | 74 +++++++++++++++++++- 1 file changed, 71 insertions(+), 3 deletions(-) diff --git a/tidb-lightning/tidb-lightning-data-source.md b/tidb-lightning/tidb-lightning-data-source.md index 8afcb4889b2e..23ebc33ab15c 100644 --- a/tidb-lightning/tidb-lightning-data-source.md +++ b/tidb-lightning/tidb-lightning-data-source.md @@ -26,6 +26,74 @@ TiDB Lightning 运行时将查找 `data-source-dir` 中所有符合命令规则 TiDB Lightning 尽量并行处理数据,由于文件必须顺序读取,所以数据处理协程是文件级别的并发(通过 `region-concurrency` 配置控制)。因此导入大文件时性能比较差。通常建议单个文件尺寸为 256MiB,以获得最好的性能。 +## 表库重命名 + +TiDB Lightning 运行时会按照数据文件的命名规则将数据导入到相应的数据库和表。如果数据库名或表名发生了变化,你可以先重命名文件,然后再导入,或者使用正则表达式在线替换对象名称。 + +### 批量重命名文件 + +如果你使用的是 Red Hat Linux 或基于 Red Hat 的 Linux 发行版,可以使用 `rename` 命令对 `data-source-dir` 目录下的文件进行批量重命名。例如: + +```shell +rename srcdb. tgtdb. *.sql +``` + +修改了文件中的数据库名后,建议删除 `data-source-dir` 目录下包含 `CREATE DATABASE` DDL 语句的 `${db_name}-schema-create.sql` 文件。如果修改的是表名,还需要修改包含 `CREATE TABLE` DDL 语句的 ${db_name}.${table_name}-schema.sql` 文件中的表名。 + +### 使用正则表达式在线替换名称 + +要使用正则表达式在线替换名称,你需要在 `[[mydumper.files]]` 配置中使用 `pattern` 匹配文件名,将 `schema` 和 `table` 换成目标名。具体配置请参考[自定义文件匹配](#自定义文件匹配)。 + +下面是使用正则表达式在线替换名称的示例。其中: + +- 数据文件 `pattern` 的匹配规则是 `'^({schema_regrex})\.({table_regrex})\.({file_serial_regrex})\.(csv|parquet|sql)'`。 +- `schema` 可以指定为 `'$1'`,代表第一个正则表达式 `schema_regrex` 取值不变;`schema` 也可以指定为一个字符串,如 `'tgtdb'`,代表固定的目标数据库名。 +- `table` 可以指定为 `'$2'`,代表第二个正则表达式 `table_regrex` 取值不变;`table` 也可以指定为一个字符串,如 `'t1'`,代表固定的目标表名。 +- `type` 可以指定为 `'$3'`,代表数据文件类型;`type` 可以指定为 `"table-schema"`(代表 `schema.sql` 文件) 或 `"schema-schema"`(代表 `schema-create.sql` 文件)。 + +```toml +[mydumper] +data-source-dir = "/some-subdir/some-database/" +[[mydumper.files]] +pattern = '^(srcdb)\.(.*?)-schema-create\.sql' +schema = 'tgtdb' +type = "schema-schema" +[[mydumper.files]] +pattern = '^(srcdb)\.(.*?)-schema\.sql' +schema = 'tgtdb' +table = '$2' +type = "table-schema" +[[mydumper.files]] +pattern = '^(srcdb)\.(.*?)\.(?:[0-9]+)\.(csv|parquet|sql)' +schema = 'tgtdb' +table = '$2' +type = '$3' +``` + +如果是使用 `gzip` 方式备份的数据文件,需要对应地配置压缩格式。数据文件 `pattern` 的匹配规则是 `'^({schema_regrex})\.({table_regrex})\.({file_serial_regrex})\.(csv|parquet|sql)\.(gz)'`。`compression` 可以指定为 `'$4'` 代表是压缩文件格式。示例如下: + +```toml +[mydumper] +data-source-dir = "/some-subdir/some-database/" +[[mydumper.files]] +pattern = '^(srcdb)\.(.*?)-schema-create\.(sql)\.(gz)' +schema = 'tgtdb' +type = "schema-schema" +compression = '$4' +[[mydumper.files]] +pattern = '^(srcdb)\.(.*?)-schema\.(sql)\.(gz)' +schema = 'tgtdb' +table = '$2' +type = "table-schema" +compression = '$4' +[[mydumper.files]] +pattern = '^(srcdb)\.(.*?)\.(?:[0-9]+)\.(sql)\.(gz)' +schema = 'tgtdb' +table = '$2' +type = '$3' +compression = '$4' +``` + ## CSV ### 表结构 @@ -272,7 +340,7 @@ TiDB Lightning 目前仅支持由 Amazon Aurora 或者 Hive 导出快照生成 ``` [[mydumper.files]] # 解析 AWS Aurora parquet 文件所需的表达式 -pattern = '(?i)^(?:[^/]*/)*([a-z0-9_]+)\.([a-z0-9_]+)/(?:[^/]*/)*(?:[a-z0-9\-_.]+\.(parquet))$' +pattern = '(?i)^(?:[^/]*/)*([a-z0-9\-_]+).([a-z0-9\-_]+)/(?:[^/]*/)*(?:[a-z0-9\-_.]+\.(parquet))$' schema = '$1' table = '$2' type = '$3' @@ -304,14 +372,14 @@ TiDB Lightning 仅识别符合命名要求的数据文件,但在某些情况 通常 `data-source-dir` 会被配置为`S3://some-bucket/some-subdir/some-database/` 以导入 `some-database` 库。 -根据上述 Parquet 文件的路径,你可以编写正则表达式 `(?i)^(?:[^/]*/)*([a-z0-9_]+)\.([a-z0-9_]+)/(?:[^/]*/)*(?:[a-z0-9\-_.]+\.(parquet))$`,得到的 match group 中 index=1 的内容为 `some-database`,index=2 的内容为 `some-table`,index=3 的内容为 `parquet`。 +根据上述 Parquet 文件的路径,你可以编写正则表达式 `(?i)^(?:[^/]*/)*([a-z0-9\-_]+).([a-z0-9\-_]+)/(?:[^/]*/)*(?:[a-z0-9\-_.]+\.(parquet))$`,得到的 match group 中 index=1 的内容为 `some-database`,index=2 的内容为 `some-table`,index=3 的内容为 `parquet`。 根据上述正则表达式及相应的 index 编写配置文件,TiDB Lightning 即可识别非默认命名规则的文件,最终实际配置如下: ``` [[mydumper.files]] # 解析 AWS Aurora parquet 文件所需的表达式 -pattern = '(?i)^(?:[^/]*/)*([a-z0-9_]+)\.([a-z0-9_]+)/(?:[^/]*/)*(?:[a-z0-9\-_.]+\.(parquet))$' +pattern = '(?i)^(?:[^/]*/)*([a-z0-9\-_]+).([a-z0-9\-_]+)/(?:[^/]*/)*(?:[a-z0-9\-_.]+\.(parquet))$' schema = '$1' table = '$2' type = '$3' From 9a1a24e330211c49fa285d2f5693e242a325a462 Mon Sep 17 00:00:00 2001 From: tonyxuqqi Date: Sun, 26 Nov 2023 20:04:14 -0800 Subject: [PATCH 19/31] tikv 7.5 config update (#15485) --- tikv-configuration-file.md | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/tikv-configuration-file.md b/tikv-configuration-file.md index cf5922823124..b16c7d718dc2 100644 --- a/tikv-configuration-file.md +++ b/tikv-configuration-file.md @@ -784,13 +784,13 @@ raftstore 相关的配置项。 ### `region-compact-min-redundant-rows` 从 v7.1.0 版本开始引入 -+ 触发 RocksDB compaction 需要的冗余的 MVCC 数据行数。该配置只对 Partitioned Raft KV (storage.engine="partitioned-raft-kv") 生效。 ++ 触发 RocksDB compaction 需要的冗余的 MVCC 数据行数。 + 默认值:`50000` + 最小值:`0` ### `region-compact-redundant-rows-percent` 从 v7.1.0 版本开始引入 -+ 触发 RocksDB compaction 需要的冗余的 MVCC 数据行所占比例。该配置只对 Partitioned Raft KV (`storage.engine="partitioned-raft-kv"`) 生效。 ++ 触发 RocksDB compaction 需要的冗余的 MVCC 数据行所占比例。 + 默认值:`20` + 最小值:`1` + 最大值:`100` @@ -1023,6 +1023,13 @@ raftstore 相关的配置项。 + 最小值:0 + 单位:秒 +### `evict-cache-on-memory-ratio` 从 v7.5.0 版本开始引入 + ++ 当 TiKV 的内存使用超过系统可用内存的 90%,并且 Raft 缓存条目占用的内存超过已使用内存 * `evict-cache-on-memory-ratio` 时,TiKV 会逐出 Raft 缓存条目。 ++ 设置为 `0` 表示禁用该功能。 ++ 默认值:0.1 ++ 最小值:0 + ## coprocessor Coprocessor 相关的配置项。 @@ -2337,3 +2344,15 @@ Raft Engine 相关的配置项。 + 当 [`region-split-size`](#region-split-size) 小于 4 GB 时,默认值为 `0.25`。 + 当 [`region-split-size`](#region-split-size) 大于或等于 4 GB 时,默认值为 `0.75`。 + +## memory 从 v7.5.0 版本开始引入 + +### `enable-heap-profiling` 从 v7.5.0 版本开始引入 + ++ 控制是否开启 TiKV 堆内存分析功能,以跟踪 TiKV 的内存使用情况。 ++ 默认值:true + +### `profiling-sample-per-bytes` 从 v7.5.0 版本开始引入 + ++ 设置 TiKV 堆内存分析每次采样的数据量,以 2 的指数次幂向上取整。 ++ 默认值:512KB From 305c083b803bbde0000748a340e08a52d7cbea73 Mon Sep 17 00:00:00 2001 From: Ran Date: Mon, 27 Nov 2023 12:07:14 +0800 Subject: [PATCH 20/31] Document performance_schema.session_connect_attrs system table (#15449) --- TOC.md | 5 +- ...erformance-schema-session-connect-attrs.md | 64 +++++++++++++++++++ performance-schema/performance-schema.md | 50 +++++++++++++++ 3 files changed, 118 insertions(+), 1 deletion(-) create mode 100644 performance-schema/performance-schema-session-connect-attrs.md create mode 100644 performance-schema/performance-schema.md diff --git a/TOC.md b/TOC.md index 1002877443ad..644fabb89e9f 100644 --- a/TOC.md +++ b/TOC.md @@ -916,7 +916,7 @@ - 系统表 - [`mysql`](/mysql-schema.md) - INFORMATION_SCHEMA - - [Overview](/information-schema/information-schema.md) + - [概述](/information-schema/information-schema.md) - [`ANALYZE_STATUS`](/information-schema/information-schema-analyze-status.md) - [`CHECK_CONSTRAINTS`](/information-schema/information-schema-check-constraints.md) - [`CLIENT_ERRORS_SUMMARY_BY_HOST`](/information-schema/client-errors-summary-by-host.md) @@ -974,6 +974,9 @@ - [`VARIABLES_INFO`](/information-schema/information-schema-variables-info.md) - [`VIEWS`](/information-schema/information-schema-views.md) - [`METRICS_SCHEMA`](/metrics-schema.md) + - PERFORMANCE_SCHEMA + - [概述](/performance-schema/performance-schema.md) + - [`SESSION_CONNECT_ATTRS`](/performance-schema/performance-schema-session-connect-attrs.md) - [元数据锁](/metadata-lock.md) - UI - TiDB Dashboard diff --git a/performance-schema/performance-schema-session-connect-attrs.md b/performance-schema/performance-schema-session-connect-attrs.md new file mode 100644 index 000000000000..f5594e4e27b8 --- /dev/null +++ b/performance-schema/performance-schema-session-connect-attrs.md @@ -0,0 +1,64 @@ +--- +title: SESSION_CONNECT_ATTRS +summary: 了解 performance_schema 表 `SESSION_CONNECT_ATTRS`。 +--- + +# SESSION\_CONNECT\_ATTRS + +`SESSION_CONNECT_ATTRS` 表提供了关于连接属性的信息。会话属性是在建立连接时由客户端发送的键值对。 + +常见属性: + +| 属性名 | 示例 | 描述 | +|-------|-----|------| +| `_client_name` | `libmysql` | 客户端库名 | +| `_client_version` | `8.0.33` | 客户端库版本| +| `_os` | `Linux` | 操作系统 | +| `_pid` | `712927` | 进程 ID | +| `_platform` | `x86_64` | CPU 架构 | +| `program_name` | `mysqlsh` | 程序名 | + +你可以通过以下方式查看 `SESSION_CONNECT_ATTRS` 表的列信息: + +```sql +USE performance_schema; +DESCRIBE session_connect_attrs; +``` + +``` ++------------------+---------------------+------+-----+---------+-------+ +| Field | Type | Null | Key | Default | Extra | ++------------------+---------------------+------+-----+---------+-------+ +| PROCESSLIST_ID | bigint(20) unsigned | NO | | NULL | | +| ATTR_NAME | varchar(32) | NO | | NULL | | +| ATTR_VALUE | varchar(1024) | YES | | NULL | | +| ORDINAL_POSITION | int(11) | YES | | NULL | | ++------------------+---------------------+------+-----+---------+-------+ +``` + +你可以通过以下方式查看 `SESSION_CONNECT_ATTRS` 表中存储的会话属性信息: + +```sql +USE performance_schema; +TABLE SESSION_CONNECT_ATTRS; +``` + +``` ++----------------+-----------------+------------+------------------+ +| PROCESSLIST_ID | ATTR_NAME | ATTR_VALUE | ORDINAL_POSITION | ++----------------+-----------------+------------+------------------+ +| 2097154 | _client_name | libmysql | 0 | +| 2097154 | _client_version | 8.1.0 | 1 | +| 2097154 | _os | Linux | 2 | +| 2097154 | _pid | 1299203 | 3 | +| 2097154 | _platform | x86_64 | 4 | +| 2097154 | program_name | mysqlsh | 5 | ++----------------+-----------------+------------+------------------+ +``` + +`SESSION_CONNECT_ATTRS` 表的字段描述如下: + +* `PROCESSLIST_ID`:会话的 Processlist ID。 +* `ATTR_NAME`:属性名。 +* `ATTR_VALUE`:属性值。 +* `ORDINAL_POSITION`:属性名/属性值对的序号。 diff --git a/performance-schema/performance-schema.md b/performance-schema/performance-schema.md new file mode 100644 index 000000000000..f889670e7e2b --- /dev/null +++ b/performance-schema/performance-schema.md @@ -0,0 +1,50 @@ +--- +title: Performance Schema +summary: 了解 TiDB `performance_schema` 系统数据库。 +--- + +# Performance Schema + +TiDB 实现了兼容 MySQL 的 performance schema 表。 + +## 与 MySQL 兼容的表 + +| 表名| 描述 | +| --- | --- | +| `events_stages_current` | | +| `events_stages_history`| | +| `events_stages_history_long` | | +| `events_statements_current` | | +| `events_statements_history` | | +| `events_statements_history_long` | | +| `events_statements_summary_by_digest` | | +| `events_transactions_current` | | +| `events_transactions_history` | | +| `events_transactions_history_long` | | +| `global_status` | | +| `prepared_statements_instances` | | +| [`session_connect_attrs`](/performance-schema/performance-schema-session-connect-attrs.md) | 为会话提供连接属性。 | +| `session_status` | | +| `session_variables` | | +| `setup_actors` | | +| `setup_consumers` | | +| `setup_instruments`| | +| `setup_objects` | | + +## TiDB 中的扩展表 + +| 表名 | 描述 | +| ------------------------- | ----------- | +| `pd_profile_allocs` | | +| `pd_profile_block` | | +| `pd_profile_cpu` | | +| `pd_profile_goroutines`| | +| `pd_profile_memory` | | +| `pd_profile_mutex` | | +| `tidb_profile_allocs` | | +| `tidb_profile_block`| | +| `tidb_profile_cpu` | | +| `tidb_profile_goroutines` | | +| `tidb_profile_memory` | | +| `tidb_profile_mutex`| | +| `tikv_profile_cpu` | | From 917a20accff4090d0d8ea7edbd7741c62ef5ae18 Mon Sep 17 00:00:00 2001 From: Frank945946 <108602632+Frank945946@users.noreply.github.com> Date: Mon, 27 Nov 2023 13:14:44 +0800 Subject: [PATCH 21/31] Update tidb-lightning-physical-import-mode.md (#15503) --- tidb-lightning/tidb-lightning-physical-import-mode.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tidb-lightning/tidb-lightning-physical-import-mode.md b/tidb-lightning/tidb-lightning-physical-import-mode.md index da5836abbb29..ba6a82bce88a 100644 --- a/tidb-lightning/tidb-lightning-physical-import-mode.md +++ b/tidb-lightning/tidb-lightning-physical-import-mode.md @@ -5,7 +5,7 @@ summary: 了解 TiDB Lightning 的物理导入模式。 # 物理导入模式简介 -物理导入模式 (Physical Import Mode) 是 TiDB Lightning 支持的一种数据导入方式。物理导入模式不经过 SQL 接口,而是直接将数据以键值对的形式插入 TiKV 节点,是一种高效、快速的导入模式。使用物理导入模式时,单个 TiDB Lightning 实例可导入的数据量为 10 TiB,理论上导入的数据量可以随着 TiDB Lightning 实例数量的增加而增加,目前已经有多个用户验证基于[并行导入](/tidb-lightning/tidb-lightning-distributed-import.md)功能可以导入的数据量达 20 TiB。 +物理导入模式 (Physical Import Mode) 是 TiDB Lightning 支持的一种数据导入方式。物理导入模式不经过 SQL 接口,而是直接将数据以键值对的形式插入 TiKV 节点,是一种高效、快速的导入模式。使用物理导入模式时,单个 TiDB Lightning 实例可导入的数据量为 10 TiB,理论上导入的数据量可以随着 TiDB Lightning 实例数量的增加而增加,目前已经有多个用户验证基于[并行导入](/tidb-lightning/tidb-lightning-distributed-import.md)功能可以导入的数据量达 50 TiB。 使用前请务必自行阅读[必要条件及限制](/tidb-lightning/tidb-lightning-physical-import-mode.md#必要条件及限制)。 From 23a49a5184a75dc92a0cb0137fafa24f974ace36 Mon Sep 17 00:00:00 2001 From: Ran Date: Mon, 27 Nov 2023 17:43:14 +0800 Subject: [PATCH 22/31] dm: Cleanup typo in feature-online-ddl and update dm-faq (#15514) --- dm/dm-faq.md | 6 +++--- dm/dm-online-ddl-tool-support.md | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/dm/dm-faq.md b/dm/dm-faq.md index 6b061b6e90fc..0cb9afcdc543 100644 --- a/dm/dm-faq.md +++ b/dm/dm-faq.md @@ -49,7 +49,7 @@ DM 会尝试将包含多个 DDL 变更操作的单条语句拆分成只包含一 - 修改任务配置文件以指定新的任务名,然后使用 `start-task {task-config-file}` 重启迁移任务。 - 使用 `start-task --remove-meta {task-config-file}` 重启数据迁移任务。 -## 设置了 `online-ddl-scheme: "gh-ost"`,gh-ost 表相关的 DDL 报错该如何处理? +## 设置了 `online-ddl: true`,gh-ost 表相关的 DDL 报错该如何处理? ``` [unit=Sync] ["error information"="{\"msg\":\"[code=36046:class=sync-unit:scope=internal:level=high] online ddls on ghost table `xxx`.`_xxxx_gho`\\ngithub.com/pingcap/dm/pkg/terror.(*Error).Generate ...... @@ -63,13 +63,13 @@ DM 在最后 `rename ghost_table to origin table` 的步骤会把内存的 DDL 可以通过以下方式绕过这个问题: -1. 取消 task 的 `online-ddl-schema` 的配置。 +1. 取消 task 的 `online-ddl-schema` 或 `online-ddl` 的配置。 2. 把 `_{table_name}_gho`、`_{table_name}_ghc`、`_{table_name}_del` 配置到 `block-allow-list.ignore-tables` 中。 3. 手工在下游的 TiDB 执行上游的 DDL。 -4. 待 Pos 复制到 gh-ost 整体流程后的位置,再重新启用 `online-ddl-schema` 以及注释掉 `block-allow-list.ignore-tables`。 +4. 待 Pos 复制到 gh-ost 整体流程后的位置,再重新启用 `online-ddl-schema` 或 `online-ddl` 以及注释掉 `block-allow-list.ignore-tables`。 ## 如何为已有迁移任务增加需要迁移的表? diff --git a/dm/dm-online-ddl-tool-support.md b/dm/dm-online-ddl-tool-support.md index cfc9afe97084..07808b32a18c 100644 --- a/dm/dm-online-ddl-tool-support.md +++ b/dm/dm-online-ddl-tool-support.md @@ -12,7 +12,7 @@ summary: 了解 DM 对常见 online DDL 工具的支持情况,使用方法和 ## 使用限制 - DM 仅针对 gh-ost 与 pt-osc 做了特殊支持。 -- 在开启 `online-ddl` 时,增量复制对应的 checkpoint 应不处于 online DDL 执行过程中。如上游某次 online DDL 操作开始于 binlog `position-A`、结束于 `position-B`,则增量复制的起始点应早于 `position-A` 或晚于 `position-B`,否则可能出现迁移出错,具体可参考 [FAQ](/dm/dm-faq.md#设置了-online-ddl-scheme-gh-ostgh-ost-表相关的-ddl-报错该如何处理)。 +- 在开启 `online-ddl` 时,增量复制对应的 checkpoint 应不处于 online DDL 执行过程中。如上游某次 online DDL 操作开始于 binlog `position-A`、结束于 `position-B`,则增量复制的起始点应早于 `position-A` 或晚于 `position-B`,否则可能出现迁移出错,具体可参考 [FAQ](/dm/dm-faq.md#设置了-online-ddl-truegh-ost-表相关的-ddl-报错该如何处理)。 ## 参数配置 From 0240792ef919ae3f7803bca19fcc6f7c83d68632 Mon Sep 17 00:00:00 2001 From: Aolin Date: Tue, 28 Nov 2023 11:11:47 +0800 Subject: [PATCH 23/31] ticdc: update best practices (#15516) --- ticdc/ticdc-overview.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ticdc/ticdc-overview.md b/ticdc/ticdc-overview.md index b1f979429958..6026ef2ae4c8 100644 --- a/ticdc/ticdc-overview.md +++ b/ticdc/ticdc-overview.md @@ -75,7 +75,7 @@ TiCDC 作为 TiDB 的增量数据同步工具,通过 PD 内部的 etcd 实现 - 主键 (`PRIMARY KEY`) 为有效索引。 - 唯一索引 (`UNIQUE INDEX`) 中每一列在表结构中明确定义非空 (`NOT NULL`) 且不存在虚拟生成列 (`VIRTUAL GENERATED COLUMNS`)。 -- 容灾场景下使用 TiCDC 需要配置 [redo log](/ticdc/ticdc-sink-to-mysql.md#灾难场景的最终一致性复制) 实现最终一致性。 +- 在使用 TiCDC 实现容灾的场景下,为实现最终一致性,需要配置 [redo log](/ticdc/ticdc-sink-to-mysql.md#灾难场景的最终一致性复制) 并确保 redo log 写入的存储系统在上游发生灾难时可以正常读取。 ### 暂不支持的场景 From c048bf1ee69af4cf6ecc73567d782cc684ab1722 Mon Sep 17 00:00:00 2001 From: Grace Cai Date: Tue, 28 Nov 2023 16:29:48 +0800 Subject: [PATCH 24/31] pr template: add the option for v7.6 (#15526) --- .github/pull_request_template.md | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index ff2e5c3d33e5..d1bba006cfa6 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -19,6 +19,7 @@ By default, **CHOOSE MASTER ONLY** so your changes will be applied to the next T For details, see [tips for choosing the affected versions (in Chinese)](https://github.com/pingcap/docs-cn/blob/master/CONTRIBUTING.md#版本选择指南). - [ ] master (the latest development version) +- [ ] v7.6 (TiDB 7.6 versions) - [ ] v7.5 (TiDB 7.5 versions) - [ ] v7.4 (TiDB 7.4 versions) - [ ] v7.3 (TiDB 7.3 versions) From d4b510d9d99d5ad7304d2e8363c176833c6b419a Mon Sep 17 00:00:00 2001 From: Grace Cai Date: Tue, 28 Nov 2023 18:10:18 +0800 Subject: [PATCH 25/31] add more explains and examples for `SELECT ... INTO OUTFILE` statements (#15328) --- sql-statements/sql-statement-select.md | 77 +++++++++++++++++++++++++- 1 file changed, 76 insertions(+), 1 deletion(-) diff --git a/sql-statements/sql-statement-select.md b/sql-statements/sql-statement-select.md index 3e16de54edf4..431c50320720 100644 --- a/sql-statements/sql-statement-select.md +++ b/sql-statements/sql-statement-select.md @@ -114,6 +114,8 @@ TableSampleOpt ::= ## 示例 +### SELECT + {{< copyable "sql" >}} ```sql @@ -174,11 +176,84 @@ mysql> SELECT AVG(s_quantity), COUNT(s_quantity) FROM stock; 1 row in set (0.52 sec) ``` +### SELECT ... INTO OUTFILE + +`SELECT ... INTO OUTFILE` 语句用于将查询结果写入到文件中。 + +> **注意:** +> +> 该语句不支持将查询结果写入任何[外部存储](/br/backup-and-restore-storages.md),如 Amazon S3 或 GCS。 + +在该语句中,你可以使用以下子句来指定输出文件的格式: + +- `FIELDS TERMINATED BY`:指定文件中字段的分隔符。例如,你可以将分隔符指定为 `','` 以输出逗号分隔值(CSV)或 `'\t'` 以输出制表符分隔值(TSV)。 +- `FIELDS ENCLOSED BY`:指定文件中包裹每个字段的字符。 +- `LINES TERMINATED BY`:如果你希望以某个特殊的字符为结尾来切分行数据,可以使用该子句指定文件中行的终止符。 + +假设有一个名为 `t` 的表,包含以下三列: + +```sql +mysql> CREATE TABLE t (a INT, b VARCHAR(10), c DECIMAL(10,2)); +Query OK, 0 rows affected (0.02 sec) + +mysql> INSERT INTO t VALUES (1, 'a', 1.1), (2, 'b', 2.2), (3, 'c', 3.3); +Query OK, 3 rows affected (0.01 sec) +``` + +以下示例展示了如何使用 `SELECT ... INTO OUTFILE` 语句将查询结果写入到文件中。 + +**示例 1:** + +```sql +mysql> SELECT * FROM t INTO OUTFILE '/tmp/tmp_file1'; +Query OK, 3 rows affected (0.00 sec) +``` + +在此示例中,你可以在 `/tmp/tmp_file1` 中看到以下查询结果: + +``` +1 a 1.10 +2 b 2.20 +3 c 3.30 +``` + +**示例 2:** + +```sql +mysql> SELECT * FROM t INTO OUTFILE '/tmp/tmp_file2' FIELDS TERMINATED BY ',' ENCLOSED BY '"'; +Query OK, 3 rows affected (0.00 sec) +``` + +在此示例中,你可以在 `/tmp/tmp_file2` 中看到以下查询结果: + +``` +"1","a","1.10" +"2","b","2.20" +"3","c","3.30" +``` + +**示例 3:** + +```sql +mysql> SELECT * FROM t INTO OUTFILE '/tmp/tmp_file3' + -> FIELDS TERMINATED BY ',' ENCLOSED BY '\'' LINES TERMINATED BY '<<<\n'; +Query OK, 3 rows affected (0.00 sec) +``` + +在此示例中,你可以在 `/tmp/tmp_file3` 中看到以下查询结果: + +``` +'1','a','1.10'<<< +'2','b','2.20'<<< +'3','c','3.30'<<< +``` + ## MySQL 兼容性 - 不支持 `SELECT ... INTO @variable` 语法。 +- 不支持 `SELECT ... INTO DUMPFILE` 语法。 - 不支持 MySQL 5.7 中支持的 `SELECT .. GROUP BY expr` 语法,而是匹配 MySQL 8.0 的行为,不按照默认的顺序进行排序。 -- `SELECT ... TABLESAMPLE ...` 是 TiDB 的扩展语法,MySQL 不支持该语法。 +- `SELECT ... TABLESAMPLE ...` 是 TiDB 的扩展语法,用于兼容其他数据库以及 [ISO/IEC 9075-2](https://standards.iso.org/iso-iec/9075/-2/ed-6/en/) 标准,但 MySQL 不支持该语法。 ## 另请参阅 From ee8f7d2438d46884cb005903f514324bc6972418 Mon Sep 17 00:00:00 2001 From: lucasliang Date: Tue, 28 Nov 2023 18:35:47 +0800 Subject: [PATCH 26/31] Polish pd-scheduling-best-practice on slow nodes. (#15332) --- best-practices/pd-scheduling-best-practices.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/best-practices/pd-scheduling-best-practices.md b/best-practices/pd-scheduling-best-practices.md index 53f8cfdb96a7..7407356fd23b 100644 --- a/best-practices/pd-scheduling-best-practices.md +++ b/best-practices/pd-scheduling-best-practices.md @@ -297,4 +297,8 @@ Region Merge 速度慢也很有可能是受到 limit 配置的限制(`merge-sc 实践中,如果能确定这个节点的故障是不可恢复的,可以立即做下线处理,这样 PD 能尽快补齐副本,降低数据丢失的风险。与之相对,如果确定这个节点是能恢复的,但可能半小时之内来不及,则可以把 `max-store-down-time` 临时调整为比较大的值,这样能避免超时之后产生不必要的副本补充,造成资源浪费。 -自 v5.2.0 起,TiKV 引入了慢节点检测机制。通过对 TiKV 中的请求进行采样,计算出一个范围在 1~100 的分数。当分数大于等于 80 时,该 TiKV 节点会被设置为 slow 状态。可以通过添加 [`evict-slow-store-scheduler`](/pd-control.md#scheduler-show--add--remove--pause--resume--config--describe) 来针对慢节点进行对应的检测和调度。当检测到有且只有一个 TiKV 节点为慢节点,并且该 TiKV 的 slow score 到达限定值(默认 80)时,将节点上的 leader 驱逐(其作用类似于 `evict-leader-scheduler`)。 +自 v5.2.0 起,TiKV 引入了慢节点检测机制。通过对 TiKV 中的请求进行采样,计算出一个范围在 1~100 的分数。当分数大于等于 80 时,该 TiKV 节点会被设置为 slow 状态。可以通过添加 [`evict-slow-store-scheduler`](/pd-control.md#scheduler-show--add--remove--pause--resume--config--describe) 来针对慢节点进行对应的检测和调度。当检测到有且只有一个 TiKV 节点为慢节点,并且该 TiKV 的 slow score 到达限定值(默认 80)时,将节点上的 Leader 驱逐(其作用类似于 `evict-leader-scheduler`)。 + +> **注意:** +> +> **Leader 驱逐**是通过 PD 向 TiKV 慢节点发送调度请求,然后 TiKV 按时间顺序执行收到的调度请求来完成的。受 **I/O 慢**或者其他因素的影响,慢节点可能存在请求堆积的情况,使得部分 Leader 需要等待滞后的请求处理完后才能处理 **Leader 驱逐**的请求,造成 **Leader 驱逐**的整体时间过长。因此,在开启 `evict-slow-store-scheduler` 时,建议同步配置[`store-io-pool-size`](/tikv-configuration-file.md#store-io-pool-size-从-v530-版本开始引入) 以缓解该情况。 \ No newline at end of file From b38ce4df3f0700981b366658ecc072e6ffd0972e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B1=B1=E5=B2=9A?= <36239017+YuJuncen@users.noreply.github.com> Date: Tue, 28 Nov 2023 20:19:17 +0800 Subject: [PATCH 27/31] BRIE: add experimental notice in BACKUP and RESTORE sql (#15528) --- migrate-from-tidb-to-tidb.md | 2 +- replicate-between-primary-and-secondary-clusters.md | 2 +- sql-statements/sql-statement-backup.md | 4 ++++ sql-statements/sql-statement-restore.md | 4 ++++ 4 files changed, 10 insertions(+), 2 deletions(-) diff --git a/migrate-from-tidb-to-tidb.md b/migrate-from-tidb-to-tidb.md index c45a5dcc302e..9a0c3cc7eaf0 100644 --- a/migrate-from-tidb-to-tidb.md +++ b/migrate-from-tidb-to-tidb.md @@ -111,8 +111,8 @@ aliases: ['/zh/tidb/dev/incremental-replication-between-clusters/'] > **注意:** > +> - `BACKUP` 和 `RESTORE` 语句目前为实验特性,不建议在生产环境中使用。该功能可能会在未事先通知的情况下发生变化或删除。如果发现 bug,请在 GitHub 上提 [issue](https://github.com/pingcap/tidb/issues) 反馈。 > - 在生产集群中,关闭 GC 机制和备份操作会一定程度上降低集群的读性能,建议在业务低峰期进行备份,并设置合适的 `RATE_LIMIT` 限制备份操作对线上业务的影响。 -> > - 上下游集群版本不一致时,应检查 BR 工具的[兼容性](/br/backup-and-restore-overview.md#使用须知)。本文假设上下游集群版本相同。 1. 关闭 GC。 diff --git a/replicate-between-primary-and-secondary-clusters.md b/replicate-between-primary-and-secondary-clusters.md index 6e6d625eccf9..b27355e9d385 100644 --- a/replicate-between-primary-and-secondary-clusters.md +++ b/replicate-between-primary-and-secondary-clusters.md @@ -105,8 +105,8 @@ summary: 了解如何配置一个 TiDB 集群以及该集群的 TiDB 或 MySQL > **注意:** > +> - `BACKUP` 和 `RESTORE` 语句目前为实验特性,不建议在生产环境中使用。该功能可能会在未事先通知的情况下发生变化或删除。如果发现 bug,请在 GitHub 上提 [issue](https://github.com/pingcap/tidb/issues) 反馈。 > - 在生产集群中,关闭 GC 机制和备份操作会一定程度上降低集群的读性能,建议在业务低峰期进行备份,并设置合适的 `RATE_LIMIT` 限制备份操作对线上业务的影响。 -> > - 上下游集群版本不一致时,应检查 BR 工具的[兼容性](/br/backup-and-restore-overview.md#使用建议)。本文假设上下游集群版本相同。 1. 关闭 GC。 diff --git a/sql-statements/sql-statement-backup.md b/sql-statements/sql-statement-backup.md index a2801f5c09d4..e76e820e3212 100644 --- a/sql-statements/sql-statement-backup.md +++ b/sql-statements/sql-statement-backup.md @@ -6,6 +6,10 @@ aliases: ['/docs-cn/dev/sql-statements/sql-statement-backup/'] # BACKUP +> **警告:** +> +> `BACKUP` 语句目前为实验特性,不建议在生产环境中使用。该功能可能会在未事先通知的情况下发生变化或删除。如果发现 bug,请在 GitHub 上提 [issue](https://github.com/pingcap/tidb/issues) 反馈。 + `BACKUP` 语句用于对 TiDB 集群执行分布式备份操作。 `BACKUP` 语句使用的引擎与 [BR](/br/backup-and-restore-overview.md) 相同,但备份过程是由 TiDB 本身驱动,而非单独的 BR 工具。BR 工具的优势和警告也适用于 `BACKUP` 语句。 diff --git a/sql-statements/sql-statement-restore.md b/sql-statements/sql-statement-restore.md index e78d2f755268..5ec64ab065f5 100644 --- a/sql-statements/sql-statement-restore.md +++ b/sql-statements/sql-statement-restore.md @@ -6,6 +6,10 @@ aliases: ['/docs-cn/dev/sql-statements/sql-statement-restore/'] # RESTORE +> **警告:** +> +> `RESTORE` 语句目前为实验特性,不建议在生产环境中使用。该功能可能会在未事先通知的情况下发生变化或删除。如果发现 bug,请在 GitHub 上提 [issue](https://github.com/pingcap/tidb/issues) 反馈。 + `RESTORE` 语句用于执行分布式恢复,把 [`BACKUP` 语句](/sql-statements/sql-statement-backup.md)生成的备份文件恢复到 TiDB 集群中。 `RESTORE` 语句使用的引擎与 [BR](/br/backup-and-restore-overview.md) 相同,但恢复过程是由 TiDB 本身驱动,而非单独的 BR 工具。BR 工具的优势和警告也适用于 `RESTORE` 语句。需要注意的是,**`RESTORE` 语句目前不遵循 ACID 原则**。 From 7a31582d2b4bdde2c2e823b1d7e3f80b0f21d0bc Mon Sep 17 00:00:00 2001 From: Aolin Date: Wed, 29 Nov 2023 13:32:48 +0800 Subject: [PATCH 28/31] fix typo "Tiflash" (#15552) --- tiflash-upgrade-guide.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tiflash-upgrade-guide.md b/tiflash-upgrade-guide.md index 3d155c39148f..7b9b67e3aba2 100644 --- a/tiflash-upgrade-guide.md +++ b/tiflash-upgrade-guide.md @@ -68,7 +68,7 @@ TiFlash 在 v6.2.0 将数据格式升级到 V3 版本,因此,从 v5.x 或 v6 2. 重启 TiFlash 节点。 -你可以在 Grafana 监控查看是否还有表使用旧的数据版本:Tiflash summary > storage pool > Storage Pool Run Mode +你可以在 Grafana 监控查看是否还有表使用旧的数据版本:**TiFlash-Summary** > **Storage Pool** > **Storage Pool Run Mode** - Only V2:使用 PageStorage V2 的表数量(包括分区数) - Only V3:使用 PageStorage V3 的表数量(包括分区数) @@ -84,7 +84,7 @@ TiFlash 在 v6.2.0 将数据格式升级到 V3 版本,因此,从 v5.x 或 v6 ## 从 v6.x 或 v7.x 升级至 v7.3,并且设置了 `storage.format_version = 5` -从 v7.3 开始,TiFlash 支持新的 DTFile 版本 V3 (实验特性),可以将多个小文件合并成一个大文件,减少文件数量。DTFile 在 v7.3 的默认版本是 V2,如需使用 V3,可通过 [TiFlash 配置参数](/tiflash/tiflash-configuration.md) `storage.format_version = 5` 来设置。设置后,TiFlash 仍可以读 V2 版本的 DTFile,并且在后续的数据整理 (Compaction) 中会将这些 V2 版本的 DMFile 逐步重新写为 V3 版本的 DTFile。 +从 v7.3 开始,TiFlash 支持新的 DTFile 版本 V3(实验特性),可以将多个小文件合并成一个大文件,减少文件数量。DTFile 在 v7.3 的默认版本是 V2,如需使用 V3,可通过 [TiFlash 配置参数](/tiflash/tiflash-configuration.md) `storage.format_version = 5` 来设置。设置后,TiFlash 仍可以读 V2 版本的 DTFile,并且在后续的数据整理 (Compaction) 中会将这些 V2 版本的 DMFile 逐步重新写为 V3 版本的 DTFile。 在 TiFlash 升级到 v7.3 并且使用了 V3 版本的 DTFile 后,如需回退到之前的 TiFlash 版本,可以通过 DTTool 离线将 DTFile 重新写回 V2 版本,详见 [DTTool 迁移工具](/tiflash/tiflash-command-line-flags.md#dttool-migrate)。 From 0c38d182eadb7bc84b46dc7ae7a3a1e3a18a16ed Mon Sep 17 00:00:00 2001 From: xufei Date: Wed, 29 Nov 2023 14:20:52 +0800 Subject: [PATCH 29/31] update the task type of mpp task (#15293) --- tiflash/use-tiflash-mpp-mode.md | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/tiflash/use-tiflash-mpp-mode.md b/tiflash/use-tiflash-mpp-mode.md index c03e8aaccfee..8e8f44761f0a 100644 --- a/tiflash/use-tiflash-mpp-mode.md +++ b/tiflash/use-tiflash-mpp-mode.md @@ -81,19 +81,19 @@ MPP 模式目前支持的物理算法有:Broadcast Hash Join、Shuffled Hash J ```sql mysql> explain select count(*) from customer c join nation n on c.c_nationkey=n.n_nationkey; -+------------------------------------------+------------+-------------------+---------------+----------------------------------------------------------------------------+ -| id | estRows | task | access object | operator info | -+------------------------------------------+------------+-------------------+---------------+----------------------------------------------------------------------------+ -| HashAgg_23 | 1.00 | root | | funcs:count(Column#16)->Column#15 | -| └─TableReader_25 | 1.00 | root | | data:ExchangeSender_24 | -| └─ExchangeSender_24 | 1.00 | batchCop[tiflash] | | ExchangeType: PassThrough | -| └─HashAgg_12 | 1.00 | batchCop[tiflash] | | funcs:count(1)->Column#16 | -| └─HashJoin_17 | 3000000.00 | batchCop[tiflash] | | inner join, equal:[eq(tpch.nation.n_nationkey, tpch.customer.c_nationkey)] | -| ├─ExchangeReceiver_21(Build) | 25.00 | batchCop[tiflash] | | | -| │ └─ExchangeSender_20 | 25.00 | batchCop[tiflash] | | ExchangeType: Broadcast | -| │ └─TableFullScan_18 | 25.00 | batchCop[tiflash] | table:n | keep order:false | -| └─TableFullScan_22(Probe) | 3000000.00 | batchCop[tiflash] | table:c | keep order:false | -+------------------------------------------+------------+-------------------+---------------+----------------------------------------------------------------------------+ ++------------------------------------------+------------+--------------+---------------+----------------------------------------------------------------------------+ +| id | estRows | task | access object | operator info | ++------------------------------------------+------------+--------------+---------------+----------------------------------------------------------------------------+ +| HashAgg_23 | 1.00 | root | | funcs:count(Column#16)->Column#15 | +| └─TableReader_25 | 1.00 | root | | data:ExchangeSender_24 | +| └─ExchangeSender_24 | 1.00 | mpp[tiflash] | | ExchangeType: PassThrough | +| └─HashAgg_12 | 1.00 | mpp[tiflash] | | funcs:count(1)->Column#16 | +| └─HashJoin_17 | 3000000.00 | mpp[tiflash] | | inner join, equal:[eq(tpch.nation.n_nationkey, tpch.customer.c_nationkey)] | +| ├─ExchangeReceiver_21(Build) | 25.00 | mpp[tiflash] | | | +| │ └─ExchangeSender_20 | 25.00 | mpp[tiflash] | | ExchangeType: Broadcast | +| │ └─TableFullScan_18 | 25.00 | mpp[tiflash] | table:n | keep order:false | +| └─TableFullScan_22(Probe) | 3000000.00 | mpp[tiflash] | table:c | keep order:false | ++------------------------------------------+------------+--------------+---------------+----------------------------------------------------------------------------+ 9 rows in set (0.00 sec) ``` From 56ad3ffb45ba2362d8979621da44c2717718580b Mon Sep 17 00:00:00 2001 From: Grace Cai Date: Wed, 29 Nov 2023 14:55:19 +0800 Subject: [PATCH 30/31] Fix broken link to Connector/J docs (#15565) --- develop/dev-guide-sample-application-java-jdbc.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/develop/dev-guide-sample-application-java-jdbc.md b/develop/dev-guide-sample-application-java-jdbc.md index 8dc25f5b0eac..d26709f15bef 100644 --- a/develop/dev-guide-sample-application-java-jdbc.md +++ b/develop/dev-guide-sample-application-java-jdbc.md @@ -278,7 +278,7 @@ Java 驱动程序提供对数据库的底层访问,但要求开发者: ## 下一步 -- 关于 MySQL Connector/J 的更多使用方法,可以参考 [MySQL Connector/J 官方文档](https://dev.mysql.com/doc/connector-j/8.1/en/)。 +- 关于 MySQL Connector/J 的更多使用方法,可以参考 [MySQL Connector/J 官方文档](https://dev.mysql.com/doc/connector-j/en/)。 - 你可以继续阅读开发者文档,以获取更多关于 TiDB 应用开发的最佳实践。例如:[插入数据](/develop/dev-guide-insert-data.md)、[更新数据](/develop/dev-guide-update-data.md)、[删除数据](/develop/dev-guide-delete-data.md)、[单表读取](/develop/dev-guide-get-data-from-single-table.md)、[事务](/develop/dev-guide-transaction-overview.md)、[SQL 性能优化](/develop/dev-guide-optimize-sql-overview.md)等。 - 如果你更倾向于参与课程进行学习,我们也提供专业的 [TiDB 开发者课程](https://cn.pingcap.com/courses-catalog/category/back-end-developer/?utm_source=docs-cn-dev-guide)支持,并在考试后提供相应的[资格认证](https://learn.pingcap.com/learner/certification-center)。 - 我们还额外提供针对 Java 开发者的课程:[使用 Connector/J - TiDB v6](https://learn.pingcap.com/learner/course/840002/?utm_source=docs-cn-dev-guide) 及[在 TiDB 上开发应用的最佳实践 - TiDB v6](https://learn.pingcap.com/learner/course/780002/?utm_source=docs-cn-dev-guide)。 From 920f4b6221abcd3be59d6c0c1ad96bcc83707d0b Mon Sep 17 00:00:00 2001 From: Lynn Date: Wed, 29 Nov 2023 17:19:20 +0800 Subject: [PATCH 31/31] *: add more contents about supported versions and upgrade methods (#15079) --- smooth-upgrade-tidb.md | 68 ++++++++++++++++++++++++++++++++++-------- 1 file changed, 56 insertions(+), 12 deletions(-) diff --git a/smooth-upgrade-tidb.md b/smooth-upgrade-tidb.md index 98f3cff758b9..ff78e05ae33d 100644 --- a/smooth-upgrade-tidb.md +++ b/smooth-upgrade-tidb.md @@ -5,29 +5,69 @@ summary: 本文介绍支持无需手动取消 DDL 的平滑升级集群功能。 # 平滑升级 TiDB -> **警告:** -> -> 平滑升级目前为实验特性。 - 本文档介绍 TiDB 的平滑升级集群功能,支持无需手动取消 DDL 的操作。 -从 v7.1.0 起,当将 TiDB 升级至更高的版本时,TiDB 支持平滑升级功能,取消了升级过程中的限制,提供更平滑的升级体验。此功能默认开启,且无开关控制。 +从 v7.1.0 起,当将 TiDB 升级至更高的版本时,TiDB 支持平滑升级功能,取消了升级过程中的限制(你需要保证升级过程中无用户发起的 DDL 操作),提供更平滑的升级体验。 + +## 版本支持情况 + +依据是否需要开关控制,可分为两种支持方式: + +* 无需开关控制,默认开启此功能的方式。目前支持此方式的版本分别是 v7.1.0,v7.1.1,v7.2.0,和 v7.3.0。具体支持升级版本的情况: + * 从 v7.1.0 升级到 v7.1.1、v7.2.0 或 v7.3.0 版本 + * 从 v7.1.1 升级到 v7.2.0 或 v7.3.0 版本 + * 从 v7.2.0 升级到 v7.3.0 版本 + +* 通过是否发送 `/upgrade/start` HTTP 请求控制此功能开关。即此功能默认关闭,可通过发送 `/upgrade/start` 请求,开启此功能。具体方式可以参考:[TiDB HTTP API 文档](https://github.com/pingcap/tidb/blob/master/docs/tidb_http_api.md)。具体版本情况: + * 从 v7.1.2 以及它之后的 v7.1 版本(即 >= v7.1.2)升级到 v7.4.0 及更高版本 + * 从 v7.4.0 升级到更高的版本 + +具体版本支持的升级方式,请参考下表: + +| 原版本 | 升级后版本 | 升级的升级方式 | 备注 | +|------|--------|-------------|-------------| +| < v7.1.0 | 任意版本 | 不支持平滑升级方式 | | +| v7.1.0 | v7.1.1、v7.2.0 或 v7.3.0 | 无需额外操作,自动支持平滑升级 | 实验特性。可能遇到 [#44760](https://github.com/pingcap/tidb/pull/44760) 问题 | +| v7.1.1 | v7.2.0 或 v7.3.0 | 无需额外操作,自动支持平滑升级 | 实验特性 | +| v7.2.0 | v7.3.0 | 无需额外操作,自动支持平滑升级 | 实验特性 | +| [v7.1.2, v7.2.0) | [v7.1.2, v7.2.0) | 通过发送 `/upgrade/start` HTTP 请求开启平滑升级,具体方式有两种:[TiUP 方式](#tiup-方式);[其它方式](#其它方式) | 不开启平滑升级时,需确保升级时无 DDL 操作。 | +| [v7.1.2, v7.2.0) 或 >= v7.4.0 | >= v7.4.0 | 通过发送 `/upgrade/start` HTTP 请求开启平滑升级,具体方式有两种:[TiUP 方式](#tiup-方式);[其它方式](#其它方式) | 不开启平滑升级时,需确保升级时无 DDL 操作。 | +| v7.1.0、v7.1.1、v7.2.0、v7.3.0 | >= v7.4.0 | 不支持平滑升级方式 | | ## 功能简介 -TiDB 引入平滑升级功能前,对于升级过程中的 DDL 操作有如下限制(可以参考[使用 TiUP 升级 TiDB](/upgrade-tidb-using-tiup.md#使用-tiup-升级-tidb)中警告部分): +TiDB 引入平滑升级功能前,对于升级过程中的 DDL 操作有如下限制: - 在升级过程中执行 DDL 操作,TiDB 可能会出现未定义的行为。 - 在 DDL 操作执行过程中升级 TiDB,TiDB 可能会出现未定义的行为。 -引入平滑升级后,TiDB 升级过程不再受上述限制。 +上述限制可概括为,你需要保证在升级过程中无用户发起的 DDL 操作。引入平滑升级后,TiDB 升级过程不再受此限制。 + +更多详情,请参考[使用 TiUP 升级 TiDB](/upgrade-tidb-using-tiup.md#使用-tiup-升级-tidb) 中的警告部分。 + +### 升级方式及步骤 -升级过程中,TiDB 会自动进行以下操作,无需用户干预: +#### TiUP 方式 -1. 暂停用户的 DDL 操作。 -2. 执行升级过程中的系统 DDL 操作。 -3. 恢复被暂停的用户的 DDL 操作。 -4. 完成升级。 +TiUP 会在 v1.14.0 版本自适应支持此功能,即无需特殊操作,直接使用 `tiup cluster upgrade` 操作流程即可。注意目前不支持 `tiup cluster patch` 方式。 + +#### TiDB Operator 方式 + +目前不支持此功能,会尽早自适应支持此功能。 + +#### 其它方式 + +手动升级或者使用脚本升级的操作如下: + +1. 给集群中的任意一台 TiDB 发送 HTTP 升级开始请求:`curl -X POST http://{TiDBIP}:10080/upgrade/start`。 + * TiDB 集群会进入 **Upgrading** 状态。 + * 接下来将要执行的 DDL 操作都会被暂停。 + +2. 替换 TiDB binary,并进行滚动升级。此过程和原升级过程一致。 + * 执行升级过程中的系统 DDL 操作。 + +3. 等集群中所有 TiDB 升级成功后,给任意一台 TiDB 发送 HTTP 升级结束请求:`curl -X POST http://{TiDBIP}:10080/upgrade/finish`。 + * 恢复被暂停的用户的 DDL 操作。 其中,恢复的 DDL job 仍会按升级前的顺序执行。 @@ -56,3 +96,7 @@ TiDB 引入平滑升级功能前,对于升级过程中的 DDL 操作有如下 * BR:BR 可能会将处于 paused 状态的 DDL 拷贝到 TiDB 中,而此状态的 DDL 不能自动 resume,可能导致后续 DDL 卡住的情况。 * DM 和 TiCDC:如果在升级过程中使用 DM 和 TiCDC 向 TiDB 导入 SQL,并且其中包含 DDL 操作,则该导入操作会被阻塞,并可能出现未定义错误。 + +### 插件使用限制 + +TiDB 安装的插件可能自带 DDL 操作。然而,在升级过程中,如果这些插件自带的 DDL 操作针对非系统表进行,可能导致升级过程出现问题。 \ No newline at end of file