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、自动分析、数据整理等操作)对前台流量的影响
-
-
-
-
- -
- 多租户
-
基于资源管控实现资源隔离
-
-
- |
-
-
- |
-
-
-
- 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