From 166a751774d906dedd92ed91d8fad8115c33ebd4 Mon Sep 17 00:00:00 2001 From: xzhangxian1008 Date: Fri, 7 Apr 2023 10:12:58 +0800 Subject: [PATCH 001/257] Add ilike pushdown function for tiflash (#13447) --- functions-and-operators/operators.md | 6 ++++++ releases/release-7.0.0.md | 2 ++ tiflash/tiflash-supported-pushdown-calculations.md | 2 +- 3 files changed, 9 insertions(+), 1 deletion(-) diff --git a/functions-and-operators/operators.md b/functions-and-operators/operators.md index daf25a5f5876..1b9cdf3d9445 100644 --- a/functions-and-operators/operators.md +++ b/functions-and-operators/operators.md @@ -31,6 +31,7 @@ aliases: ['/docs-cn/dev/functions-and-operators/operators/','/docs-cn/dev/refere | [`<`](https://dev.mysql.com/doc/refman/5.7/en/comparison-operators.html#operator_less-than) | 小于 | | [`<=`](https://dev.mysql.com/doc/refman/5.7/en/comparison-operators.html#operator_less-than-or-equal) | 小于或等于 | | [`LIKE`](https://dev.mysql.com/doc/refman/5.7/en/string-comparison-functions.html#operator_like) | 简单模式匹配 | +| [`ILIKE`](https://www.postgresql.org/docs/current/functions-matching.html) | 大小写不敏感的简单模式匹配(TiDB 支持但 MySQL 不支持) | | [`-`](https://dev.mysql.com/doc/refman/5.7/en/arithmetic-functions.html#operator_minus) | 减 | | [`%`, `MOD`](https://dev.mysql.com/doc/refman/5.7/en/arithmetic-functions.html#operator_mod) | 求余 | | [`NOT`, `!`](https://dev.mysql.com/doc/refman/5.7/en/logical-operators.html#operator_not) | 取反 | @@ -99,6 +100,7 @@ OR, || | [`<`](https://dev.mysql.com/doc/refman/5.7/en/comparison-operators.html#operator_less-than) | 小于 | | [`<=`](https://dev.mysql.com/doc/refman/5.7/en/comparison-operators.html#operator_less-than-or-equal) | 小于或等于 | | [`LIKE`](https://dev.mysql.com/doc/refman/5.7/en/string-comparison-functions.html#operator_like) | 简单模式匹配 | +| [`ILIKE`](https://www.postgresql.org/docs/current/functions-matching.html) | 大小写不敏感的简单模式匹配(TiDB 支持但 MySQL 不支持) | | [`NOT BETWEEN ... AND ...`](https://dev.mysql.com/doc/refman/5.7/en/comparison-operators.html#operator_not-between) | 判断值是否不在范围内 | | [`!=`, `<>`](https://dev.mysql.com/doc/refman/5.7/en/comparison-operators.html#operator_not-equal) | 不等于 | | [`NOT IN()`](https://dev.mysql.com/doc/refman/5.7/en/comparison-operators.html#operator_not-in) | 判断值是否不在一个值的集合内 | @@ -126,3 +128,7 @@ OR, || | [`:=`](https://dev.mysql.com/doc/refman/5.7/en/assignment-operators.html#operator_assign-value) | 赋值 | 详情参见[这里](https://dev.mysql.com/doc/refman/5.7/en/group-by-functional-dependence.html)。 + +## MySQL 兼容性 + +* MySQL 不支持 `ILIKE` 操作符。 diff --git a/releases/release-7.0.0.md b/releases/release-7.0.0.md index 1fbea320138d..1c6aeea89f71 100644 --- a/releases/release-7.0.0.md +++ b/releases/release-7.0.0.md @@ -389,6 +389,7 @@ TiDB 版本:7.0.0 - 避免某些情况下分区表数据需要在 TiDB 全局排序 [#26166](https://github.com/pingcap/tidb/issues/26166) @[Defined2014](https://github.com/Defined2014) - 支持同时使用 `fair lock mode` 和 `lock only if exists` 功能 [#42068](https://github.com/pingcap/tidb/issues/42068) @[MyonKeminta](https://github.com/MyonKeminta) - 支持打印事务慢日志以及相关事务内部事件 [#41863](https://github.com/pingcap/tidb/issues/41863) @[ekexium](https://github.com/ekexium) + - 支持 `ILIKE` 操作符 [#40943](https://github.com/pingcap/tidb/issues/40943) @[xzhangxian1008](https://github.com/xzhangxian1008) + PD @@ -398,6 +399,7 @@ TiDB 版本:7.0.0 - 减少 TiFlash 在写路径上的内存使用量 [#7144](https://github.com/pingcap/tiflash/issues/7144) @[hongyunyan](https://github.com/hongyunyan) - 减少 TiFlash 在有较多表的情况下的重启时间 [#7146](https://github.com/pingcap/tiflash/issues/7146) @[hongyunyan](https://github.com/hongyunyan) + - 支持下推 `ILIKE` 操作符 [#6740](https://github.com/pingcap/tiflash/issues/6740) @[xzhangxian1008](https://github.com/xzhangxian1008) + Tools diff --git a/tiflash/tiflash-supported-pushdown-calculations.md b/tiflash/tiflash-supported-pushdown-calculations.md index b6b5b3841c8d..f7303d6f0905 100644 --- a/tiflash/tiflash-supported-pushdown-calculations.md +++ b/tiflash/tiflash-supported-pushdown-calculations.md @@ -31,7 +31,7 @@ TiFlash 支持部分算子的下推,支持的算子如下: | 表达式类型 | 运算 | | :-------------- | :------------------------------------- | | [数学函数](/functions-and-operators/numeric-functions-and-operators.md) | `+`, `-`, `/`, `*`, `%`, `>=`, `<=`, `=`, `!=`, `<`, `>`, `ROUND()`, `ABS()`, `FLOOR(int)`, `CEIL(int)`, `CEILING(int)`, `SQRT()`, `LOG()`, `LOG2()`, `LOG10()`, `LN()`, `EXP()`, `POW()`, `SIGN()`, `RADIANS()`, `DEGREES()`, `CONV()`, `CRC32()`, `GREATEST(int/real)`, `LEAST(int/real)` | -| [逻辑函数](/functions-and-operators/control-flow-functions.md)和[算子](/functions-and-operators/operators.md) | `AND`, `OR`, `NOT`, `CASE WHEN`, `IF()`, `IFNULL()`, `ISNULL()`, `IN`, `LIKE`, `COALESCE`, `IS` | +| [逻辑函数](/functions-and-operators/control-flow-functions.md)和[算子](/functions-and-operators/operators.md) | `AND`, `OR`, `NOT`, `CASE WHEN`, `IF()`, `IFNULL()`, `ISNULL()`, `IN`, `LIKE`, `ILIKE`, `COALESCE`, `IS` | | [位运算](/functions-and-operators/bit-functions-and-operators.md) | `&` (bitand), \| (bitor), `~` (bitneg), `^` (bitxor) | | [字符串函数](/functions-and-operators/string-functions.md) | `SUBSTR()`, `CHAR_LENGTH()`, `REPLACE()`, `CONCAT()`, `CONCAT_WS()`, `LEFT()`, `RIGHT()`, `ASCII()`, `LENGTH()`, `TRIM()`, `LTRIM()`, `RTRIM()`, `POSITION()`, `FORMAT()`, `LOWER()`, `UCASE()`, `UPPER()`, `SUBSTRING_INDEX()`, `LPAD()`, `RPAD()`, `STRCMP()` | | [正则函数和算子](/functions-and-operators/string-functions.md) | `REGEXP`, `REGEXP_LIKE()`, `REGEXP_INSTR()`, `REGEXP_SUBSTR()`, `REGEXP_REPLACE()` | From f199d2bee87f435aa743819bfff13273ee424988 Mon Sep 17 00:00:00 2001 From: CbcWestwolf <1004626265@qq.com> Date: Fri, 7 Apr 2023 13:36:58 +0800 Subject: [PATCH 002/257] Add the incompatibility about `grant` and `revoke` (#13368) --- sql-statements/sql-statement-grant-privileges.md | 1 + sql-statements/sql-statement-revoke-privileges.md | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/sql-statements/sql-statement-grant-privileges.md b/sql-statements/sql-statement-grant-privileges.md index 993c1956f850..d103a3fb50dd 100644 --- a/sql-statements/sql-statement-grant-privileges.md +++ b/sql-statements/sql-statement-grant-privileges.md @@ -100,6 +100,7 @@ SHOW GRANTS FOR 'newuser'; * 与 MySQL 类似,`USAGE` 权限表示登录 TiDB 服务器的能力。 * 目前不支持列级权限。 * 与 MySQL 类似,不存在 `NO_AUTO_CREATE_USER` sql 模式时,`GRANT` 语句将在用户不存在时自动创建一个空密码的新用户。删除此 sql-mode(默认情况下已启用)会带来安全风险。 +* `GRANT ` 语句执行成功后,在 TiDB 中语句执行的结果会在当前连接立即生效,而 [MySQL 中部分权限的结果需要等到之后的连接才生效](https://dev.mysql.com/doc/refman/8.0/en/privilege-changes.html)。见 [TiDB #39356](https://github.com/pingcap/tidb/issues/39356)。 ## 另请参阅 diff --git a/sql-statements/sql-statement-revoke-privileges.md b/sql-statements/sql-statement-revoke-privileges.md index 6ce86492c4c5..5be1157e6750 100644 --- a/sql-statements/sql-statement-revoke-privileges.md +++ b/sql-statements/sql-statement-revoke-privileges.md @@ -142,7 +142,7 @@ ERROR 1141 (42000): There is no such grant defined for user 'newuser' on host '% ## MySQL 兼容性 -`REVOKE ` 语句与 MySQL 完全兼容。如发现任何兼容性差异,请在 GitHub 上提交 [issue](https://github.com/pingcap/tidb/issues/new/choose)。 +`REVOKE ` 语句执行成功后,在 TiDB 中语句执行的结果会在当前连接立即生效,而 [MySQL 中部分权限的结果需要等到之后的连接才生效](https://dev.mysql.com/doc/refman/8.0/en/privilege-changes.html)。见 [TiDB #39356](https://github.com/pingcap/tidb/issues/39356)。 ## 另请参阅 From e3e59de0eb897d1bbf88eb5ed8d3287a89c876d7 Mon Sep 17 00:00:00 2001 From: Jack Yu Date: Fri, 7 Apr 2023 13:58:58 +0800 Subject: [PATCH 003/257] fix the scope of `tidb_enable_gogc_tuner` and `tidb_gogc_tuner_threshold` (#13574) --- system-variables.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/system-variables.md b/system-variables.md index e4269df999a8..724c895721e0 100644 --- a/system-variables.md +++ b/system-variables.md @@ -1330,7 +1330,7 @@ MPP 是 TiFlash 引擎提供的分布式计算框架,允许节点之间的数 ### `tidb_enable_gogc_tuner` 从 v6.4.0 版本开始引入 - 作用域:GLOBAL -- 是否持久化到集群:否,仅作用于当前连接的 TiDB 实例 +- 是否持久化到集群:是 - 类型:布尔型 - 默认值:`ON` - 该变量来用控制是否开启 GOGC Tuner。 @@ -1945,7 +1945,7 @@ v5.0 后,用户仍可以单独修改以上系统变量(会有废弃警告) ### `tidb_gogc_tuner_threshold` 从 v6.4.0 版本开始引入 - 作用域:GLOBAL -- 是否持久化到集群:否,仅作用于当前连接的 TiDB 实例 +- 是否持久化到集群:是 - 默认值:`0.6` - 范围:`[0, 0.9)` - 这个变量用来控制 GOGC Tuner 自动调节的最大内存阈值,超过阈值后 GOGC Tuner 会停止工作。 From 6fdec8a92d11e586dccb16dc688290a758f43aed Mon Sep 17 00:00:00 2001 From: XuMeiqi1993 <118057057+XuMeiqi1993@users.noreply.github.com> Date: Fri, 7 Apr 2023 14:10:58 +0800 Subject: [PATCH 004/257] improved-translation-metrics-schema.md (#12084) --- metrics-schema.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/metrics-schema.md b/metrics-schema.md index a164fc901547..9e27ee92dafc 100644 --- a/metrics-schema.md +++ b/metrics-schema.md @@ -116,7 +116,7 @@ select * from information_schema.metrics_tables where table_name='tidb_query_dur ``` * `TABLE_NAME`:对应于 `metrics_schema` 中的表名,这里表名是 `tidb_query_duration`。 -* `PROMQL`:因为监控表的原理是将 SQL 映射成 `PromQL` 后向 Prometheus 请求数据,并将 Prometheus 返回的结果转换成 SQL 查询结果。该字段是 `PromQL` 的表达式模板,查询监控表数据时使用查询条件改写模板中的变量,生成最终的查询表达式。 +* `PROMQL`:监控表的原理是将 SQL 映射成 `PromQL` 后向 Prometheus 请求数据,并将 Prometheus 返回的结果转换成 SQL 查询结果。该字段是 `PromQL` 的表达式模板,查询监控表数据时使用查询条件改写模板中的变量,生成最终的查询表达式。 * `LABELS`:监控项定义的 label,`tidb_query_duration` 有两个 label,分别是 `instance` 和 `sql_type`。 * `QUANTILE`:百分位。直方图类型的监控数据会指定一个默认百分位。如果值为 `0`,表示该监控表对应的监控不是直方图。`tidb_query_duration` 默认查询 0.9,也就是 P90 的监控值。 * `COMMENT`:对这个监控表的解释。可以看出 `tidb_query_duration` 表是用来查询 TiDB query 执行的百分位时间,如 P999/P99/P90 的查询耗时,单位是秒。 @@ -144,7 +144,7 @@ show create table metrics_schema.tidb_query_duration; ``` * `time`:监控项的时间。 -* `instance` 和 `sql_type`:是 `tidb_query_duration` 这个监控项的 label。`instance` 表示监控的地址,`sql_type` 表示执行 SQL 的类似。 +* `instance` 和 `sql_type`:`tidb_query_duration` 监控项的 label。`instance` 表示监控的地址,`sql_type` 表示执行 SQL 的类似。 * `quantile`,百分位,直方图类型的监控都会有该列,表示查询的百分位时间,如 `quantile=0.9` 就是查询 P90 的时间。 * `value`:监控项的值。 From 1eadab6babed1e1d24575328827472014fd9af5c Mon Sep 17 00:00:00 2001 From: fzzf678 <108643977+fzzf678@users.noreply.github.com> Date: Fri, 7 Apr 2023 14:40:58 +0800 Subject: [PATCH 005/257] planner: supply description about plan cache supporting limit (#13518) --- releases/release-6.6.0.md | 2 +- sql-prepared-plan-cache.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/releases/release-6.6.0.md b/releases/release-6.6.0.md index 73cdace55276..4a0481f27d64 100644 --- a/releases/release-6.6.0.md +++ b/releases/release-6.6.0.md @@ -93,7 +93,7 @@ TiDB 版本:6.6.0-[DMR](/releases/versioning.md#开发里程碑版本) * 解除执行计划缓存对 `LIMIT` 子句的限制 [#40219](https://github.com/pingcap/tidb/issues/40219) @[fzzf678](https://github.com/fzzf678) - TiDB v6.6.0 移除了执行计划缓存的限制,带有变量的 `LIMIT` 子句可以进入执行计划缓存,如 `LIMIT ?` 或者 `LIMIT 10, ?`。这使得更多的 SQL 能够从计划缓存中获益,提升执行效率。 + TiDB v6.6.0 移除了执行计划缓存的限制,带有变量的 `LIMIT` 子句可以进入执行计划缓存,如 `LIMIT ?` 或者 `LIMIT 10, ?`。这使得更多的 SQL 能够从计划缓存中获益,提升执行效率。目前出于安全考虑,仅支持缓存 `?` 参数值不大于 10000 的执行计划。 更多信息,请参考[用户文档](/sql-prepared-plan-cache.md)。 diff --git a/sql-prepared-plan-cache.md b/sql-prepared-plan-cache.md index 1d04f263eda5..5dd47ab096a5 100644 --- a/sql-prepared-plan-cache.md +++ b/sql-prepared-plan-cache.md @@ -23,7 +23,7 @@ TiDB 优化器对这两类查询的处理是一样的:`Prepare` 时将参数 - 包含 `ignore_plan_cache` 这一 Hint 的查询,例如 `select /*+ ignore_plan_cache() */ * from t`; - 包含除 `?` 外其他变量(即系统变量或用户自定义变量)的查询,例如 `select * from t where a>? and b>@x`; - 查询包含无法被缓存函数。目前不能被缓存的函数有:`database()`、`current_user`、`current_role`、`user`、`connection_id`、`last_insert_id`、`row_count`、`version`、`like`; -- `LIMIT` 后面带一个变量 (`LIMIT ?`) 且变量值大于 10000 的执行计划不缓存; +- `LIMIT` 后面带有变量 (例如 `LIMIT ?` 或 `LIMIT 10, ?`) 且变量值大于 10000 的执行计划不缓存; - `?` 直接在 `Order By` 后的查询,如 `Order By ?`,此时 `?` 表示根据 `Order By` 后第几列排序,排序列不同的查询使用同一个计划可能导致错误结果,故不缓存;如果是普通表达式,如 `Order By a+?` 则会缓存; - `?` 紧跟在 `Group by` 后的查询,如 `Group By ?`,此时 `?` 表示根据 `Group By` 后第几列聚合,聚合列不同的查询使用同一个计划可能导致错误结果,故不缓存;如果是普通表达式,如 `Group By a+?` 则会缓存; - `?` 出现在窗口函数 `Window Frame` 定义中的查询,如 `(partition by year order by sale rows ? preceding)`;如果 `?` 出现在窗口函数的其他位置,则会缓存; From 0ce27364432f41715681c8f6b5ad31be5a843a8c Mon Sep 17 00:00:00 2001 From: ekexium Date: Fri, 7 Apr 2023 16:56:58 +0800 Subject: [PATCH 006/257] add description about PessimisticLockNotFound relating to lazy uniqueness check (#11700) --- constraints.md | 2 ++ releases/release-6.5.1.md | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/constraints.md b/constraints.md index e07430cfbbbd..3d8cb6e79c37 100644 --- a/constraints.md +++ b/constraints.md @@ -246,6 +246,8 @@ ERROR 1062 (23000): Duplicate entry 'bill' for key 'users.username' ERROR 9007 (HY000): Write conflict, txnStartTS=435688780611190794, conflictStartTS=435688783311536129, conflictCommitTS=435688783311536130, key={tableID=74, indexID=1, indexValues={bill, }} primary={tableID=74, indexID=1, indexValues={bill, }}, reason=LazyUniquenessCheck [try again later] ``` +- 关闭该变量时,如果多个悲观事务之间存在写冲突,悲观锁可能会在其它悲观事务提交时被强制回滚,因此产生 `PessimisticLockNotFound` 错误。发生该错误时,说明该业务不适合推迟悲观事务的唯一约束检查,应考虑调整业务避免冲突,或在发生错误后重试事务。 + - 关闭该变量会导致悲观事务中可能报出错误 `8147: LazyUniquenessCheckFailure`。 > **注意:** diff --git a/releases/release-6.5.1.md b/releases/release-6.5.1.md index e36dabb022a3..c6e75d2c03c2 100644 --- a/releases/release-6.5.1.md +++ b/releases/release-6.5.1.md @@ -112,7 +112,7 @@ TiDB 版本:6.5.1 - 修复慢日志中查询计划算子可能缺失的问题 [#41458](https://github.com/pingcap/tidb/issues/41458) @[time-and-fate](https://github.com/time-and-fate) - 修复错误下推包含虚拟列的 TopN 算子到 TiKV 或 TiFlash 导致结果错误的问题 [#41355](https://github.com/pingcap/tidb/issues/41355) @[Dousir9](https://github.com/Dousir9) - 修复添加索引时数据不一致的问题 [#40698](https://github.com/pingcap/tidb/issues/40698) [#40730](https://github.com/pingcap/tidb/issues/40730) [#41459](https://github.com/pingcap/tidb/issues/41459) [#40464](https://github.com/pingcap/tidb/issues/40464) [#40217](https://github.com/pingcap/tidb/issues/40217) @[tangenta](https://github.com/tangenta) - - 修复添加索引时出现 "Pessimistic lock not found" 的报错问题 [#41515](https://github.com/pingcap/tidb/issues/41515) @[tangenta](https://github.com/tangenta) + - 修复添加索引时出现 `PessimisticLockNotFound` 的报错问题 [#41515](https://github.com/pingcap/tidb/issues/41515) @[tangenta](https://github.com/tangenta) - 修复添加唯一索引时误报重复键的问题 [#41630](https://github.com/pingcap/tidb/issues/41630) @[tangenta](https://github.com/tangenta) - 修复 TiDB 使用 `paging` 时性能下降的问题 [#40741](https://github.com/pingcap/tidb/issues/40741) @[solotzg](https://github.com/solotzg) From 4e107c239c80bfb09524a372986ce53109898afd Mon Sep 17 00:00:00 2001 From: glorv Date: Fri, 7 Apr 2023 17:16:58 +0800 Subject: [PATCH 007/257] tidb: add missing labels in config file (#13522) --- tidb-configuration-file.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/tidb-configuration-file.md b/tidb-configuration-file.md index 18d077d0aa16..085bbe89759b 100644 --- a/tidb-configuration-file.md +++ b/tidb-configuration-file.md @@ -213,6 +213,16 @@ TiDB 配置文件比命令行参数支持更多的选项。你可以在 [config/ + 默认值:false + 表级锁用于协调多个 session 之间对同一张表的并发访问。目前已支持的锁种类包括 `READ`、`WRITE` 和 `WRITE LOCAL`。当该配置项为 `false` 时,执行 `LOCK TABLES` 和 `UNLOCK TABLES` 语句不会生效,并且会报 "LOCK/UNLOCK TABLES is not supported" 的警告。更多信息,请参考 [`LOCK TABLES` 和 `UNLOCK TABLES`](/sql-statements/sql-statement-lock-tables-and-unlock-tables.md)。 +### `labels` + ++ 指定服务器标签,例如 `{ zone = "us-west-1", dc = "dc1", rack = "rack1", host = "tidb1" }`。 ++ 默认值:`{}` + +> **注意:** +> +> - 标签 `zone` 在 TiDB 中具有特殊用途,用于指定服务器所在的区域信息,当设置 `zone` 为非空值时,对应的值会被自动用于 [`txn-score`](/system-variables.md#txn_scope) 和 [`Follower read`](/follower-read.md) 等功能。 +> - 标签 `group` 在 TiDB Operator 中具有特殊用途。对于使用 [TiDB Operator](/tidb-operator-overview.md) 部署的集群,建议不要手动指定此标签。 + ## log 日志相关的配置项。 From c35b7e9aa8927b0bc417cf54642e95e1a0a88dc7 Mon Sep 17 00:00:00 2001 From: Benjamin2037 Date: Mon, 10 Apr 2023 14:40:59 +0800 Subject: [PATCH 008/257] Add error code description for 'Information schema is changed' (#13559) --- metadata-lock.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/metadata-lock.md b/metadata-lock.md index 99b6d0417780..31d4204964d2 100644 --- a/metadata-lock.md +++ b/metadata-lock.md @@ -64,7 +64,7 @@ summary: 介绍 TiDB 中元数据锁的概念、原理、实现和影响。 | `COMMIT;` | | | `BEGIN;` | | | | `ALTER TABLE t MODIFY COLUMN a CHAR(10);` | - | `SELECT * FROM t;` (报错 `Information schema is changed`) | | + | `SELECT * FROM t;` (报错 `Error 8028: Information schema is changed`) | | ## 元数据锁的可观测性 From 7f491451804601be0850d4ca4becf043c7794723 Mon Sep 17 00:00:00 2001 From: 3pointer Date: Mon, 10 Apr 2023 16:15:00 +0800 Subject: [PATCH 009/257] sync-diff: update docker images (#13651) --- sync-diff-inspector/sync-diff-inspector-overview.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sync-diff-inspector/sync-diff-inspector-overview.md b/sync-diff-inspector/sync-diff-inspector-overview.md index e959e587f9fd..455358139ea1 100644 --- a/sync-diff-inspector/sync-diff-inspector-overview.md +++ b/sync-diff-inspector/sync-diff-inspector-overview.md @@ -24,7 +24,7 @@ aliases: ['/docs-cn/dev/sync-diff-inspector/sync-diff-inspector-overview/','/doc {{< copyable "shell-regular" >}} ```shell - docker pull pingcap/tidb-enterprise-tools:nightly + docker pull pingcap/tidb-tools:latest ``` ## sync-diff-inspector 的使用限制 From 2d9667fa9e2dd6e1db156db84cf642d3d6ba81dc Mon Sep 17 00:00:00 2001 From: Aolin Date: Tue, 11 Apr 2023 12:29:00 +0800 Subject: [PATCH 010/257] ci: update specified actions to the latest (#13665) --- .github/workflows/link-fail-fast.yaml | 2 +- .github/workflows/link.yaml | 2 +- .github/workflows/media.yml | 2 +- .github/workflows/rebase.yml | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/link-fail-fast.yaml b/.github/workflows/link-fail-fast.yaml index 070286920b9a..146f4d0a21f0 100644 --- a/.github/workflows/link-fail-fast.yaml +++ b/.github/workflows/link-fail-fast.yaml @@ -23,7 +23,7 @@ jobs: - name: Link Checker if: ${{ steps.changed-files.outputs.all_changed_files }} - uses: lycheeverse/lychee-action@v1.5.0 + uses: lycheeverse/lychee-action@v1.6.1 with: fail: true args: -E --exclude-mail -i -n -t 45 -- '${{ steps.changed-files.outputs.all_changed_files }}' diff --git a/.github/workflows/link.yaml b/.github/workflows/link.yaml index 34a6aef94e40..52ca7236df81 100644 --- a/.github/workflows/link.yaml +++ b/.github/workflows/link.yaml @@ -17,7 +17,7 @@ jobs: curl https://raw.githubusercontent.com/pingcap/docs/master/.lycheeignore --output .lycheeignore - name: Check Links - uses: lycheeverse/lychee-action@v1.5.0 + uses: lycheeverse/lychee-action@v1.6.1 with: # For parameter description, see https://github.com/lycheeverse/lychee#commandline-parameters args: -E --exclude-mail -v -i -n -t 45 -- **/*.md *.md diff --git a/.github/workflows/media.yml b/.github/workflows/media.yml index 640577a27a58..c504b945e513 100644 --- a/.github/workflows/media.yml +++ b/.github/workflows/media.yml @@ -11,7 +11,7 @@ jobs: name: Upload media files runs-on: ubuntu-latest steps: - - uses: actions/checkout@master + - uses: actions/checkout@v3 with: # Must use at least depth 2! fetch-depth: 2 diff --git a/.github/workflows/rebase.yml b/.github/workflows/rebase.yml index 4e495b30a061..73cce3c0fa89 100644 --- a/.github/workflows/rebase.yml +++ b/.github/workflows/rebase.yml @@ -9,7 +9,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout the latest code - uses: actions/checkout@v2 + uses: actions/checkout@v3 with: token: ${{ secrets.REBASE_SECRET_KEY }} fetch-depth: 0 # otherwise, you will fail to push refs to dest repo From d0972abcb64742bbdf61ca0948260f049957bf80 Mon Sep 17 00:00:00 2001 From: xixirangrang Date: Tue, 11 Apr 2023 14:35:00 +0800 Subject: [PATCH 011/257] load-data: add more info about experimental features (#13659) --- sql-statements/sql-statement-load-data.md | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/sql-statements/sql-statement-load-data.md b/sql-statements/sql-statement-load-data.md index 009f511c87a9..a6f09b661573 100644 --- a/sql-statements/sql-statement-load-data.md +++ b/sql-statements/sql-statement-load-data.md @@ -8,9 +8,15 @@ aliases: ['/docs-cn/dev/sql-statements/sql-statement-load-data/','/docs-cn/dev/r `LOAD DATA` 语句用于将数据批量加载到 TiDB 表中。 +在 v7.0.0 版本集成 TiDB Lightning 的逻辑导入模式,使 `LOAD DATA` 语句更加强大,包括: + +- 支持从 S3、GCS 导入数据 +- 支持导入 Parquet 格式的数据 +- 新增参数 `FORMAT`、`FIELDS DEFINED NULL BY`、`With batch_size=,detached` + > **警告:** > -> 当前该功能为实验特性,不建议在生产环境中使用。 +> 新增的能力和参数为实验特性,不建议在生产环境中使用。 ## 语法图 From 4b680690d57e5de6e2e2acd6face8ffe1c5f8617 Mon Sep 17 00:00:00 2001 From: Ran Date: Tue, 11 Apr 2023 16:13:00 +0800 Subject: [PATCH 012/257] add k8s v1.5 to pdf list (#13666) --- resources/cdnfresh.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/resources/cdnfresh.txt b/resources/cdnfresh.txt index 96f3f9d1dc6b..78156cc79f62 100644 --- a/resources/cdnfresh.txt +++ b/resources/cdnfresh.txt @@ -26,6 +26,8 @@ https://download.pingcap.org/tidb-in-kubernetes-dev-zh-manual.pdf https://download.pingcap.org/tidb-in-kubernetes-dev-en-manual.pdf https://download.pingcap.org/tidb-in-kubernetes-stable-zh-manual.pdf https://download.pingcap.org/tidb-in-kubernetes-stable-en-manual.pdf +https://download.pingcap.org/tidb-in-kubernetes-v1.5-zh-manual.pdf +https://download.pingcap.org/tidb-in-kubernetes-v1.5-en-manual.pdf https://download.pingcap.org/tidb-in-kubernetes-v1.3-zh-manual.pdf https://download.pingcap.org/tidb-in-kubernetes-v1.3-en-manual.pdf https://download.pingcap.org/tidb-in-kubernetes-v1.2-zh-manual.pdf From 9cfd6f29e664bfe65ed4c42bf4dabb1b04224ee9 Mon Sep 17 00:00:00 2001 From: qqqdan Date: Wed, 12 Apr 2023 11:55:00 +0800 Subject: [PATCH 013/257] alert rules: update the solution of some rules (#13625) --- alert-rules.md | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/alert-rules.md b/alert-rules.md index 18065dd1e592..205d13a2bf48 100644 --- a/alert-rules.md +++ b/alert-rules.md @@ -425,8 +425,10 @@ aliases: ['/docs-cn/dev/alert-rules/','/docs-cn/dev/reference/alert-rules/'] * 处理方法: - * 检查 store 性能是否异常 - * 调大 TiKV `raftstore.inspect-interval` 参数,提高延迟检测的超时上限 + * 观察 [**TiKV-Details** > **PD** 面板](/grafana-tikv-dashboard.md#pd),查看 Store Slow Score 监控指标,找出指标数值超过 80 的节点,该节点即为被检测到的慢节点。 + * 观察 [**TiKV-Details** > **Raft IO** 面板](/grafana-tikv-dashboard.md#raft-io),查看延迟是否升高。如果延迟很高,表明磁盘可能存在瓶颈。 + * 调大 TiKV [`raftstore.inspect-interval`](/tikv-configuration-file.md#inspect-interval) 参数,提高延迟检测的超时上限。 + * 如果需要进一步分析报警的 TiKV 节点的性能问题,找到优化方法,可以参考[性能分析和优化方法](/performance-tuning-methods.md#storage-async-write-durationstore-duration-和-apply-duration)。 ## TiKV 报警规则 @@ -494,9 +496,9 @@ aliases: ['/docs-cn/dev/alert-rules/','/docs-cn/dev/reference/alert-rules/'] * 处理方法: - 1. 观察 Raft Propose 监控,看这个报警的 TiKV 节点是否明显有比其他 TiKV 高很多。如果是,表明这个 TiKV 上有热点,需要检查热点调度是否能正常工作。 - 2. 观察 Raft IO 监控,看延迟是否升高。如果延迟很高,表明磁盘可能有瓶颈。一个能缓解但不怎么安全的办法是将 `sync-log` 改成 `false`。 - 3. 观察 Raft Process 监控,看 tick duration 是否很高。如果是,需要在 `[raftstore]` 配置下加上 `raft-base-tick-interval = “2s”`。 + 1. 观察 [**TiKV-Details** > **Raft Propose** 面板](/grafana-tikv-dashboard.md#raft-propose),查看这个报警的 TiKV 节点是否明显比其他 TiKV 高很多。如果是,表明这个 TiKV 上有热点,需要检查热点调度是否能正常工作。 + 2. 观察 [**TiKV-Details** > **Raft IO** 面板](/grafana-tikv-dashboard.md#raft-io),查看延迟是否升高。如果延迟很高,表明磁盘可能存在瓶颈。 + 3. 观察 [**TiKV-Details** > **Raft process** 面板](/grafana-tikv-dashboard.md#raft-process),关注 `tick duration` 是否很高。如果是,需要将 TiKV 配置项 [`raftstore.raft-base-tick-interval`](/tikv-configuration-file.md#raft-base-tick-interval) 设置为 `"2s"`。 #### `TiKV_write_stall` @@ -550,8 +552,9 @@ aliases: ['/docs-cn/dev/alert-rules/','/docs-cn/dev/reference/alert-rules/'] * 处理方法: - 1. 检查 Raftstore 上的压力,参考 [`TiKV_channel_full_total`](#tikv_channel_full_total) 的处理方法。 - 2. 检查 apply worker 线程的压力。 + 1. 观察 [**TiKV-Details** > **Raft propose** 面板](/grafana-tikv-dashboard.md#raft-propose),查看这个报警的 TiKV 节点的 **99% Propose wait duration per server** 是否明显比其他 TiKV 高很多。如果是,表明这个 TiKV 上有热点,需要检查热点调度是否能正常工作。 + 2. 观察 [**TiKV-Details** > **Raft IO** 面板](/grafana-tikv-dashboard.md#raft-io),查看延迟是否升高。如果延迟很高,表明磁盘可能存在瓶颈。 + 3. 如果需要进一步分析报警的 TiKV 节点的性能问题,找到优化方法,可以参考[性能分析和优化方法](/performance-tuning-methods.md#storage-async-write-durationstore-duration-和-apply-duration)。 #### `TiKV_coprocessor_request_wait_seconds` From 27604d6d3cfcd4e4a55914d0c35f0eec52835318 Mon Sep 17 00:00:00 2001 From: Ran Date: Wed, 12 Apr 2023 13:03:01 +0800 Subject: [PATCH 014/257] release: add 6.1.6 release notes (#13577) --- TOC.md | 1 + releases/release-6.1.6.md | 97 ++++++++++++++++++++++++++++++++++++ releases/release-notes.md | 1 + releases/release-timeline.md | 1 + 4 files changed, 100 insertions(+) create mode 100644 releases/release-6.1.6.md diff --git a/TOC.md b/TOC.md index 0f9e051ce03a..b99886b60f3e 100644 --- a/TOC.md +++ b/TOC.md @@ -998,6 +998,7 @@ - v6.2 - [6.2.0-DMR](/releases/release-6.2.0.md) - v6.1 + - [6.1.6](/releases/release-6.1.6.md) - [6.1.5](/releases/release-6.1.5.md) - [6.1.4](/releases/release-6.1.4.md) - [6.1.3](/releases/release-6.1.3.md) diff --git a/releases/release-6.1.6.md b/releases/release-6.1.6.md new file mode 100644 index 000000000000..549cad24bdaf --- /dev/null +++ b/releases/release-6.1.6.md @@ -0,0 +1,97 @@ +--- +title: TiDB 6.1.6 Release Notes +summary: 了解 TiDB 6.1.6 版本的兼容性变更、改进提升,以及错误修复。 +--- + +# TiDB 6.1.6 Release Notes + +发版日期:2023 年 4 月 12 日 + +TiDB 版本:6.1.6 + +试用链接:[快速体验](https://docs.pingcap.com/zh/tidb/v6.1/quick-start-with-tidb) | [生产部署](https://docs.pingcap.com/zh/tidb/v6.1/production-deployment-using-tiup) | [下载离线包](https://cn.pingcap.com/product-community/?version=v6.1.6#version-list) + +## 兼容性变更 + +- TiCDC 修复了 Avro 编码 FLOAT 类型数据错误的问题 [#8490](https://github.com/pingcap/tiflow/issues/8490) @[3AceShowHand](https://github.com/3AceShowHand) + + 在升级 TiCDC 集群到 v6.1.6 或更高的 v6.1.x 版本时,如果使用 Avro 同步的表包含 `FLOAT` 类型数据,请在升级前手动调整 Confluent Schema Registry 的兼容性策略为 `None`,使 changefeed 能够成功更新 schema。否则,在升级之后 changefeed 将无法更新 schema 并进入错误状态。 + +## 提升改进 + ++ TiDB + - Prepared Plan Cache 支持缓存 BatchPointGet 计划 [#42125](https://github.com/pingcap/tidb/issues/42125) @[qw4990](https://github.com/qw4990) + - Index Join 支持更多的 SQL 格式 [#40505](https://github.com/pingcap/tidb/issues/40505) @[Yisaer](https://github.com/Yisaer) + ++ TiKV + + - 支持在小于 1 core 的 CPU 下启动 TiKV [#13586](https://github.com/tikv/tikv/issues/13586) [#13752](https://github.com/tikv/tikv/issues/13752) [#14017](https://github.com/tikv/tikv/issues/14017) @[andreid-db](https://github.com/andreid-db) + +## Bug 修复 + ++ TiDB + + - 修复 `ignore_plan_cache` hint 对 INSERT 语句可能不生效的问题 [#40079](https://github.com/pingcap/tidb/issues/40079) [#39717](https://github.com/pingcap/tidb/issues/39717) @[qw4990](https://github.com/qw4990) + - 修复了 `indexMerge` 遇到错误后可能会导致 TiDB 崩溃的问题 [#41047](https://github.com/pingcap/tidb/issues/41047) [#40877](https://github.com/pingcap/tidb/issues/40877) @[guo-shaoge](https://github.com/guo-shaoge) @[windtalker](https://github.com/windtalker) + - 修复错误下推包含虚拟列的 TopN 算子到 TiKV 或 TiFlash 导致结果错误的问题 [#41355](https://github.com/pingcap/tidb/issues/41355) @[Dousir9](https://github.com/Dousir9) + - 修复了使用 `Prepare` 或 `Execute` 查询某些虚拟表时无法将表 ID 下推,导致在大量 Region 的情况下 PD OOM 的问题 [#39605](https://github.com/pingcap/tidb/issues/39605) @[djshow832](https://github.com/djshow832) + - 修复 Plan Cache 处理 `int_col in (decimal...)` 条件时可能缓存 FullScan 计划的问题 [#40224](https://github.com/pingcap/tidb/issues/40224) @[qw4990](https://github.com/qw4990) + - 修复 IndexMerge 计划在 SET 类型列上可能生成错误区间的问题 [#41273](https://github.com/pingcap/tidb/issues/41273) [#41293](https://github.com/pingcap/tidb/issues/41293) @[time-and-fate](https://github.com/time-and-fate) + - 修复了无符号的 `TINYINT`/`SMALLINT`/`INT` 和小于 `0` 的 `DECIMAL`/`FLOAT`/`DOUBLE` 类型比较时,结果可能出错的问题 [#41736](https://github.com/pingcap/tidb/issues/41736) @[LittleFall](https://github.com/LittleFall) + - 修复了查询 `INFORMATION_SCHEMA.CLUSTER_SLOW_QUERY` 表导致 TiDB 服务器 OOM 的问题,在 Grafana dashboard 中查看慢查询记录的时候可能会触发该问题 [#33893](https://github.com/pingcap/tidb/issues/33893) @[crazycs520](https://github.com/crazycs520) + - 修复 Range 分区允许多个 `MAXVALUE` 分区的问题 [#36329](https://github.com/pingcap/tidb/issues/36329) @[u5surf](https://github.com/u5surf) + - 修复 Plan Cache 可能缓存 Shuffle 算子导致返回错误结果的问题 [#38335](https://github.com/pingcap/tidb/issues/38335) @[qw4990](https://github.com/qw4990) + - 修复了时区中的数据争用可能导致数据和索引不一致问题 [#40710](https://github.com/pingcap/tidb/issues/40710) @[wjhuang2016](https://github.com/wjhuang2016) + - 修复了 `indexMerge` 中可能会出现 goroutine 泄露的问题 [#41545](https://github.com/pingcap/tidb/issues/41545) [#41605](https://github.com/pingcap/tidb/issues/41605) @[guo-shaoge](https://github.com/guo-shaoge) + - 修复在使用 Cursor Fetch 且在 Execute、Fetch、Close 之间运行其它语句后,Fetch 与 Close 命令可能会返回错误结果或造成 TiDB Panic 的问题 [#40094](https://github.com/pingcap/tidb/issues/40094) [@YangKeao](https://github.com/YangKeao) + - 修复了使用 DDL 修改浮点类型时,保持长度不变且减少小数位后,旧数据仍然保持原样的问题 [#41281](https://github.com/pingcap/tidb/issues/41281) [@zimulala](https://github.com/zimulala) + - 修复了 Join `information_schema.columns` 表会造成 TiDB panic 的问题 [#32459](https://github.com/pingcap/tidb/issues/32459) [@tangenta](https://github.com/tangenta) + - 修复了生成执行计划过程中,因为获取的 InfoSchema 不一致而导致的 TiDB panic 的问题 [#41622](https://github.com/pingcap/tidb/issues/41622) [@tiancaiamao](https://github.com/tiancaiamao) + - 修复 TiFlash 执行中遇到生成列会报错的问题 [#40663](https://github.com/pingcap/tidb/issues/40663) @[guo-shaoge](https://github.com/guo-shaoge) + - 修复当同一个 SQL 中出现多个不同的分区表时,TiDB 可能执行得到错误结果的问题 [#42135](https://github.com/pingcap/tidb/issues/42135) @[mjonss](https://github.com/mjonss) + - 修复 Plan Cache 可能缓存 Shuffle 算子导致返回错误结果的问题 [#38335](https://github.com/pingcap/tidb/issues/38335) @[qw4990](https://github.com/qw4990) @[fzzf678](https://github.com/fzzf678) + - 修复使用 Index Merge 的方式读取包含 `SET` 类型列的表时,结果可能出错的问题 [#41293](https://github.com/pingcap/tidb/issues/41293) @[time-and-fate](https://github.com/time-and-fate) + - 修复在开启 Prepared Plan Cache 的情况下,索引全表扫可能会报错的问题 [#42150](https://github.com/pingcap/tidb/issues/42150) @[fzzf678](https://github.com/fzzf678) + - 修复在 DDL 执行过程中,使用 PointGet 读取表的 SQL 语句可能会在执行时抛出 panic 的问题 [#41622](https://github.com/pingcap/tidb/issues/41622) @[tiancaiamao](https://github.com/tiancaiamao) + - 修复事务内执行 PointUpdate 之后,`SELECT` 结果不正确的问题 [#28011](https://github.com/pingcap/tidb/issues/28011) @[zyguan](https://github.com/zyguan) + - 定期清理过期的 Region 缓存,避免内存泄漏和性能下降问题 [#40461](https://github.com/pingcap/tidb/issues/40461) @[sticnarf](https://github.com/sticnarf) @[zyguan](https://github.com/zyguan) + - 修复 `INSERT IGNORE` 和 `REPLACE` 语句对不修改 value 的 key 没有加锁的问题 [#42121](https://github.com/pingcap/tidb/issues/42121) @[zyguan](https://github.com/zyguan) + ++ TiKV + + - 修复转换 `const Enum` 类型到其他类型时报错的问题 [#14156](https://github.com/tikv/tikv/issues/14156) @[wshwsh12](https://github.com/wshwsh12) + - 修复 CPU 配额限制的问题 [13084](https://github.com/tikv/tikv/issues/13084) @[BornChanger](https://github.com/BornChanger) + - 修复 Snapshot Last Index 不正确的问题 [12618](https://github.com/tikv/tikv/issues/12618) @[LintianShi](https://github.com/LintianShi) + ++ PD + + - 修复 Region Scatter 接口可能导致 leader 分布不均匀的问题 [#6017](https://github.com/tikv/pd/issues/6017) @[HunDunDM](https://github.com/HunDunDM) + - 修复 Online Unsafe Recovery 超时机制不生效的问题 [#6107](https://github.com/tikv/pd/issues/6107) @[v01dstar](https://github.com/v01dstar) + ++ TiFlash + + - 修复半连接在计算笛卡尔积时,使用内存过量的问题 [#6730](https://github.com/pingcap/tiflash/issues/6730) @[gengliqi](https://github.com/gengliqi) + - 修复 TiFlash 日志搜索过慢的问题 [#6829](https://github.com/pingcap/tiflash/issues/6829) @[hehechen](https://github.com/hehechen) + - 修复了开启 new collation 后 TopN/Sort 算子结果可能出错的问题 [#6807](https://github.com/pingcap/tiflash/issues/6807) @[xzhangxian1008](https://github.com/xzhangxian1008) + - 修复了 Decimal 转换在某些情况下进位错误的问题 [#6994](https://github.com/pingcap/tiflash/issues/6994) @[windtalker](https://github.com/windtalker) + - 修复 TiFlash 无法识别生成列的问题 [#6801](https://github.com/pingcap/tiflash/issues/6801) @[guo-shaoge](https://github.com/guo-shaoge) + - 修复了 Decimal 除法在某些情况下最后一位未进位的问题 [#7022](https://github.com/pingcap/tiflash/issues/7022) @[LittleFall](https://github.com/LittleFall) + ++ Tools + + + TiCDC + + - 修复同步数据时由于 `UPDATE` 和 `INSERT` 语句乱序可能导致 `Duplicate entry` 错误的问题 [#8597](https://github.com/pingcap/tiflow/issues/8597) @[sdojjy](https://github.com/sojjy) + - 修复由于 PD 和 TiCDC 之间的网络隔离引起 TiCDC 程序异常退出的问题 [#8562](https://github.com/pingcap/tiflow/issues/8562) @[overvenus](https://github.com/overvenus) + - 修复下游为 TiDB 或 MySQL 时,无主键且非空唯一索引所在列指定了 CHARACTER SET 同步时可能会出现数据不一致的问题 [#8420](https://github.com/pingcap/tiflow/issues/8420) @[zhaoxinyu](https://github.com/zhaoxinyu) + - 修复 `db sorter` 使用内存时未受 `cgroup memory limit` 限制的问题 [#8588](https://github.com/pingcap/tiflow/issues/8588) @[amyangfei](https://github.com/amyangfei) + - 优化 `cdc cli` 在遇到非法输入时的错误提示 [#7903](https://github.com/pingcap/tiflow/issues/7903) @[CharlesCheung96](https://github.com/CharlesCheung96) + - 修复 redo log 容忍 S3 存储故障的时间过短的问题 [#8089](https://github.com/pingcap/tiflow/issues/8089) @[CharlesCheung96](https://github.com/CharlesCheung96) + - 修复在 PD 异常时,暂停一个 changefeed 会错误设置状态的问题 [#8330](https://github.com/pingcap/tiflow/issues/8330) @[sdojjy](https://github.com/sdojjy) + + + TiDB Lightning + + - 修复冲突处理逻辑 (`duplicate-resolution`) 可能导致 checksum 不一致的问题 [#40657](https://github.com/pingcap/tidb/issues/40657) @[gozssky](https://github.com/gozssky) + - 修复 TiDB Lightning 在 split-region 阶段发生 panic 的问题 [#40934](https://github.com/pingcap/tidb/issues/40934) @[lance6716](https://github.com/lance6716) + - 修复了在使用 Local Backend 模式导入数据时,当导入目标表的复合主键中存在 `auto_random` 列,且源数据中没有指定该列的值时,相关列没有自动生成数据的问题 [#41454](https://github.com/pingcap/tidb/issues/41454) @[D3Hunter](https://github.com/D3Hunter) + - 修复在并行导入时,当除最后一个 TiDB Lightning 实例外的其他实例都遇到本地重复记录时,TiDB Lightning 可能会错误地跳过冲突处理的问题 [#40923](https://github.com/pingcap/tidb/issues/40923) @[lichunzhu](https://github.com/lichunzhu) diff --git a/releases/release-notes.md b/releases/release-notes.md index dfb2776f845f..cc17e50cad50 100644 --- a/releases/release-notes.md +++ b/releases/release-notes.md @@ -34,6 +34,7 @@ TiDB 历史版本发布声明如下: ## 6.1 +- [6.1.6](/releases/release-6.1.6.md): 2023-04-12 - [6.1.5](/releases/release-6.1.5.md): 2023-02-28 - [6.1.4](/releases/release-6.1.4.md): 2023-02-08 - [6.1.3](/releases/release-6.1.3.md): 2022-12-05 diff --git a/releases/release-timeline.md b/releases/release-timeline.md index 23906465dda9..213f72a97080 100644 --- a/releases/release-timeline.md +++ b/releases/release-timeline.md @@ -9,6 +9,7 @@ summary: 了解 TiDB 的版本发布时间线。 | 版本 | 发布日期 | | :--- | :--- | +| [6.1.6](/releases/release-6.1.6.md) | 2023-04-12 | | [7.0.0-DMR](/releases/release-7.0.0.md) | 2023-03-30 | | [6.5.1](/releases/release-6.5.1.md) | 2023-03-10 | | [6.1.5](/releases/release-6.1.5.md) | 2023-02-28 | From 7cf9d9b0219f1ddd14160fa71c7208a1fa2112be Mon Sep 17 00:00:00 2001 From: Grace Cai Date: Thu, 13 Apr 2023 15:23:02 +0800 Subject: [PATCH 015/257] partitioned-table: updated the structure of Partition management (#13689) --- partitioned-table.md | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/partitioned-table.md b/partitioned-table.md index 2e2e290d2eaa..91ca9687d1d8 100644 --- a/partitioned-table.md +++ b/partitioned-table.md @@ -803,8 +803,6 @@ Empty set (0.00 sec) - 使用 `ALTER TABLE <表名> TRUNCATE PARTITION <分区列表>` 语句清空分区里的数据。`TRUNCATE PARTITION` 的逻辑与 [`TRUNCATE TABLE`](/sql-statements/sql-statement-truncate.md) 相似,但它的操作对象为分区。 - 使用 `ALTER TABLE <表名> REORGANIZE PARTITION <分区列表> INTO (<新的分区说明>)`语句对分区进行合并、拆分、或者其他修改。 -对于 `LIST` 和 `RANGE` 分区表,暂不支持 `REORGANIZE PARTITION` 语句。 - 对于 `HASH` 和 `KEY` 分区表,目前只支持 `ALTER TABLE ... TRUNCATE PARTITION` 分区管理语句,不支持 `COALESCE PARTITION` 和 `ADD PARTITION` 语句。 `EXCHANGE PARTITION` 语句用来交换分区和非分区表,类似于重命名表如 `RENAME TABLE t1 TO t1_tmp, t2 TO t1, t1_tmp TO t2` 的操作。 @@ -858,7 +856,7 @@ PARTITION BY LIST (level) ( PARTITION l5 VALUES IN (5)); ``` -### 删除分区 +#### 删除分区 ```sql ALTER TABLE members DROP PARTITION p1990; @@ -866,7 +864,7 @@ ALTER TABLE members DROP PARTITION p1990; ALTER TABLE member_level DROP PARTITION l5; ``` -### 清空分区 +#### 清空分区 ```sql ALTER TABLE members TRUNCATE PARTITION p1980; @@ -874,7 +872,7 @@ ALTER TABLE members TRUNCATE PARTITION p1980; ALTER TABLE member_level TRUNCATE PARTITION l4; ``` -### 添加分区 +#### 添加分区 ```sql ALTER TABLE members ADD PARTITION (PARTITION `p1990to2010` VALUES LESS THAN (2010)); @@ -892,7 +890,7 @@ ALTER TABLE members ADD PARTITION (PARTITION p1990 VALUES LESS THAN (2000)); ERROR 1493 (HY000): VALUES LESS THAN value must be strictly increasing for each partition ``` -### 重组分区 +#### 重组分区 拆分分区: From 00b16591ba0dd4925dc27be55608147587d949ce Mon Sep 17 00:00:00 2001 From: glorv Date: Thu, 13 Apr 2023 15:41:02 +0800 Subject: [PATCH 016/257] resource_control: add a example to reset user resource group to default value (#13649) --- sql-statements/sql-statement-alter-user.md | 39 ++++++++++++++++++- .../sql-statement-create-resource-group.md | 1 + tidb-resource-control.md | 4 +- 3 files changed, 40 insertions(+), 4 deletions(-) diff --git a/sql-statements/sql-statement-alter-user.md b/sql-statements/sql-statement-alter-user.md index 080874cdd45a..1113e85d1b85 100644 --- a/sql-statements/sql-statement-alter-user.md +++ b/sql-statements/sql-statement-alter-user.md @@ -62,7 +62,9 @@ SHOW CREATE USER 'newuser'; 1 row in set (0.00 sec) ``` -{{< copyable "sql" >}} +### 修改用户基本信息 + +修改用户 `newuser` 的密码: ```sql ALTER USER 'newuser' IDENTIFIED BY 'newnewpassword'; @@ -87,7 +89,7 @@ SHOW CREATE USER 'newuser'; 1 row in set (0.00 sec) ``` -{{< copyable "sql" >}} +锁定用户 `newuser`: ```sql ALTER USER 'newuser' ACCOUNT LOCK; @@ -165,6 +167,8 @@ ALTER USER 'newuser' PASSWORD REUSE INTERVAL 90 DAY; Query OK, 0 rows affected (0.02 sec) ``` +### 修改用户绑定的资源组 + 通过 `ALTER USER ... RESOURCE GROUP` 修改用户 `newuser` 的资源组到 `rg1`: ```sql @@ -175,6 +179,37 @@ ALTER USER 'newuser' RESOURCE GROUP rg1; Query OK, 0 rows affected (0.02 sec) ``` +查看当前用户绑定的资源组: + +```sql +SELECT USER, JSON_EXTRACT(User_attributes, "$.resource_group") FROM mysql.user WHERE user = "newuser"; +``` + +``` ++---------+---------------------------------------------------+ +| USER | JSON_EXTRACT(User_attributes, "$.resource_group") | ++---------+---------------------------------------------------+ +| newuser | "rg1" | ++---------+---------------------------------------------------+ +1 row in set (0.02 sec) +``` + +取消用户绑定的资源组,即将用户绑定的资源组设置为空。取消后,用户会绑定到 `default` 资源组。 + +```sql +ALTER USER 'newuser' RESOURCE GROUP ``; +SELECT USER, JSON_EXTRACT(User_attributes, "$.resource_group") FROM mysql.user WHERE user = "newuser"; +``` + +``` ++---------+---------------------------------------------------+ +| USER | JSON_EXTRACT(User_attributes, "$.resource_group") | ++---------+---------------------------------------------------+ +| newuser | "" | ++---------+---------------------------------------------------+ +1 row in set (0.02 sec) +``` + ## 另请参阅 * [Security Compatibility with MySQL](/security-compatibility-with-mysql.md) diff --git a/sql-statements/sql-statement-create-resource-group.md b/sql-statements/sql-statement-create-resource-group.md index 4235a001cb7a..65651e5e50cc 100644 --- a/sql-statements/sql-statement-create-resource-group.md +++ b/sql-statements/sql-statement-create-resource-group.md @@ -104,4 +104,5 @@ MySQL 也支持 [CREATE RESOURCE GROUP](https://dev.mysql.com/doc/refman/8.0/en/ * [DROP RESOURCE GROUP](/sql-statements/sql-statement-drop-resource-group.md) * [ALTER RESOURCE GROUP](/sql-statements/sql-statement-alter-resource-group.md) +* [ALTER USER RESOURCE GROUP](/sql-statements/sql-statement-alter-user.md#修改用户绑定的资源组) * [RU](/tidb-resource-control.md#什么是-request-unit-ru) diff --git a/tidb-resource-control.md b/tidb-resource-control.md index d4fb17de587b..19eb1cae2891 100644 --- a/tidb-resource-control.md +++ b/tidb-resource-control.md @@ -104,9 +104,9 @@ Request Unit (RU) 是 TiDB 对 CPU、IO 等系统资源的统一抽象的单位, TiDB 支持如下三个级别的资源组设置: -- 用户级别。通过 [`CREATE USER`](/sql-statements/sql-statement-create-user.md) 或 [`ALTER USER`](/sql-statements/sql-statement-alter-user.md) 语句将用户绑定到特定的资源组。绑定后,对应的用户新创建的会话会自动绑定对应的资源组。 +- 用户级别。通过 [`CREATE USER`](/sql-statements/sql-statement-create-user.md) 或 [`ALTER USER`](/sql-statements/sql-statement-alter-user.md#修改用户绑定的资源组) 语句将用户绑定到特定的资源组。绑定后,对应的用户新创建的会话会自动绑定对应的资源组。 - 会话级别。通过 [`SET RESOURCE GROUP`](/sql-statements/sql-statement-set-resource-group.md) 设置当前会话使用的资源组。 -- 语句级别。通过 [`RESOURCE_GROUP()`](/optimizer-hints.md#resource_groupresource_group_name) 设置当前语句使用的资源组。 +- 语句级别。通过 [`RESOURCE_GROUP()`](/optimizer-hints.md#resource_groupresource_group_name) Optimizer Hint 设置当前语句使用的资源组。 #### 将用户绑定到资源组 From 5b9d76bb3299769735e7fffc93bd1be7154fa06b Mon Sep 17 00:00:00 2001 From: dongmen <20351731+asddongmen@users.noreply.github.com> Date: Fri, 14 Apr 2023 12:47:02 +0800 Subject: [PATCH 017/257] add ticdc summary monitor doc (#13331) --- TOC.md | 3 +- .../ticdc-summary-monitor-changefeed.png | Bin 0 -> 234177 bytes .../ticdc-summary-monitor-cloud-storage.png | Bin 0 -> 108227 bytes ...ticdc-summary-monitor-dataflow-mounter.png | Bin 0 -> 75267 bytes .../ticdc-summary-monitor-dataflow-puller.png | Bin 0 -> 103350 bytes .../ticdc-summary-monitor-dataflow-sink.png | Bin 0 -> 75622 bytes .../ticdc-summary-monitor-dataflow-sorter.png | Bin 0 -> 52338 bytes media/ticdc/ticdc-summary-monitor-mq-sink.png | Bin 0 -> 164160 bytes media/ticdc/ticdc-summary-monitor-redo.png | Bin 0 -> 236415 bytes media/ticdc/ticdc-summary-monitor-server.png | Bin 0 -> 102710 bytes ...ticdc-summary-monitor-transaction-sink.png | Bin 0 -> 140171 bytes media/ticdc/ticdc-summary-monitor.png | Bin 0 -> 86999 bytes ticdc/monitor-ticdc.md | 6 +- ticdc/ticdc-summary-monitor.md | 101 ++++++++++++++++++ 14 files changed, 106 insertions(+), 4 deletions(-) create mode 100644 media/ticdc/ticdc-summary-monitor-changefeed.png create mode 100644 media/ticdc/ticdc-summary-monitor-cloud-storage.png create mode 100644 media/ticdc/ticdc-summary-monitor-dataflow-mounter.png create mode 100644 media/ticdc/ticdc-summary-monitor-dataflow-puller.png create mode 100644 media/ticdc/ticdc-summary-monitor-dataflow-sink.png create mode 100644 media/ticdc/ticdc-summary-monitor-dataflow-sorter.png create mode 100644 media/ticdc/ticdc-summary-monitor-mq-sink.png create mode 100644 media/ticdc/ticdc-summary-monitor-redo.png create mode 100644 media/ticdc/ticdc-summary-monitor-server.png create mode 100644 media/ticdc/ticdc-summary-monitor-transaction-sink.png create mode 100644 media/ticdc/ticdc-summary-monitor.png create mode 100644 ticdc/ticdc-summary-monitor.md diff --git a/TOC.md b/TOC.md index b99886b60f3e..99eafc4963a2 100644 --- a/TOC.md +++ b/TOC.md @@ -534,7 +534,8 @@ - [日志过滤器](/ticdc/ticdc-filter.md) - [双向复制](/ticdc/ticdc-bidirectional-replication.md) - 监控告警 - - [监控指标](/ticdc/monitor-ticdc.md) + - [基本监控指标](/ticdc/ticdc-summary-monitor.md) + - [详细监控指标](/ticdc/monitor-ticdc.md) - [报警规则](/ticdc/ticdc-alert-rules.md) - 参考指南 - [架构设计与原理](/ticdc/ticdc-architecture.md) diff --git a/media/ticdc/ticdc-summary-monitor-changefeed.png b/media/ticdc/ticdc-summary-monitor-changefeed.png new file mode 100644 index 0000000000000000000000000000000000000000..0c991cb90c6af040d00ee688fd78dc8daa73e049 GIT binary patch literal 234177 zcmdSAWl$V#w>69g2n0<61b2tvZo%E%-QC?n&;Y@0Ah^4`ySuwgu)$sCoBKKSR-OCD z$@BZG>Z$6Q?wY>#)mzryYfXfryu^q1U*1DOL4A;t6jg?TLYRhvf@MR5fqY}z%~%2j zg(7GrBBCfIB0{X_>|kzXYX$`+8Ih!cps6zQIZG!#PUssFF)_srW%xXl@;6K9eC!@^ zNto}L#@`fc@}k~X>d_mDXo!8}C3f$h%w4W#`mCDhR%58KnIBmBJbFKQKhXhx1&#+y zX7V%^ZMY7U;@q|~g%;E_qezxg|5)&sdi`)cQQsUyD7kn2Z;y}gzTtBu zjUfWY;RjFS(L}DbZ-r^h#UlsiAB+!lKNfzbPmH{7R(YFpesLI^O8C%U9VADlgGtDg z&04-Tu^ueRy%^Xmk%&P6TZ7t9^xZd9u%DVj=W|y6jl@qcWsY*(>9FO{sSh#VmvMF# zmGoT`Bd3Nx{%|J#K?et*r{5?4W(#%c8^lH~d{C#Pj9wKPx@aN2O#dk$hEAzJX{eQH zOwPFE#=ruZi`Fk%Jrj@$!whd+Mr!2D*3T9WC}=_YMVtL=VCD1=G*JY-epc6~{!17o z%{XNuy3xe%gJmycR|T-w103ea+%vT8RbP3Tb+w4fLxURO($f0I?oP;Cwp{avkmW0*4Tw&58H%SM=buZv{ebJGwwi{%brP**8aQS{j zUl7f-R9_l)dR31+gZTx!{Vg=(B9xhHgThfJpcRY}nNxA(Q7BgT#G3^{Q4&2S#I}`O zSoegfLmmOWSl@VeNOpK~5*%%Ut3|I=lJkV9=F!v^NcV=cw>cE&V9|PCfAgpg-a3(O ze{bvKqUVDWzYC<-Nos1Rjn1wIbA%9qevHPReiI)N84faS%a)kMw%pLl79Lds5RjNLwnMrrIP zAiI4BhjThw93&;S&bPX@`6}IgdQUmFH4~^uoJERZZidaGc@afy=qSnuG(yq9*5HKN z-@-mPIg!iUZ43I-4KCBR~WSN`(t7Vg&~C| zGDqNqA@4H$UC=v6xJ)>UZZSt(T?CKq<0BX*Atp}*0W!pI--;0lm_^6YZTc~s#8Sfr zF@r@(E+uK>V@yd%MSsYO91?dXHqmcC0^tALc?PBfp zbjb?Qif?vdtIQ2_)(Q&(2@S)GrbNytX$o22^kp}{*^?TOdi)Ypsi$fDC@4)z5yp~H zo31RuE!QIBl~-A5p988OEMip6F6h+ui+$q0MK~s6cV)w8TmE9gZu%vPtkqddZv}2)f6BWQI$8Rz%4$$I0mEp;l%$v$_$jL7BIKp(ZbK`F1Zarvib6s=wxplo+zm318JW)F)SU8y(RFN}fpWP&Zf4D=*Yq(B5dI)M2fttI*KOZt!<7u}Lsyohs}( zOsfcD7;0Q@T)e9!SYYh7&(&+#VE4)8pA%T}2fUgg%=h$>tmVw^#FHKWIihye1uhFj ze;xNpwbZ<=My2{dm8|khrD6`&!VgFd#00(rru0?(DEeT)^KyFOz(~mG#i*kTik`;B zV9qraoeN*8M6Kjol3ud0S8Y;kO0)lIU$suK0S`LaaPXey7xx;!w!C{dK02VeEWbXz ztG$xGFTFZ8JZ3RTLrw#>BW((AvUbFJ2HafU(A=y5uT!cL94gOIw=Br)B;JeL<30{g z^~Rnwja1EL?_`6zX1Z9r`2z722`;`)v&0cKvtQ7RWhM2kj(FqlW0E8B;M`=L^<_;8 zU_`@*!Kc7Ch5q?Y9$NmPg~%Es{gXD{D&8Rm2m7fg7YQGWuazgl(D%N*c}H)ucG5zL zdQodpO3})nzBmWy6cN^6LSrIv8hqzBEKe+zTt!gAclzmLTd-~Lc$x1U@tGMpDp^2M zFX0bXmljxmkgzb_$=hX6q;)ersYV#3lIJta)A%@AC?EZ#9Y<>uCujO36o~wo7pT=z zS5w8MW#re=7da_S$48m*~8-PiY>fJ1mcr|<$?gAd_A-(Qcu-z44;92qn- zuUp$2yrasa%}W_Ntk~_?M!3?rXoL3;HVZCF^G_RN$u@g5W0*RgL>;ai24U2O+Jsg) z_quTGw@>{X*+^c?PKj^gHDD0r2ggZDB+^;ad}T=0oo00Zm=eiL^(3pyU88|XvqCGD zznA|rwDm%wQ_Y;}S?uoja945dpT7Kksb?x1h0k*KfZeZVJ&8pFIRjmC14UPb915)2 z96qZdN99Ku=ESTl=4?~-ncN=cOXbyCYZfZzz{$6c{sL32ku`1_m-NH*aRB@M43kmU zeDbU`MFGLJFVHSEb_#paL1(+sa3a{j?4=g@fbrndfx+ji&-xE;{Z(ZFX9kHa#dbBo z-CLP(8BrN~`VX3|erb2LyJoS;vD*4w!8N(I18YfG>RDBeRm;_pwbG5HE^hP3gY4=y z$>oo=96o2aqrXQt)CSd%OE;_bs@iG=9Q`)lC44x*6R`Ve-`+xFtK!!n=Qd!zdzd?+ z&`9pU{fu|rlwKjOGuGt4LAkov!td`R^HW1^0(Fld%4SAe%kF-%hL`F5{pNxuP_@ab z=?!$nZy0Mkb=`5~<8T_azSN%G(gg~<4Jr+}2{F5sd`*1X{BinYa&Ug|P6Q(?J;OHx zmC#+F{Ve?P*Jz%%1U69~euhsu*z@wT6KfZXpQ=t?z&dN%7dZb%Wl4KidsSW{OTdHj zX1t`Xyl!af5y0!b34F;x9!LIw&Cj&hDEJoV6LRgn;XnigukUd+d!jUyDV(-i=xx?R#1f-d5FH z-&^bkAPXQt1Se?emwItANw%4X9a|9F07Cijo zd8aa3RFqBSN8+dTy6|Q**EHVKK?))74_J$?r3`GPJZsbDwm!zn^)wf0_w68_%eF+}_XhQ4A0h zf)oAAu?^;gmiaU#PR$9<`E@-Mejs*IFEbNal86`{_}4?o2#&lNTU=u3Z@&(C@bB<{ z?!!oojQIck?=iM+X8{0!s@Ha(Q#%U_Z2if}$;5FVwylVi>!Hk;RR89yToLRBrj~V- z=BSOugJ`|RzZu?E+UrS4?q(o{(Yh{vgQeS`b zbcgyJd#V~)pY`3`#Q6C5e13j;Im#RpwuXa4cGNs}2HH6d&4^aokJ7LrDq8TTp|fBE zL^W!NKmDIaN?c%FY*kmDm+=gs4x@*mhj(qo*YPQ%w~676RD_Cx!puCs&BwE~t*z)< zTE@l2<@)kgEUQp&-knIWi$lZh;`Ul5JT@CVhh}9}l6mm;=xXbCQTT@C7IcvC8LxY# zW=mvM7kJRk=FtDv%iMfWtktD^1KC4i%A7$vEKDLlpPWJKM&~91%ibQuN8Sc&zeW4Dy86PJ-CCnu)$ATbpwnc_ z<9yM5SCN7KG*hCYqCA>Z_4Nwm1PvWzxfnpNml&Vv3XcS8T$SfMnRnoFx~h+-kkPt4 z)L$rFdbtG>DFC8(K;LE<`wghYu&j=blqh6kn@={wi>X1T>-^3aIj~zkaBvo8X=^y% ze|y1!h%e7@jP3ZRifb6t4riQ>+ta^{2BIuXQ$^|86~kij1#WtDTm--meplnEnJkoL zvgYFAJToBoG`c?kA6Qq0e9b=__kyZ5$_L9TMZ=(PJel+LiBTH_+R%pH;_tNfqC7ng z-owzT{4K_}Bgq_t;61`tW7d7AU}J9xzEXp3j`sIWm4A~{QpPRvk@0UVEu9BRC3poK zgjygvPYEANu7XZ&&+}<%om4Hc>jdL*2-C9o6AfcK=6vg&OLVLp$K~&ExU=EdRR=8S zBHHz0^_KAu%&@EX{RLKv=IR^lB3(*p%nS0GN_PeWy~+daWaT8o9aakUl8)I;6tZq^ zufb2(v0YC$5d5&8-w!8oep)9db~k3-XB3f#wC^LWyuTg;WH5<5Fx}WudUq1;wIuWR zET)Xv+#TG;Ad_HR;MRuP@%(`g7i$j)Z1O)lJ_q`D1e}8|b}=|z&(+H8J4_^EZ}8Y$ zZ%54n=(P-~;%ZFlxdEE@5A*Y3ZAK0tR3ed5$Q;_jbjEoG-jUoH-B^B1y z>gww8m-o5@63O>`wXL1a&3S-cp57}F#>H?1L4}U`GG1a8-0IsB~GtjyS;?1A5dib7)iZk$D{i?6fdT=V!<*JH_Ok*QfqeNKJZNh z?R2Z{&yqoSj6_c3-b4)v1$T?5sA&by?N}mRc3M)4&Cp##Su&Q1{3)NAr&_6UgQu#h zxAp4b?Mb|figv@9VuQ8YXL}0Xm&&s>{HTUpSF#2bmp;mglX)A*C)d-+f~Z&m-qm6$ zmCsH;xt)wp4&~f^dE7`-5JJD#TW%ze#uD*L$5ww3&Xk6Mg;~~W@Rn2F{oR`#6IG$s zBTz8w{eB|EIPfAZ8|)EUi#{odkfvpewlwSwYWh)6FY)cxfxFRqL6 zZRCMmdXu!gbZe>Jkk(uwF||%n2KqU)h=l8@D?u$6$!4bipBUI!K{oroCw6~-Xm{5~ z0y5C?=AJqe6BEoVM*7^`Y;G(;2EWbIi`Q00U3>eF=r1AUKU3c}mJH$#3ycqFK_J3) zCLAu?eO`z5r$f3rDKill8XB4fn|a?qHARZRj`nt|lbh}wyv54OrD7*X$(m1N$(x+s zsVyTy=pAJ?RclW!;O>NBcZclydQ}wt+KZ-@DOrBs3!x!-y}_7l#Gw6t@^2GkNmX3_ zyL$ox0I3E6-Px*t~fp!9t@Iw)N#Q31KN?d8<84e z(`yi)n7NN3@&G!@Q)P?-?gbpz0!j9R?@1R>t~k!j&5~#}K)+}dh5#{o4aT_7O69*Q zW*XY=kNe(nxR91;BL)$%+1?boorH%2lZBGLu$#AYQIY54VEpMX&C4h24-3VXD3KU2 zH`5p=^W|gbKB{~sZ1=mU?*9&#?}+M16{u3#mgA!ufeGtP63`YFhOHnamxCm`D;fZX zG7uDGa~-#tYkbWwGG8UsYnsn-F+%tQGk z8uCNVdZ{8i6@97REJNTGLFHY}V+SYj=G<*>PK7duE6)`HKFk&5uA*+<>L=4p&mCEj zmUi8l!CM}1ex$$`Nh?>(Me0^`QmG&(C(hY*nXH4<7aJ@1^N6UO)uO*!fT#=1A>Ham zD`j7+r>omSCnTOu=w~lTfG0Cy5O9g~{u!CINEz?R|IGV?_a?{1l7au}%2_(6zJJg@ z_t%wLufAbnzh~Dj`^#X1J~HWO9GC2%!~J@rjdTpyXL%gnr{$TvuSlqjivh!u=op7v zz&qg&c$~ZhKJQWMvi+VKbt=Kf39%cx8}a}iufB1!2o|cN{C6+p`u}-Fa+zewtV!X`aKHKc24s3TG3%h|#Y_oCt7--c;&~7)j;las?mba1D#iaE$`{&+JEWe=1dpba+L0z!o zxsu6{6D%<`b@;MZzT@%u_$cY%O9qob#?yl+>0%1wONH&@`wjb}5fbM~McBu!H3L6} zU4h>FF($t2*}6H)z54-V`9V>%F9KhlJ9LSsxs|0rV6zJ{H0u{mo0^w< zG4gb@_wQqV^1EGhzg?P$6LR~;WnlYwoTc)dP>f2tAf)U675I)IeI#wRNXQEPdi)H+ zzuO;Q2@#JLU-pAQwdv+_T=0b)zr#kI4=|&uGknmFB_jKEl;ca=t+VYuX!y}4s=vkQ z5;D@Fyustnc(S@*o*{d_2bCzcyuadnTm=C1u)!Q);CWY$scOWmoC5 zFHORf_K(n+Uw&WQ-&5K6YHLfM@!Zz@Y?MS)sgvjLywZ#g3<~NX%N_HB*;jp9V zK0^k_xbM}aU^3$k8X}vtM^++>ZGxunQjA@`GV@7_c3HG?1q0i)JmUk4*_cL^8r~T% z1^q zmRn#%N|7*|l|+O4NlZF_N4ruNGn5H>ZAZJWGsEy}l&8Feu5Ps;Ly`~dWPdf8j#b>JCkY>-+EXTP1E^c~yxHx`>DuygP&n9n=cTxz8O2^Om8)+|BFy~lq zrDkJdKI49ZFg}$%0sVf7V6y{L5pf|f%k$8|_Zy$mefVL17I^!N6LF+S>ePB0pr zo;0RYZ=aHi?r=6v?1n~je#VQ?PDMfP>FI4K#P-VP-E8}KMg7)p*}agI@x{DFb&iq7 zb+W#M;cvJOJxE6U_tzeRJVk#DccnBxUq8-Dowet}Nn0{6tQb2A1)%5KANzenmh98D zx{Lzpj`j}TEyuYjL4Tj)eIyUGsqYWV-P^`)cpRkcd@EMTjM{O=>S_(a{m5j7=@-{% zLfeJCkJtXG;JqgLU!#-7m=sbw!D-?Rf@EdcU5qlBl>9t3XQquLBHnw26N2Ce{zRMF z^^dX9wetZWRxT1N$V>&Fr@89ez-Sib{JPD+c@)8IGOdaLS3XWzW4z(UDgE!G(~dTe z`AQY+HR=}U70jWQO#y$mW6l>y;aaXUdH$UI^TT`8LK{U*u7IpO&56}psTp~SdB^=} zXmw2rY~L_>J^$2a_M=0o_>c#AM$ZJf%|54ij{o9!xIuy#>osGG>q@yw0Ic2J2ie~| zwa<^Tl*D|DjCTM|{j{f387dR`dP~2Bc?*M=qoH&8Y(88Z{Po8tyt1X@q}0^#U_mgD zNRyF`if-(&l=bsIzQ`ICz2lv zrR{Z5C%^g-QW&)6YwdiTOYV;Z!{KG_&(>5RGY{du^L&5hzKm#Q5TR%%6J#>8>UJ_D zDsg|jmd$nV(Dj5*lI6<<>GkOia%T6#h5}v(s0s&MKs?npn;u)P9XsZ^=QfL#_q`|Q z9sIzg=4BN#I@M!ullvGztM3a)XRe5^6>q?A?uWX1+}necisr5xWF|nLxBA;CA*fG$ zU@*(uw%1SQ^W;{enT)eE%UBbK)r|H2#y!)68Q~YdrVJnWuSThto&pI+*!o-?hc#Hj5IV6 z)%Kq;0AH<~ZBM0Ydpy0p1^@y-DFik<{X5^N;uEN4%~UP$td@p2e5l23+uAaGPD@k_ z{N9|dIqX&xRG*t8VgUkvrJ9yFjRQkNctJ!18xeRY`q`cL@_UpF=?&H)50lC@cB^jP ztJN2X`96wlb_<7fv71Hh3-I1?_FG}Uwe980weN<)&fA$yZ#I~zV%V)0g9}uc+1dCq z*I zD&0!#LzHyP&CBw49|HjY*z6Xhn|O(oND@-NyS)4v%gg_qR#Me@L0`)J#CJ42lk#g@ zX;y3aBLf~qwwvMzhC#ch>1DX2sJn&5l0m?m)8tqk1Vq7v49{R{SBTrymg6rsadL5e zC%DC9r%~zrW-V>4D2b@%^tradEU6|8ULI0*A0;lhYCR1Vr*pRs1^K;{-PPR{6~7|q zCevv2^v&4}HCEu5>~8;BudB66dAO89i+T13Y54oUZEkLwjV3W^bmnGv5j{G--9J*r zD&Q+*3LMN#Tm1?M3KDLqZDQ^4IV-@{_jc#uc=mjDtXE#JPLgy?}mDR|XgdN4*xnp;iF zLQBh13O92ZN3Ye2a^rc}eR$Z6zWSFY8*=F(1&QnV;fXh$ypLPP@yo^RjcaXr)q~&2jtD|VqvfYBUqHu)t?mnv{B7>u-ad67tyM>qKYU^Daoio!c&kag zT7M@g9bKhX1pR1aJzt3jsSK-XbY!G?gX>`8NDlL80w)BS{Mmrn$>!GP`u0+OclC13 zm4S)d>9$pxBRMhn-f=86Pqrgy?Ncw z7d5`fXt304{AMO7xJ9tmSgzACx;E72-0%hNyh{5GK@S#|;q%T@arj?HQ9?m*^lJDy zp8)IO2j=h!WXaf?cbNceF~_1$IxbZ6fKTcpxO>Nk!Z=)G{+K+VL(tCIp3Hos-n$8Y zc8U>>Xm~O1flUW&b3rQ$TN+$D9sz-vFTSsuwd|}E+%pp!tYrLD4*yIYqcnc!z&7_jagnA*w)l&A7Q#zD{bXI}R|Q_c$Ybk{eZ{)|Pcl^FqJw|rl_ z`N?2mM26)}R`wE89n+2VH^tw?p9_%$!9u6|V$k-O`9&+{-E*-lr$y})No|zm{bm+s zt!+M#sVaF!J}0g#me$td0gY6b<#1{8oS)V^4t8!NpYinK?@u~vGw*-@VPWIqfeJx;dT^mjVix z*|LKN-iK9zvE&?@asOvs9cju3K%`ws`mGF&_}QVZg~hQeThH0MXEKX4mP502;*bwl z>=DLK>;6L5hnQCKYK0VK{<&jkAIJ`X$J=*=n{uyS>b?^+R$|R~yw{0M^dl`LaZ9#$YjVp# zp81!5%ov}o%KSqeS5+6o(?Igq(e?!smZRJK#rPVzb)}N)&vKih0&X%3Aj4fsBS9&% z#lgm#Oww}bH6ZJJFIzp_Tn^X6Blgxt<7}lNYCr=?!^6p)MCrLCfl3Nm5O@IG@_#j} z9aUs;IPhvJA=w%dwBs~*^d&l*yFMGgzg%a5|NNjLqxu(i^&kFI5hj_|ezW|-;yMNV z>Bz0dxf#3UQbuVwCqF?R;7fn|g@ab9mQDCixkszt$)O4}v#I1z-$={(3sUmt1xOf}&y^h5c_LTiOJ!0bB-)XUM z2ze~4{pr87L=fQmMgoll0;B(y$NuY1phJrY1-Eq~{Fik)LL*8#c0r-5h5j|p10i=U zdHnsY3c)c#L6(LMm0SAvGKdbj>k0MmASJvTo|w4j6-G$)(|@smxJPg6zw87?GZchy zH-HK+{r1-vF9f;kg!lhui2r9L*nxp?_sCF6YX8N8KsXOSguizhqT4X&aohgT#HH{5 z+Q&g-P-{ARypsh57?b}y)-RaQhbJc)jp@XgwEEwx$^P3u;*>z8K|8PYRhBhwJoSj) z4yUGdZRb%QZkI|{;79*eEsLX&f4}!`L9%Vz4#(a{9Z$I!mO(S7T5$tU01xfIpX$gF zv~G!WQuW&7zUnoECYZhDFYefcyu#R)(biTMg`6euY30rTPK)$yMb02qp@pFNYeUKB zf0@|qjA&|MVQy+}Zr0k|jMIeQH$~P4^t^i+nRIt^adC6&c!=@Vk9JmiLL-w&w*MZVU`;Ep7FUAscLw%$i83 z3sYfF)RLw=VW(5qGSL281^`Bd-n+3dGs`ccBJVFKDA)UCXPyJUq~MO5=gauipH_q*fX(%?OhD`<#^j zWiEs-UqWnd_Vn`R;ce^BiWK$|T(X%OBcr1mTbkMutk&d62o0DB7*ya?m^3e-q=IZ{ zDvs~Jv&i-+Wn7sU-q6#Of#(r~-?F#2hs@k)q#{Hsu{|f#5?Q!F5FRQkE30_(`@;TV z{0KjtgrlHE0O+#oeyRRo*SPE~EiEme3KQ^e4poCAsJwiC9L2#v(7*uPyqv%_0-Rgt z-Uor?ZQIf?Q$6p4J6@1wLk4B(72U0+mA$>w7p~y#g%|#n3A?-Gi8aib(zj#0aB-y| zh`zJa|H!JOcmZa<4$U z)bg(!;aGq!Bt?}SU4-BSGDj-BPMaX%iCxIHADR#fNGq@Rin!Me%L<1mc`w(jdd+% zFv`A9>*uNp%$ix#{2fZz>LkfsrkXa$s*#UYV z0YNmyi*UYNTxDPU{*}0cz*KPf0vFjl=N4kkIvs*lTnc)goAim_$K-e2 z!tCEP(pGAH1R6GsE)6Q=4*qvYKy1IlF!ZBbJ29uBdhzk$HAuVmt4HSDbTL^gXv{`S zz55sK(v1t_1%J=#gS=k5r`z7%jy^OuH#e1%f5->aj?LG8q~_MM_6bU?SNXR&NYG)@ zF>|2fOPzNMsUJdj?4dE&szvwBz-e4ubG*760KgV`x#HAeI+xM zJiUJV@KoDbO2&ULZGbpXIt!9va6ZmAJ7Ga|5T9MOFV?CclyH9w zb^&+EnOIIf%fH-D5izLicdCVj89Y3^L^Acx@$T-6G&C^44-8{cGL?9v*3P* z?cW*`35joP#O1w^yrM?|o;w2pJfOBGC@a9yZu9+0VPh^@s@K#(zb_Fu$LQ|p@fd=z zg4vvY(T-SHcgA9uD5=r?<0;@T(0gtcW{*z~;z`sypdI1QlAIp*r}^YXf>`UgXw0)a z_18)@XW&&e6%kTLc#L5n@4>Stt~+^l=%c`!OUSia>iM2v75IE1ZYmn`EPa62)ToA0 zXRMdZ+u50~+u`#=Q`thqKSo}hqdy=A^Expz&kWt4t{&}=Pynq{V3#d|bf zi((}Fv>Ex2VY(P__^`pRU_Xdqx)^u7(e)FJ6cJJL@TG2SLq9guH~CZCpGj|@*5zN3 zi>K^Veg27e`pC!iH(fq=Kc;&+IowK{CpRbG!uaR$GhCMMJ!XTcB zb6aiK#me>4XAORxn~1aAus790)-FPBKi$+LHz_YTe^Vx`iZUHe(mNCD5ZB=NqQwLe zdW51=r*BU(mDfEw@pxWr|00uk=uRjF!Ht<>ABFWZCM(!=eR~*|#Xt{27728MvcN_n zCIdtSe94F=*-tk6S`&u2IWdY}FHWD8kZBv30RHb5OqS2}D3c=zZ0tcET> zX?|W+K|z7%YAU1JW;?@tiU5qc+_i-KKY15S3GI`(M@7cL;Xcy~ADtQPXePKVI5(?YS6AyL{Uf&7v>iv^bEWblCiLWMHY!s}wZ{$o zb*i@^w+b5lkcc@No;xSF#m=1{btt1P!*f9WRxDontpyr>F>Z>sHCpR5|EnLqT50b;e&JYx_)*HyLQ#H7GB!M%UZ;{zgphk(A)Bwk zZH+^`<9cO6ahPO?NlT#NH8}bTXruiM2~S2km^;gE$6x93@o}l>%Jgis?OY?K5PgZs z<3V7c&^x$9vjA{+hW8x_@HD1Er}Objg~`F;xqqyb3C9G@#`DaM*VTIFsWg1JIDvVl zF3X<<PAJgxP#|E zfFlJSTAa_m>FMb~wMu_u#d)4pd5*(wH8nYF63SBm3zva=<`UxIzQ5}Y;NG^ds)wLk zy;vv*`{wdIML+V~jwCQcIQ@r*2X9aB-QT-#jka^0`h7pFO02R2Ui4*MT}f)YDag(5 zLp6!kkK75WO4fcWIVuh_34$*cEQqvvzGDk{6ndaktS1+%7I;6GRhhkAjkTY1mh0I? zJf~Ej4AK_DvO~0gbB+9rPaa#o4Spx)<*kYwX9}H#qq=;KRRPsh-Le8nUS>Q!Cn>Aq(pQAC5r;dW=&J+9U)sB#>wVvjmZr zpr9lkjaU_oC6;VeEBWf;|M~&RBpFS%G^Xu!VUj+o6Ge^S6sNLt(hCDJLm$0p623M4 z66b|R0$#Bsdaayq2XjRx_vdSM{u9>i%HPbx2k+2OPB$C^v%A1VGN1kKW_%#4A)R&B$+m7>(N1oruE{PmdC zUY<*Lsy9Q(US3YFWUJU|s`HhPzr+1(v&O2A2Q5}`0$Sa(0!TPvznm`>yZQQ{wA|$} z6;qM%Xw@9JQB*hoZms5CaQV2@y=(m0Xca4#tNqTU!U*kv8#zpXf(EG|>pZC_B}Fe5 zmHgLk5?fSl6k@ugnwQY=Lm^d~*jEIP6x!i1JYz#w$ zWV2r5B4Mq)`k3B`pfJ=ne|H@;>yPmepa98H2FRi5PzhOn4ooVYzDcwT9UXpmXKQ|j zTbo2(ukTW(1c|>gus4Vl*{m6C&~VdO%>*075b>G^%QI%8`Q~u3LhXKL8SuOrIf5`N zlJe51DDR`AVxRBIrkr4oj^M3^?-*^Ai`A&GynN^3;kP(SVotWS}wRss=W z9IX^(w}m~&5Ue%Xt~wfpn0O8@K@@yX9ef?h;LiQEs;=(KMjyK_6WASft0OC0PcJW4 z3uD1Gu~Uqtm%YS@hBjr`BTzKF=1z{GGI(~cd_h7n=&;2P9 zD$U@l5$3nlu;IyTXOyZt&vXSlrYA(7tm6h9$i}@V3-l1^`3`_RmbUY$`0eA(92QB&4KxGQxgNswbZ z^b9}XPx&NXG6Wo0EE(=Hm$Mwwvm!~A=@ty$a;}dvz`X};b~%8v_(w*hsK0!y9z!1! zZZPM~R)_#jFrKIxLO*|8v!zuyOiJv(`7IQ?!I*jfvC(UWAL>_gn9B@+b#}s0uV4In zw)*RS`$5*^_|Eu#k2UEpb=l*LZvcz(ToqMi$tv#1wCcj@hBHwkBBE?{jRrJSB&)?* zc43ims1~@p=t)NRMGAK(Ve?&&((^!J2n(#)W<4Nr-Z4Sg#v$SHFpP~^_el6fm+j<_ zitrZQPz3NKw9imN>OTZQcL8a4c>kIB)rhTTQ=@7c%i^+)auZ;R&yQ(!M1^qn&3*MMn^tHRO!e3Rg@&KG8uIX zUpteofpwlrutQ!=O{*Mnscs+o<>)5XuJ)2dOiYON9}A)FMVL^PF7OcNtlk7;1*Pu?&ay%=4?Fv(YG zj7qw|TDu~gXam@kzd^82c=rIQB6$xWXk=sJb-4zjI5|T`W14g{@A^u+m3r`C=^$y> zrMV<`8`+&C6zCLqasJRe2O&&ao`WJh&zy=Bs&wiii(n$Ei&eUeBqeL^mULwr<1DhX zjAyTQS}wCMw{#t69HY1a@xFz$-nOWkgtWbMgyd_4gxn<^E`#`)rRDT02}uN-^V_?l zdp|S7BrI9$=z10osmbs>u&l-s_5OrYzIn`3RN{Vk%X3ND= zHj$5G=E%Hd@48&No2}?CU_h$eMt!(ZyX~G;upP|46~P$yfPg9Xo-4{Q^Y|#LgJEg_ zJlwWpF7u4{O3`w;tkIadOTWO%g{yfw95b4S$tU1dtz0cY&y%ufMg`OL+p}#3!$YP# zF0z>ShX6Zwn*7f4TE#vq z3U_LH@lb6Tr%95U-(-d!$vHP*pksVgT2{K31ZdXOJL5YDv>EszqHo~yNFBrTej1-? z50i>QiDcnwMnL+&7B9+KGfh_rzxJnTAEOnX`Dvp$KK{XU%iVJ5#3!@J{`T%j%bLos zKBxK_GJ|84X@ZF*`emPc)Yk7FF4tPtIP6&Te#Aab?q9Y}WlgLkacx@lE-N6nShpRi zaiD!;O(Jv88u=Zzr!#~h&vw2dfA@VX%i9p?`Apz26=*4h_aE#z^AGkca`SmG^{izu z3d!cVPB_9*zD~7_HGZ7G;~Q$Afiy1J#DQ%gtotYD0oN6NBbQ-YA_A932}EX8F(ySP z_RRsid5KnYm3>Ru0l|IN>omrhb+r+u)EYU)5H2v5fWO^u%=`|oV8MA*N+P^Sqt-Re z`GB^6VBl=IF)fkuVe!;d@jW8S&CQj(&|WP6z#i9xbra>N!^z=K&!@&|+qA@pc*0L= zxe#XR`3|(%VdA4G$qbQ~=Zmt8XB3^ca1_^n7fGa7D>Xi_Zu2ROx6QfEio*UwW) zA{MspPCL$tjC%IK$uore^AL3QOtW~3>bx%p@cPK-m=Wx zK?pG{zxq<+3q}*^3`j_r?VlSfoN9`sq^v}K6Qg)JH~J2YLfFTRb}PS|8k3%Z$X^Co z=O|nFohWx`2KGr$|7osM(gVFVX(YHus~4$;h=&M=8au)~O3qTAf=m1`niJt1Jv~Y4 zAR>rTy)YX^Nr~yxFOF6wbmJ+416*$eA8}00D*dJex*HfX7*tz_?KiOUXEv%xz zq~MH`CEzwXNf&JMJtR!#GtNid5`Pf`gKRxs4}1a7Ky^(`#HJ4p(@exrB)9V;3C%{I z%2esJYHzYOc<(`*5!Ld{ZT_ebhOfpR-G954o$lAINMA4RCgSc6jktCVyq||cY`WV? z9oziit&NG)b+}Aq^=Fytl4paQ~$$cYk1n-Cbh7ctvYJ8iQVYV2NDih=ra+8{gr>bH-#=bj;n& zo&8K90VgZ!>DHK1Dz;_2$*#yy1X+&+Mb79X!CETCN)Tlu?qVhd9ciiPf;Id7*+yTk zG~(0uVMP~xUi264C>=^yJ`w?vjdXV<*k5w_#3CnBvf)idpFG<^gjo$I?1rF5qm3_z zsyGh3JJW?3gG7~zX^)dn>}BQ8AH3F>*IM-4={}<)D(jlTSi(FKexw`BkAP9_ZA+U- zsv34%ukoW(;nd-5GDon`vbW~DW>JZ8wRsXrp;If3k53;}L8kvIl)^llrQGwKPPIh3 z0rJ0x4<}32UxYO^n=`_Ax2!FJWG;pFcK-}7yF)4espd)%8MB0h`g|Kx+h#w^IW+s3@;%?V4rL+RwH#wX1b^j7Ulq5LaS>XTlPD<-+*f;EpSOH( zDb}4FveDNM#Jb+bS${zOkP`%}U0{8Cd!mlD6MP?a{W_d@RI%DfmI}S&d0weEN2x&S zk{w&cgeJz}uwmZ4jUn9AGd$X?^56y0YCpfNxhzLU(?$dvv{*NUcD?lui&TnZ(y*8k z@H%@As>J36V(kT3tRMHyE?bNUUQYFK^2&JO5!+7xgc4!_^@e(m$v6g@Lz`RY0k5Edr! zypxiOaH^?c;(NY%S}0RYxRisQ1szYmzWZ=@dztsuZ^ykix8W9wO7HB%ofQ@6(^!))yra_d8)4XWaj60GLewGLiAZ zp#D{|3B>Pk>_x|)3w8fVvFT{O(9Nb~!U)Gh6dh!>+lfGxM57ZEu?Qpz_!_WzKWE+{ zY2bdo++$Xuo%b2U%K2##B9%U^r}5mB{chPiCAi%fB%IbfmSkz9SEo5*mF=>JqnDa7R%&eo8sY@+{< zy|)UBtLfT5gCtn+puyeU-66q(1W0gqcN%whcS3;R?(XhR zt|@!#MH{P4nu(WV$F{6(bo7t7ur;37pbQFYX{>UM0z{#tJ(FKwi*y~W7lUII5I(|F zBtyd;1vKt^f`>!km)(*?`^7?H@KsuMytJqQ$|CTir=~@iYW^1<-xo{I+gt@ufDo;Z zbP^53mgLNC#A{5hGwJb2E1*vxNiYi%e2V?N=Fv2DGqlw^1csD@r4)Ux=5acocg5MK znwzdqft@E&+&gucx#F#`vjW^Z#V~NUYcs7I)-WHo^lLD$285q^3^&J$vNzGct3KuB z4_tnv)Zu$&86Sr{AgCMe0rGSl$^f$^?Yn4GC^}nW+vK+`@cg9EqaG+F$6=VpR~%So zoROCgA~PBspFdMQ{Q}K-K~zn;!TJ8EScTg5$Qihap8o~&i`_>sS)l9l^Uj^3Vs>En z0lu*1W5QqzG5INsZX+eiF&dSSsF0BN@Gw>F$SNckv%Q0gHs!v6$$rdX78nqYCjnwN z%`3|BzF0@y@Rl5F7u+;Njb^3z%wfR>4l9;(?6}_zNHH1zh>RqD+HnVZ($t<$&YB!g zZP`r8xwvh;I|Y_Mjj!&K*rTbN0+XXA1zwDvk7lL#6y-=}f=Z<(U<5ol9?LVhyGKR@ zoC-I_s+!Jcj#^I6iGI=L~Pim9V>)>HQr zfB{J6`w9yZLu%DJxZkAL2l$JpZn7-a9-z2eF8ou>)1rWu#9CEJP{HT0naR~B|4=h# zRkXPodrQdw`aG-nTtQO5^vd@)qda#TVboHB1(`iF5q6utE-O&cevIL6X*yl2MLKKM zFr$e^U#C_g+VBJ~gUO}s7Vb`$!|*52{0$+YTY(2MJ{eM#FfA)Ot>$ZKoES* zeiud5064h4xPU+XO}B|zijI#zkoAsWs&vJ*kL%HRVq~{WPxX{`HYdaGJnKZQk|O+h zU&jmWaacICH$5u}A}A$5#|rZFd`pc3xSajI2_XiAbMPCfkyeDDV8=xM9$l~=t*xjP zMC!@uC=uky?hE4N#?W{i9>)Tt%CaEeAHFoE!L!$FpsyHxl(g7bKBN$~36^U7)bu7a3#nau+uY(2i(BVaX z3=JX~B@1aHKoz_-N-$yMl}I_FR^mmEQ-Yn_;P;@}qWiPe)Eyp=_J6YgMsWw^VjhUB zt7GB0aUuH3sO4+)(mx5zA8QMh0&EZVk<|k!-Sdn(Q2WKwE}`B8^4Jyx^LBS{7o8fu z%@*lgFQ4W;qUtZSFd`OhHfkWST+1ds6S1qoo<$ zV}uExuG-E+zcvKK*}*Q1UrxBq`m!KV z{m)hlUjG~NgrYpNot=WB!mT7yL}>{L`BaXFZos)1rgX-DlF^xmzwI{#`zLoA%)y%h zP`is2FgSJM03-;AX+HOxt5a31iEe87RjpQ`ob&?gZ-5D0#Bj#B+=GNh|=8+i<93xfTff5h42h~v%N!1xQ zhy}{0vF$ZMb#eX@xQQXW^KEQggrx1p1|Op`X85^Xxf|T2#i{+Xn-M-_0_4rJj=q?= z+5hT?1d07xP=l%Urq!>}(}sY%&s`c>i*97y#Q5B|hjHTanswP1ho3H#87CN-Sk;Y| z4y&8)iQC58{fzdZQH5Efu&UgaQe?aMq~tsYUWL|^NjyC_L+;~eF6-C6I#Y00v)#Lc;h)E+(~ZRSg2ImYD4q~6 zZ+0qILM0g%xE#qfqDzLutAkz62(d-zeO;mUKZ{dQ_)oF;O)E&ldcq*gR&~OOY;rtATH1zN0z~p6L3>Kt+n%u^xa*cM zjgJNiaoPMj0Ky3}73f6W^8%4+4fInj28PV2(#rMZTsUkVY{uj^(_O#-Sx%c>>G+eKmX&Z9DHP4 zb9>u*+SSOJpzUUZ=&*9ZIWAXv+B?>LW+8sVZyTEH?k`DoiK>Oz-0KeXL@f4qefI1r zn_p&%V}u3%*iJUZ2$~bedA$A{x-t>7IdF3#jneWm zp%0_}4CX(;0QaGiaUQfvy{|9u`aktt78s1q=E$o7(?*@=)!b-S3;R%AI4**7W#C&@ z=`S^j&99`s9Ah$mfP@~5++@rVeiQ*b=#A_v#Ev^imB{=l&Fu^x6j&OA#~PX&LK%V0 zvW`|XQ)XP+7dR_mK5`Wi$u;_>5$?$8aB&7PHwJS3Y__-wmQOb}+5e5*&Am@M36T~e zA9`JdoOgr;NUwB7FFH|OyjQvz(Dc|s-oEp`2Wg7icHYFnfq1DCE&LGjyR_T11v;0AY@YoAtOgck!Q|sK-ZaymV$%bif%lr!n_v;0+ z!cjWbsPxA+>u1PMs_U6irq$xsu~bxsisoB4xn00=s_;3S*5M#gOAai5Q|{u19lIiE zo8s=as%$RISqS!+;>baJC{(XY7(3;{h(%t69^%$**R0m zGO=5n{JZ9L0i6mx0O@*$sPigg(E8{XXgf|@OW*E<$%F0<@_ z)wD5nwokO0OcJ+p9)Z2i>qN347b)R6Xl|PAW;4D*{#U$!6C)Bww)!Awn7i8GJUT(h zk5?W!WKho9GiB}|q;W?|Yv@9kFxKCyR`LV3f&;oK^CMD!FL~PLPGUygN;4_aEw2B* z0u3J!zK|-Ej6Q<}POPX%_<=|1BmJ9(7?xlu_s&``%0*a%phSk(2jdFv2tGPVwVIrJo~AT9oRd%8OPdTa@HszxHb zO(E{g?>{`mgrsuGLP#JP@}fj0O%z64Men`vy;{?8iCmr9%NV-(5^h^BEOgAiyh`o* zGWn;{>a^HoNb-&O%?kl)p8-y_L=LZ|%49xVT{m@Wf2-c+?3itj9@n^8im^^F{^R8} zW!`q@^L1~CZRh?msM+f&8S(p{ChT>ta`n<58A_jAuL4}x@Ao4V!+^`3uIHJkLj4&N zMf=LZJc+kid?^en*imj^X5sd?+s{t1atyn1ZMQ8p6f@N-9Ll7M^6|C@ql&^3*TN3> zQ}bCZXd9x)1a#Vk46IZ<%dIX}8Js&`Jo;csYK&+l>_Bm`q6K0FbaKvr9v~P0wj1Eu z-2HCmYf=f9#Y~ye(G2{QoB&Crred^rwk)J{DByj%l#dCDh!&c#8rPaQwdw;ILq@0- zgSy?#$X*=f*Y%|xHJjeK3QgjG6K;zU*MJ|hqm$!WEr;B7-UQ&3bZ##Ft^Yt6V@d-NAcQGheLSym#L1$*)m;}AHY+(H!AR)CLbT7kU zSW(WNcYrpQ4`QkwFT+CcU-jK{1T1b-)A{{FQ4R|zjo3ieNZM?Z8isysLTmi5)WYq@ zTq3*{2o@Lb!txZbEG+lqi#lXh1dDM_^bDtgl`_A1M;uNX z2t$kXr9={YGgES?F%0%J4`C}EN7$u58%8%$uqR=nFP6&?_gUe!c z?_N=j7Zx@+NKd6SdBtAHhSv?#dDs2rAu^^ulDZ~)7#0$| z?zMMX2k(AMmM*LwZ2=?pbxK{d_w5-HZ;nq*o44iol$Di>gzw@rLLT1F{R4z}m4}wZ zT+MPY(2rFo7y!>&zCH4-UlpH4$N#kt-P>ZY7*Oy544{4D&9-G@+=M9P6}yxNWaXEVZHE+zG@6>~|!(J|*q>J&IKayw25RhSoM_;WosS^S_Z z=5$$H4E^_V8)00DZ(-WLOP<1=?|y3%*-}{LNNN=yOm)N1+}w8z&E99xOdm+Oe~S$6 z=?TyO#BTVb`qVWvPC7^j&A#*WuK#{Ea4h2?Ug;t$?1_Xlvb7Tq@TWG_5%&sH-PP6V z11}Vblm0fQqCN1PbfZ{MxLd0LbL6s>BT|4x8ZEjm3?GVpzJD>aEA1iv1V@&MFgJS> zV%e2w*-Hf>P+obciRa{)9nX<8kU&c>_jx<0Q+syLqr@~%eOpC_zqddiSy`E6p1-XXE3uBrYb^p}d>!=jb$sK*zd)o-FHdXM`;ZRe|!< zo`6|4{0K33KPntx5J!9GS+D$HHk67yq(PmKe^`j$+AxgtH z0h$6fH(%SSqlp=H1pGCSGmYqss%J7QvaaBY@Y_=<)2B|v#e2gr`EtNKx3KTJT^`OO zphD$*CSg!_gdy{TJ8)nAE|MtPGI9g5c9LX&kWqyElYE&UycT!vK9IuliCDe!GKnrD zZlfbRFcr-iMBD`}DZn8jlvcW;{j$@zkw~lVSKN1Nt?4dQ?`HHx=+`aU{YHy+h(*1H zXg2Trlr-=6u>U%oh$6z-!h?fi+xUAJx9YWbR+wi{OO`{%W<8xVsRnsmI zXf(YyVI$s>D8%)Q^9^9?v_3JR!q;jIgiTNhjn33A5c;R`AW0qjWO-MF3?@&)G)#5< zGlITdo}*bF|5$|f9byh~gq^B&JzokAkeG1s5%wXkJQ!HmdWgg6r_gkDFbI+ZYWJr7 zdKZ8!lnFj(49SMRU$|G+wmlTOeGMVY|AlsFXrQpU@R@t!vWvjTzBr29#yuqTsF3X> z2pH}d2{TTl#Ye{Q2d!vT)kd(`P)ppEo9NRX1JOg7a=lc3AtTF@1z(t8A4G9u&|sWe zoQP&)A+k-~mSs`h>@ogRAp48%*pDy!49~I(eMdz!%sstf>D5SRCF0*j6($n(iNuh3 zPGnkChkgg)GwfJ%&mW6VeAcnT{wd7F#`trjGmZUQ_I3KwY|tbD7XSHLF!LYk!N*3MOc|0U%`v$)y;UU#~ox$&Jt6t$w|??4T=S zmNXl?4pnXDvEW?<=&dOJ0c0Vw>bo;RSI5h1Wtm~w)Zqdm7J447_*&bm-tPYSW zv1}uxF(AZMTxEhgT0stm>ve>fstG!3j1WAko-rwZ5+uKt+ zzB3~qH#1wot=>nEq(Z2hRSxq)CLkcFG zQsu{XDln@isu|f1-v@u|6xb7lOWYGLDJpu^ku$1N;AW9_gq#xD^ZqtHt4;>F4QO)V zH}V1vEyE^$`oP$3OMda^OD*NEUlrip&#axyzgbiGs-anS}$GByx9aXFU!7mz-IP}|H>;5{%T@(}2Q zmNq-wDzAWgdvMD#$XhF{jJi&tgeB;)K}0~%W;>Zpyzeat;S4OfJwB*wjHQ`@S24$R zPj+i9^oqhXO<4;gKMDZ)w6@2?^jTwg@Ye`l=G=g8e<1YkA>A-wxZ#L2%2KHSSfn6qs6j{ATR5eU!3Bz;pU8%Y zq-JNr0Z|314+P10AfWX8EG1QWTW0QRiOol&f-E;sr#W<(O_NZ_ji{a=fXHYS2SV*Z zlv*fd6CpXQCc|ovJ;WM5hl;(IjC2Iim0C-6au7jPMPjMD|NT;)xE3LZ7>yoQ(8!&Q zR~hw@T`_ndlSgz6MU=Af`nc72=YzuyZWPdi^g*MY|C zB+74V8_e$}Q+3d0KjC9{bBf)?gbCT;G?da^WUcRY&O|#*tbS#!y!vzY0XmsQl9XRq zpI;i4@DV~CIC#0Rz78`ibCLb?X@mabCKVK^x`IMp-#>bb;ZvhZPe_SbSRFa{agaGJa`{exb@#$}g zZ;c#oXK@dO>@c#0GY+&U+SzW)?d z-931Cc$he+8t82GbeexR?i*$(?~ysD%GYYr&t`Djtna(8Kr#xj?Nn&uAY$W8fTpBj zaRcs0CDwg+o6~Qz*D|K-5_aN96u(*(UI-j=(YD_C(Lb->R_$+w5d!fMQRnC9WL|eY z*^ZMc3ZiPoZ?Ukkl_<1-5SLn$Tz?R3b;X-pUL%wy1RUZIT&&XZoBNweAmN0-gs-Mq{X(+OrqrjTGZsW_0XHywXAH-e)zN)8tVzdeR#qIpZkT_ z)`y|l`WGOw%7^^(ER&%_j1N!E*enjL;d?5;Nyb7!NcQ4Q6#65|J=eVjwPN;avmw6{ z?!4u^4ZyjmS=SqMav)23?lXj*5&Kl$h*gj*4s&0PHn7pT>G7w4 z43|zi=lF6zBR_qwFw1Y7fZz!4ry%%ra%q$}#v+MfHcrdMhs)WRv=0})zvtC#+FWc> zK7JpI5b~oKhv~fe%=KUodb5j5W2~B@0W(_(v%T5~=y}erCQQ6qj&oPxje^^Th1o4v zc0w--V{4JpzN?kr!?@mby}rn?2(-6BCc&^~$ zFQ?_2-Mw8Q*kbAvZmYz&>~61ghy;0WJ&gzWDkjYP_>l%$pXJDtceOf;AFhuz2q(s9 zMPz7_zBXqMICPEBV-jzWP36MxaEOM9>jr^MWKR`|Ki%z&%lLjnkf_uQEExSLBGLKvf8i7 zNr-HVFq0dU*Yb+YIl)mGzb47VYx$-j=*deFS{+P$n)UCmm=h0HZPMzEn1j(oz|lRl|t@0(iU-{5ISB>!_;{MPN1~J{%DlA z2%oziJQM3dYl}A+3Sh94y#9fYH~L~|yB;3WKYy~z?NFp1ml@aruwHEOMf zd(Jyv$Fj>4X|yXOhG!rM02-AFWe6B~)s=NrC5cJa2t%G-Q=jbH5GQ8>IuZg-gpA80 z|MLW3=(u+^wiq_sMFSivos&MDYp-JDw9vZJ>B_A)*)KyLNQUn9z5XX>iNSYY^8{*9 z2m~SMiO|Xpk$1Hj8~#y_I9I}AB#Xasr}|3OKP~Cg(a0ye>bn0~v~&4&GBg2&$xsF% zJ~109`+qE!Bq6?E)Ix0^J12#+FNTb?av`L?t<)MGYA`y?hnTL7o*0REolY0|{;x^) zQ&H@RgT!nZu;wJ#RdX?6ijx#G1YQjg9YX^D-Xlm5K7vH}BT?;M+FrDj zmCI)!aWI;Y6G2f9srftkV}e-_;Df-^G6ZooCg=U=T@glbG+(5WVgu10J*yf*o~?O~1K8Zf|*hcHoD=7ZY(ZwVBJZ zOnvbnjOtqmFW61*O$a-ZQgj@o4a9l7wVXe$_qaU@K^{{at1WQ3?~rFX$H71wpmYXy z7-MdcQhrUcS*W?$na%mjRbj1kY|Man(^tD%3b>o?g9tckzbO};w8V8}3f1^pLz3j% znh?WB#4g0#=HepeMWyyK*sR-Vy;%Lix!4jCgi0uQ``Rj%`)%i*ifUlda?0#p`|g`B zrDo-sM?liqn&HdJcY&C(<1b@_dYs3gr<@#KPD)zyp`q44IlyIs@umM`h^#v{q5A1=FkV>)>(KOnvmic4Q+{r>uLnAQLNuPc;^ z8G65H@^L(V#oJvQ_Xjz2%4aA*6-mwRVvaY-xNEU;f#qU3xB2BYv(O7#R$VWrw$1T0 zQc8@0@XLKxN=)N0spA0m=vh>8P`gwUwF9&(%2tPUh^5;?tri3W3AmxkhT&c6XEdEw zExq_LkNXyF7c<6StGhuN;eEod_svKZ;rEtkue8t84GzTbWBgv#!o*wj15S3_UUwfv z-#`7l^hEXTY9IL|LRtz1m(3rc=ej8SZ?^d?)iq?+W_N?ZA)on3A7k`hG3#dAver~G zhes!0q1{hh3hnFVQXkk75>+zVI)CRk@XGdn-D}hZq+w??SOuwj-cRL8Q?EAKo@duv zszHAF3qAY8UDpA^uAk_>SA^e%vWLm#jFO$}0)h<=mzbZGL6mx)8MlN>36pN0&Zvn2 zZqv3`8TD2w0%X4+2ps7cf^J(=yzfR{!A_XMiD_YnZGZ!p?YNb?GZv%1EC_JSYwgi! z<5ZO0tw+GtV?eqd-$eL?k+h8Y{^o$l>oG1Sh~VU!gO=9s`PeAzN2`T<%89M7Fzt@L zhpY7l5w?=&(x2)wk*BdbTH=nY55?;cca(@8Vzl5ZOV{!yH&vryGiLQ_MeT-1AUBeE zwi~{UGa8~wxm5YUczS{&M#&gwli@pLRe;!B+Rjw#YAvA;GUqIeSUwy3Oe%gsK@x*@ zAs}YGRE=Q=INvt^eN4iQ&rdRSNn8(mmUU(y!av=}sGOkM^|{w}P54f=C?j3}KQU*7 z!X`5k=oWX#x8E!kVplvID1iVF{OH3Wxgiiq#ny9G=u(3D=v$V;P_9W3r?F>f;J~y}vdj9_-?11?KTZmJMp%rIr_DWIJ2K;q&v_7F>Bd+T!+9kW_$L$!$baW4 zmpN;&oQU$fsIn{h#S5hSxZ_0io+w*L8im;N=)sgq=$0ayq{KBw(>6cyjI$<_wwvc< zvD_OlQA$3zI_j9;D-}Zs;YybD)c%g2GRW&oLeqv+E^zA1vDwnW&-B4)Cxbuf>y>BF zM!oc@lc=ewyq?!JQ3WnxvtOo^3`3#`M(ukv(b6|OUX00{V&@$Bvr9P>4En{!jxuk2 zAlpo2YJGp`bS<(y&se+Gfe(yU6)l7RrMF`$ihdLG{&V;rl5ps7UosjJvOh9PXi%ah zBEB-H2uIelwZpeMg{N=4cVh}vz#3;4uBY~k<<;i9xr4FxE5UQGbAX%S^}vab^L#yb z>_vd7=WZRl5HuO$0kbUc-tMl|&rXP8X#HWY(g(&5a5P!L^(rBCj!|jy)b9F{w#B~3 zE@V=zTqp?Aw0#^ub-$W^Daw3YcNBVZ&)m*}wvSMJnR&1K_KfpJ48hnXVz$3jOTYF% zD!iBMzuUOu_Iys09?#-_+ZSGw+?w-O#I$66IYR9;y@sJ8UPgsZ$70jIxumj+Hp3_#$piyPeBX?sO*A+c7-Dl_4c@_*I+@wkA^|ygL4n=>D$^|*x0z( zFJ<1z6Z0sYB49Ln+#z7~h}@y@1~;2d+z&}B)!tig+IEYA#NbtxA(Y>>Gt&4xB`pG1 zt>5_)ku@Bn(4_TRO>}Q3uTM-ZyKJ81Rkc3Hj=H&sUk6s@jE$uG+h0fGecn!>7L2W} zEZXj8a>#CJFcG9_1ASN-?a6X@ZkmqZ9bp<515{0x^B&+BcUikQJKOP|I;PXm*{$`% zNXzEiE@eU;BiBL*y?5gp*Y*7s(_Q(rn-J0EgQ(H^eu;L*Bi%#;kddjP=Fcc1T};k} z2OLAar!`0NklhmW%DvC_Qao(hM&?-w-{7=o!LI%s?eQ`&a!t(HlSwqBpfR(Xc9!9K3u)(lt@36sVsU&s@9*dN z{cZY6Q8+9-i^rU8V51=!o8k1H4O7=!@uA{P=!PfV7MMKVM#by6aQY|MvKQQPbTmlZ z`dF0m)7I?S(#>0>h-Lqhjvg9?G-8(9Mf3SOZthT)gZtcB=s9y3Nr4qpp^%^;Afb*Qcr!^t;K>~>ImE_wr6>WKOi zl3MGoAVPve_4yeMw|>Oqn|#!y(9JHVx{iVpPgR-cQ~6r!i0Ndutn7V`l#NE?{>Z3L zU?cy);R6zie#Okv)Wu~)M58ru45c#taxAyLJn4`g*3pz_hK-HOcD2d{;@G|EhEFri z@qP~0eewUmF4!fxw@1nR>+Xohb_e4%sB&zZcfWGlzlxM)TL*Znx;_*BoX7(q^RUCt= z*G%iWimGbgUHCicF-$YMg@>?&hp%Ry2Vz-;*<+Aw*^Q)9n;b-?v#EPHy)zx=Qq93r( zy~nBt$up}SehpfbluS+Df5P-dk9eplu+7b~(;qN~${W%S{l;?d{*4OTq6}F>5!|09 z;7(^tM#iH1un|F@%*Y8v)Vp<;?IQJ)l<}?I+sa<@M)so`iFcHJLTN3`?{#B5s-=&#%8tC%TvQP+ntS_JOU5uIAwoYv=BpG`&C?(<^&5|NUIXIy^UeDYUVIUb+?N(y56!a zjZ>?pVxuF(u~4S-g+K<>p4in|toU-EKyr=U5Sb`A0GTwmkNuf>ufh=#76I z=2LHA#MtM`4u5FVj$o=m*3h`hB^B=zTOY5DjaM<2$&!-rdHUqZbitJFZB0L{r)Jaa zU(8D_;3W6kV(LiR;d_2op?zlE5Bun_QQgu+U&qK_uZ9BpuHguScsiYR>bQ|NpDutW z6(7iTg`aAT4|(Ys32&lz+(!Lwe!=$)>mKUY_Vf}$d!97p4lPy$37{h1msn}k;^#k~ zRCahy^#uIbP11jlXE>6AdCpLXFe!9Jv4N-3#Pye#6pC^92?(&>7&`Hu-lF#XOv24N z_I|B^NAh=}snK$LlRhN0aHQ_9#0Ur?zZ}nEtM7f5#=m0jUL-J011;Qob4rInhVK9| zlyp~GLEyK>CA(^p$yC8sPjy~d6$5Qayqz3_@?jZ~i&&!JA>;_cYhu2nfLnNv6fYyt z*s@~={s}Ah)%1Rixr{CQFNWcXZViN6c!Tz;KQ!d*NcmSi;wV4b4f-R0I94=o-Iawr z>>9pxTwW5B_0afbQ0<%h{9GCP0o#H=x^HK?&tqzC;hE<78(WihBu1-@C)^lYso7c< z?_6nHNsI|U0Pvn2s*tHERxX3JG_N9=8dl?imG}zRSCh{=zqT$A4+T7)H6Naukn8Jb z)FRF}*N+X9Ze_FHjDs0*bA3?oA6`mM2=1#(AiNyF$J;S0>c5xRQ#sZXrizMn;GWNG#JLN0Wiae!x;>bc=!VKC5W@ z_g<^%!isUp)ZE+HeJ1|alFdv&l~^zQ(Jk3yt=cd!4>LH4CLeO=$jpW<;gS$8gA}Y zgYmNWNmlE1)#X`+<4b(QGU=)C5^ooA0jX#*!<`yfP15$UDu?UCvxNtH`;ciHg`Vqj zQig3%X>Hm~tvG(Q4}%o4E#N87N@Tv31PQ4I@AT4icpyjfscEO@2Am?b>Rn~UGlG=k zdWOV}{*aX40nR5^Puv@kC;k`WMx%|Sc+Dsr>PF%_{+HUZT@0pbLyu|%p3Iq_)2Y=#_Spb z+1v3LCLc1mtx0l)#|>+GG2@tSsXXL8*aPE+=8o9Eex=^(uW=qVIW~YEYK%abzQ(I{ zlj$l8q2?xNtc7u?o-~ooMT)jYbTaXf$)H6`Nx`c<2<{aX6IEu$v&P0(^edZ`aFX{7 zqItVn)Oo$<&3Soj?39IGpL*Fj_ZhXC^G3G9eu0=Ea5rG@yIB|BU**($WoX+ZJr!-Q z0=1i>FbY%Q!dGWn5AagEv%Vqjd*kop*}^ok+qmD_V6`&3REkLd&0=>UQrUdMRYu>0 zCnwL&94BxxqBmdC>mNrRp6F=rl|bdY6L7egrV$+^o8<7l=JFd}a+j`o@~ktphQ5qP z74%q>Z!|I4TYXyO4+V$xUh*Df53YQ>@81B2WcUEi<~0RNIIXk983{9Pu&Lu(^h(Rxv}PKNR}uYKCPd2WT-imDm8F z=g)6;aHWw<-nVJz-Y;+HTp{Kky)!Y76*sf$- zQ}oCz%3)E+UQ*YKqBeX(qF3qVhLz{9?PO4JreoQTXHkt9e%F40*9QGw{5A)nhqOt> z3?Ufl?9UbLkFNmGcC-Jutoh2{j@6rj4esAuch8S_jT~7KI^6mug^n8ndy3rmmG(A{ z+wAMyCuxJPkzNYb-639FF1Nh?nFp!)&r!h?dU~ocXXIVmvU)iVGUjRI>s43Yk5>nn z;*e;bm|~TeN_CYGUMSkR{+Gez`<%DL9|Oazc1w{mU&v`U=S+{riH zIY22Kb+RDNv(Ys0AX-GabSYj$Q90$|ciFfd;)2+(hwe|lu}WC;Dmcup9H#OWJscWw zJFFykNw@Y3T`u{C!R{?FW9-F7jE9<1FQHtYioOmU6u=6tblxVuoNTf=axky|v^Naj zLC^E9XaP0y^a$IXuNfO>?2qeS6jW*rc?L?eZ9E=7^pzdh`!lkve0_n)LRl&hQh{8J zY3OWCs1%7wp1{Ey9HlHAziv#C&yocg%A-nWta$-THKq@vCMTN=Pq((uq8UiEVOq71 z5!cnQ+PBsQ6DzRKlB_#reowsX^f=xJ2GB8^MdDQs;hOChdjW4vDXua~-ifn6>VfAm zd~1$q8_0-90`-b2XAor(P(U+uc+ZLDHZF1cmY=Yy7Bj;uXZ?&nqgLLx=aiA8uGEtZwG3oe}_aEtq}CAMIKWzXyWc)T_sA z?ZL3?6n{!fyR#5cA%ud6x2G{5q6ZvB`>7W$uexu4yNd)mU$kpojNjI2ABEQP$t*J9 z_>&*2T-UnD;X8h-A=*y~?Tr^HQ31Ei{0%vtkp&xozCXhGgG*M})Z;o(CbfMtKn{uq z>C8^TGMsSwYdll0>%fGKpqDH+-)I$ukquB2p^rOs1_`;fM@`0&Xr{(ld2z$C{o`!^ zXn6zDv++rKS34?HNv(W6|6J1@xnTVnh=C$GmBVV{3(PF&D#a_KuyH_oa-}&YA(dPM zXpI1<9i-eO$zaUvw9-DVHy(%v#@sUFE!%%!d<=QFr@NCjU2@#}LWwWL=H&5llwkMj3o)7zBACnEm-nEybOM z^=Q>z+R>i4wXb@E;PR3&NByzaYFjg#{M_9i7>vF$xIGUc^wt=G9T|v!c0k0Hqpa3A zqgX(DPv_g}b4NNgNh|8)bx>dQpo@px6mVH%8-&n895%nS_ldZbnAAQcpt{9?znzk$ z-+AN?l;jYOW8@Cl3^2`3%1RhTDpC}9ghwaZp_Y6q_lI384c!aRI^&O$-*8Q5GTkYy zdKz*yFuRmu^wO_p5X0E&?i;CA6uKQ6?`)4o<5&QjcJ4Vb|M+LB&!vaL{G%_!y4sAh zOw9H=va*gm`TTO@I-Q^tL0oG~|v?79P!>212itx&388hJyb1 z*6p+ExJcNz?8f6YcC#%z+X1mxH<6-w(G9B@SYG7qv_DrlN%qK_o3XAER=R+`(pG#L zTv;DNlK5m1eeE4_zJloWcXu!1ao zah;|I$sFnzf-%$aw2-VUZiH0AEhKhq{sElc@TcHM4{WV;UI2;$pM-N|*;1|j8sGNw zpn+L*|9bH_ru!N^v3_m*3J|US6K}%x_v)J6C{U;EE~w8uG~khESrp9>cg_lvq2&7ksQ}X3m1Sp-d=On(q%-twaBy5*eL;cXQnX;8SC7~>5L8w@SL$=8 zao)5dYz94j9tj+;#am$EAl43bAx04ydp%ti#i@vdbPgPuUmR!C-JU}zPJ27O1`n+MtpZ?#(7e$v4c_*tVJxZZhvg)Obv3Td!m zjBk4w>Bde*1;3_1RNlF(pXa;H0;EId1~(o!ke`I7Org@dwwP^Dn-JWWyQ<65hv7IbWB$ z{*e6(d%MI8ML+#OZ~5f?gVyg~oL358k;xCPgN0?6tSR`>)TT`N3jV5wQ{yGBP4}>t%SM&fkw82F<~u z29`h`hyVRLKO5L>!zNcf{qw`nIu34qYi^GQm7NW< z(pmf)i;WBYgu8k+T0HHlbR$*LLHfVl54jbwWv~XL43K`QL5W-WPf{)m5yGjVU1N!M z$Jq`zBKPks{GVU?U#~w#bqRgA%fl*I{ny$5^IreYYZh;Wp-mz0K^?*WcM>?R6f`7^ zBA3JZ&o=%4r~Ci7?>^3Nu1`;+qgIX%3Ms_Z#Po6Pcw_cKJTt_jxWF*sQpkMruc56^ zq4(WY4&eI06Nyz!^RG8$9H0ZZn>6vVj;&~mi@oj=`d;LgU3p)4El+A_i{~0@h4GT4 z{>Cx?d+6oD8Ym0T8&l!z=Z_lqcmBQ?(Wh(wk73rOLA{Bm1y@$$(!AQO2cW@~P|h!2 zBZ}d)yW;N9$Ver(E-$Ce?4}mtoIkj-r@%mHY-}tl{5|lzJ1nbD;n2F4NId#kSC9CK z%ZrDgFg#i&P|U+hnV9nMzcxh|5k~0SZHarNrDfu11J19ngu~x?w8wA1^!+jV&+!cR z(XShKwY+5C)=S&kTVEd>ID?w?Qr+yh|8iWClWe_$3lGbK1v8h%gMlJlIGKI5RV(Cj zs4uOiuI_!Vsf$$KNbGzHR)0MXURl8pC>I?Ro z64oDz9Vc_RyrfF#ohLzSsH=cGl^9`vo^u1o^NQY9;v>`fum2P<{-4YHBBRIh!IeJU zo=Etm*EGldb`VwY8D4G=D+%D~?ISJSr!mft3}U?@Kn$9EKBVq=J&Tx~nXxD-9U0;3 zhE}}YFD#rdUAM6^v(wsD>5a29ky_A~Cit#YT~uA%t+7R0Qd=iOvCY%DgF{TpKOXA! zn@lAaY&saSp15=O@I}ld+I9Sp4Ubm_A#?uU4I^WLhYq!K;_NsZ%yPT@zPR2sc<}n9 z3ebFN-MI6U^>O)LLch21=0PGzj>&6-1j$@TG`W+`FINp+m6RnukZjUN{Kt?IalpX+ z-Ax#lnUr`rF=ORfJ)##$NDPL1#djI251LH$!C_=*Bei7Nqb-Yl1)#~u(_ZA zPM_TVU0wa8n+F88TB!m7Hk#gz@;C_)p*Gyt3VTOIc^UuTEPx4n>W-^D%814CA6YrN zXox{PlB9neF<=8kO9sNS$uljit?TowcqHircGhfA8JCqCjxumE72AdWFRtD?D$2Hd z163qN8c7MIM7p~~Iu+^eWnv>zs< zPMQy7Q`F-az!y;irA{MIfx4U4k*exyH3ocr%bo)YX~BMZ(g-6>?a>RBMLw<4m|Hvo z8#cvfJMkA9j5kwVRxHNQ(2xwr!}dH-O2d+lrtzW$frXhRl*OgCAf$O=L*%C`c$q}| z=4dC~eR1nLijRXKy$Wxa&uRkx&92ILFjb7(>0o72G69ME>dD?7{<}3!!pL|~ zy_R~BVKumGv_~-mP!#meYqx`gv>Li;9@qKE3=MVJb|1o+>F9<6Jfh#Ulf2ed7kC(~ z9N|3B|LDAy`MHcSf!_<>{+L;v|W4Rch-Y~U= zx6zSdEu^~!q;W&#Iq$8hsZj(mFnmfoJ%*&SyDs0Sq%_^#HJ}hqleqO}1~WV$NtG=_ z;{|}4m?Ypq8&xi@c6sadY-+4LX|AV2+;!yE^P?>|5fPvE_cwzh3=i&A_e@OkX4%g+ z0ATaI_XUjg7tPkBTQCAVmBkQJBa-i{JSKzDCB? zx@-nYr?y^g9{@evJXpD1?(9?OrALF1zf)(Ec(#mm&|%^At;J~671$0UE98ooh!!jr zIHk}NI&f$^3*kuOE*NfHgu!4@(e1hPn^sd6qb0Wv``JZHQ&pYE)BHJu9T~xZ5@_-Q3>McIaXVNarzrubC&SPgb5N7vn68*~DwBCf16yZI9>dwH zfp2&oQ_RDzqrP^NFtxn1SePfg`Q~icmp+2h$Y0!(tnRT* zO|9JZ+bY-+|14@<(ltW#^K0P%WV3i;Yk0%OqT=hWQ(C?C>6dn&D($y2|X_=h3+4%11-k3Jg%0Qx- zVNXQPaB(L;%$LOrM-?Op-+y9Kg?JJXwcLi_qBYl-Q!INZ6JO|)%%n<0!d7st~3gAM}@5A3y~x6s=xX(Wo#2OQ&Y@+yo13sP9S3=|)w zitH)hI9jr?69+qz3U_10KVK<5Q=}5Q0#5=}S*s=#+^}8w#l2kx)Ge^6gtv4xzFN`0;IL0{cRym{cN=TeMSbeW7n-xMzJAyodV zD`aac1xOp{OWtQliyOIbFj`|{<4jIXSJzbAC`*f17Z^mq-kkN1jBJ#ss4Em6m`9*v z#fJ9WnVNbX9v=4hOZr)SVW9g$CWP!58-Jiac5(VSJvsHle>PnEVH?7KUv8`Ac04Dr zbj}mQWjtF{AlAXb#=h*lK!*!#X%T_CqLvberG3THmZr^?)`y(x>bac@Ta@{j@13Y5 zHi_xnhW+AbHX{$*@?k$CPx%KkoB!zI4)JyOEVOW@)>p61aFv*`VC$i4ukqIK@H+|vY z?62&Li^&AYWM!7B&6Sz!%tJieiO5{D$zt&X^_5mvl9J4doYumu)m*r18RI@t#BmFV zcVS5ugPSrk9wUU&1omPaOEt>x0XDXi`=stSo;QN^xk=Aaj_c(^T#aJRRBOv%Ecf>`%eZ)r9Xd7F-n{RdPjN@)`- zv$$b#QfRxfqK1Zsf`a#z81BsKd&*B#t<%Zl`I21Cd|ffq2MgfhPv?i+kEA&A zyC1aP-)>32L|hKou0^SF6tFlBP6xZpse{t)fQ!xPoVw`3uAQT`5+KC|p3W%fWMpV7 zCvzOJgK5Lxj&Bw5AIHCV5xG@gU$4OcC|leXK{yn6_AqZ0q|<9zYe{cet+V()f;rl> zOn6_>)6$xlnC$YD4^tw))LBJ69d>T7g&@TX|%!)s?7Lh^W+e zV-Lhx5(dAJ#`W9^W=-t}FLpK4L!GUio!aV}iw#4RV=_CNIah{?QH|ErwE3*5GxDMt zW-qk6+e@_chn!Lm{e$fa67Wf~dOtgcboc&iGP-wm0ih|2O;3(%wKJva&|P7)`-_%F zN|{8LA&?dSW47b=4z5K>Au^|ps|82jXHiL&W}{Gp+h6`^4AzX;W)^0j4~sQxWtl;v zJoa?-Xu0}gpQVulP2ZS@?q*s%7b|) zwy2Cc{7@FDC?;KDV|fvVd~r~>cJOa|80G`|TQ~QvR6v2vqm1`Iz?O3j)wwlsP7GvV zSG$YCIck0}jMY=TMdzVV6m|5EHpwO+G-8L%um9)?TUQ=t0Br~jlpe*VcsOL5=6E>;ILJ72XZtKVxk2)66VzBLIm z>C^*+x98tJ8%tuXMM@33*=6!^Lyf@7(ygu!dcD1D1k7oERqSzdIC_&!EF?NfOR7bW zM2s(kG0-SmwjvCI33Fe@=e{A6^lZ;`V^JCI)|n$CQ_Fu%^7>^7Wp_Vn0)0tFgtWAl z``%HPVJS0;s$LmdN!;!OI)ZvnRY5z!yY9}-3U9+>pW&qlNvzWiLkc}TZcaZlrcI>! ziD?JmQUYHkue|4njxaopl@Rf$C?jw%YVe2YV)U)b^ zlAf^i-b=$T@f%cDkojJ`E=$C14`qvj<~ow=r|U1=gEXJJC@8)RGWJQEEBrV= z52BJjb!lRMx5*z%VekiMrSa7d0q&o}oE0PwPJ#~hhmN1Pxl?h8NUpMC2eSwW8C*BU zyJ82u4Hs%0L%2bKeJk5G3!mX>xU~q1vVpoK?d!65L=`@)Dy`wox-~6QEBD6~fWBf= zb82PDfr^GoDfDhhi92oF$m_uv1cp%YooG7-ht_BKENjE*- zVP&UqSA=qE<%r1zPX4ezsKbVmFl7UaQA;bW!U$HEP+ z%^sM&N>woyi}$qkO*9`o4zbez?)rq3aQ5Sy*psNhRjX%vwzOaJsXWSY_t&nSr;ZaV zaVe>uXd(_AAog{+b*bL%b{sbi439F@4nPKvr#!eV8#h>#GHLy466P~ScPmoC;IM-2 z`vp+5^IX@8^KoJxtw{F=VwB;%7|*=>DS_syii$sHF-RCi+wIU3@WIfGQcH6Pn7QI` zoS~$ys3H>+`Z%1r0CX8*Ze~6{!E%}fTmrbo>eZNmavhwm(BjsOmoH84-B+|mAnhT) z&YwF^082vYX(x94v^Tx7v$_4D#<`S=yZi&?n=!bVqHS8SLm@Yle{@P)jWr|cWo6lR zdX_TwbKRi~t(Pzi|Je2mjVAkbMg_yq;m8m}7-9B0p4ZTF|Hr^BZWbCsDo2OW=>fzK zm7855A<{kk#KXOViwZ3VX|2nFa4GU3yb=BV!=et+vyn?^aKi0}hwl~_xG+JM{&an1 zQOe4SQA-617x5-P0qd;s_?|4ZZ@6!+#eN`3 zk%p=NLcFbNXv^iiTr7ZE*u4BIx?IX$-G-`acJZ2F{Gs}Z?sf$^*m;{c@ z<$;YMfyFS5ZbG{6RV}c^zg3_sD9MHmiQs(h@5JN`40aBG+rb@n8q`;m+&-%5=Dg+`!%=-bu*z$f5KpN!6Lct;oi%g#8<#=e%N^0+gV6&Zrf znhlr^ZT7G-kxH=-MQD}~ebseG3rXpta@KblZS?i)SU@r4Jj+SnIq*t|raGZ^{PjP) z)3eW=T-(Qs;XOf!hEm_c29qMl@etMv3@vwE9^?C5$XM+<-ek(<)g44hOhj(XBNiWJ z_8ghs{jBq4IzL=Fv;1Kel`dfAWSkWIpK6|*o=BY|aO;rhl7W2cjO)|Q4$7tjo*o07 z9I?-lF~mzZ(Irb}5zk!kHWN%d3~#83gSh?kW&F=RX^TM8(d_Bqt7N3hBBhHs3ishL z0Ff|%fBOvjM&N&mzle6vq=fdLp2ADFA$jhNTsprZ_VB~qXjFZxl>Dq&fJT)Ngop5- z?f#7i1hhF(wEd7LZe1u!*q1c4nLP^Zv(2M+k1ZI4HLxZz`t?cn-}n79x2rEm(UHW)f55cZY1i=`j+{3(TZJ4=qkFu# zl+}C=S>wG2XoPTdmAC(w7X9D##u$fWmt6<8s+}>UJ0VVAC`vB)Ka%}_3+IlU)Y~=P z$?n_V4ePwa6qgD7!hN5p1#0t7<%>0q4rIvs`={5!K!+b*jGO*vqu7YQ;A!Moy}DUi zlPAw&TvA)^d5>VP`m6yR!GF4oPEYZC^nvbho+2eEeq*Z3bJfsNHWzLjpnzPz@)(^G z{LwFE>zf z;MqF+z(|jzV-0~_%s-yo-k%nXTRCc9<);_=J@NdhSMN!^p@JsV#ec1|fHp7LHm8b8 z6EjZC-fN7GW(P6vo*icM-2QdXpC`It%fS&?bkkguI&XP zKyp$jvU%PI2P+gw(yS~oVQ5SZ-_8ELtk+uJv|7be}W*_Y2T)_IDp<|LIW%G?- zwhE_-*fTE%v839Bg`8>S-#(xHK%i;Y4^ASP6w;qg@o>%boI+GM6KHjk3bln5I&y9xRI1V<*Xyvx7YftBP zQjPM{{dJtOqv!{sXjF#8ixN{qhLZ?aR|Z6Tm1hI46N1Hvb2XU~s0yt3qtGMb^hRAd zTQPE9vQXC~4Pq|3(6ckei+?ws4*5TPaFkt-&Rn-?suOd`q&Gk3PQu8$MftI&d+h@b z+GPR@RF?p~IpXDOm)p$BZG%_?)?+Klt^={Zx8S<~*boob!NMgVscY2!kG}c`!FOg? z&){jlXwN1VzvykRuQ=wyIa}~ycdfn$xFGO;0R;`o5;~GdS&hC%54v_sMP@S-=fS3F zdks2CDAm2!nB~>qC79O{4dezb^4XXcRU3a-x4d0&RVzua<;}7&TK{JDeEA8&>iuJ$ zo#1B z?v*hVTp1Y#tav4mrAdj^RgS9-DEzA-&eo4c_SPys#~(_28C~tUzwCdI)OJqV{JSpk z4q!uIq$SRrq<>4010?M+{T`PgoGwYjQtW=vm&~6emU1q+FKSMi0za}*G?R`_hA2QwT=KGkD`jQ>SU=C}nHws;=%XBqS8K|ffWM(EUB_%c*%}K>Ev(ur;ZSj*_Z(K&E>vDN=b~NYrjh^d5?Zm4` z*^jB%7NEkyVv$`)oJvn4I^*RBqGdbnzCW3oG@n#3`_m1zlB-|oK00KdiXMf%XK2G6XtxWozsvi;KHOvQZrwNuT+n44%VEabi|jZLwA+FC8FH9ty3 zfu|yv<-?kI(ATbt#vaeV*kK)#fA~EyHWM*1P0OLCTZAF?veSpWbS}gFDiRI5HJ~2J zE7LuquV@j!$=;+fi@m!FyJ-EfwkAe=bmgL+oE+bBHeXs=Z#L0=m8hyJgM!jp_n6xe z?vC(zB@+5x`huag?nYhv_U8)8FZy|N^Quqj;Y@wRD5m52s}g?G0G`Qt7?1^O*(d>M z1-Ij9?UF3d#a5ss}rT{{)AI>`Z>g)5GpkRMudq4-8cGU)UT)A!}WM;0^ zi&}O-$e5iUAJ4LSx>jx#=c?QpZrnu>(6XDw&-%yt%mM3_d$G9a4B)vNMDgMe=kNM8HD z<09(ki_fVJtN6C-)Oqe_KaqDxsv^RREsJw)QkY>z4(Eq3HtE;jILsUYk>O}?-nVeR z0{4Bf2tcGQ31qSQa%hJCu}?1jV$YVwF@D8;Kn8EoQWJYCrh`gZU7hA7RX(C>Sb-e7 z;V{tTR=a5s3;_lT{y_SYA(j(4|Y7zpWl^{mZBT5|XwP$-G0%Zr-?wCLq{< zbm_4KCcpeJWszQs@w?csYrng@N}yfeVASSYzk^dVv4+;i{-@VL!MH>&HzA3YD^6Ei zRUwyEAt6WVwHl67Z?CTG@j3$OuwMHz1!eUXf8_AcETNvrotc`_%Sz`m4;zS;giY4u zse#_N0Dx3t;@q0J)6TUe-d3NAqN4LeX=!^?m>bpcP>5>ffa6higsQ=1T_Fuk;U}7L z7Un3KIS8vD5}#<@b=9KaT2a$H5lW~c-STA#yraGnRYAyzW@A>lo6OWbWO(*;(a4yY z(%kj4m}KlfDfIr|PunOG=P=V695SvjVCtJAl9W|6cByKK?E&ncX6=dQ!5` z5sCO2-2TU#X-?pFmW)I5X<&c9pqfVc{!z{meA;0wa9#>6{PgM6F$0h0@at;3&Ovsc z0wP0SB%f>l!NEQda9VB?O=*-w;&KA7{qv&C%Qtv%U36FhfmpDLqmui35JSg;kcYxI zr|Sr886r2T*ylB_b+QrPbgzan*F>t9w5*R;gdUg|6!4$6quG$(+;(N2w4RskXf$rAM?5uC-<4WUs#xUjli4lm9?)8oSxuR-yffFMa<_A-9v@D%pDz8E zwi9d&ecg9mb|mmp0Ahk2ml)hz?u$7Bndg?a zt&Cxyc6x4ZjK@cG8TVXVzLh`X1nR=#jYBb(Zn0kJ4DDNm7go2VlAa)Vm^iE*-WP;U z5vL)1)NWIlC1%J}8xqwt{zXvx@YK+m}Sgkk^!DWVt8t+c0-Gvb(CcfDo)lEmr5Bg@2RTMH#cxz@Us8{AfpFf( zU14)&dT3|f$OUxhj&G?j@8srBe2nyA$$~T2TinxnWSn)5i^+{}b~g5P6mRIjek_Q@ zah*pq-^!I*)zhgu`Y}5F_P$5pHa`=IqRId6dSSrbqoW$A^q2f%ez3KKU!j`+hq(dOQ@fg!w?Z31d)Ni3BWsx)jI z44~~pE}mM;;*x?*%PFKBEaA1&#rlh<(-~-`ZH4OgbmY!TzTly4oiJdRY1@8J{VH4Z!9tWf4QtbL0`JuiHNAvX?H7lCwk&$0j zzK7VN;M-oDn;rq-1yv0N`)deKOg86}ShDqX#Jd_EHiqfEDb?~9T)H(KBe3SayE^7*JYJtORHXPTx>vy?L_6e=9K(Oxo z>#hvkSaOO{BDFuzUrppegWZm)VAnE#oF863KPj-NUN!|=Y2V+o+*kr6TvWVxxKr(~ zZ2Sbitu4WUp^=ql*Z67y8&x(Aj&z4@)s>bTe{-c`r_JdVAU1QSnS|4F|8h_J@sMju z@hx$ln;dcxDqj4U$jH~3!(w`GY-R+hf#ILamQ%o6Wo{>ZDGl7N5? z^=#;482Ka{C<}!6Fv>RGHh1}c4hT&9wg(jO3eYs6Ef}1&NesOKeXFnoThw+0waD(} z@fcKu8!h@8okRvkc=Vwf(pCYrzh`~BIm4<5gskV)Zg_%x06|K4HKCYY(y~8djSAA( z?7Z3MlC1c^)0P!U)jH)5za5O-#g} zo11H>gBN97%g1LfVoN9=yaIk8Gfr@bxs0wj%K&rTGtgZg`(4-Lj}!kN6W@Db99 z8!o6_>3Gi4jgy=15B48^y(rpp?`AfTQ}{)uvAU$|*d@$-#QgSfU!Q}k=HvHPnkkXG z{*;s=@y@2>h*c$&lJF`lRn(4<5W8cGC};1EgjJ0Yf*Gi2zc#=%x*A=z9E|@vy!`9>RBrtq>d!OIMP^h;}iWIq`0n*!>b_hnBfizDf-%kd+; z(2bD?$es>iFt!NEwnA8C!hVIlx$@4=+cH`+O&Juw5Fi>uXN2nKebQ7R0U-hU!Oi4? zbG$;nO^~j=E~~Pa!5EB{IJ=l;HFg?+B}=L9n6LjV530qfrF5F>@VJjdlV`*kK{$TBih?TUsj7B9(E5cQmXd7CFBW<#RTGxN5 zV`yl&UfUjyE6kp$X@I#rK3-vTq(;AnQEc-4H3Fp`p1^qv6$N?Qr*b_JxrT?LaK5u$ zG9`D%6PT?YRJ|b`wp@Vz%1O7`#-+cR7xJfdaqg3vc{=ZJd~y@Bl&RKiqmD};O6uzH zoMSQ09N7pDzidIOnteAsG9c0)C;Jh}(8oqNuu6pY=s0A(Y7W^5j!+nHi-!ay#Lm|5 zJOBMxM_*s*$Z=-_Oo4a8pOh2DqF!`#!gak`9Un(}lm1Rm6!ZEt#?qgbgM*5Jp|+Wi zlh?N(27^+^m%EjjB8TFmL(`Yr`W;7OpF+hmZz>&zDxbdAc8>2{jp%JhgM$H5qh6u6 zp=5ky+pZNZLrKeart!I;Df3zkc7Uz&HyKpl-oq7Oqnoz|oC?z2rc5!S7UP;_b9526)tPTkP z54QCeVoxpOr0^Nzz_MG-`;?mwT8o!_l@K?7Clua;_04_h?y3o?1wtSp{!m~5z$Y^X zii(Q2$4kJ0^#z2D$rHx1>*NmPWSsk>w$iOeMI`W=Y^?PYQ6)Bq@TKb9_E1C1otS0J zH!knk^!S3e)h6eZ$~e2 za@2EnLoaghK%jn1dT-ZO!>YU{Yb47?UhEi$BT17_e&2z@dACF|sa4 zu@r|0FsfTyJO}3Hz(Ht}xp!RpCDFn!{sN&C>!Nh&WPsaB`?d<7$AzUjIV!~&?&^cN zG~KHeMs9>;ZvYnTqwmwW*rcpQgFd!NNjRYzt}+nsqod~iYr$V`JF?@9fiM{7BnNJ~ zHcY|_U+Wh>I*7Gh#ACZ&AGT~RX!Dq?eTe&>>N@%-S`IwI-~pac9)Vh@&iUQgD_Az) zZ@EY_V#W7NjV~qzh3sr)-{Gv+WbHVkmF47zDy*T}2A^i5)7ifH?FQe`>nEGjgGYgv zTR;f=QZ!T%_I~&`{*|Y&^iEc(P)sf@66vUOhD|koV45d^Vpkcu4s(}gWHoo4L`7)T z#!*?7GcT^*acF7{ayJdrIf(ZaNl8oARvFTKIm>IaP2)~C#o3~$cO_bHGE>$#>d4^B zN-<>u9f1&qjGDl4r`fMP_owISGt-l9C&{=?S9j(B97Y?~pWp3w2T674uGel_4IYobVW!6%xgFu4Y-7scTvA}G61XZJ+`zITL}4tKvR!WB04OKf`a zZKcrY7cc*?E6J3*uYe6Cq7+Q$OtH4#P9IrV6j-1d+}4xc`3bhlyKfa1Y`2282eEQ3 z!1gnfS&~6JZvi-UuvboM;3~TLhb14&TlbEeOezVEsSu!838`Py(Br_$v8f%oGom%y z+@6N+NgaQ>G(-|in13z1`U+X)_+_Nw8G0tPt~wHcwc zGua(>dXtJ!#;dHAE>1bz1R}3^M?@!81cW3Y8x8!~`^LR%$)9{y%S}j)$2L@HO`E)wvmvLM?XFXVD;bLfdv+--@`Bq(jju%nBIU(2N!)!Ei&<$uW=(gB{eVXJ1$)Ktt zmoQ8-!OeQ)7k3g?G0`F*%WKh{#Vyf#p@J4UnCs8_lXWZ!$sKiW+zV70n|ym3=3x=m z*dps5Hc_}T-)ce*Xj~GxW|F#TsKxTlv-ExphY@APd3s6tK~DiS71GhVk5Wjtj*v82 zkKEI#YVGn(^4o#9;S`<|e}PA?!j{E{c%Ba#r)N~DpLg-xL;hr}2GzzlHy_fi7o=Y# zj?8dOf@o;;cUFbbpgUm4QtjF}THYU3WL`>Q2g%h5hektp?*dsi$KQ-ET%F;KIRUTq@uzp)V$IR) ze6xO5*Sp*OGuI|}IVoYDZg*P_>yU%)X!wIxuFf3*U72+a4GFz=c)|%eAanHxY3Sp< zN(~SFZejd}RZYeY@e3$af2V|hxMxU9@4lL6Bc)qq@A3DWX%o}l8zKCLcA}N&7-^VJ z14De_;<0oiueuF6-rHs%<5W&pu(tc2FB9ZF zY$vT2j-^WdIpW$2ADvc|8ef(K!nBq7`B|;jta2A~&8xVE>u%D#bK}iZ>#pduNi@QS zU!%_?DR`x@Av|1^S1F4cDRXmTYFGgV*D1Fr4{du~^|xqG7w&df69Cf<`0yk4V@I`1 ze+r~x-^R{p*>^!0pnKu&4sVC)b=`_B-Yr?R7Ut)6HSA1$qCE?P{{EBz0U`>VM; z;vTe4re9)wqvbo8c7YsnNMznP9&5M8xzfqR;!-O$ITj1sLsv!;Q=Zid(I^M^(?f>1 zDG+KUtuDJT1ip&Lnq*MZ(=t#eYoVK;wt$AF^~Z9aglBzgk;Mis|3mroblhOkApkrd z0ZT*PP(*~34y9{kj)vjsJ<~ei@^%=2rk=`vWsBLR)UqKPZLjTw>APNM(<-5NAse-J zA3U(P#aX1`bMoJ8>ob66x@F5d-ucm%lQmEMtd%8Q&}OYIGm_Gj(oFVe`*l~I_(%XD zalGB{Po??fG`@P>pd!$pexxsex!)FWGE_E@BMSDu`&tn7FVGLftR%fCP5+Rrt#*G% z#eew-fO_bCyOy07<_rwC_j&wk>Y7W7lL2DLIJd1!&I`eOdk(NW1Atpu&5*_e?jCHq z|4CHzQ>~^vw}G3FkFTM?@^$co&nvI0Vnf4D>vUG<{g}N8KtzguVMxgFtB;Q|VUv+F z|4l5B-=%eD{P9&D*0{_3(*M5Iw!8UDw;b9ChctS}l`9|DQXc+KdREJ}?})5~yYxHjzB1Ea&$ zutu3r#KI^?k9OgSZ#hrk>`scf)+JGD#VVx6C2?^|oSc?C3Cs@u6rG%BC)9jpc=FAs zWt$~xC zfBv-0bamBLnIB9{9gJ0gW&)qE_jZKSI|zBvG;q^u3;C^h>UMe zC?D$PZdW-6S&s#3cIsZwh0NH}B4_C6QE{1o7mhI0Nk8%Ok$IC{W1E)sSJLO%C+|49 z!O-r7Ei_X5<9`;-Wvaet$MLO2{kc*TN>=XT-y-bTY`Q$|9Sk7A(?|Al02_XJ|AHaC zq4{exM6mGJRJX?PhEJ~iaaD@`i2C>H`r~Sz_%*u?pOw9Nr)d7EPXELo-}f@nMl_!m zr%{4yMb(7q8SpeXH)dhWjlMLljD2O~L)&obx=Rw8?~!>YRXGO}2!m~bq~8NE_?RvI zrpDoaB+M652_(`r^dGZ}Ur%?9Y4&f-VI3M2SHDKe^%L9k1di=Fb$7b-?j(R*4@u{! z(<8#~NqEGy*lEc05yZ?9oKaq^ci*ryqqruej56iYNfVq>niiN1_1Y4ng(yM4mp&iZ zaV%h9Q&H8ttXvzEKV~IC)Mi8dj{QEkbQ+Z#*^MV;Ey32x=p&ay@9oVP`;IWER+htO zC-n0et9!1q@Kas%@VR(s)ybs~&oyW_s}~4Nmfw@4CC6=)uFS2TH6+x%sp6Jwo0o0E zeY49Vm-OS%**|v+P9?y8V!hZ$k}3}Q`hmD#nr-c{yasoKrZ+vU@-##h^q_wfma|oi zV!6z^aYQ@-N2_1P@susgWA$yTJ1MsS$IY2jui$tkE8xbU9BgI^VkbUcmhL%Pa<0PU z;i3Jl_&l>f8zW}fHxwD!#IJKkR}NLEV$9rkWnxRj1H{p8&3h7>fu0z8;q_$d4{O@(JBBYc z7n~=WYZ<}i)#u4}yq5FQ>?g+^(^RRnyE}_UHr}SMx8DoqU;w1ye7LO};P_O|oyol~ zhe+)HALnYO>xPq&MEqw?603gyHdD~Fl}WbgCYeWxXwduA~cqs}NjJ?u>*= zu_o_BHb;Tq#AUWw^&cfxU>l=T9pw9A9Z&anFKUE_#?4=dUFL)jYMN`JyZzLJtNM>@ zF@7{(mVL-YcdFyzV{CWuW4;L7rl^pSnoZxk$aO`Se0bFR#{I7x;UC495=GwTfOlH_Vjr?8+b=sHwQxO8PdkHnIe&x# z$MOSl9J4wDlGUrye;qd(;wa61MkD4o|M{u;QE_phT;t-YA+J`)I^FqCOpb^4UT0Sz zPEcaS~YO zD@tt2wPli@h&ckF4Vs~bQZ-nK;30+Nd4h%C9MfjoFRV%rR?&v?m%p`|i%>vk7t8Hj zVJPRJ^Hc*h&E~_4fEos_-v8l&c>z$ zLgN9V9v^yEkL{t%yzRLT6X0gYg;&&niLb=zVRntRb4#141LDG}L%i2&tfe%~AFC{` ziK+>C@`;}H`z6M#6rk^GriE`dF5bkezA)a@RV`UmIXG`P#V=(5{cv7VrAVAIWTQTQ zzy%SR%_q$px7yBs-FbI;?QO2i+wf9Ij@Bt;Z^c&{ajc5bdyX}d zs^EYs?;?&Qw5ivzNxpJ`eJ z1rOsWVe-vr@lkG8_b7=O($`#pr3Li8S*S|eenMnd`JBsfg}h&a8f>$NXTuivEuvup6_`k#u3?Th5oyR5fqP$I9zD6sxMHtKSaw zl`hI3U30x0cP$-K>1O&?>(7GB5_Uf+#1nU-^?2$MzA_}VW2r>8i{uw}28JZ<^A&#D zNny5MVo6p%P)Aao*yBxe=@r|av??U?4Cw*=>_}kdLD?;O{PGoVmkZAVxt0Ur0Ky7# zwdL5E_%RW{qTi3-je-V=D;wBw(5utGJh9kdRLaQw_g(~!VjUGE(%3T_i2DsLH z;;&2Z?CSprZOD0#yyh0jF;p>E)O~KQA)tHdR+keCYTT{7z2x}(j?7gpES=(;V{s9y z*tc(p+RG|)A@3Vaj8KJ$%gq;nV>aX!6!1KS*MSt*Y%!jJ?;4#4O=OW|brL5P!$JM@ zLn-cy-CH-3gp-9Emh4qEul^1p@!Mt8bOO|NHQCefPhiu zf{&l$tF{`UTDgC8TMYlZWcwI2HZfkUcqBg-T3s{0EZtAS|H?3cF5i9dtfI=6ZlIdQ zWc@Hbr1)&tK#r@jHB%V%vYIV~*&}qjh>_baz9bUkQg**lb&{3j32|`nuV89{ZqKz#6rulr5^aB7@ZwHe~ z*vJiF-KzAdo2ifOhS4p+%9SonXIS0Sijlpe5{0| z{^6w(M`DLt(%K*~Nb$bgSzU3==l)weP9{S-75ft#FkiEsq?Od45|s3RK*lbH8L*Z1kJhN>;u@wh)NZb=j`tL?~KY{wb-LF^*}OW#UyR1ib1 z0b+PKJrX+oU@lzzK4g0uog_U9oCW3i7J#8$o?*0e&gY-PHnVkMZPAWzn^d4)%djLf z+DES{x92BZb2M9%(7Fn50HW( z;3{O!JXoMD^0({rhhG8L8nn&nDj}(DckgyjwF{qZVZSU{U7gFwhW13!(Ed>xq$B|^ zyUXX|tlopqYxvrDi^$=+sah^hv8eDI_AUrX7$^7T5nX#IgVhLqU&?jZ_~4&Q)gHO| zn|1cgZmg80v(l6DoIrj&Gt^sVFm0+?$02!x%hdBTh!o}(x#zf17uiKvE*5)tuYHr2 zHMvbr4OpKarAG(ggeW?B@wYGgmElfC)tk9Ap=nG{jGR>;exxxu-x zn0^`idW8y@IewT@F*&X%Y zsc=y4zG;u_{Cz7CVB<4Qvq4I@_?6FcGl!jYNzn{$5i;Z53&r~leL9{{^Y?mPUC5GQ7@6v5%_qPtX-y2NCN zoPM`q&)a4fTg~H5i^JjUknm5!%o?l0mKjA+gB=3()(3=*HBB`W$=kF{4XyBa(cF=X z&BsIojx(_wehb0}=_^K-4-&eTJ4~>eZ5_>AgOX+RC(Him(1XOk;=KaeK4J*!iE%R{ zPekkrHU9plA&kD-G#*4p42r7jnEzY%3`P{EJ@(cYBnjzSj9jXZu2fMmo#~h4K;7=% zS~@$_26PQ{pYWt1o`s|jt)qL*3yf-Xzp1P*eho5kB_Mijw z03IszaBr;7^|g)$Q#-`CUyl#Wd_PO0#<6Ww#i~Tw(3+T6 zno(lp<7hG8wlI6$!V--mqjK7k2ok7ThWB|dGx&idy#>loA^*1KFvxyNU7MzM+CkkE z(wSvXzWDCk$SIYSYkCh{MUd(8-0J@V1U_(cyCrH7euJkV8Sot3)_09YqK;Nf=w6rp zeQhwYTt02~JkO90_CKc@`3+~W>wVfEE@zpyLq*{P4E@Egc%2eQp^H8 zR;dM9+j;lByrm)JO7_9(V0n22o{IwSfZt|eX_Mk-@LAmo56!MI7g>DBbrpv%47*?B zAC0hgCb6{7wEm3Ju-2ySX<>@Z#ndKM;5-%?X@lhdhpTT4uWVbQjeE!H*zVZ2ZQJay zW81cE+eybs$F^Xn~Kl9IC-?vuHsyVAhjjHk&vqtk`87}M$hV%*hXT=6O zh41I&hBMHDvX*(*#(cRl)p8wG>!TlR6Ywnke78Ux@30B7Q(uvFZ;+)}pb`=Yd3qf| zE(Bd?nuTJ7)o@a{TO+aNIZET=>*qMm@z+mWWiio#X6JdKm2op8)%_ry@epB~hX8Cl z2}frUtwPL-mQ{bB9J@u7_*LR#F2F4$kq_aQb!;&R#r!Wt8hiVx1 zQ>UIL%!YPC$gzE;9N%N~_!VI#dX(WPJ$0>%PZASo2>1X9AOS%CUFhV&_9)mB-g0>9 z{v-+4{Pd-lwrR&1WrZE);N4-I7Wvno`2aBdK7dDpn23Easx{`?lLFyd9Og`(W?f8R zGL^KELY?Bx6_eRwv-#S0>osGAn%lPT?`2pwk@HFQL#v4#By%tP9PdYUh;GCUjBSTS zhcu;|$3s3sMJl#v7kOiQcYORd1YiJQ0UreX|GOYCgZQ0?6Cc43($KkJ>m<*E8a{}* zBLmW-#q}TIb#sXV6%oiC6hdJn*w>tRp8RY2IC$w!7(w)5Acm~|$C7@@OtzHc#RNL}epstVG@NyE(iTj0K~;Xr1B z`ZTAQsMN_@epy{)RpzM(<3Kewdgn%IS`)C=6Tes zmtA{@a6oR8+RopOEsL&sPv-(>}`2a$~KK17*1B+y*ASney0&V=aPx5$q z@%G<*&9JZ6$k&w;!Op?b7teLw%&Ro2OI~x-bL0G(@J7<>85JPc+BH|t=}RHB^H9s> zW})Je&a{@Urdz8Ha05kpDhzwk%4L+RikY=pfPBl{sy9#XEcCZ!9(ZS=csnEhC04x% z03gfgE>t6BdPy2CrB?Lhfge)J)KY{~%+>7P7BO_7($M4Ey3F53a|;R_<4dEvA-s&X z-pG$tjR?Xz5$&f)4h|M#i&u|NXNWqO`?|vb`^<@!#XUW}JV*3x8#j{mP^wLdfSJ|d z7@0Z9$f_GntCkE8*MwrzLT*C7DbsL-YRz-3S9_dl&79~TQvAzm`on<^CyXW7zq@o5 z(_SeUITb3Pm(q_SG1x>01Vusq&$RS_fJ>04Fm@OWk?eOI?Jy4v+_nhM$36dgFMAw& zLDZ?!R!s&&g~s{IjGnR?z~#9=QXqANk_G#0zT`})p;9Th_;Y*RsBWp6z)gn1{D^_I=&E0( zjvr;ZKFP^W3W5g?k@@?0;sXF*`BGqb@bdL^m$9W)zymYlIeopLEVW>#%ISQ0m8RQ) zn5L?IwUjF^dTyF?cKrxS-BZPqV>9ig<(WB!wIR>uVNKG+0x(@NgLSehRz7Jm!)`32 z+rO;kEI96CM~!04nkKmsP6NNH@*iR5o8cVoZkW`b!~topyB#vTUv zH#QBz9En*2B&K$r-u48n%b}WhDO(@DEpCxZO7X#^d6DU80dBF)a3MQIXWd7By_XGs zSnyB}U>kAGr0P<`(bLOKUt!<_B4rRig+g)a(Ar(FgS=w!p1mW@MY`YCn2yUq=x zk2Q>OfvEMB%~9mE^^xz$kz~Gx1zk5T=txt8pwcpb$XETXR)49W2|6(U zWHSCz91DNsmXuRCsFz_-Sv5Mek5RMJ5+ajwq4CQb%wf8Y?B5@^BM9`ykyk*dQl?NY zRN;tz7B_+aTO(}+J2cbQw2c<#&;GBs&BvjKZ*#h>wt#ijs_vUF9zT;3V-^)4mWS15 zay@?KEl!#~@^u&WHeTO&V;7ytEG(p5j zdlN=KY)=r3j{1p-=p0gokHF)9yyY^P2O}U*gJ^B_4B`h9zvWeuj;IlX@I!J*3MR{y zpsXRUzv+Px>8CUgK}{!hbV(+%Te4IyVvU%}Au0Vqaq|Z@1@ZOyYS;JluD9x`6D^Xj zTsrU9HYPPK7%jB}ml5}KcP>zsD#)t6bR|!YvF|)~bHF-AkB4u;t*p63>}?YS90 z8#OXSRfdZ1pv?Wi;Cs!8ETE2^WD)?xdek7c*93B78E+LuI_lj^HgWytGPntJdT|s0r|9L4j}xD7 zgDdyxS~O&=mfs3D)Kp*7bvLS~&E_!2O+U{kBGYMoWH#r`U5{H$qrGlo6-xIqZ}wC$ zPp6E>vZW4^8s^^mAMt)bL8MsI!ZI*EB06|{2b&}mDyttdY)+wT42&3$p9CGbaB`E= z_`0M#e*h!DYR&xH`=Jv>*s`Fu)b;SnmMPY4Fgot?IQe8|p5whf+Wa177sc$7_B7D_ zy}U;MEAeR+%p@N3irZwOlpEK#kzu|^bi8ZmgUK}EdI2ZF0M*4RIS@kRr&JE~|IP+&1bRS%xS==#a!h>8Ldj$dpX~2|XF5*~zBoIN4&n z5!D0DY{J}n{&tN@nhrq@ONk;9DOdMSoZ~4;e~i=W7Q)w#qG#409%iYL7 z{l5R{sRwU@RmR?-py@<=pMu`0)c#Lv3QKM)rUj=F<@`+bfqEAlKVm%tptKn^UC)h< z&3a^3l+>yIk`hxyD`xq@e|mN3tRPy`k&)4xuEWNQ>n@VkI$0W(UXPWm`J{j5 zw{9&C&LHGYF8Cgbz>_@;6>Zw%R|Bt^=rzFSmwx5tpEY7u-~~RXfO)ugt>E2v=CecI zic3dukP2@uuQB%epeMg=_-Mh}BwIRkLrzT>$UY)`4FT|h#nM06hct^<4$Rg}ITeS6 zU3bkLdZ0=qY8LQS~grUKa^S(`R@>&!}+ z1Glrg-Y+b^c-`Q}tc2(dWzWmX!cFO_)@k-yycmtb=D3S@@0yiUwO=1^_WC5_UA5oc zFcgJvU#D3Dq0_(6H4RRz%(=X#D!_heS19zmbLnS!?o`W@BG9UC|2TLoWBzJKn8@lul*+CMiTB@ne#B4tmAbr z>-DUsZFOIpFRBN&>%b9=8u;_z>7I{qh*yfyw5(MEWt^;FOMZR%xWcViJ_Lfef?7CF zPX~lwjyh0vk7g~w>kiLYTA2D*VFEh_Kx%GSB)f`->C}G`-^^koa2fyQJaa<-eFDZS zAPV3sPdN28ky;EU)lIOd?OZQ-lG267z=2cX3fxe^VYRElY5V1FXGoGdlA8jSFhiVv zM))NkJ2i@d%mIr49~BH8mN-o++$>qY->2`Qc)Zy+}34?9FjYjV5* zAW@%ZekhCG`6*QFOd4%J2*rZ@Vg$$mb|0S-NayTHc+LC%f`S=EGTBVFGC6Y(+-4cP z{MplYp34Pjnh5&-j@yHB)03YwGqankpD#F{m$zRu%+Wt1WmP{GPaFt%)=#f1)SEwo zI-6<7w2kT?a6g{>(H^_=a17txO&MQ z64(y5fqHPsT=e147%%1Nv9L;GeO=g62*4+`!1Zz66qj zg6oeLAA{~Tow3bE$5oQf@YH1AVrtJmx|?v?^+@8=nsVAlZ$3C}I-gG@1ipr7H$aACrG;{j6u(lj!f=>HC46C0@5! zY|~=+%=~!C^`Rs@-fp_3FEZ=_COff8jv~O9007%g1}zT{!=oKtPOCjA@+%O&4#s0& zUSBJpqd=z?Wb*$}9?38;7njq&d>({ILCE>yS+h){R0IlKB`!0R9^@VD0_nVm!JoXd zv%CF9PeXH&BV9`MWRj1#ZtfvK*fGL}4aa8n%?9qFW7bkfqeUuri)U^6 zv*_QVmYBz&v7J| zH<52Zg+nmcI1m$4ITi3T%rtaSRd*CgM&3BIqfTHsJuA&XckH7uK38=X4grX2 zYVfOQ&7zzF+i5j#z;z6vS+^Cy4+d1*s+EQH@G;u_`_;2~R$f)L-E!dMoYRSVZ20~5 z(mR~f4z!E60rXV3Q11Xqf~;Y7e$9SMRrHp2LcP{hd|?oLDCOwuLdxdK?>8sqocq%wgy zrA-#;BRNO~-|JZ7Sdb{zpPl^xBVqSAg4PKVDOb1EpE2Q#UVe)!OmjG*_yQ(HtxwZk zBeNNyCDoubUR`()7qxcRqbd~|?fS?}wlT*;;n5#wqMMYwo)X2gJ@T9#Lv-!tp=n;W}Oyb~@hh-gg#NwcXz-X}L5#?rf!`sN$!$ zS;Q!y6EKD3ic*x`%hHns>TM_)hZDwtOk0AFzEA@|Ph;UKTrvZ&2hOukKsO>0$b0XY zahj24gyZ+5;@?mLmG`PzOTsHCXdoSR5Wi8CjK3(7`oH?hLn(fuyYxGzQAlFn_XIQ5 z$Ob=$PoCoFTl$x)wf{AIswHEhy~|1UxHOLWl!cG6>v@4w$5mf21ej;3KFB>NYJM+R4MQ&rf-nWKxBF9IizQhY4&T7M`V#zi0cBuNvD|cM7i? zQ>Ee~2roTE(jU$riSDMR(a0ap*A~w~dF-1R!@DA;!360(tY0L534!q8@jX~auUg`< zCum;y0Cp73Vr*A(lWNN1hJwpJd{eedQQZR{a!|kEbe|tgDoCHkLAd#mG6$nNAV77> zs8Iaa7L3i?0H^A>j4EUCa<}sjZ?!n@C^Eq%RxNTGol;;Y+$g9YGkCMn)vy+_`Ab; zH)$aW^(j0;Z;@T=elu$gx$4bF>1z8Rw8mN zR)|hLE-5K2lsOf?qMeYQM1OuHks@zhSiRE>+^v&_n;WMUS{Mt}ScY5?2KdgLogI32 zcNZBM8AZ)gwj=}#cw4hbt%XjrP+{d94p&!bO+9O|wQq=$krBBwPbA;>fUde0!E^il zgU_;pfP@5`U3egp??$HK2UScoHtz80$!RHMGz_U5mp;}9&5|bgTh9A;DE5W2qM|~) z_r2ZEwo}Px@X^Z7&b30Rr@pCMW)0=-nL;8ZdKh$1>+EZ*@_s7aU-}nuIP7Em7A_RM z#r5|!h3AIhlLy}v`)J_aJqSh0DG}n!6U&IrA&+Y%k&VjCpm>AoLQGQ2oR-&J1HDH6AUD)FPYjSFfpKN7;39!kfD&PQO7p9`;d16k%$CB zB?Nz!`VK4GXnHBrc_n$;?B(TH@MEOFy8Q60T|`kFKFAnKdNVD8UwpcUn83%Hf&duK z4w;mkTfzhZB*k^+gelIa0G}6co#*tK+iRDTrBJ)^<)o0ZYRt43&w}L1ma-s<#(6gV zTzj4cyhxOuAIqv2k^+y^?W@!2wel~HR}f%0H+q~97+{Yb!y?i5blaZVy@}JSV$x=zDEB;f|hwefm~+1$7|jsT_jm;N@}!i>fngul7FUo8AaM zx^lczXwqk|AHh@Cd}#`ViZ8krFI%#Dp#Un)$?K`TW_vL=uBWY81z?s6UL-Dy}Y z5Xz%q-K@^JvV!_(1B8THb;7gt{S@Vqac5l;-_Jj9zFCTnVb>nM@ zu~S2HHk%4q-vg_z`|`eR_ZbeiWxz(LAlJ;s#@IHv2MK;mCblP_)KM7Btn` zi${tNSiI!9OC0%8iZcQU32#2Nz`P!Rsv^rE1+gBB7u7P1iC{Z*dGL5G z{7Zu3+p~OFO73oGE{V7ycx#?85@b8RsXTi#&{7^ev~Da{N{pFAZlBMHdN-8u2SYTr z4=v-Q;fulgHcWmHES(DGsx~?IHiH2mouq-!S1>jaHTF_tk(4b~`ZrKN_a*Po9dYn= zUEJBdNsprF3GgGlYY%Xx=-R*?u;*q512$c)lO+BETKBjlja65d;hv7V+aiBweS*h- zl!(NaU?TP5r?k>L?sw5xzxQihOL$(gr%O~DG#Ig+N2Mgy)XJ3`8W@b3Kxd%%|34ia7RGYd4BbMmox{Nz(bf&J{+*EkACgK6BsW4St{$#ALMXcSTSTm@- z13;iEreoxqhx4-tNwnCT$x+tUUjGVQGil6oQwkNgvZ6-WFJ`q|iOY;%ou7y7)T*4e zMZu2levTO0MLka-=B{q5L}Oka^A@r*ObyGuZE7f;qIb3B^TEGjHCg z7C2?iw9M(fxHApuKj$R5>#$fuuNa1KX4hfl_ z^UF-4a3h=@?CT2b^W|&E{DDhkz+a+O(>e!q6}f4a^x)z%0xI;B*ae2X9q_A*jW>hKbj3%2u}x3Ch_&F%T)+9Ean z=4!NbdT$_}vA8QZiRybbb{PE&0Tvj5YcYbRbzv`&!|U?ihj8(x?z?>c)Qx^8iYSz* zlj?5JbJ7`j`n%)qX%>a~lKF)@qy{q+Ob-N)B+^X1z}_Em3l6{sy5aLHp!S)|@uxB-|^Bq`d=;-(Qj_uw0tJd$e z6QD{+V-qzFEua;F(lrsOaxBN&b114bMi+WR&Oy^**0o+1?H91CqHFC>yxlX9lRQ9LRujzyZKNkkuS zIgrKVRpnQE(vO9%a7DXoHhB^5Hm@IT6g=f^yF;|471-p zxva}Bdr=yov_$+E0e>uAnS;MuawfPZDgd)8+qM)%e$`28)l?I}2rEaIP&E+Ep|DJB z?8KaiDLFDRF+O=+z4X#5FUWcH+e4f~>;7nM}2ovRX5) zljXMGKGE@#wHN1#FB6K!cuN13izhW;7^PQ9#0Wwhx|h^n)J3$Ik$_SKQd*VZBnk&Z zggl^HPS-FL1R)a%8RTfaCQmRo;aIVuvr?v22v-Rl5yqv2Ddu82=IMjDJf0}5^ez!XP|QnkSYNvEs5V_|U>{*6A zR1HDUue^;;{BAE}zETr_?I~~uB-u62dR5=2b6e$D-9=Jwx>w`tQ#{K2B@3Xwl8!9x z0yj&rXBAD!SqZzzY%@nZiFjc!wPS3L^b0H9FsNAAxVV^j^XsKuzrTO=e&WSBuWa79 zRtJ;g_PVnz9`HEYg}44ZL#z4<5c2wh%SK17U++wzlPX=DKToBlK}R_72Z7GYH{Wd7 zY`D@*N(u%+5q=5TWiW!jZ;Sv^VXU7&f*BCz0^ds^ zafDRr8QNT>HsRtK=w$oj;%(w|Es&K)M{!n8vj8kg;Xsb)N{2zui|q=XXbm_8 zE2YLhf5J!n!pvv}{BaZ9dTr2YVPaB$+n~ig2 zn@l^WKJXsCCtxwaT7Po_W~8!7pu|K6GME~Rm|mVQ&VGiR@jEja6RRH$l+-Q|4mlPxJ1i4)rqSbIpk)|30H72f;xQ{K7yPirl=aal#lEQ)HcYWkyl!HHLj zh~l7c0n}W^D`;3C?~P1y>PyI)q^@3SgDnBzY6zCm>!)Ye{RLQ4LoyOs(}$<=jXcSd z^QR`KEHA2T1a@LP_MMe6nd~zL73W%>?=x1q8u6_>jeEyXijHJ!qgzOdhDGJUrZz|{ z`2OC4U5eUv21fzH5-rg4h*K5~_*2c+U4U|FXw?b__Dl@*Wt04CJn#2wb&Y`=#>o3-0XlxT>o5mMot& zF){Xb+3IA3y~qjgEx4^g!Jlfh&}Oxw*UM=~tKfx34_HN}snE*mU9- zo`lG8pNRILE+w+Wy?sp}D}5)Foke?eYg?_)yb{f&;CA6MbdnCGfJ#PZkI<79)QO&N zkXTVz;P1*0W4iOr6j)U+2XsRes~XNV49^1^2N48W5dW{7AR@`kB^+J*z_m5Owy7`d zUfhA<`QXU}Gb;*JC-KnXgJdt)OaAdTE>qYHTDgR7gW1X{YUM93y8vavs$LQ)-9% zJ0}ODH~`?giBfy~bxILE5VYMu-W}#j)mmeOGkO3!R$yjBnh}LSL<`c4dB)LBz1I*s zIkku5QVK&%b?V;kW|C!>(|G4E>|Xh0_U#~?YzvmiOh<`9I*UPS230GlOBH3mZ?&sl zwDLIH@hsqb*lw*qZm#IMy#&ZqeNvD!NEA|NF~WO0?YzqI#{!!qP532>e<8HZ zsu~DVC}mzQJ6k$i(DYl#z1OgU%zi-N>Y-*yLEmvC{*0nz0nU*@kcEH*3PTkQTSdB2 z&`CPkda+uscF|yiX7*Uu^ISWU3K%g)Y*;R>O6 zyi?ObkZusS3MCaIf!fq7Zs~~Wz4i6rjejkqM&Eoz*Wf(gk`k(LA9K4h{!mzJwl{C3 zy*g#NG?iI+cg`Nnm@!i^Gx?kCaYBCn$SqpUBkZ2TCx9ZBn&uvxW#~_FEJI#yQ4;j^ zWdXT$`mF*<);GHsOh@jM4Vhs>VZk`>MBPqmvs;{WXsILj=AwRj442Xt?Cu5cjs5!P zYy8lh2%;SsPLz+&*T(Om6M|%F7OJF=AMo1+$vLsDvT;B7(F59oJ;A9e z%-%8W=YiT$Ma-y<`}K2jwl@n8L63F4D>ts$L5Mw~He+^2-L2(aEUgAOMBY^&50h(z z-nA(4sGQN!7!v{h)FuVD{SEZ#Ko8XjTYa}C-k|>4+`84HgkM%jLw9R3m!j*1(9j@f zlI}<6xpDPkw%2bcOSoo`16Z;hL=IxGB3R&w+Gu}qbOf&_xj3=3@YOL`?a^wTy5m{O zU(H6{^9qv~kyNiRR+Uqo9v%9jT@=?sG zC69u>)BR>!8GX|Og44FsksZm9yxF!h0YDlYqv&BHE!T$c9T;jF4BS(m?&2O@LZx-J>UIML_u=2PBi-Y+2 zC>#ak1#JOrNk{-^%x)O}@0q0k;GF285&?~4tguNL&CHAy1I9=#1pv-a+Ex)Yw0IA))E3i&XHL7|IV4* zH=X5;uia~ty#ap^QuAaGasW2~@?zO|ABZ(prP6SE&RZMD5dE}kYb^nH)q|@Zp3|-X zVH~;zSNMY#GD_!zbaq}7JcNsG+|w6`7d5b^GI>olI*DVW>-}0+?(HFe{~;pF96~IP z;Qhp5O9RjiQV;yEqx#kn( zm_po6z-YWej^#oIIpFq`w-@Bk+-yunQ+07vUxf{@r`W!Tny(JSp^_Wv8A_yW20!a$ zX+G4&Cg%Byn%e+C@<`WWHEHnhN1me=!+&6S+EcwJdo1+~vfb$y=?0Y7gqXr`UTl}@ zdjl{X4B`;^`oKrjc>FaKk6uh}0ng$hsd4}0`|x3ZwJLy@;;2LZstqS=eHA_PPduwXZg1OwFpwrGDe^fqed##|)|QS1xT-7%~jO zS5CHkrmO>yLJ;ec!4ptsaw~$oaU~7pSuH!)ZBsvPWEx+0C>amU+kggk$cN`;pgZ3h zkMq-pyyNVm@=yl-9arC^nHHso-veLnQ{R3!7S*L7w!V;{VPe+<0p4EwEP!*;NlXVk z&Ld_9u`PhJ?~!N(%ZuEDcZY=|!vid!kclQ;)R50GaT|;ExjN_j|HoW`2iab6dHVe% z+5HO|N{Li>td@^2Pj-4W(y7#7>PqOXFb6vf1DMnRIFtZ`U(sLZ+b;jsm?tL71`>N= z3Cj;^Q#T%uC$)`8TS=KMGDTRIu0^Nm<8Ig!Y*~ zr)J2%1lpo=jbqYIN~7>MGBEk8cu+_QPr^v z>K9fzfY;wfEnVRjkOEU*!k3`@H!<^zX6XAI0mLT9suJQ3irG0rQ)~DH1riKAW25HB zPaVr}t1dvQ;zTOLpf<;_Vq-ua`EE`+w)BSNGUG#FH2;-?m>qO%rrEqsl!j(C_4A-# zbo8sxp9RX_{DU@rRGY{7jR;6T!S`6u2LUIZBL%XLY^#lDbK`F0fAde# z(P-l|op+RETqyX?t+C)xARP2SCd40d1G0Ti{3ah0D;8oK4F#Q?^a;a+&lWKgpO^|!Bv#T$qW?z>VM}2zS#n_d zq$G)Lg^~G*wwpPe+2dK{@laNY8T;}?mf>p7BM~#(sa|VlL(em=8WdtvSTi z*;Oq}kIx}$2nHI?n~YGzD-R$A>ptj}9}`94ty4-aa0^>LoBx4Ar~I+4oYG6qmawp>1Zf3W8iX%sEG*wU! zrnNYhf?Iasxb6sX%MXku`Wh{S|4fjtBNZ_RfgCglV6b*29$s7Y^Ilq#_NlqC70n2h zTmIm}2|D9dZ^MqRH)1?NGLzdnd48NKVVJx}&*R993D6CvTBzFdmEb&2VEQ(ZnSTyT zI?Zp;owi~4nBn%jEx)(!AjyyN!&GyB6&9s>v1fHGCkh93NXPqeS!a-o!sv=6s4815 zdRplsqwCvt5kdEppzINfnRBDg`QuZ-gndWhp-d7IlWolf9cKzwXsu0*>_cnlgXi|4 zGK8|J;$+Xa@FbnI_MH_HjGr@M*%YkGsi~Rn-je!IQA$v|p6J$(D$pgU$JHQ4(&-2sq<=u?TR&PBh5-{

frZ+ILH8!()LA%+<`aSVZvWK&!maS5||sD>vRZ6 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

un?c_Rr7ne9U|yeXE~%*7$L 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

0-u9}tx|95 z-&;>!-b6;zsguPKD=>M6EcB3((R?hKE<7eCVx{;M`LxzyLp@1RRXp>3C zXf@v)b-B0uvP}|)Rs*x`mXS)Xppw%EW|(lz<&>_b6DcCpd$Xq-~8Y5PgEJv-4UHcOee zpj3#gR8sBSO#U6*cxng64X{6O>BrS2$t#Vhc%QxXIO>Dy23O+8S%G^d_G#d1{3w%>=hkGL>@;E6@L8QV9B13m+Z3)(d<`d z*#nJf@ZvG5;>rYIHkyxANU?)b9GHYLMGEbJ4SwVeXDb&Qq&cR8eN*O?kyy2@^Yw-| zwVX(1T^E8@$7HASIV-)Hob3~5X9rd@8ZgVBf&t~Z_x(FvP|oq6&m0`be@ayNJ>9B{ z2E_{qk{$MU#u5|ve&wD!7pjr`lu~Bx!=C#JxtRtJ0LNZ&T&z~AYCrTa{e!8-FA~^Ia+1JU0K-QLxGq`}bGmXr z$cJ*ori}lE6YNHOEwA?b;TjG}5UPAJou^&W&r2|Y0mKCGVq&9a4C|W8;q|$sxeQ<0 za^SuKre0;ebW0rIk33dpoa7CZUZ$mC&y~pT?hME;B~hs@_F1L6@aJLv4ubWY3-S#Y z=8or%c~jR#B5E3)0-A8f;9dI7BMA@0Mf2%&o~$_GAJSIc(+^bAb9vA|ap=Z4XUJ4(JGX8kf}3QBO=eXeZt7R|6dAw6^L6; zAWJy(zRq*{6QU}9!koU%ovmi_+of1V3B{>mQKk@NyQV*{+ZuL#!u497ZKN^APz*mF ztMzDq?6f>hXmCsf_dl~GmqF5gT^Q%Vq2|}t3@Vi}#X1-KVh_RJk|Nx~55`q#Pon3F z!k;>>ca=iH9qu5k-6w~ef}LWm)ZDLC)Bfkp3`=w9B3;4X#q9kz;^M5l4$}7cO0ESDilH%=D)O6U|=?4gi8X$63Y*SZ5PX zR>%ssS9xTHBQGa6uj@EJguH(aE3?R(?h&K}f*ylV-}A`xWlZX*UP7OdV@ri}9oCLj=jsh(=0p}@j|-y3*Jw=vb-f-YN=qG;df(wJQoC;1tFo~pSQgZuR=}?$4O}X?FZ}1GER5MY(-^T8zM)8Mw(9)T+Lt6Y5-?nm!`;P9E)bM8F(GG zwiBz)Y3+ephB?p#0Jm)=Ws-`3g;;Esrc#YSV#xz8sKI!pL|QPwSTSfqIk-B?EiLHu+D8H*TMlA5Lpg-K zeWBW?7(@M;k;LZ5j_A%rV@(vJjFqe4C4Y-#As^I z2V;JEx?cQRuW;#jMNmUCLx|VPZ@#CMS(GBNYo_3T>yTJ~lSdd11m)ohP#e_mDeq!U zMiP>;RvLv$J|S{W-A!ygz6}gr+HRdFk~ed7|7)Ik!?IF5KM1(QQbn{00cyA6$x%J# zL#eb_vKBB#4v&G*r?%@x`c(F}GO;(CjrwT$^koRfGRhHk#|?ffM#+pve0SUN(mClD z^(sLT@S>GMY&(P{3XO;#-KN1S;YG)Guqs1NXf1Y*%GC-|a{1l5mhw-!YD}&7xn|!l zx0+&ZP7IOHj|O0SYd+l(2~K0?{vp?KgV40OQu{emTFu$FRM^reRi_jFc*7-PZUpe) zy!NJcLuse-Xo;b$K=f4DC=KWn89a2A&M64*G@}H9vT+e<_!gB6&<4_Gun{e$4MZPm zjImkUUtO-%)rnSev7XHng>x|y`RS4$GS@7_nhY7hmXcT3h8QHoJGzgH5VH$ef;tHl zj~IF}Z^qr9dgDV3u<&$^_#K;*<5;Y;;{V`c9K)_Am^s6z>#PUmOxj$o&~ZI|(-^pP zR~s}R(s^2t@RsS5fX2(UPxs{Acimbll5Qb3Jhb!BUrHL+tdP(lzX(bx|6;tFZnlx2 z#hPA#@~l68>}If7MgQ9BaKvru`F_M+JSv}*$z*FuWH;25ckZ%G67`lNJ0Q+u!+`Oc z331;l%M{L_5}a-h>AhKQ-S!EQ-F};XhV{UB`A2%~G3#`ZAKAIa_KM))bJOaeFIy8$ zlFSY(gR-KSOj$&!Gw+)R`u^VX*cec=feXL#x)2%v{+vB0=D-@`W~K%jNgu@ObU_=C zI3U(f2p>d&i%Qq+p0hl9v_>P-DW{C4Q_whI5H0xDXJcBF>rf*<^AEn&|D=|{=Wrkz z)AjRxk5LGkHy~60lb{?;_Rpa==a)bHEAMMRV$*sL!(7eV6Pp!4p@1CIZfdg z9}n7Tl+9N6A2z@5*zHoO<2S@aav>u(M~^c4xt>Hc`(=xT#HY+>$`OeIvf6a2M5#90 zN@P3kP8V#&&7k_fLzqlAz4d&?Yyg&cv8;UVv%e$aHkmJQadKLKn4V^tJI3N^1+Umy zXK4r~lNnl>NFpY!e!*F!H;IN3&Uno|M0rz41e!&X3q(`=EmlJ=n+SKLLOTf|E1OY* zrA~C+jorpfoza!zev}8K8e~*GM(8C>Y6%YLc@KV7+y+`}WE!Sro3r7e#Olj8f910UBC z(h^XiI|}gG(juOb=rq{*>yyv+F6_zJ&9WFlkOkpFvO-6@YkRL)x6%gH$sc`4zPY+^-Cry*H_|s;`#B9(pV}??R!?Jf%yn#k zpHs?R`zD%f*J@1`!i(HJEl6=sZU#aTYA%72m zKbqKiK%Zf$Gm~vAm01fR@NDsECXzZla)5pq#aPG=aO-8N<6-)i+Sx{ye_Q3XI)4Cq>t=ffFo;O%QS1()t{V zx2ozo2};q^YQ1(P7c^gJz39*B{IYr&{rAsK0qN_2J(rl`=sXw&5h6|6ojmI&*_iG8~F3*&QzwW&~b?m`H^0)Owz^lyO8P5rxu4# z^o~}dmbU$}SX&5=F#b%`y5Uf%x--UJSz)$xeOGGZO}SN-kJ0hAd)I{9L!~P=g~8im z;OWo4f8~a_vwPH><+f|cBrDju0p(DG~c5P7v>`P*}D#Am} z#kYnT6gtZK`AROr)CoEV;_q}9i+d{q)$g}^&re$f0KF}-s+OHYP^y!~AP4%@zKIk< z(EB2NK?-wHkHr?L_o}h&645An_qlnjx|xfK$?_dD=kVa*`GvAiVY@~LxX%XjJ0Xec z>tCA0VxkXW``aN1O%naw$yB+uouny0WnJ0`We->tHiHt}IGV_2y*@e0A!PbHI6rd4 zZX>AA%53_<=Yu4vOSS6r`ap@g(*a$33KWjy+)Lb=Is%#E_ylCu!6jW0t`Y z@$(WMO=V+a;JCbPJnc~L3qvE5GY}K;K5-@^i1^@|+SfX`f$R4Z^8~snsSN9;4i<~X z^dv_9DX~Ie^$$UT@Vb+Y7{aRK?&YClYb2SdAmCk?ho&3<*=Rg-Rr&(KI8%+}-g#9J zv*mKc+k778j>GxBut1%%Crz58T-CR>FHULWswpWc>cNEoZ#H0NW@Ii)g@ljFv(S^e z#Q5ts11U>nFh<{iv6%^TB1XYHDs&|RsFg0ZiVaBOv|6>HpCCf_yWo}>K}kcf=+45h z*`BBmpACyBrYE|ncfFQ6n2(jEgM&a#vuyk={4MNnX4|CHxv4w?T^84t5=N5&U_g#1 z2p!|nTkIH0QoFN+gnkdX>U3scBp8Cu=nFwQ`Ffs9d1`$P2Ug2S$$b1h4^g7{{7Hpe zUBD_k<26eB5-d{7u;6|Q@;NiIrLpvS*f-gYzqb8?q$f00CaN~+8WB< zo*8^E#WMfQOe0mgt*}Vw6BIf@n?L#tDGdt?yRmI&ar?~N+TT%`N2v9F{UKkg{Xixo zAuCFHefQX5tm3+E)9*r#Oj&@VkaXQitx?sli_+zTM1=gt%v|TD4=O1*BX%Q=GgyDS z$~~sL@X&aRPGJapn%4t-8sGo6O#2P3H#t-jo%an`$okrTop0l+3ST2u3a{1~Kll1Q zl5WS_ZC3FbAELQPe*F@_IWt6qO|m_2yY`6^(2znOiO-Ddx+uUPh7!_zk6U3`4j zxX20IPAI3K&#|@^PQq!*z@|5od3IJgi|J9GvCLfBDI!=Ox}zdA1_=qa^J`~FxxqMv zk)MJQBe1~xZh+#rn?Ox_A>YKxBXF)4=i_oM6h(zSs<`Qh^!7*{1`Ayb@w~6uXOQ>b zaZi0EmJTy5*~|2CgG~gebXNezIbF=jQF=i!AV?SUfu2amLH?*^ETI$@YGc-$I~4wIW6weZUFCdy=lECJ zvbdS)_Yk-l=O2`Pa?yEf*cQ~LSGt)bKLur|9rEk&Zo=L?ibYTm=g)|nNEK^fM0=-7 z9B)TP6z)!4EK+0Sas*LmPn|o`u>E$At|~M;$Y1yVjPuzP@PJ2T9`t)>)OC?|Q$?uD zhma}Lm4A<@^}E@Hn^dm)rE9x?0G#Pifx&%HydVu2f)nj9%!)_FP%kk|qWY9IyYKX_ zAAcZPO*i9TPq;>8zau7HA(hY)rnr#+CF>aS3vViMA4vl&oiW+5mm+Xe)XT$@ zfWIX2pU&ATE2Ow#^^R%i(QHI$3;_mFiOL8)y#Q+tNG@A{X6CsvZl3IAiI`Zb1*^e} znBoN)*~A<=VgB~~(G-eKi>*!Gm9#YDK`%p^AGeH^KWktZyph?Z%X)>!wTf)$cb3HE zq>7kh%VP)E8y76+4||MxvYWvaHPD!gf&y7)u&^2WhkM0lFZj*S zxh*zEzT^jD6zN}HDqdU$s0!F+l((MDHJRMhSQ~EXZu@>$SHfQe;XH-+Q4u|Kr8Hb& zLgRvNcsH4|p3nU^U=q5UYE_yKAU1-BCDlk|0a;i5*E7T&D+tfwk$DDH_uVt-qZsnyd$?1o83J z%OqJN(K}p`ulP*$Il?fk904#9yV}rIfvYfD5HPp=2Xr zVNg}zyvh1;Kk%oDa{7i+RgIv4=r132C(Z;Okl&MFqyhs2XGU<-1bF+@-QGj(kda`G z>|{X>g}C()$90$o?*^SphlCl0@xf)k$F<$1DG zh>6TY03iMJ(DFG)nNYp&rL@RrMk?+CgrK^CewNM&jm{jE_t0KU%8b#C()kj_G>^;P zG521`Voj$yABF6RtubO(2u!#agzO$lWPmm;FkpN6lKKD;PF;s^>U1{{V+7UnTylI4BaV>(mcrMNS#pn z$uIwyDA>JUt>*hTo`z8(B&F&4-nG8g|+L{`Te7S70@0e zjI(r}(QleJD!9R*-CEA&ex`gQxLj}rSYJ^urKCyhn<-I|;mkr*-fehEAFPjPj59zn zk^FVWTaody5+-s_kfoWwF#Lxqtpb{l|=DK zy+A}x;`pEfPhKK@w#XWMf_Gr_=f7ta5ctrXQxsWmS$k;paG|`;Lk?m zE?JscGZ7MMA9{!jizf>g)W(^NVGzWQMb&Y6KS76*&uMru$T*Q}X6<=h0fH0}DXMS5 zanUEF4MmcT$a13wDBy>1k||YZB9*sDUCe*l^o$6!oGE;=w zu~z#~o_Yj?p-+W;k#WQDRMCW|Yj)kkGw0j0B;r9P_@U-@Nd2^~S z#uueXiM8?Kr�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

2PG-;yRx1flIjl(T?}CFv&Id$kGxL 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ⅈeC-!#biP#6t+;V?(HpSLoG1tj3mcG^`mv!7x9N+oDe3ziBUOJpyfZmnl~uA^ zSp$PiLsX-6MF+oI>c8a_-63wcQ<}$lBe3XufCAD-+w&LMq?ssLS(_TP-1BAI;l0{v z?|^btaED@3{7z)lL8~mmY7`y5R4=%HD-Eqap!L7It6+80U+cesVXSSW6z-6AYnq*n zh&F=MtF*}LM3l)<9zToce3mpFI_bEFwl)%c<$?Mjc7XIqo+=30qA3|x1Dl-k%<$E= zwXbu8xt-YjP!QrAw-||4*M~uCfO^*sZ!>v0zZNKENa=f@7Tptf_^++^Zw%o1-!=~3 z?rCo?w8Rq{lmx#-@8$?s*B45ZI#0T)ZyCN@;6?ANQ)d`Je#Tr4|7;bkt&45JCncz9Sk^e|@)wq?u+LR>QH;0L=PUTx zZ)Q<0l2VoxBlB?2Q4y7^zO_`sf@G}*vY^#p4}uRzU^Ch6)&`8&Gq z`w(@1|?ftcmBPjf7HLlyH8#T2y>tE-_r z42$nYu=&^n7_qsg`=m6prc;JR9lK%UYYFsLo4O1Dy_>B}#!d{Bl7Mzs?=D$TA9j4A zoLv)%o;V53&dxp_c(!EiS5o10E70H#FVSzCQq8x)2HN-oVOo!7%go1zcg|M#*0@^{h%9+Xn{5fB? zg(b^5(U>&(Sqi@~z7@<~l3!T=^>vMdy#M7xYC<~-({~~2eIFq14fGyBWIp-ZY15g> zN(+EUEH~3yDVC1#g`KR|>I?zq-?}y^%fMC2nL^@hg5By{y#Reu;})9`h&zu4{Wu<- z{H)=lN7j4Z?=(5hhjLhJEZ|HaKVA~_vwc9VvMAjYC6IMQWJx>%@Z<%7%(k9J7N$w5 zPD8}$4y4bG58^)S>`kana42{_oh3x!aWN{cI%_#mIARh*^o)hBEC>WKk&y}4j6M=X zFy>>8s>C>E4~o82)~1G5FmBOa7L#UF4+5B4)@cS+)Ttj6y)Ggz@L%&o$AVmyhGOEl ziG;0o$@kB46@pgy{KCE%;1c{cLQsnBi+3J>M3N#TE9Lx;8zsjljsblxL!@5?*s=#M zPqwP*{CwlA?Wd&{ZyEt40hWibKZqTs0ezTwm5hu*=w*X8R1%d?!iQp(0k>9PC1L?W z1kBC&-7Jn3V&9EOm2A?wIz2WksWCJrJrG)2Y-vhYx-87*q;jJ-yJqUd z;Z%bQ#NH^Cog-wATpF+u*VndMs6_l%XebvCc(9)o2<8 zTL5<~pJ1F@?)fjEY)L+Z+SdCZ?{B|5ST~KIKyO8Ia5L$`;SaTBf9&Np|fUv zrz}Zjx^FV3T{f$I+(+zY;Yc!DH*>{Jh9msK%v*b<#7m|>!Ny4k1xm5*BX7C6M)nu- z(J_H=sJkz9>p%o1n|tEnA#AunUzm2i5|YGYF90H+mLjAP-2Kf?zu;b8Dxl0MD!h4f zWB=IU>bfurX5KU;PascdP=}JUty8(o&P7$Lx{zAw*^!mQc`FdvpJPzloQXZd?=K3w zzcwqKj|^a+AMshAe^6}HvHy_1UbquDi`5z}1z1B!RD!DYdF-oGkFFLQCT=xh`EtUv z;^O+I23rWC97j@PGv}g|#m8tUAY@x-S~CCSDKBSzX8?PL(j_59U- z9*vNYfm&X8W9Ao}-kP$#qegfaadU%Lr>OJlFDKiXI}vNM+r6WA`otnO)f%M+Q~T#| zI3QRuqBp3;XRmdJDa^34vOpn)sat~6Y%ni6i+_!xyi_r~fWv*>Y)C_KuE8&DFa;i8 zv_<5*->gxrWoWc5`Z|^1eHp3vui?NcvRM}?LEeI(!$ZOuXvW*z2ek5merSwf5@9dfTJy$qX`Z-MLo5oSAYaE{D0)R4z)BE1MKmS2RnQHk(xDRUaNfF@Im8DWfW$I>~H@9!&DRH%kW$s|-1|5~5fMrstah;NF&m^DIX%UY> z#}j1DS#@DRppYHEj*k2_DGm9zHs5?lKYekHjG&Mx)b)yCeg2j@J{#y&W# zJC^|12v^ED&DYO*--Xi@Lo8hQ4L0jBkihJCqa-AXVo6mA`xs`xiATgr@p^ka-vd$E zT}V1=n2PvB=&T|sl1q_eCh{=CoiL_tahfOy*KT|`iu~EL{P_%wU=!*Ni_OIu&h4a~ zA8*csc~TxfBp%yQXqNer-{LObp?8K^Yv&soi@I&H>p?Va-+d$F-^jp4H0p1K0~X1e zDD=(u(~YYc{r&xqLu37>YTnvkMkRjLiUu21%x4xDIR+r)ttJo?oRkLwE#a`c2-Bli zp2isFp3*7NV9ZCT;|7I&$w&CrSQQTVAGe=COVBkf`r|YoV^I+9siHh?+u*77omB%J zSiH}J3@1=CF&B~4BkD!EsE<@yuEEI$`ww_A(%3Y58wk!g=LXca@^iAzlL7p+PsLPo zBLsw;btM_Qxi?HDu^JY^>69}K7QOES^s;Q4FPx28@ja} zv)v^It^(z$GVxpfThCojP|Smt8woj6{R92Gq#;ts07Cc7Q;E$vn?gf~yN&^Oif4PX ztW1$0Of8Kyrh!6Ri@_QxmHbqq>ErV_NkkLlLth4OmY)nr08XpidUL#W(}3sA|K4WO z-+)OQ~#-YxiiEs2PT~@T&3HUrA#UGBIsL*)XdR(6><)TyLgne*)Zrqu;+R~V~DZ#ns6CebB*5HO1 zHCknp&9q6sqIs1kwvwY(=Pyxb2S#8^=j~Ory-6ZARC$Cly(i+90m`&x*9M35E@lXt z_k5%By3feA2rS~3MFaX@!aa_+nj0$bvZmCU-!obtYq->vb|CI$k*eR*1^3zO2RNvU zlHG^`b7-NWpFR8_l=KXBclELdvkd@edEWyxdi!N zjzE99OLhYl`aS_zX&)#Af&$(4vL5QNl5O zTqhq`4!dY^P`*0mT06h`vd&XB%Y=qWkcbdi`l}i7OW7VKJyU!NqQ!p$%$)FXY@s$* zNG(H)E}@!T4Wb)Tb{#qH2MioTsLt(5$A;>z!m!C-c!nj#Iv>D6p?7m zzMJCD6$E46r5{fbIc!DBOIulmlL@+OJgwFcZ_H?dN5K!%8(aqd6m73~`lzHu@J<^$ zL3Odn5u@Yj0gZZeX~nRKk<=idV z!cAIQi*hXNpPeYokf)FEZcAz!s1qF?t6Zr)nAg-8z0Ur8jo-!XjQb#fbFSTfewQiY zZ>b%W1WFUJwn&YJ#Ul9P_sopB2DFOq4Nrm>{D)IUPW_9;$a+1|w;C3tvtot=r;hY} zh+d>&)7rwF#j2<7#TI1+MIo~GL0+j&?R$~CWj~CkPa{t_ckbF=p2QX@w3lr}j#0`Q zloczFlvO$mF-><0*J_?E;f&Or@)1rC`?oa8dwO~r6waMc1gy$7l`*;aUyA!@US>c% z1f&0Gol8c-@6k@W^HH+|85RU;zfQZTJpv0i)h0!<=?0n#E|m}rn61`VR46vFukB=Z z2b_I%cOY=R8B2E3D=@Q1exR}>M7#_zFN9c#!nz86$1LhwW2 zW{-M&`%=sK=7OV+KU3gm=lo{|-co&LP-Y3cxIT~kh1)rj8lXlU&C%U@8u}#l1~O4; zVLS&JTF>GJ3V#a=4ec)%M_HdNj)&Ik&DBJCo-1;FI@*~6mPuIr$j3Ys_P+SR2)0%jwNOJfI2=Vozz*IGCry)}+~ zwiM8V_1pEEu5Gc28bNwVusOTIliJ3;gC|5>%5BeVk9F71Cko6>XU`7kf%4Z{ZD8#v zszsnS*!p&ZNn;dItsHh45L)(!oJ!&*Li4w0@v#o)0mAdQ=hb^l(c?KE$hibdU|t}% zsRMJ!Gp;Td!5q((Mh4Qr=XFYs0X-JvxY_r! zQT5q%ppc)2nX`&Cwq;fI7NgPOpYC0<{e7C;?K~*xi8;;Vh8K*-uO6sNBqNIyPoTcs zmht=8;^QJUDf%%ZfSqBTT}7r}yYw~D=g;PmxHq1>#-v$@wsWygeo3BOhTffSi=0xX z5H46Bj_9<+<;%%etkSLj8e6OMza?qdq`u&0i!6}O61Nf3l79yd?S}%GO|k5v2fR6k zj^K)HA&~^Jcyw}d&Z45TRX#Dh3oSH8)0skE&VN$O3swp%3wL2(t2VpY>e(mW?#}|N z%jn*eCnWe^d{7n7Wby$OQhl`D&+rA>GOLzEp(bJ_3?#9UPS;Qm2SLiV6cNI;MnGw8 z-l;tGeW|`Z>boqwn!B5P@AgxDa2q|dHjA6Efh}-J{?a){t~Py^ZsrN{Qk_py5z_h> zHhz~aj{TMdv*A?DZ)AM0o80YrN0LUjJ_tWVV10zTN^kO|PGBHFG0A8v>Lttw_YLV9 zIcIpg@N>`nd#b)9_BO1YCH<%ipusuCL|5_410jcp zav)Zf$4DZ8@_Epuyte%DdS6Y`9~B(;xsRe+fdV6#}BHyc(PrA*^BUW2)9%{akqx!%#i1%gyj2VRb;^+z{PT;_s;K{_VsUL-CC>c_fk^y%d z)W-yq)~>yjz2rgV?7#onvkK`^)#8n71MkD4{g3a8+9Z+k(E~S}Dlky{>GL}+a}jc;m&-=HzvJZ1;|{5miG zrijVB3`$#dIf2OC`_TfgPAH$hEAZ*0E|LbbhU zZo2Icdb$}+cucz$EXwT=F10TqAp_B*E1P{oRJxp`GtYwm#$h1DhrFX`aL1??9^=TV zDqhvmv4yw3$z?If!lZL%VfMw~*;6jAS^D0eEPrQTohJ$^3e-M1m72(BfB@w(=atp+ zWY}6o`UYP@mX}W|DAoizrfWKDKt|X3N-wPKhC@R`p&gZFCsu#w9ex%k_A8onGqV`e zPV-Tj4Le*ZQm+#;QS-WDhwR1Ql<8%0B9*U35)xp!^`R$R1#tH>Q&a3@`1v_+M(59& zWWUjXPxGSxIauqT7O|9N>j!6J*H$t^02jt(2v_FK!7cKPA03T?r|NL@kXCO8s3N=(k6hE1ntK+4}DDKmv6s zDYGt0dkp^WGb6lJ;VqM2bk;g1x61yrzj9d|uRgkEQU}F?l2&w|;BSKI?+(XvvG!}! zC&};I7>eq(cvI2C4Z^$pI75=mi@o* zL9=pTpzeWB!94EYZ2jMV{y+)DrRa|}|7M^5hr1r&BS7zUCZorf2gADM=ZH&##Q(qE z(m27L|96YKEb^qrh9mQt07y~c~nEUoK1lOy^DEknS?ni<3%xD5;+}8~!>nEPA;o+ptH#4gI zu7`nN!a}^#Pky**mFOv|72>=JkRKpqKfFlu9#yC}{*Sx4pD1>=%b&L{VZK&#vm$|R zzLaUW$$?Me@aF_}wDEZ!wb<@xN;!d=9GpfB+3d zdFrQFBdN1rursnnG)ci$L3=ujV;8^ z8PW8*be(*1oqk?5?$J&f$Dq8Z!%jW;B>C2-?^Vjh1`(d~hI8pji&OBGFgEd7tC#H# zZ@B{;69XF?-mSlp`EPIXUkO9z1v0CiFavhl+vw?<-MK3LtL8~Xn?&8x06EH)HdndV#xq-Js_3n<7n~VDxHpnbboD>~=W6;@naZ>~ z%A&l~&3t=&0UA~fJwItO>|r||bQ!Uo-trb^3XiA zxAM!P2ma4Ko~&#;FQXyLG(z0??~hJv9yA3^v`sQDan%KZNF*cCZGy^6z}`d99eHK| zP-6nxE_0faj7M5K~Y%n4u--k;m~Gi}WQhR^1|w!Ly<%`lXFfOjNCur;|PE zD&^2T^4m*o40i%AvU8&%nK4xTa|afU20b^Q*#;MjSvRKtoP0kyqNZObK|~5*=Uq>U z1|#{Me}5;NZ(Aw_uKB0IPg)v!b%w`pwjtvsiu!dXx^N!g)2)#-pQ>RxXA+E;SFJp~ zvw(G&thF&;pQ#JVU-xMDdqLH?>-TGG@*mF}nqbshSPiA|W|6k9x$QK-(HpA&w@@C*Krni@F$q-bblfQVfVdRk{x1rVSTyScfkRvZgs7Fu<0 zvpJb$m&C+)_Oz-8lL*3xGx0lb;sNa82;ZFZ&2LrvL7O62DZ-DxJ{&)d z^=YB{Lxw?{{{o3p`N4PQB=b{gN}24Rl7qIDg#N$k+xWX5gD{cZTl*1%K@zDMsbC(@ zrzAc4lES2L77bNXts^+RX5<60t|_E0l~Si9N=U6D$Dq|$7XsF2Wm11{5YZSKmroIA zASD&L*7L3Z+uq!Idus~?*LGvs^i@Nx`!o*C4?a%LaR)(WruKS`ZO%XaHH2Ck8|^7Q z%F|$WL&*47!2ESI{`=5;azr~OzOLH=>85a5#vK@8=c?=5$EcZiYKnKDVG?qly_45h&p%QhG9T=r*{iL}Iny6V1XG#!C&b4yDEC6A zm^bEUxrQ0_g!R9rA;lo4ix30aTSwWV;%m=ue=FG;H(c)+jS*G^+(_0T~fJ zVC$G$c+Y_vLi0NdE%YWx#!Lpm-wSWw?%19+i*62c@Cx;O%d#_LRWv`>2O#9v@T($) zf*}&24{m8obn;1n?1N@YJBxyv>on1Y{!$?Jz_gLyWi7AY9-6QQ4yAw(Ug{k@D1e@102<+>a!Eu!U!mo0tW3QZbH(arkQgq5 zu-#e#k77>qy|ZUrZB+<+f#FruG4w~r@h7iyDm!k==`$)~{#9Z7&ocsvj{mV(Kd%== z&I;h}GSZ=A_`S%#!`?lI!l8lZEm|uDfCc5D$WpIk$@!C`)=7c?;Cfce7 zfoVi;H2xSluv;#iDOIm0jFoTXEbfm#^AwPn_9$1L%TG0LV#Df(E`3*dEy^oMRIXP+ zsXTADgpAH*x2FoTgzqCcvSdC>DOTrUK$fAJ%;pz@5<{q{(P=da-`HKNLU#|6&qDTO z|1B%Tu?Wpw_rCFGvIqn4Zf!r7EntV6qN*g0S((Cq zapg1m9>=s?%j4)>6WwVJ%el+Ct&H1>sX4dZSCqa&dWg?Qk;@~^pqN3uvxwLDf|;U- zwc!vfI(TM$vSodX*tT(Ki7L1Q6s=*q{2kYqG%Jon-6BQ6B~gPbGm=3NPB!Ph%W@EX z(Q7}Oh%l%f_@nF&8Bb#{0fR6b{TduK#HwIqHIGUwRf?SVpxm?7{uw-yAdV0H)mDGJ zo~v~7eHXIoL(^^6=zlY(7Uc8FrpjKWQ|19Z(?3N_l7JENK~rRlT(v zpR}XkckNxgcl!ps%sdOpa4Gs1`KMJ3(zh;-+pKY!`YXAM#o^b#B(t+X)dah$(fz@B zBb*!kbLUk72M)Tmo!ts5O)EI|&N+5}f61XSk`_LdBv%Z;$* z@MvpVpK7>lkHHA8zwfiRyxQS5E}1OS)o;3^dwL%iBaKtHh2!T_uTiQtnyM^EsPPN@9gU?IZ!STd7k{(E zo|qaSEeU7-GcUtu_qTPrmEMv!=aPog4W!o<`38$v?%O{lrzg4_77pOldgZ$a1MPa( z@ZK-)c)hUUh4pRAxfvLDKx56#+ckZkc?y{y{dMYvy;0js$w2erI8AyIpB#vO(Et;E2xbuiT@Hx>PL{xl3PZe1y1}U6xu&Cd_s72t_w5|bFYg2YmO>l zjcj?bZ`4!>;iv=FBdMK}^KxnL-m}9fIoH?sCx2 zMO1m2d>rEoSgY094J*ZLdmvVGtyMhcD_H?nBg^OfRn@hagj&;O5za1&RhDq=M8!-# zBPB9Hn*g?ZqV*l2g3E~!C=Sz0=)?yQdB|Vi1#nX5ufD?vw?m9`LFLm0+|&qfxtBzG zit!m}Q*gr-{ znw-T(sGb*dR-f&Tt3D0AwK&$UwC!<+X;>WER3(D;+}~+UlD3qZ=+^A>n^L+j>=f}f z7Pr2Vj0Cd(i@LO<(6`?c2eec0)kXdTPMsT@oOENWAq>^m?+|oVlFbOK_A}K~dk$Ja zYDXo55?KMCdOg$n4zw*V;<>~j$!K&>!jytccc5HBfh-7;f9enC7Bm$LdKaQ-T%)R= z{gKWmv*hNc6AJX{*BjtMYA;j1wq09)V@bYm zy1DEz;A(eAfZQ2dmA~1HU#y?NXQqC>4(v->h_7&{zO{!xE=NG)1(iZSF5N{^j{bdi zH5Qw!`F(}J{*;Nr1ucHB<77w@x4t__@n55o%N+>0=B&eWc>XW_gZ5R>MgaR%Fui8E zWgc#?H35JC0#%r=w9X}eqtAjE)_<)bGv|o~t?d%n&Gbi4WXaC}BTR3{U0?LUb>ol8 zqECsr`1PE?C1Nw=;&Tq<%WE`V$D8p`<;i#p)~pKFejx*;Oq-*q!OIP4mrTs41>9;) ziYxYVZL~c|>21B8&V7to{|f;3N;R&I_x8t|N_x~h`9i}RbjlbAG?PR!3dx$_O_Qz9 z_oC(1KPhKIjsz^Mp4AF&VcQx`kDUT)^}e8)u=CVOMvR0N{V)YoK$t`alN~f`4#2H1 znH}5igZAPD+-$6EE{aCruxW%+vT(dN*;i?PLchmH@>i<=zj6F?(ML5|K7*dN8m^Lb zD)kf2b!Vo^>7$=z5EBHS^pmbsh=n_T`qP*|)MsnWs~{PIb(vqpNfnl*-oH0P2KPGu z>s4h{0|RICE+*?O{s91F#*wejcH04ci%l0N$PY|{AWRYG#Rx*S>K7%j+#OAdhoIM#z)Jig~Ou4A7#6}=ysI+|Ibrdy5nw0N@oKJhHXIost{OoE- zVrJo9F8(#JOeW@gqgOlXZ6ENxnw1P04XW#P2q8DYA(6ekF+Fl^i|l%azW;(E|5RWQ zafI-j*Xv(bAS#HSb6EBEL?jptelO)c++7m)O5xtAmR}kdElZGjL7)bZ8}`ihqi&_y z6jV!s+!1Y{q&1R=T}R^IU-*+UYR)UJ{l0BJjDPB%fp{|%)l)dhZWczG;^{!GI}kNF zVvKE*S!Hzh=_fO$mX~B?d)@i9?S@vnPcZQ;4>u7rZDxbgl=C56l5Oi_onh7D=39Ci z1ylV~HpvV9`~e;B&Jqycwh)PV8m+9lRga*EYWaP#}P7Rfj63_Rr5& z2`vV6F-`3W%W;dh$SMNt{||fb8Q0X-?Tso3s3_uAK|qQXQHml(I&2k0n$jUOrI&z| zP!b6sDx%Uv=@LW%kq#l$P%N|np(c>fluigOB!Pq^H=cWTd7h*Dp7;H5KRw@)^-I>A zYs}Hde~blSDK?ix9F=G0HWiqb{(hqbfV_daAchDjIr(=a=*>&JC-(qiAOFFKY`Bqh zIe0iAA<$yZ2HWzL%qm{L8iLNY7o)H079=DvVQ~QF_=h+7m}w9^&eZ!h*FB2JRcm?I z&U>JI`(H=@<+h;Up~N1JC2Y*tze3r zmX|X9K}_$EuAwKdw#b9J6l5 z1oAJ>^?)TlZrE&LA0!yEhd6AE!1&*!+BrP7K-j4OM>*+~F1Bk+)O>vsG&bY;BL;0K z(|-HAd>GBJkbK>KJ76QIGv#!Fh5+mqVp-*^Rq5EAB)ieew8RY<=Drm(0RMUgC*Kf4 zWJ3ol(0eZghufzwDPMsz=Trh~2&?%KCDkH|Kv_}81z+km zoo>(&Z||~J9+C%a?;WV37Ewm(uH4Z^)^TMbUkEAp_k z+PBQr_g--sxs=~5?m&?2tip{-7nIw(4;mO7Ei@d@M&ls}ALUny%FaS4C){AS)cXop z1k(>U??B>jow`Jy7hgsM%9(@s!XUNVsSFF`{r>Or&`-+20P@+OSfJz8x9E28U)GDN zC$Y^?k#YaCb|&VtyILr8`}+<3Oid(r#hM9q%KG&&1!-wRcD40wkA2;}bc}IFTd6&m zf@60$COJYKow9RpysMw1;{Etu_B$Gun`CzGm1cLDycR+$IH0eRF+QW*hq*Lonl!n@dxU0b2*wPh87n;C$~bN><%<6&2KP(^(&fz`5Dh*8V3-j86BPN=ZcYg-~VLhMY)N1(Lh0Y0TNBfzgfeP=F2HPnf#`7RgWnp|;kPuIS_ zkZ!tFRE5`}p=v`~K-Sesn&MpYp*RSYN$TM^3p;|>HiTN8l|rI&$S*MSMaJs)42 z)*IT;6+&o#!jGb=2R8_4yUwEL%@_xZ^ z#OA``?X`#+CF_!=M>Nab@2_z;dHFViZ3Ejv2FL2>d)`cA+(A2+{Yotqn}>Bv>;0F0AJQAyUC8dBJ@ed7o}1^rfqPSKx1x3MID7Jn%Qx5@ zt_Ps&IyheLTN3PG5(f+j{AtymG?iZQ1o9}<hwBfQQJ&jlZ;yJoGmgG~W7%Uy zu)iANU_s2Kq}wM{^Bk%DEtMTCYMw>?RdOEVVV8ARIaLd;{~@KXT4*3|g}twLE7VuI zRcGJXTx*RME6}|@(MR(;zB?)V+5T5S0`r7?^9Xj_-bkNws>!jLzx=UO>2d=i!kAB7 zU82>ro?c&se=L({|db)J};rX)>H->1JR3)~@{iVegR+Q+l<1LTRqN8r*aAx}`K= zX}#_P0Z&^!M-nsVcK$11`_sJsC`ErUY5|EWd=6-~VHB*3U$-4ioDVGPuU)b0lWY2K z&b4f5u~y1%m#>^Rz%0)#yiUAmnaTi)&3+^EQuh3u9Sgew+*z5Z zvp0UDDn!(9MJ1U%6Fj8gmg$`s@R!ywn#Lh72jYkPK1Mc1D z^KNOKkurV%iZtKbfskS8ifk6i_kF}Z&NF~HuwmMs>?Gie{T0VRz#GqwDThZ#qfry~ zYG=-zxvo}hkr_NtI?d}g>3aHhP0tmh>h)TMVu=1+rX8Qyn7faUcrfa~iBwQp^q=(R zM`~w80{qTgg{ab44)M%|4@uIa0cmmk({iSF{_;uqpXyKfuC(XtC+pry4Yz)I*1&B! z&iA!}V6=1n(FEu8Dwo$k${$lxfo=FykL=GO?_{lfE+|rrwX&# zUrj@>{ZGI2P>Qzs!waOQxO@YX#;Y6yd(zrr8i5xa+SwRuIoWf6{%-FX#V94BYG)u( zbtF||gAwAgUHLUwt-=aSfm&R!C~-+dGWo~8fv-$-DA@)Yg zS@o32(JvcLwS0fL3%jD;%O*-02z0`lBiSvdM#37yhUWQp7N1@em&u4=4VG%!$$#6{ z?`-Kk^6lEUmw%(x-%=hDNqf)4M~=?KUXMoo{c`J`iQ^lHqjEM~KxAE2L@?pqUjg+W zdf;bwY;p6F7CaZ5 zucX*5KMGo@at^P;ntM{%S%^?NFfigT!~GAR_~Rn~dxT@IkN|r!M1ugp^u%-<1evJQ5JNu_h{$i~^b{A>J{%ZmEU+MpUCF;Ks?C)R8eqeG4Vp7V#5Qslk z_{mPDjplD}X3kCgsI=dDFhRyZ}|Hw<^S-gyCD&gR|&$X7~F|DM`%pLKli z+ea;D6HnBg;s02;kN>Kv#G?~ZiTuCs*N=SEXRzzYUcH;~!7XRuyh^*LIk*KAGue%8 zh_N%HO!So^_nj3lE1bPP;Qi!U>!AAtmEJ_^^_U+G`FAsN|A+olO#6AI>z_37@gO!1 zhp+zB+5ZcZR?5bvm2waMFU0EKeiF?#X`?z;?_Ku()7E~f%vyeQNDVvvi4gedkN$`5 zV=F+XKDLjiw(#uLf&X*sQp=`My|Ce5&fNdjEFJjaFuXhJ=>TmyAaePXPfwDb_{Br& zJA$kTd-NYV=ii94*QKasWMcz<4hau}uc>(3K95ZP>B^U8_Q;>w2<#q_SDC*k*fCQt zCGXX3J-XGe7ch}t@WtY|BLjDKqtjWF=tut+QxY)O>9`DP-ud)<*i=HoEnjFGWnW$EUpzn(VOSv=t<`l~r5iAEe%XcZGp zP`AISxv8{@ib`eRyzywIYn8hC{O+(dCgiuSEix84$ZfFF}>Py2eL;B%b57NxKVd{QTk0 zyZ1Q~uj2Nva`rI}so!L(P+yCMum(t!VI#uZh z&YG>2+@FvCOkAQ)$|hnWM^~XNy@0-Ux9uC{&h30Ql`}Fn2$$IIH}rskuK^p2?iArm z^fH*H?A-c1bNX!9+@hrG&WE}|Y*88G@eszC5@KKF z_1ezgb4RD8GbRG@&P+6 z#oCnJKVug5wGPXu#+?U3nh$DWI}wdL_iB6^kuye~s|#zXRu(492u<9>j9A6i@6-v1 za$3A%|0Pn6lf_IK*pr8w#8N>!Iw~QgM`ZhBT3|A5>bn1O;xgW+`@)SOnk5LcDdr_5l6if;Xy;6 z4~QrkQpVgJBgS7U3+j#M!(HAF5j7RJw3c+G{}#~x#S83DmD&=L%2q4&L@JY&pnkOg z@GKBX-VO_6Zp_W)`x4&Ce89;J0g6i@)bV34Gc)C0PfK3M4>`I;)#74x1~XQgy82Xn(wm#_>go@Wbx%WuCcGY2O8=Ez=YFm24rx$Vm~To8Q~ky($qh@_ zB!8K{ToY(zZehh!MV(+tN{QKgM|*1*bAM!h$BCo7%N~Q{hL26R#Zj@|1w8#vK;jSh zrAsrc&lU-bL~l==qiC&3Y~#*OZYmFw9K*Ji^D6vr_%&3B{hXbiG&q-> zH3J)u9$kKhA9mOSkHM<3)^fzRgndR(*L{8C)py$IH#mJkSIO|vamrPSqt>(>zWm#1 zo2E^oFTv(tiTRhhJ#Z|l!oi(e5(Z6yjbktZ>C}YO?_IP<`z%_61*D630|EkEHb*Kp zK6^);V}Zx!9|E6A=P2p6_~6^@MJ3H&S#Z^t_R}<2GIH0Z5G11j8hQlUC@K|S^pxx1siiMa8Jo1p; zJd0!z0jn=Gi_Sh6)G7uc%H+Lk-y$&S6?(2CYj>FntiK-TUq4+l%E`&mh6WDGyoA9d zaaRb3n&`yZeK;I$Cp@URS(D-z&~JrK5#N~)nTf-)gicInk$S1BxArnVT9=o@B)z;P zp9i-%eRkIjc{nq>x|G$La^+X7VlE-GyXx!dXB>=+vh;d&N(aoPJzjL+J7W_QVHaAu zz*DMvB6#FmYcSHtqotUyW|E>7QA{ex3Pxy^u(FisCn9XoSLT_JBTGo7t9y_9+~7vG zNbqmX9#rNLJ+SkwRISl*1}wQ^H@-=5>}U?BB?oi~nj}s#=D;=;K82HN#AB&Ydk5%x z80+fx?uZ1O`xW}P3vGGC7-nAI;tk~ zq(IYpeGsAsRla*=TtXhnp3anD_vL{wmzP&C2|Y1VD<4-lHMIA=Wh5A8>(`rN!!g9_ zzHrDiS$OwSxL1~nf!qGutSeP^H-}sH-(Kaxq`oWAohmtNU>bO;_mmZ5W?tSi;Emk+ zr^)PO73%n#@@G)DhHvl4;}rTZy7YB|=z|Z<52&7lJL@S%nGAp97ZZ-ppM`+R`vwLE zh-n%!p)+rJW)FpopQHAMUEj1qQAW#jm_%O5uG0|@atg-pl}-nar71|+w}#8)jb%yq za12ou1a}pfJl{pulv&PFF#2(!H4q19Z*H&)-DxJR9d2^@Y5~D2>MbqIhb_8{g?EP- zpF}htTp#+~4(VmZ?|j46bqENy-CFp3XuF8*(YVevcfXW_Zku=Z9CRhe1N`{dAlJ!3 zf9sf^L_$C0_`tcS=grXcq1A{;Sl(m5?o{uH&1h)PM7|MlV6<*rYi?`($c}&DplyU5 zKO4rvI1ozCu!kL_rj*xA+Dg~3nCC_jz)U;n;@KarWJKzyJ4_PPU_u0jV1DWdN4D@E zxoL2y>Y~VGvIYeQ*uQ@xFVrP=#KbK<+;uiI^A$BSI|F+`a!ZnblsqgHp3)j-+gA#UiO8z zy((93MABeVXLVFfrL>VIc}nxYOVIZitAY?GK;0G4Pm^p#FUy+yy3akgw)Q%dRwQx; zOJ7aN^h=EB4bQ`0-q`s4jUc<>D`EI9dC7u#RZ>##0#X7;ZQ$@=Jf6@>_L8J0<7@m( z7O-tfz9SwnYg$w!odTHItm-|cfmYONa4=?mZ{BWJ67V_NzK7^>;-=Ktqm7#mC}!8`>NL66}q!3q^*R>*T_wGA<(^f)8qno)}Wx}(s zY0BI2P(JW`VuJXbiSKy5Mey>--RIL{t0VnVB!{rk$tK?=b150oSrgW5zt-3A14_R# z!Q9Uyxx1j-LxYUvVo0-%Y}3@(`^tQc4oj=mb4R?rW*(N=4-k*TG?{y}oGh%Q!{>n! z3=tAb$cH*>hTfYG%!RVjneQ3$=`tokJAGMnmv1{*#`q?-y_EdWP3Y%d;I7^5vu`P8 z4q1_Kicn!bmF4>?>#wftERKymsQXU0LM>D{Gq&fM^HLF6-C7}Iw1)C=c*sL7wy=%J zyZz#xQLVD&tSFw&8>x0n?t!15B+Oi#&+7L!DRn(|Y-5@Lm6~jz3HMK#g?Ky&d8}20 z{0g1*W}S3yOW7tJJa}ccn60G?)YNKFM5?*s^b0z8t$+!!0Pt6R!| zb*_E;%-H5xZN`dIXJHqcNiw6gmxoBpa3Kg-=ac*9?EU3GAc_B`ZKH2WXxWF=%`L5> zOv;+??C0ITlYP)wbylHyemA2|T9j=-X67=XL=#C8I>Vx9=g?j9HGrr?1jwOGoI^5D zjPi4w-|ju~Hd7*#_38^`i-z7dDFs(_f|=^ zAs+TM#?0xW`HluuD%W!v>tK9}%*LR&{V@TjA`v953l%V`EW4q0t1oO^b4z`z=W75h zwK?bcw6KDa#=*F_i!&k0J6)64(f-2;WdzSa%+He&E&PW&q%O#=YuX4~NlaAOdz&>F*()_D%hnH&!-P$YR2=|~k)y7$P3sw%zUlQ8iuGP}5i&Q&p9fKL4WJ*jdk4tt%`4I=XF zxq(YrI3?*2HsZX&q|GU{;OnckIW^Pe(6#;d9Yq>l4SMU@I;bJD++~fIZ7(B)l0VzC zZIr!$;X%>eON>4#?|=)xhZhJ)BtF&tk~)PPeR?+bgyF45^l=c2UFwyDJMP%?o(UTH zqBK$Q&ddP6>aG0DqV8YE<_E7|ka(of!2M2?xc@{Z3^e#~M=YGmh@0(-5F3f-AU~}muZ4OsO=ZB|L zS1pANuly=4`BSTqXv-#x8KGyCUEJ8a?|}Fn{uxC1hudSja86vmiqHRr|Np!zr!1Q+ zkw*eK_V6G7$Z;C={8Obv1^z>M*suKKpW8Rn(}}Q*!TSPxXytH7qxMp z-3_K`nxdzZgJoqdCVgC-Wxs&SP0J?FA#x5Nhs@O1f1xJhE9BkeCDMkvUuK1=aqxL{ zPzLBPE}5((Epw5QJlIryZGVj5&0+X{IjvPU)8CF58w|s5^@Ay`9}~EHs$H=C8D|MQ z_3WmfFKq760XT8tF_kLbW#Xvlxr>8@%;C2k6e~zdX;InB*|M@EN)Hj55;Xe4MiEM< zFuM-9I-^qHjt0JT@0HjWAlAd&2cDBdQr;6Q_;A%E65kMFMZ=>SE4xV^b}R z%<9h$nc7s9o+02l8nQRj-N!#3iuS%B7GsFlElXdlIu{1~?8U0@r+>s7yV!!K_0cno zqW81NgX2p!#gxn0&iR3v9SGVu7IWs!iK2$Z^V7H|7YfIKa3AuD4nbJig;70?K*vs8 z8~zGPF}=ddgPi9>q{=pC}$-03cb8Qc~k8zr#A4cbO<@ zF{&rmQ^hU_yz*=xLsV;AB+aC(w@MN(CL<-Th`Nb27c{Q55H{La($&&#J+(QtEhgTC zr8s$Lmvy@T+L=P{G>L@Ctq2>TNYL`*s)qsnFFadXqqRbniX4}{HOFZABvo}tdt>o_ zUyOF%>D~j?es51K)0FWWl^17E2{-y|+hVugHWIk9-R|w0zC5AvvC%E4ro{m{cW8S6 zYD(!g4O?eo8O5UD?@(w?Rwi0-t~*sZ8`^IFYG4r!B}_BP#nh4OJO>~2Gsf?d0fd=; z7^AG=ymx*=T6oT+CEy{IjH`38^I-)g6o_8dIk&8#OSu}Hi?#H787JreCjTIYf z#ESpMLEA8jb_IP{1K+$A{2|-n@Ura`xmGDZ- zsKAAD@tug`(Czd4x@y6?Vf_46J}VcrM6xj2t;KkFu&W{OUL}^-M(Lo1J@US{ zS`IOa*$nOB*5Vztom5!IO=lbwPW-rgQ`ipX8J%ww^X>HSIvXjP4emC89F%0xtmiuE zqI~X);t(5P<|Z_A;kHuY(BzHP8#-@DxOJEK*9&!Y2&B4P$!JvztnnDPd|Qsn2yZe! z;pZ~DHl;x8&Y_Ob-US~@aUHxq>iceI#*3bRO=0!~Ws; zegtrP(?mV)#!tHMh9rI9c{cypqxcApcRaAmp)&%BqTRQdO%7OHxz=9w@l zuIcoJdl5}t`wmb9U0Ss)?8Exsiv`)8e`@1+!n^Fbuz7xT(^Lo#@s63}C$WvZ@bRxg zY7Cm0pF2p%=JuNuRA5LiYN@gI^_Pd$ice=s{g@VF^sgkQ7bJbvH?wn4AaVN>gT$a{ z;~xo%rL9ViawuF;VN?vb?PlZ3HA3c#goIi=uutaR7N0xn9#`#}QQ+Q~ z{Q^|JO9C(V+L_w4G~qXG6wT$`yiE<6MNg35?bcGYo-%A~?|eio-q~z=M}@ULHiA~# zy)(S&-sss!vouxtG--!dMm`BD2QQ*sI<;_?gz9&|YJ?w6x*%Eu@2ao#yXVS&Lu{l^ zO-V0;9`C*4aGLg@e)WzSgEcOvX2X8NL~7w6m^dPM5-zjg4X|$lEIj8@GPY}M*>ar8ANw%uj%SUA*jUDbAfmF%A_u1R=Kae zqR}IKu=&_BDr-g1V{BgHVsezRVEfOj3IDBzag3%Yz8wRXubgFovdvGlJ3Iu`!HfB3r9=ps1lQgB1akV8 zxb^@J`PkM}x|XZDf{X@B!uoZhyDO#Spt%jqik7BxWg2}`H+Y>4DGpO&4bA!E@B`u% zMZF*DxZ0QM6v{Cx%9v|&=j5D>2>=iL=H}LX{$wfXx{vgfD{-I{k`$6Kd@}Rlv~+Vy z1flv8hS82dZ&tjH(pViKC&vMQcL9{315{mX*8u9EPaJ~)s~FruYo8_H&}IfJy7}mm zjb#BxMAM7A#41LQQ^YkF_Dc)$ple5%ri`7+ve z1auFrRxb^}Kk@*Qow^NN8s565EMA)-y`bONO~|t#B^pKHf{F0p@NfEqen3Dj5Hv$6 zTpAzd0Fe!ZXx;hI)j*2jyj*u~#7iL0vPx&A*Q_^bQ5Y}i4S%t$Qjm8sQ8S(HU%&Bo zKF)FySM!MZZ*!=`w=5nZo7~>N1PHWBc$qF%K9*d>0Lv3eg1e$Uy_4glalrAr`5Yv{iq_mFZzKc<5k)cc&%g3yqJo> zx>g{fxS)co%Tr9+8bHdYdLN7*M5qF|fmOrTP^gC}1rtjsCg0rvs_@2gQmGow)7gtr zdJFcdgYkHC2DNS6)9B?%?_P`bpo;Q#!-G$MuHsKoHwc{mG*>>m@&d6>)x|)&T;rV$ zz1Xvc=C(cTx_%%D2>H0=4TpHZ-Iqc)5~c8)LwuW?-EL_81{~>*P|{htd@?;NxdiDB zaH{Sbh^LoVjn=&$%y0P4LBUT>>*Mg5 zxeZ7zJDJReF2`bxI@|E7Yy;5a@l@%jy&7%WCV=vI%1~Vq@Z$?Q+>*-9p(C6fSFph^ z%oAjCF37KqH66c{*K}c6e~GkR+!PK6o86bLG3rCu<9`o1;ghCwBtw&T4&fwk1on4T2F59nYhp#ju8SD$VeE^rv_I?W84-h4aJrX zge=)%Y)kI!}?7d9^3*Pyq9i^^tKzB@%v6G7W0OgOT!u+ z7kDF90^_r>V03T(JONiKC#O4icA&p0(%m)5DC|WyFX6J0(Yyq>EiH!9yzq%!gjlkZp@# z<*RQ4@qAj^9)=c$4^{>eLh#7&z=p<4^9QwLR=T3&Ck@US7Tp)z9ux?Df2C;B77GlI zkUegBv_9xGCuH+06RKzOnh`%X&eF29#WXRZ8aL)|+|^gz=;m~#73=42Gjsf}jnp%< zZ7xStH?D80-E}S2(NBT$-mWAqJ$II&3-MsPnj9vUA8&WvFp>{g-rFxfG_^ErFi~T_ zBdJ%hw6P zb;av;GC+4lb7fNm-6V67S=VNNroawT?1%<`l)I~T<|=8+NN!t$+@tPm(oZXlX7hJU z04ac3!V)W9DqQg+L4T)?s?E`WQN$dbJ24OZwK9qR%MNnuDF!pUOPUq}l%4eFtErV4 z$o5Xb=8#7bZ>X;X#~pY|5{PkcJ?U87MzvqFoO6iC^kl**f)#ud4}!9jEO}$R4~JWE z=S!}5fpV;5*-rQlXtmp33i6;)$s=UbVGg6ryX%F;q#dtvnJrJy1oy#@Y7Z!enFrfe zn6~1MSyv{T^*rex2tj?jQXd}Ph62D_={%3@QLRy@&W%mmmcxL#?So2qoRji6A};PU z0d+)~3G?yrtQx+I-*AeCX55zht z^O%jGeT@h41+fO?9J4@*Kj@pemUl4${xV zqY2(kA$x-NOb)snthHL!iVQxr`j#eb^}X6tFWX<+4sE0{T+@W`OWFpZ^9XiUGJ>L~ zR+W7-=QOJpHB9k3jLd!taC2#P#bJW{TsHX44MYi;@8Y#Lh?Cj#5?Ex75_%l-P>*Pb zn}$zZn?{P`p(~eb!iP={VxKfQeIO9)#t_358a#EVAl!<$DlsLhS5IV&q!dPt5LsST zWelXeF~D0R5pZd^QJS6B$x?TqTE1HR1HJ)g@$ccrIYmFLJ%H|bx1C)XrSH{4(&oypS zkKNU|RbRsG=uw_mip|z;w@i5T>DyZghw#Px)^y=U0-vzLAbzUJV;P8VD#k|M3F%AS zhOR!h59wR5|7bBJh(L5Tdy4k+X?}Ae+ z$93t?tGk5-6}D#u*<;}L@=o=uZ>A);Y~aiogQ-5Ne2DDLH1msby%sGORL8wT zex<3=b}<5aMOwnQ`E#Lcrt+;#lNAjV?Y=dZ9 z-IT`<-H#Mjv4dBEhG=fq0t3g*mT+nI`+F6|R~Y((i}{K;D5Gu}St_=dn1<7Q^+IZ+ z?Co_QpNOP@Rg^M`K9-_a^gKA;dT}7QIIL9{-!1N)nM1C0>E6o<)4~59PU){e#MCz` zuOcw|cZt{3fnkjx3F!*^D@?}3#ni8dvGH?fC%h$b{-DwNVT*5J>r0vW7BSYP%q~sl zk!`M{NZ1nDWghXF8Z7rLXt)x<#ARq=mDM8DossPxqS(86R>r~$1!$rO0I{{(AE${Z zW_CEjUU<5M6BhmUvd-LL#y(hyt<A9Vliugr2#2d|{yUXxP7xuH2mPiWBAN1CNPi9|C791wdKg|~7U0UI> zg>teWR+M3LN<~vvFd-7qmLwOaI4wxq!x?dW)RKyMN za59B|>zr&_mJ7BoenFJ%C97g0cMtqWHJp-13Y}XobpaAg<3rvc4WDMdk?g)GqwUp|6Je}D=uv_I~ zf6u=`K#2P+kogOv*)}lhJ-Do&<$Mq`=)x!2Gdhb?TpEAc@JfLei;ZWF3z)A{I4EusSwxSw12+XaH zNJ$+pFzh$_#Ep!vE?ufVI*OnMX}q>b?TUhpU-5t}=U7rt!4}8r@n)js(`+g*PGd(O z%v3w0AR+*VVqg`KII2^28t9liz6!*Pw&%Z6#K|YB__k>W*Ig&CHLFC{C+nIi{xh1A^rr`{Uw1a{>sx zf+UDM3$v6W3pJ8;}#;xyW`LKc8pw+KYjT{wO{e9t^4@Y zVD?6Cd%4(oJxjjSLsq^UhrEGx+;Vm8&(z&rXs62p5Awt73y`n8@m`LaPnWsmHb#<2 zN%PO_%19Yj2Ze{_pB>n&YLNi0N*k?Q4st9iqg5@adeA?hfD1hXi0AIh6VJbUx_|dX zO<#T{3GDPuUf6CA(*WvHB7NEG@SP24%tpjnPH4YaAImP)r%U{ zv+F~<)f{rCvwiM~8gSMr$YBtp!Ib5k{MdTj<(Hy*2%%sg#brJPYrEJYw7)SJJVyW2}H6WUN;H|_{T^U-|z0ol59k2n^<_+AY^zrm#T08*Y# z6OOZ9V_H|U%JaCjkOzafO$G9(-TwX@a$i}6I z_AX{$%qETp^g~?8LmO$O!N5iT9~9d|OqkDciIXV{pNJU8Owr2cH_TZ^MXn#BG5(^P zLKg<`GRhI}uCiijCx*y3}de*LghlguK$lpCua7VTCnq9?0dgL4l*cZC9FLT~Rr5MxZsw?BXpr*VZCx zHA?IhY6J{gUTpOBixu8+lXC*GeNZnQCtB{r6Kha6hDsf=D_K#3EE)!vJKNlbiM4}g z6q{WV-aKPS$6-#FzxFS0Bs@lNZH;c2zb|P<_rn#;dj*0@+u00QGeNPum>E3uywpa$wAs|bd+#0pS4KAygz5@ zn8JOk6pN=egoZ<_<)ZR!s~OM?Z~gjt|cH0E>G7 z_0l~lJodg}RgE|Vdu#3|s3;MNv1`5w$;B8e_{%~`@PdPoN zM^f#F`_f+N?hJr+uk$|N)(n&PUH(-^1$+D$;zx=KcvflefVYkSZ9rOn>wiZNz$Jf~DO+7anY}=4~)3__~8l;7FqRsg?WFr`zC|2lsOF<@jU8O_4c-%78 z1r{ANd7WE16t@x^yDaVvK$)$bP(Th$!fWPptlO)=_dr)M!T;!2ww`1I2Byxp7k52I z9!E_0j(ur}`q0_57Lb5V_2hkDt}S>lw_I>6Nv?$+kZryyLgWg$05QK})f3X_x(wE% z$67%=y^wRZYtJF2QNc=98YYg>z-3n?<+dAg4)+{Lc;k~p8cdyT@Pt=ZOxvWRuZF&C z?wA9HBjSj&&0KE^PFdrDYNx~LpV1FRiVLoKSIMO1X!Ry_Ia~9Oe#kh*f`_wpCi_5? zyd^fgfSFv)){%OCt}bMYL6`R9PdCp(42#fIVAS*3 zo)mm=x@It^8F92d`!P37Y$P)d5@B#oCYs2m`v60^gnnQcAVfiEc9`{?k1%VHbOlU> z`E9#s{90G-J@A5UZaJsB?m+mnR3WlwI$#9#>3j8K3Ny*;~xcMLSwr3|`o=C_JEfpOa_# zMnj%ldWGma#N9@iB)gO_(fLxv?IXp1&_fPR9J8Fek}&z%(S?N2#J5p493j?&!S`-4 z9^G!T^gCW&TuW9RsL?X^(n)2f5{>v&q3Ef3%sVdTX8Sfb?YO{o%S+NG?1Fl}39t_G zMvr^A4rs=%X>n%AsHI|57|ocaH&|VYf_3;Xa11;&s99*2x(^r@F^|Os07;wRu6%@g z#^Y)g;m|ygAFa4ARlKr7CZX6bnLY5VDk~PN3$J{N=*H!-(}tlydmsj@O#c*3$tWTN z1FkKI5upBOGOnqn)?pvg)m=O*;q01WSfyB0i6$<1^b&&NbZFJ@OwaT1-F`W%QOMB| z4bz$`)gip*3K+sSprk{3O^ljfdh0l6&^`%wDWPeNPQ^JAD# zmdkabUM|xy)?xM5;e2PSVK4KqSBh!BRr-Oj}W4Vmr`V+UsoU_ z5kYz>VepnPypl+pKqNa42cVuJjl#kzb{#tieY#0ZAT5BZCi~6uz`Av;X3;CQQwb%g z%?gAc+s9AVh<~$i)`Dds?KC<0mLT5Hdm1&e;z@h_hiQ5rMoBRL^JO`v6Xf z07tWNO!iv=gzC)9qc&N0{F6ho@MPw={Sc5A8LfHF>cQ%T zh;8FhsrfAEOL!>(>0Tq^+hqUo+!OGDaN=-X!0_u-di#gs53eRC!<#*5|K3`CP0KH1 zy2SbT)hI0N0U%%O>K$Q0g@a@I-_3453OiGEv-K%QnEOhXglMPn!exam zM4wvrK{h9R?s{xwDj)o)aXxNbr;M-;ay3;)+=Rav80SsTM7R{B_Sm2OktJRRFD0n* zU(^uJ$prz;2&HnMFF2+2Sz-R%Fx(v1Ot8=5W;8+OrfmAO>nF`J_4=Cuh`C#Lw(l>F zOq^t^UuXOIIZW+`u$HRg*~@H*h|Ack$|*bHw8BxmTU zpx@CtQ-{6QxYZ(386z0!6`gYD+)kX+V(bY*U>v5%8e2y{;X-d(93QOmw_egHiYMa~ z!t<+69@)4@oj$i3b}qe@5<<#DSC6W{C-~U{BQ_0OY0E>fYcqj~%$~Qz&`NX>kf2QO zyeK8!59^$<{--L;TMkd&w36e>4*QV~cEG0smjLGS1D5S44vA~p?cX2lIt?G4?;vCC zj|4*O@0eY&IcHSL?t|9=n_tohqk6tfO`S($mAemcxJ4gKJAQw6xPH1+lzK*dHdsmY z{)^qJI`60hHR}zFkaabF*J8PQbh@ig?hfrGg`N92TMrl_Dz23@#~&l_;cUEQ8Rii= z!0S-Xo|ND~<=`i?%=v^RG!s8NT|AA<7M_2?;hrK3z)03-my*ou&jRLCz^#3>h}7{mWbxRxowkz<}2-y2sf%|x=+7bTeh zrRr)fl2S!5Q8@DjyKu*HRt$uMvB48orkHxtJ> zh!b)bkMhYSe#-sbb8;+uJpCm3e=hzf5VG&x4^b~FlH}gkux{1-N>oiXdb`PRMo^&Z zn;z6O8#1@}A*QpZCzatYb`a+qmTQTQL1V+R6zOik4_e6==yuJd*?Q4(QhQ!4Qos= zequcI&jxSmh__$JvB7_Muzy9)|9K8J=Mxc;qtCkhHL(a8z|MO4;nVMnb8}4|txAUt zPDb48d7sv<$|SMGvT90z&NZahDKB2tj~8&WLhzA49kUSq`~Sn)bq7+}zW+B-q*4i$ znS?ScE4v|^qU=>xvXZ?!^}dyCvO^InE9BUm2FI3lI1Wycm2tAS^Sd88MtFO_zyEaN zdG7nVuXTT}&vl&_&YIq_{yzrX=N0Z;H3%TvJ|^zUgM?jGS?S&u7j(CFxz#esN4zzR~*Uf z7I0o{c0OxA$2U86)O5B8(c9NoVT_%PaU13^Esg$s@Whq!OSU6nMV)txg71mi=z^SjUPEoh;r_VrRcP-KY`|kDazhg^(c-=UA*3?cbQ(IRz zBy{|q3ULF}tC%F-r#mf6| z@lc8v$kx7-n07I*2wD=QLtfmHQ4NWiNrA}{lr>1Tb#$1cMc`GCT3zNBNDDBH@lY9Y z{;GV|Wk};qY7{eQbBB7u-d#pUg7E|4qO&uG_eTDqnJq$jjD8M&cpqIC^V7MWNr!$U zZ{F|A@&20v-w`GMqo_d#GPR60A|=wQt%*8h3N}9ylJ0aNU04BY%j0a>$#E^mTSr64 zBDbW!hh~ZUF}=qtg_JjenNRna&3@f^egrFyOE)(+4_4QAM#t7xc!_>Q)HGfy{*9n{9{Am9M_!4};s&NuF3ogFjO>R91E6iq>QL`NW zZXn$0RbX9ozI6iB)2PI*NJ%A>3`Ha{P@v8PGQa?%ddaJio--<@-BxXr@s%HjWy@dE z|DGDD7kEmRnVxj-QCLRL%R17>3Xdwb@l3CDq4v<)g)q%~z34vKKEL6yVfkX#C_(Ez z4`0&>a);{|m?-kn<37(b7V;z?!;ZUzN3%R;a0&OJ)9k|KgRb2?+=xiG*j~)meQjXl z6Tyff+uC4ddfVrRLk`RPO^@q?-nvk(sGe`8_Ox0o5u!v z)($TX8u9Z7_wDHU|A+yw*dRL>Dg6Pl31&cM~cl6Kj@F>>`5hWR{GJ4d~a6Q z3&rWoO)~9x%;0dDH@Y7Tnka6cDZspXZ}+TZa4@|#m^KZs8Ta_6>n5{Ue%q1HP)u+i zm@TPNPRmyja69tjf|{oXhoIoI=g`OiZqYskXV;3Tq6SBY$?LS1pG0so?(b$sOBT+D z`#o>%%oDp8C{bcK@AtaOw$MOt*VbS~X5T2bp#Uk}#DQ5}A1OK%H1&KwY1>jo%u<8gQzf6l<8u0toZ;TAzT z)Lc_8H2ppzns}#KlJg_|%9lHq;wJ|U(;Df;9ftxtrl6@O*QWEjL!+edrrS#Ti82#% zkmXw%<{~|9;n-MJheLzX;jtq9{CuXq$LskPIj#-*`L0N;INP1_!bC%oib96)fr}Usw;r&%xkrQ?)y?CE;8FZ4!H&588wD8{is`NR~ z^>AyRs?l(e{g}SQJeDDcwwmJ{vw;Ke&S1f9Pi%z9u&S!(dt=?0`t7=R<4dC|)4nbm zU|NxM1?Yk%)^_WTBRBd~w(o=Jmc2Ful&=9iV?VF_lgK#v)%z47cd~EQH;M9`&)*!s zWclbm`lVXe_iZLy9FWP91e2~7dK0x-BqWp_Ty(V;z7}AWgruzArHr^ukT=ZR7#*-ScR`gC;WYfoV;|S!oc2&KqBl z+ogAZj=}1=AgA)_q)<8ZNW77PV&Gw?aRECxE&xSE+w+M(%D6~yq#gcA?Tk_eVrp3A zvcyhTkOv%&J%3I~8ew7bZ0EN9QjdHPJl46Ia?<{zwzT+0rV zkjcITInqC^&rc77p5^y6JIG`nf)DofKR;_pbSbsCMc}%uu6y?N8uqY;%r4&PvVUqC z3R9#ywOd)DP}XGHNCgv8JBN_~OH0hz6KBk1NOokIN%lS4+MnJ>Ts@pSGZ+SjiS3@z z)SoGH%bSvxkcs?O>^c$z<-$yJl%7f3T;CQaPY@YU-7Ljo(&}JPvEf zJoF|~k2`x`Gq8-~J_$ACPc8M@n0>t?6U+vL&9H4p;W0;v&ng0;DsUWZ*bbQAdl43_ z6wM_~Z<`XEHLb=OR#oC`6MGMxIr7i|59S$2n=m*93}sA-2~P(LYlE zsHp4rOtNTyn`TZP7kFbXx%qZ{N#XPa^q?2z~rr zNz3>kG&zFJVP$f}ag4}3zHe4oSok{zI}^F^!!bwJ$|{ZVg$TY`{dgZ?+h! zp~8MuON}{uU$^nS#mjGEt}!_D!Y8#C7>uIAvgf+rg;X;Il!Cr-6Ps_wh7HL{>T?xV zW5-mti9$yfh_ExLo}l31ZqxT5K8jBCcb_@8SkBm2KAf{4&^y2 zn5%lz4$ZsqS?n}9aO68Uzx`uGtgc&G?6#jhRF!n~ZC2U=c<>2#uH-!nrFv}q-sWaj zicS-Yc^JGraZ>vu>dZsLRZ1oUhu0xOv#Z~sv3aGNV|TgMvZt^-f+MN)3(kK;c60Xj z_=8(fMPFOXq-q*+-<^Vd?_PV*e)`yD9}|AtWp4E!N4c)@r>gvzie&vilDBF3O; zt|9m8PNS#i6&)OI7jwmw@X?iIg3LQ<~g3d=NB(YStOs0Bzy%|)zS zfcs8pV#44ncXQKsegL`YF94!(7yM4T)!A+T*<~vB|Y+UN$dszq&{t_8vD&!>&Ty_27y%IoesbAhYXG)CN!ku`6ics zsfrkoNFo3VR=(tZ<9%uy{EpNpQ1a%rmrc#;&O0)jGchqCD!iOLGVb%J{hE0%G$TWE zWV#=)La{u>kO)llxdeh|HT!Ort-#XlUcnS_6N<{OT(lyp!*6i(@W+2r$;mTLE-Y|L zrD4Kw*66+91ov$tIM9^{UGaz9_RWnP3!?n4y1xGg_-@)?1S^OhP`u^3ajr4}s6D4M zr1ly-Q>PredC~b9mjFsl4do;U%5}gApUbh3`4?)(X7xn;MgA-_M5cM--W$u;p^zst zHP9ihB!MImGGl&G5U%nr_AuIm54B^WOf6Fqq{->k_8RQhiOq!wY z^i%0a=^dIT%>|r3WW4+ft!5nw#kR*lOb_GfDz*fS4-vJATn42*V3q8{QJ7#MqJnMS zBtY74dLN2!%9&IiJeeT8fipMLYCFwA!!P^m%*~RIoB#;eA>j27P_b%mHRef1;YBL{ zVP5SF%x%r0?~9)uOw70TROPo7Kf(rRX#`})Gu1rl;6dP2jy!{G zy7JaZ)y=ZsblQYpL42WnZTULLOAqV;3^%xN}=*!?XG_3i3 zWmNnBVj2&xya4kLKuj$B3w;L!T?M<&M^mZvnfESa@vXYKq|{qJe-T}}3e4iTM!(U~ z|G}`q?QJQkzXCLWA32mq8w=c-?24;jr5UMNUFW$Fol5f4Mmz zD(>4spdl0f6cR?jGhk%085xvY+%YySnXo^}ID(r~NQ-4}K3Dn4!5X-SV>AN5x7IWa zkyM_AY;o}vn4REx=N{+(bf&y8Fw!BSf08-58;St-n*%y<4RSyYVL?5)gcWVO)V2RW z95~GWYm5ez=t8GSc^lhyoTG@rh?a(59&juginGsIh@At^L`Xt*bTyMs@U7$p8(2x9 zyS#MMd_?^Vf$ZF z*-ZHrGzjE9-LKMaUexHqtcCdf+7){t)!6|o)n z4%lWE1(%5=eW&$nEwujm3Af%?%3_FkT%nKW643pIO)0VoNPnBm2Ucc z$KCN^75`1nHU*!#Ty%A+~wd<8QT(SN=K(^?U$kSSyYCpF$7AecGBAWR*wssVC zW~*>$RDwuE)iA4;RhEx22cAU7GTz%VnUO3c%H9V>%w`q-cpbT_r=J|mb^1w=P_*H) z2vQt$v==@CKM2{1WGI=D0s@Rlj&T}$m?aqhWs#XXvDr;N&N6^!kDmY_ry7PI*g+dCKiixR_h02YpR9nJD{N7+?sw4 z%I&3?9mW_-o+c)(-UCAhC#n`c2b04;b>Bo^il{V8iY~??hMZ}1-nU4%Pmafy4(D_n zlV;SV2jZI4n>S;Uy#E(4G13G7{sY2}TBa|w)GO&bGe(CtLPrsOeO_Qv+J+6CW<-PT z{H}9c@;<_XCY&0E&WiC=;`{C=!HJ@JbN#tTnf_<`94s6;+FO_YB%3X|5DD)p9meF~ z1n(BKMDhROy@a(HJSA2Md2{02MFg4^XO(C4vW4Z%R&lWTD`C%Cra09BN1bOr(g2IORd0kQCwO&u3k|db= zOkyWtNTai(G1Gc_`4ec*MW^(7Ldb#Z~e>=)DqT4IEokbhG&)m7FdPsEo4n79{(DiBNw!HfVi` zS}!vAY4=rdXOOvHFf*8{Qb>H8< zRya@-7Lu50)?GG(YAMOAdcS{UB2e0caaJ+vmXrW(($Z|BBYAa<;|Hk(nB!3ELH*pR zA3}=}b;7y3^SlWv^ankczRDD>O`WXuBkl}YrO7>hW91*1CdMcc*SPUC-}*7<~#orqmT9YKk(KblWcCCEd zrG=*&t_>9lTNafTT2T&k4*lw)68<2{C4#ABYzc5=j&!9ll#yb!s!boNgi=gmfsDcpKW?1on*#$~9U{#p>L;z1F6YX=s8xa2SY*h4$8iyyKW zZL4czmFa?IAIDov-#OOX90bt5THQ_ZRd0J3rqHY=#Z8UhIfR(a&;H0tn zfR_4`#bhsKt`v;5jQSv8#XLo+HkMk}&Iuw<%--J8Qu=Eq{aJ^&C4YKkh!R78D=!!PA+CQ&l*k$rK%AI!ALrpx!k8tJNmPtK zF=#$9a0(nn46ZbVRT?oZalSU@Y!R{BG^Howjb!T2HrHs2D5n38#VWMd(Qh_WN}6&3 z9{AT$stcq zd*hYv(T9~69$#WFnyWUAJ(?6fN;6uJwr})Niw^Jc4}txX5Ek&4H{Hle11#=*`>3+$zcb6wl3(_EA17PNE>Vc*wiM6bnQ5R&_s=O@ z)V&rcS1QXUk=isF<2vFe&DfEjj(LCZ-yl zu7#9U32*qf9}pk*Tu(}7E)WhTHX4k7lbvP}{_SO8zmh`$WF*Di-;OXG z<1$x=o(8L+0S7c>#68O9xWF4T8)h2HkY_CKdDt=a#-9{nWhr-gi3Zv;HJVjue7Vr& z-|tjD>IXiuG}@>jNY}_U*mhZ|62lPh_f`A(_|OG3^^1cRx#7ODomp6XZO)W%C%oR$ z)dEv&InR(@hsiMXZ_#D>Pa8FuA_Z|HLDwis%VC6BI|ZlpbO(CPNfij3hZG2A#>zWP zlw~S5I6%ofHybVCThuWwqmR|YJf(2%j4&OVO4-ej>*+tOZ}>~R~BWLL&aQD%$DCac1Dy>81-ES+Q2yt@UC4Y zqN@MRGQT2-8}f{=VW0c)C-GfjRabRT#U?JbJ_p}h9YSnOE_+pNSqITJi&a6V8GQPxt}dlEBmEQ0 zc#p}RS07!Etj`Nf-a!&Mrmg~@|Nf`7Oo6=ZdiTH$+7^~}EoN^p%w#FVC@8fym ziT~i(l@+_tYSlr*t#c%{_{Vr)ny%iR`D!-&Nvrt}j*f$UMC&(2s^AGLLs{^#6qHl@ zLs<@GE!(%&5&PNJfCY3Uu?f|3V)Ra82MoPPW+q`ll#OhDR`z4DBlMF%B5W&{*jgfa z=JH&jt^Q&B{CQJpli7@JK~4p+B@PZG4+Em&Da(Xb#$Bw0URt=Ir`szw@mbH$J&a2l zhwR)Jv@&e!1E|2|@t+#Q9=i(I& z2Y)$kC<$Kiypjekdkza4nu80_4)h!gdz4>B4f<&om(>^4axjhoioj-Hl5ONtES1F! zlx%{kby}G(30GJHx|B9%fWIEPU-Ii`wnf>6acPMRZH>vltUAoYNM!%Y(eQAs^OSbg z##k+0xgy>5Ev9pHFx|5|p}VeR;L%`LXnH4IRVbJDbm8>a?Q(iX`^ib0xuc#39os!H zGh(}K$CfDc4uTQ-@;O#*xo0|^(ItYGcTd=SzH| zBJ0~m`AXK7?6d>GEL+>_Dc9W7eZ)&r(rSjMF|J!$JZ}xjNC7Tp=0}ZSsd~vmX=}dm z3qDLs(P&Ng%N8#siIxD`65~&gc9+#nJ2bd7RCFssclR0R(N{-qFV>_lor{^1h@~Dd zY%sQ@e6uiFg%_xGnuZfNkM{z8v_seBN^BE!ee%3Get zLs7J$Mg8sk?hVST5G@IJcIHb>^|r9JGy<12$^npo&^ucCxS1+Xu=f4(Na1^dNmpE* z+Ph)L1Y@c`1ha5ooRKTO+t_leqT#Jd(UB)yyKbb*5?7FVV0IEXa?9Bx3~l3hX}Uq&a<%628I-fwaA2xGcH z(ZcZ)r6DLk2%mvO!8+KP_-i#eDwC(DRDn5XjI#kUySQu6r*_=Gx z&^2bX=leaRVsE#oH{#izna-qV*iT6^2uBI2p9~@=iHfIB-JJd+dq76wrWu`Wdyt05 zMMX|wmz!ux#v1?6SL@)p_?8myms}!viEj(Eh+VJ*wuD?f$cZ*iGKupb{jT^aj1TKTbtG+)WwoMO3P*g9Hz)#dkB#8l2+QE_AqP zYx~CR?qGaEci~epyioorcFGyX9#UW-p_(>*7vMoa7P+HT)^(~(`3l}=-^@Un6J znXZ{R^C8yd#g21Ha)@d18)Gr9 z>>Dl&m5z^xfxYSu?x~1%1Lg|$c>^Qg>{nZ>%Ok?Zn@r+{%bJ_4%`f%!v+_soVu-RI z6#haoJj?cMw@Z%429f;=VkR)jw`cju)ozjzC+ZmtqF_hpJE*Cs$ZwTC&2RX7&umRX z_s1e)6Z0@0#@HF0fW3b#4);B0dchGO1j=FgMT?p8T~C!g1bS$*_q|*kFPM)R&&Z2sgHP?dcVc-}=Tx99 zy;vZabuE0aQ>5?YoSG_BjB_(dw>-vTlhYQiFZ@W;9}@5)A@2=Ko17eJ=bCaX!Dzgt z`IJ%>d|>#YC+Qcz4kx$n%7y{BB_=M{b{H1QwWwWI;IJ^&nY$F3+*PQqcYRNd-cq1{ zsl5Kg!V!7~23+^w8#JSG-5o}IPsK=^aKPWUyhX~XgAd;sd<){`$8ggpRCoM%wK~6o`!dDi%Jng5>Cm`;O-a@*UaAhyHSbOky z_ND7D<&0)f=!@&|#Jo=tdvo3MdmuJUH}-Zs8?VTfE3a$<5V?J2FJn@g&XqfR9sxarX&pnKzyxzlyiIE7CJ(DK*)z^ zpsg);BGd7+q5r;Zgn>XXuvI5utDh+#O`Ct8_MKCqcV-$%uHI2b@R0OIUJ=4Gh`p9RY6N zzFT?mvE!ny&f+Xj>BoPlM%7Kl(kGIR1f;&!;O*?|rL|@!M|;ev#y*)Y#O+MzFy(RW zE9k1Rc9qVQA6^*kxII75=!FB=N%u74P(^vU%tFUWYw%TlBUm|DJ59+@;mjn+K}M|f z9p7Eb2NP)4_IFMRf>bAK1~hEt454T}j+1xr>-gixr^G{Hpx^_5|`-7gi+7lldRxY6vC3l~}vtH|mcMF|eKxySaE zx&lX#(;}{`JB>7zm>hK)rsY00>5APgPRHXk65%?W4qLxJ5Kl7rqlQ?t8PWU^ua$UC zX{)s4v(QBu@e8C>AyLI2G6jAmvb{;ttBoi<$l*EPcU~6z)~O*l zmaYUh?{3%bXl;R&zwKz+~4&F2Z;#omd?yrmHR%cI0-ylCE2jy3r zib3B+T;dDF7KMKGy%msTikXSGfaXZphBXl^=64URkoen0*mVM2gu&%qe9u}f z2Q2TMK6Gn5H1PZ1uS#eA4`0h67$g2Tz!#iSfSS06^MD18M;qCEFl$a-sAXD}NCv7Zbepm7=YQiq<22|#F$ znm7n;OvoMSCvD;eOH0a(o2l1)QBKjA-*ysCMmRoQBXfBGPz)L- z%$$1!%3$AH*hDJeJphBUOQ~3fb-*oa7qE`TuP4Jdn8? z!<(olY`@3vMiqi9MmHRoG(T%>OV>~9lV(55!leD=;-P0N2rz7b10(?MSl@{Mg3l?y zBn{04jsfh~8~I}*DD$XYs{F@{Xt9jrWR+Ino99>XA>MO9PfW{PBdM}kr4kf%G?Y`x;b!hz6iyv)&Uos0@!*8wp+mmkdeQ_`d=_j;G{(4^*q6PKqx@X`PdrofNBY4)y=`vOa?ql$OXXb57$Pb=Hi8^n~_@%OXAwSALYUh2#LF(HUH4r0#fd9mx zvbo8StiZDmj%8%yMhm4i*?y$}k_JlTP>r36rbu{ctUBwKjj=JrMt~9+ZH8HQ9rvE3 zZa<8*$P1eBXTh=5IJdfaId{j;ez`vj!!Cp51~=WQtm~|3M0+p6qhzT^ceL2Cq{yzg z(81YlWG)I6m1jrmJv}@Z`u#BSEw;!$2-;|vEqtZ;Un)sL_aHQ=JgxS!p}9L>HY!By zHWOJXwJbjb! z;-t#1Qg6d=ACY0Bf_?f&80UZXxc(6K;0n_|icGgSmfpfrfbk0nVdFzSAR(7)4n+ln z0+HeHO04>KWtF}HnJQaM5CH+A00>a*--eF6Rtr!-mv|3COc=_%!2|OEcd(|Ts7k}- z@^E|NB|d-oV(@(aW7ua+Qwg5aDsP;Y$o1&3b7d`YeJ>xgPP}ha5^*nqp~ty%Z>Jk} z{yzybLVR0c_J?NuI{U5aq}8>>0T#4s`#Xpzsl$U1Lybye*?jdd7|dyWP#>hZ);!JW zv+YTSc6NMvGhHQqT~=B6!DkZQP%2KTb^VNmD*<<9z(q-vFr#AZ#uzY9X}oRG*!|hA zMVdR;rQ+LJ6hfSEFI0o`U0#e-(8PjzDxmbZ9fmH3nO9a1{y3?Etbv2;p{E`B#!Mbl zjf}pJjghFIzS_kqd#b4ilUqb>F2c~DqWkOtoX4f2YU)_H*r0RYWvS8!4c%pP{$d4A zqO8GQ5N_O%P`5OQ>>io2FAxy=#$lw6WOCvKfD-;_C%tnfhd~(&?b#*S^M9P?}`D&tj zszXO#{|9e8#c>t5^80A~w>%yiUs1?yYO#JVk&AQuODFljjhIif6AZH3ADsxC%u zyuq8i-1)&4>)El+{1H$Gw#qxn?b=5vZ`l{^c~fWfCB?JJ|1aT&?zyCJ4yRgnla!&n zz}Y;cpaO><3ZyXtj#HQWbZO%S&#Mzw70kuk14FCpFO+H6b_K`fC$csSC{)Kvlo;LZ zXjUJwdEDy0Lo8@W1|Ybn)Qqxhe#A<+=PVP;uICpWDO>!Qt&SY1b3+wBYIF!Ed3#nm zjbaAh0yPg6!C%FVp!2bE#pVH3|GV$V+j2M^Y2M-qU4KQa|;_9bYkdSd0NF~ zh`7X=kD`hL34WA_%Pn)P!3zBY3LKdvi3?aF(MiwfL)jH+>EpdMwEFXNe)C-@oV#hE z#|t)Tdi(2clf6-0UGm(%fVo5VSzKgf#$Q`Lr!H3ipt-Veo?Y=$@qC=8yyx|WNqM0bcMgsRdIJeyZavm9p%rCIw(>Z12V|j{UPU>0T<*1 zPutmP_OJ8U6W-ogItWM4+dM-2*4NDLH*>Llj!TuNu;g`Qe2);D?sWY!oxhUWt;Awh zYKFGr@q2i4r|MN%m6wB=nZS}msBAeVv?2ERH-wEiHQ5jI)sV6 z%scOQo|RsaP4swL{!*C`-WbouKr8yQ3XLp)!AcV;*69Je1NpcFWdg*x{H(5?yE&64gZHP@m4ON^jcc;EfWjq>u-}iHexuf*~RZ{tI z0T%`r_F9*vyaYIKhBG}pBb?E=%s0cukHk1F9m=0LT@lSQLf506H54e2OpRvTj}67j znC>zGs?^SF4W{rtGfSpmMqrvd+04jvLcArM9DFcO3ojOfK6sUhH(yWC`8I@=r`WLV z@I^w>vYMJ3gG7FezNo$<#y@R6=LOnm;_`9eHTv3;(|odGqlR`x$w`?H%6hiDNlvcN zaU8^PR5Yb6R>f!Tn1_Xp6fI&)JS7eLFRx2zw(-^B91wu|+FA)oD9lcQ`>0(i$1WrC zYZ_QpR3hQV9Da%@m?2#E>a~N6`05+i&Xh1)%~pnW!5Q5g1(N}#t~Lgy zMx^cpx3FE@06Wk6jaR5ufI9iD zwKk?TfY>;PKr95$0bm2G7;k~49bYE8I}Xsn7MeBdI=FZX`d`P#y`Ae1GH-dbZ};$g z0*@Y}wex&|oJcc>WQ}s&?Y4Ct*YDaqSaW9_!WUw5Q;92@xBhVpb0Y0B0RD zA6lrp9v`Ep05IBZ%>qKb+8~h}(5m31a2rE)K7lkJ;PDU86wdM6Oqxol-b+bK^YWZ4 zFZsMMJ1#$op9lFA^5HDfKgd-d-&=JHRB^j=uy<>2boZ^g^na6*?)s|*;LYCK#G75- zN3{v;6j}9BH@1W;Eq^4jfji4o0xvcCyswz)N^rEPv6yj2Ks2(-L|&hxg&C^kQ}%cx)#zaDA({(MEK0Ea?0MVlhYDbhk?Tn1lb<+x_Y=LLNdG=|$ z4(D(=_r_F$8R*k?=X-}+GmwKDs@dBpKCAZcUT_BTg6$XJU(njZq5N+N@whht@eEXO zi=zard~%AvWy@;7nbl&x97b|W2#gd>$FM&#V^i_)=u_@aF%@(7&jGc>oECW3zB-X{ zpN0WAZtz7x3LKFqQ0 zBPRZ#&cicV>o}$Km0Nc+60^~nA%-Y7;*n?~V3MG&5WQoC$o}iBghYWX9wY17|HGoi z_N=g)9fDH1h5aQx* z%C2A$OkY|feIJ38zbgY^au$`dEOeOYzYPV~(ZiQj;~rQuTMMRf^O_SQ5QhGK&rIG= z_%BKI@i@vxgi*rd4@F*HNMw)#9(sEC%Z zz@YR;BT^8A{jj^i2Tub;QREd!*(V@nKMv60Y??Up=nliGyUPSO=t+$bA@5iT-Ny6V z(wneKukZ<_;CUeLkIZ~LwMs8$b6MeOE+1+y1i2JCnv|`se!Cw4giO%!z;!y_Z^d!h z!yUMR-!HYqCa(cjw%6SzQSr}mQ1}g<6r`BgcLh+q4+U^t24Lb^3Xmlagy2x5ocw20 z!{HzRXRcfV*!`$Rv|gsXJj)I=P;E3NEy%G^EWE1#5oxs^P&f3vRq8fWsWpwSJ`Wuj zC<6yUfEK_>QavFj9ZYXj&_*7Ja}ojf7I`s8zOfx@*)BI}F?I*j9WBZvoUl)4-jn$R*+k zb`-A9-7)Zc#|HG0f4aku0Jdp6ouX&{;mFNTfJ8Q)r%4gLBC%0G(+4V#1wcfw`u$< zI*T|AQHfVtQ0m_auWLd1-ZFi86FNgoI;0LnUUFG@^<5i&Kzuu-Q5?su=g`T~^-Oh% z(_EDBt^fXGkID*VZ^z<3_k<-J{;}id^pUwztLff*9NqD;Gc6kLc&Px)-A z>M=tkPBYxaE$7{+_q>p1p_2`#PVP9eZNP5WO3Ysm&M7|krtWfveuj=`O*SBooXR5z zG@JnZSZuK9u#duoT?X6$ccEwHgjM-9M~rNPU%ocyPS04r`6QH1G~w3c4EA zbp;thi$LMkE8T6t`|;UVYs9(z@hjZj`c^GQs43*ca#M&jFmu=A`9T4{$o9*s1>hi1 z^dh@qxS7#YeFT=FKM-*~&84gweVMG9=k@DS9t=D9djB4s~WpJ0P8(O)uk z`(emqy1Zw75vzY>yyL44gY&}Q|^;z7F{Bd8AU7JnDBwu=1^!P0I@ z@)2)Z+Oi87(tH5`(ynp5Lr)AX#i!<+lEI?-!d|b0Ko?int{`uH`y*HQSN|3PgW3|H zqFjoF*^@c`h)m3`xn04!M&sA|hq&mgj;*;!QiV+LVwQ)lbX&iejsZrlx0o-~(B)6Rk`&F3>n zE-xu*9?mGwx}Dl_eM_*`u>xts+f_1acPEH{1Q_Nbl$}A_T$v;z5MZ)oR}s#`)M5bV z@9(ytdd9l5F!yV7x-T3*XWx!RUqekxa@g9N`tF>J81ex0G;i0=>kxxb1)Bv}X^s*% z#(L^fmDHsS2cMRwi7yw7kL{k@75}B4ausTe2$z&L?fY!?B?`fL03dx2!fuo8=KSg^ zVQ`v035MwJpK`MJnqkHp{3hZ7VyG#%E-#6@=6Wbf^viVrbL|3>->a|C!2?pLRpGbs z(JK9R&0{m^1U@9;%g}D|g$$=z?>evgZ{I%Qubv=yD-+mnTvraLA@O&vD(*19#fDpP~CAW|p+LCHS7>A`vxCxj0s z-f7~_S-2o_pZ=T+r=}K_dCbf!r_rh%6g`@y`Y{2a9>DTbivHCJae(OgpPS z05rRas^Py0-uKIP*s`Jx$vlr8$eae7&rewLh7B7~?-BipSRBo(b2|&XmtYxSqjwcC z7Bbhmj^>T_$7`E@yTj%6D>(}vTq(YR1a+B>(+&75UL!`k(P>i`zl$*Vfg)+9!|FW` zq=45zKEhpWZ@x9bkncb%Agupwawc+!xu9gM!`eeEX08cOrF?$YvkX+`x*3-S9@?N! z(%^6c!-TCLJr3m?H@NKUTZ2GHVxmRu=FXLsT=FW&w6sTFZj;hVYkVCtjrF*yJOlM# zWyMTREOyRQc;exUQ}u+KDKF*!l8piYh63cHu97w@0wZ`Bf|jmHUg4kL=sQs#A!5@A zllG>tbD%W|D2})@AHm+%p0e?|uoD~smU;||=7T{mECe8yKSStRcUDo<+)5MDinA2D z3zD&&ISs)p(puI1-+!PZ*cPB*Fz!oky!Hz;_;sODw#(i~0a>>5O9u{wixG?FY+iEp zepr{EB8M71#=@=*E}-iZ z{Kxu$fb%oz*v2Boy2lZYfJLNyLw^?Y_81Vz2Nxhj1>5vw>p-|FAl}_jQBqdMLCQ#- zak=xCXs0YY{7WFX3h6ybV_{jlx`BY62Ob(cI7~3&t$ZHzK3;FAL2X@*2G1;3T$B}Z zFqMR_tAl}G4Ht%)QHG0wVrA!J#u#BQ-I&5vz5pXWo5oahusZkWjdYGlmjS%9o&_y^ zN6-GGKkbQzFuzq+k(9wStpI3T^x-UvEtFKqmT7IDW5FYHy)ICnv$}dPF*+urFG*8%7Saw zzbC01RaznAcVnv|AX6K-a?9u1c*UTSC`;XQsSI3}()Ql!EOfr6na85%vBVK?Jly7l z)aE&5j#V`t?JCW<`>nfbCTg6=$KQQsOw69XB(y5kr(0dXx5fO9AA^Lx^F>=ujdw4u zTbqfQiSmkceyF%W=Chb8=lO8##Z3EZ61=KU>wZA6kZ+{oxonpxg63;-(HOqy&v_7o z;0Q&PRj#MIP9U+4Hxd=RWLmfwjq{U|rl(R~YD5Y3)G7JKE>5sfMxxhG+&F`qo2~1b z!dUsn`=|L0rWd%RFY;~lE}PU9F?5jKil}LALV{rw5tX`-DBqzD%YVw#abBPTrNS63 zMxJwM?Rac2Lp5bn(fR5_xKJ+buE}(d9-&DdPaD(1?o2_Xw8U&gL$<22YuVpBv(`=J z5D*_pV;k>N|J)X=)H$hwo}C)TOw;Ca6^JWCT3 z5IXWH{sd@sx7UpQ@iw8}?jxmK%Ts9>`s^BNyXpLwZ4BhjzX5~o5XFlC40e28TC_t$ zBVSgPNx>B+OHu8&p8^T)j5g`KeT6?uukEd&t}4NQod@-pq(|26_vCe^YS}^~Yen!M zbGt4vvJXOr1)PF>i-*&^rA^zpTJ~SP;#;q3`DL&Oo|SM&m<00xqRJt4X-|M=<)Vtb zRiqVUgY5^Pmh)l_{|ck7gubH8ri7dvwx#ht35@!5M;n9l_vyeb_ynfF#f|=Bp6=He zJDbu`c9)Pgth3_{p2#G0%Pe)nWp|Yd`%AvZAs4Tkd-tZ>Sfe`l>Wc^LyR`75IK0)z z^lz`@{p1|dik&j2_^g|S3#C*`jimN|n_j2n?Ho=Ft2q3#Lpc#{swfBscG$U|=skB76skdUn$N)L zuk*2K)@6l$ukPcPzSwgF$8u0r*&z8pH)uHY?>u(%BhhrbEADTc%_@-x(GE@Fk#e^c zUSaDTE!(CV45i}jhri5f?EgN)VzYWE zQC4YGoolJoXm*sfPaBw{lVOFQ#xXX9TY<*i4T`;H-oH%m1kc7KeF(N~k}mmGk|dFj zcRnaAma%T3>YTi7$6frK)4X=4(~I#=(~{kcF1!K`mNE|EV&Y0-lkYY1-@k401cqnR zJ=romuIIbXx2#CSR@uPm?yL9xO+lv?ZP4uxb8f8#ATMBnH^6|9H^zO-x5QH;%u%?0 z-?c)?M*BMu4hp!7wD)gaojS=gAJt&Q=<)7=wOfZ2W#r6~u;+kx3sSptDGgX(*Q?-I zwI3dJVvfjof2$5`>c+mTWqI|6OWK6JZI7j+&E8klwWMzuX_%a&v$nWk9*7-KhN66*_>Ng0`BX_@cqz~8^(VmS4@vU z1)#Ue?R`6HyH@?#EH~&AUS}e7Z_nu8rYTQ)*qT1a#mDMQeRTt)Y?Ll$E)&X^E=H|$ zoPWVSaq*snp#@8Na8Rn0kbPa9kzRkcY`SdFvk;N)+0zSNTemRUv-2(fyC35f8#c@> z^a>YXXTCDq+UB=h&w7I5(`tscnTHP>Pi9mW(uO-)hUkcUWX8DPztPE1UM6@MN2BrsNoTQGY*nUaLFDU_a@n`%=l{N`*LlYw!k z5WS0Mz~xQ7<%pk=j>rWm>sz}0OBWspe>XcHou-s8^)j=$qm)r>5cOh*h&IGr%L@GqwQ^()C!+Fq!; zFe4l4F09;j+A2=9zuyZ00Cp#j{~BsTa0ZQ1;P#(iNVW>J{l4&DCywBw`mM~(xn-Ff ziWGK-0chiAUHY8xjxCjjiT57@Gb){2ff7_CW`YU|@1@72Ke+DW1;eIN8absvY0gXP}%o|-k850PGR`77`{r9ph zj108>2SRQCD{~mG8{b(NfuaH^gszf}`kkUy5o0JaRNH|CM=b5C+1#$XK`rJFKxg(g zH2=0m1yn~sWm&6wT8s>N)q>GbEAvAL5yAitL|cmzG}rxC(N@dCy3#UAp~*Qv2;;u? zgAQDX%vM7$mXU4!?l;rQx&agnUaUFzui?m`7V6Dd-*k}HJ-K!18u}|+U9i$L&mAb`4bS*Z9?PYb|2V~Jbxo3>A!G2|S}H(L z)b*eIGO=~(7@8A8lFfC+$;zqY01a*(W(U^P`hV=bXH-*L7dCoCuyGU{pi)%?m8$fP z6_KVQy$V7=nn)*9JvIGQ0XmF1VbQETBwQC03pd;0rd#t`QC5be|OwJ zju>F?wP$_iGv`{n99S6Iw%~`ql6@9%bnxta0ai*%ae;MbK|k1qXkYf+JY(w62a99N zD0T9a1Yh4{Zd(rCYETs~ZBXBPknUx`g}cX?w;yn5A|(d}NMJ7>yn8^f;NkAxprl0Q zBJNkV9TrN06h}1z2}f*&D}{y*#n^`szJ7|sN+R6bW@8DnlXpE98h^3QfQu$~zv#H6 z@OEeDaJf#3{fyK{bQ2QO59x<$-tP2LzNMBE|<7G(8hJm<>b!D!gYIus)uN4 zTh!VbbvH;KNR(dZizOyX;X$B&kKmVbC+nZT5qSFJ4a=Z`g>Ei|B7UjzqMOc+x7|ec zaPc;{;Ku@Cm5)ttFJ9Cv{d=9osHiDaPY%V#UivSc|K)f1z{vvpC-km%PlMuWEp4;O z?=t-!C>}FZDw5W{R3xv2S{Lg~mT71#QtU@}{ao9oA0n?MSUGDH`P*RIgwq?6mpa0; zj-m34<@ZdEJuN3J)PAgv!uVc0UA%6n-EWM3M`RrQ6>sdN1gq94E3tc?b9|7~o07NR z?Jwspt=_KI_Vz-_oiAktsgmjcY_k7gOcp1qJR1~Gj7>j`X!R+opHc7NaD$nZH^*V( z(d4z|bTgYxAK<(BGUX{appr)`Y?Sw()PENKJ~~Z*O6fj0U+-L=EOGfY#z#6m@5Qep z7S%S?JJ{apS@&e?^g@mH?{8B@t{~%OFw`+>!wXOb97X$RZ%&CcVJ8n{DfGZC$79PL6 zN~MI1z;%Cfm^Ym59R-ImFmBDepechLLl;Vo)x?x@bBQu2sBwDCxxfXb-t$I z+tV8_WY=lC>; z?C4vwdM8-1rx`BjXDr@i=`Bz{r%#_j@ch+yq2uU&mhB63HT_VcspS_p&8YRklTQw) zEx^8||IBX!u0G_4CV3%Whujq^(sz-a?@ynMNpP>_m?fKb)%NwnD$1@&I z6Bn7o^_vSL0Y}5q#$TgAiPDVcLAfb6FCUT;JH(?N8)?IcrD{cCEBz1qX8gsz>--EW z+e23#`K|_~Nu+UJ?z-6K_mmFgv&lqobp2)?$$cuvX{=+hX1DRP6OEKQ)V5$xdGBFe zd2LP4rC>R!ERS0IOOCU>I(fI1V&%M~sAn-f=rLq5URl|#i48v+6Hx0m7=vbt5wj06 zZw@zqj4#K-7iS{ug5*hq#o=oC)V27zAESD^EoxWp;7ri=%wy8PcgkD|TwC%g+hb^( z*4w$S0z1&Hdso-5ar@uJ`)%K8BV+F2eXiJ8SqIe1;dsDdM0R|dtCrxmZLj4i5k&{6^?pti6V>)TM9#{9t+tG} z%L#KJJYJyYvNVH7|H_yu4HazwPn_sJtuv;dCgcZR@L_AMJ7CyTaa=7fTH^B<65(!? zq2n+j?0kfeSeWf8nNA6$EO}InGiujLW1xmby_59bQ%!F59F?bdCq_#+>HSrOjmZ%{ zK@2=w^2fRzSKJJiUh@td5cfQzKfDkTPdN|X`|`{O_@Id$HDwOGkJEo`23hqqXA9tI zSF}T>)U;kqsdtF2w``#p5PcyUJ%yWkTFw*Nq5{VJa#@FgA>9Y&od-Bv8j~Px9EVSB zZ?@PT;?tLFZ=aVo`PI@&mzmkHpwdaAjD6|tz2#*FBW<;mry410wG?uXPaOm48|CTy z(ud#k>f2z2&hca$Mr2zYMC*m>Y!biWr6P#E59{a7P?E*_SAK&@$DkY5IYC`#oX*yD zapgze(P5>D5sQoHAN6XylRZ{66YKc8v{Z5#S1H~cOj3OHF`8{$eub2KNtgUlmT-GZ zKL12dSaSd&+Z4JyH#REimg8CRvc!x6=QD9Z=9%X@jm;?0;ljszsexZX&M*ADqmz?u z5WS0CU=bSxHkHJ?oBLeu*si=v;&Q&%SjqY{x%X``$iW@~*6R*N`MGZTn+XU1DlcU~DxSz$1!-c)^u11Wc$9ux?@Y19c$_#9&B>CifmqS}apBQ>aThZ$J`Nc_xo&{ZV3-lBWp=kk92pz}8k*reEC=hzr>V%P*Zr%={AaY118 zSyc(yY??)|^fhZu*)d6&-G>h!klvH>LA!UGKMu$E7)9$=7D-CGc*Oc5-z7fKbzcq+ ze5g8H)U^Es_3oSzRPB%U>8jA&Mww15oPV>_Ax8Bwm-)*GGJF*M>A>+1g+6azIl(sw zHj*AhJI7a9s_SjzyA|*$_$4X^*OX>vI)FL4+Ifx=0Wx-ia+ui`!-VigXV)bM#+WY6 zm`{)QkiGYd5Yv(Uf~hwu&|fLN zGf4IRZG2z1|Z8{5RKn9fJ;!-4-)^awSLuQq&>}r3lBugSK1jUsue?N z5f&*jTz!%bnxc)hST-AXBG&zYgrd(+de%yc~(XL{p{wX-EPcw|$v z?eFli<37VH`+{ovb`})J%ew|zM=8Y79k~V1Ht0Esg;jCyVlZTm5zx~=A>`>K62vOQ zM8dE=`+#BbKR`%A3?}6c_nFp|YNj;pjVw^m*FWoHL(BBkcL{!FTd%Fw&PakL>sfk( zYER=YTPqao1xal#1B;C%Qwu2OQ8qPC{lcn~Y6gm@)@$LX5Wt4&sp6?q@tAgpb4)_e zxzQIo`9+d?dU{RfVNabW+E$kFU%v{U%d^t8NAx34@z(8(>@Ts>SlW+~c1ws2r(VZz zJ8iUhrawP}F$YVVeb9(1R_5CCH$n5e6)|jzq4F2bI9ZmYsceY;Ef8P^v+i?qaqF`J z)hFv{w}l$>_Emh19nxkHuYUpW<-OgeV`8T)AQEW;Zh!pS4u~rm~viaLEStqF6-@vQXk+H4L`qc^Xic@GLWRlQbGAVJhYhBlbXKG0h0Ef=!Ao{*kY{{B9XdY@F|s z9R88bb=Sq3ry35JFJ1xNpzsQOWgMQNlH*zHUxHtpzBe}LJ)<=Jp4m8R*k_D6UTl~l zbC_Ofz0p!tDe|V;gc9Y8EX+)&YY`jTF?KVNo>f}xkUk2PZwDXk$?~^GlNB`$y$3YB zlVd3(uzua;1r(f-p?q#%?!DorlF7&Hj1=by{$a-slh4j9Vz-y@I3Lc05f%#3c-Rp} zipAE7+C!Bk|`7QYeFgPN)8$=&%zp0*2=+yb9VMSERhm$v*9a&Gy-`TlaS z$IIBKNRVxPSr2#(-Grmy&2|j&RV#hi`r!zQ<;ny=aIWydaiti_mqfDqN*kVX&V@WC z!6xX5%YRMz_$t5Kr>BtP$w0R-hdqTjQC!Edg0{|+0vp-<35Jvx)bqkBNSQu|jLVji zC*6n_dh?BUhg*bmnQzF|KfK*d;Y&<8eBbfJ#P*kbm%o_>QyNPKgQN!><4GuqGiUc# zElwJPLn=91)NqwV6IMx?=SlKTr0oMK@npwb8)Tka>je6cAaS0#=3P0?KfI8CdchiP z2wx;-d1*^lg40vmw8B)YcqwijZ9Vp-C*UhdF?sf7_HLb@s1R$iFW6_uzR8&j#PS>+ zYM{y$)x9LvUkox%zsrABWxmy>2O{%*k&KOsohh<|%mYg5-ggS@qy#&R8T}r;ylN6p^mu|e&u~;b%KM@@hlkYJ$Ey77C0#2As%8W=^O^i%$ z6kd5 zI+nJ@8!KI0n<7VUUmU8JKX^fLdp_D=DG$R(Da+ViCSG{+h;K}m);D^@^032Ji}>Y& z6zxp0YkK_&T^#_|OcNW^XvY??cyi}rH?03Rko+S+M7~j2o)S0Q>2g{hQ%R`P4w2VD zK60$k;>; z1ixUI&pdNa5GFnL1g4avpKDwH!PJ^~Aunu4hfAHEJn30{^PYa!6}M-xhXM<&_0!a> ztc+OV7%ERnhvVp4w5Ere3Sd5UZePB9HJI1@bHjnp$#0-YwcQ;Ve$ozgXqEkQ{ZGq3P4b@yj_2i{wmccXf| zQOJE)d^E3>0sf1^+hdVpu6^Q%9DhQKA0I@L6_zpTMKYcjGUTfyz2};yt}o+HS=lQ- zQXH(#LXRTjGq}pr>wV0uT8?({u5-&s2n{`WH`lkXctym!2f3v>&lD*>@(T&R;6#!y zmyqA6i~)H>FdLMlWF9Q??wG(IU=CPIwI?H$=q|E-SYm?hwnVk-IkP<2T2JL>K;6pn zJ1+{vV9vvCsl z=C1G=mpNI8@|5%jO`&*B8nRwusQmW+QE7Wok?DuIONu+Xl&dSUBMMxOT(4fSuesiy zf@BiHL-aq-v*>~^hT7YUk^8|HmtCA^Y)|#K$@^Gm1nw4gysjNpP;Fa`ksEW2TRRAO zBy^Qbu)`c0gD2%Ar%iZaWRE;%U=N^_xvT$uVoUzUJZQ2&%XG7PGEI|rFu=IvsFBkr zyuCi$RA=nqd+Uo#4og4#CYy|^ zsxxCJmVE9-vp)=ENyMX}gQ@bwXBjqk?+U@ao3-=jLQdqH>dn3maDVuWBUo8Dw34{+ zsUWKPLEz_<(z%Zd1AB$=%=HrG&Al`uKDNw?%tgNLRXO!N{i=K>WcA5Jr(3%s37srG z^uhN2;SxN1SW9@}u0+|+^2pw`$E$w5e_ap6*w`5l*y4)>9M=^WSM@m_s|`gAr;s?+ zFpDm_k(_%hw&YupOA$WTJ(tZmf&zi3)QXb^nXjg-r$9I0+{nB?mh%T(@l*8a_2IWC zsU_;a)k<~WF1`j|BotT4LoIxDZ!H|19#xd*?#{Apd#N5T$HoCCKXByDa$e^{zg___ zWjxeQQczYapq$*>k%dWV6yOB;jJKhi(af9*2}fy}Zdco!Cblyea!~N1*#W=-rW+JV z@qZJksSKcRQQ8W%b?aRJq#{KdTPSS{fQR4iLb!;4!$;-a-uxajEoJ=ZScHg4G4}qL z#a8WFz^FBk`;hzy5uN)tvB=YO9-$@?t;{eMTaYIJ#UEptr*Py z)R02N%$i(r`j3Wsf)SO)ZZFE*D=mP3(!DUR*$O&!_2{^jYprm7e4f8e*t7Ly^WI1w zn%&Go(B-bwQ>S2u*w_dw4CG;A)0TVyu`t0+m=!-Eu)?wfHP|_=8P^@WaId z1wXcHs%VAS1`GssTb{~D9luM!p|5DesvKR_|K81-eL8d_@i~&M@PW34Ja>RSMtNEu zzHC3;6~B@j?aaXN_cQ%)Ew|oKc0z&&hJ<4iomd$rW(Up%uWz9IxcBO^OuSb+I*Hbf z2aDs^xNvzY7mk|>peD&U+Qtoh>|cHlPkj{Hl20GnWB4EKftH7>Sjp2Jda&5`8C9-^ zha}v%09$i_6BYl)c7sf+-!p@j!?*g+Y`^aU_+hS06+c)Ntrz`~na5(*jAL$cDtIf@ zdpFXR+vib;??$o(_%9cyNfFmAd2l?Ax=V`wvPR#=yzonWxk(qT zC4LFpW(pEwIBgTtvDSzpYDmvX7ccvl$=%qM1ag17A2cRwj|z9vSnF#;B3LJxg`_)+ zvNol7fOMGBHlkiTYG>m=P_J(_I778X?Q)~!1}*<8oqX=+Sx5By(9s!OD5hGr%y!W7 z`lJPnpW2?op;62iyweTC0yp>`r;sF|B0?SSG5rU2_k z{$Ozfn4Zd=vj14Ef-bfB?u6q5od&y>Rj&9)hYm&p1X;NUbzI=LQVJ|*kjfXwcG0cR zJHM_vK>Iu4H*h~rKhajvnz80f^)$fop|lMPm+kkT+}OmR1&{~O9F=bhf0x6@k2E0p zE4N?X1*Pf@-D|28nZdHL z=M7_iw~gIAcMI?;e<6C$oRiz#bDeDsIPd1%FitUV`F|d#pcbhDzzEwOmi;^Wu`cjY z^*pOWm5)GQ=?N(prq#YPe)}Hwr%or3IM9V9bJ=d_@cMAOu7Y768B-rs)tqR+qA`VsnmeB;Qq5fCsxP`YMQcHagMC)*fnp8QR1 zmUn@_?3Pm~`;&VE;H>(?uDPxi9inovs`J#GAHs=*d3m+_e7o{nI}}J)4s>(l)Dx4k zf7j#pZ~Ux&WeNW0xe4&s|3kz4%jCwq&G>`M?suIq)OwK_vToFa>K05PKzR>EqH*hH zF4wL9ZWT3T>nauT`%CL30;t}U1a-Ba<35+?io-nxZJW(P$HSALm3uTO4f@AQk10+; z`IV$pnV6yjaTUmolee$VO?b5f^j#Lp`Fkz^%pGW#+Z;E-5^ePyE&KynIWiraqkpr= z?wDR@ZR;;I$Zl}=mz6hpe|uE zj2ZkMqBOO)Zx7;0Z&J7B@G9qECg?P*e^Y&H#q`Zx)O8M#6wSk1eHoG5P6}z13F;^4`+X zT2Xf(uWoGIT(U>j$TsEYK9qV~`8VOc+?G=5s& z_YZvceuSwXWQoW&Afd`)G$VDoYvZ`dY91dy4nnG2o8BLzHPhQoG38pp5gK-T^D!Z+ zJt(k&Ns8`$`Woxv$1jVne!urSh4Ic0jv_{Dnl1s?wNmguoy|ISK-w z#MLV>{4|RVAN<@oLA~%S6O3D}5efDE<$%ue@^XOeKPmm&kkG0Oj!-kYS>R*z_ek;k zdUqe&m|^eyPZ`!%!3@MG+l=XtEPpCuP4;YT*3aMmuVy{f5|)6{T*%MDV1FzHg!w)e zl%3MQROE<_0&|?6R?6Bhrq+Vdj}f6w0F#0VjGD6`Ta(Lwm%-XM)pHvs6b)^F?W$@& zpX%?4pGx0lzCj@%l#OHpFLal7lKSI_wTf0kiLHi{QPBxNm0zX~ofg8lBo-9*bD^lC zK@9AvzgKxX_Uar0A&I$8qKy7e!c92;13H3`l?*l$k;>Q5;vK=nIx{MjpB*#6(WVrq;W0HsBFNgb;H532K{JF%hOEi1>8_X|MLcy3Xh&itNxqe5w zdpWOB3!#vl-?G+TojDq-1kKq;jv0xZ1A`g_{ec}eqt1fj9$Dav9JDnAMFjp0^ExK10MX}|=Sh$~tl)Djm} zP?p+P2&%dbsa7DA8Z&>*qu_2r)O0X?oAvkS`Ton}pya~!Q+t7>6~bZ#*{OHL4YyPP zO7#ylF7*c7M>$Ov_^zxDqxoQT+kVR|-=m7-i7(PPgGTkL{-7*V8&y!p5cnUC0|dEd z=upTE zphR@VPXu^@JVjEH>Sy=(`cMn$ z`@k{1b-GL(eo8A-k1^QieP~FS1%_EM$g}EoGS>!6_--3r7ph(RJWi@-2ZE7GC+aNH z&uI(h$^TO`hidOgs)HOQ0&xgxWk_5I+1Bhm#cSMlwQ5@4I9R)KAk7U6%?@xXL^7}R zhD`^_duUuzRoXmSy?yM9FPXmv^I%yUo&7m_DIf&sCKo*JDcXyKgr{BGFnX|>YU6=wUXD%bVvrYbZgU1j<>s=I(brQ+9~S;#9g0-zc;XeF{C#%lb&0K6 z0hm^mg8p}_g&NNc!1!|JA;0slM4RV1$lkT>+e04XN_prbZFQ?~eh+T^;g(=mti!}* zQo^I}3{9T@WF43V6EW_+{G*M6VebE9We>o`g&ouzKN<-S=M#5&v!GtiA?Yc>YwX-M z?ync}hr0?=?|Q;3Iqp31ktIs&30s7#j3p!To!=nnb@A+cJ{5@Oy4Jl3zDjrjpp4eD zHh=TxyuNSW?ouDK{?VhnmKh=fnsCv7W1v|xukoY6<0pAtofyrm0Z~?F57^5)IZ)UA ztmWB)I29W6$D2`H)ck%7fHKoJ;Vq_|lc4d!tEXqs$e12p*D(ya|AJ+>4b|%(*uhBR zye7V77H-#dj${k;^*uoK<0QJPId1?#FtIpmLcQ@7Ijn?V{_kT9cbV+L1V)- z?2qnXGidPhWEVJX_DGYW=P z&U4%%Xj9u$NduqHGYVmt#~aGBpVGDvpE|wd7uhoF^(t`md`W!gf&QAY6Vvw4%LBFA z!AoS}>v42i+(7&a>d&6l0j54*p7C*WqoY=KTL+Ii>@-J=jp>=}=hGjU-=ybe#PEg9 z{tkGUUR0+J>7z`^E=5lsdDPiCi&YH@)L{-5*&ss>v#>D#4k;{c{2beK8OOwPYL`{D zs%>glWIX1sWay$;`T6-76*;bC=@-j2|INSw{gTk7OGh55!`B;=K2+->9Djc|5Y-yn zxPk2<|4G&&`@6=foX&{VI|12*hmCv;AQbPm%qsjf8v!P>DUx3<<0aj^kG;`T!R&Hp zi>`Rn_=WQD7>v5#kM{rlLBTiI_=RFH4$KoxM?Ss3w~5~|C0BPmbk|?Pje~ieFinHf zd*%iU7lPBu8j@S}P5U41M&{yi812nK&05~r2lB?|1xn6GYSeo+`Z$ZC5GxZ!UQT_| zQ-KS--d857T%2M1wAgqSoFPvh^y-19ug!M-o(24tcP<9$%UknrQh4fIp=oCBXjLH? zf%o*n7vDqdpQNm`beeuj({%VgAW{RSRD`@p;glzEC_c_kV|)`C1K&{C10s)OLh7$u zeSfS)flt4^Yi{|;iNPBgMxC)?LC=C@Mq@L&L#8L>-oBTS_%^R!#Z><&sP?#v5tDL+ zK%jYZ8{d2AcvmWDrg%%Cz2{>_-WiS_`*FQrW6}IU%R72eqOLZUclBD6F=m~%PDAf7 zW+~2J>9mlpeRN_8c8`Dk{WbknAEb?rj?T*uW@CvypUHJYZ0Rr1J@7?#2V%{)<~9k=3W+=UYzy{`F>EHYO>B7WN&KP?f&x4=I_tl8pl!J3$GgD8 zSnRGi{SR+r`d17l+#un!y-Bv-#4I<6_m}mG!~%r&h-LqGUig=vYyzf!UM5lrpeo_i zF}?rs_t*Y#H`tv~^!3rj$3N8kKmGOpK==P{j|v~CMRdv0_M@94r=L% zG#`!o$UT@;VcFMGW98ahj~yz`dr}bNQ64xCT#wm5g=bz=8?^Z#NKY?cM%wHea({$P z)tF$HAy}tMtOAeDeUanDKBwLz`aQ%xoqbD4rUqfmY*(r?2YT>Ms)QDUpNyk~dYm3% zK$3cWstqr{B35CxchhWq%--t<0be0JA!ZXp6qGZs$o zp^%{W#h)220sB^yQa3&#ntQu3M8a#?iB;a4Pi{UpxUOD)rsoq+aHDN+#R>1FQbcgG zAfRO!39` z*)oN(V)*8R`#TRd2uA=pd{RY_^iBtTy1l~;S)o}bd)+?(k z2w!|+CvoZ6a|j%pDhzu}C;_Enyy_2mf5A_IGBt+!{~p&~BQ?B_gT>d9?iKuA3f5!Pq}VNb)s%IujAdTciZDaKV79cVoPgr z^^0H@<;oil)q0c*3GY*H?K8osS<9=H@nm%}G6go%*zXSWSc82C?>5KuAWaLqmB$Em$-BjQ@VWQQ4Z`@@ zuEXjx2A+){teH~Y>DWVOIqD*+oHR5`-Hk!3b2oS_NnlonbA13X>B!Q~w0tG_ zeER@~lvsMc{$DyFJ!KR0#JcB#i2$||>nVF#hb4^09iBUqs)4jH?Y2Yf|P9FpFb+_T)@Qs?=RD>>H&Y=^z1(&g>g85n{xP#-$UR<} zQq@2}$@Gr56e_@$V8BfXW3qN&4<1AVxLcbBq=Kp$s#{R)h3W=}cJ^eXR2v|uZV*&d zwCV&987utkV55Xu!WjV2#OfqQFCF`~$Rl^kQNm-+(qMi7ThB&ZxV&urwF=Bb4HjlE zx8}7ca?B16&y_i|n2vQM>6#e35?lwtZmCKGv9Owsq-HZ~C{*i&VeJBfJY;*u$w_G9 z!zX+13!bhNc!teXZy|U~N%TxoJax|7pRqZAg~|$ef>K;<+4C6udoix^{MM1Xi}#Jo z^9&U4D)DAQeJ7_t zuiYJu^{i?=o~d?x$50d={Ma=cJy`cc_cG3R`X5vk_uO!>q1u8W#tPzi(V(0iTox~j zojCKp_wB)k*+5ZhlH%<|V|hj2>=dE0Uv(^@myn5bJfeUk3F{~Nc+O)uZhxCXRWX85 za^$ors{7uOE8J1vbH@ko${nM4T z)M~|G-3k)uidl+m~i(p6c>}m$+hN@o0Rn_x%JjE7a z1FNHw&R|ttot<9o;#1OkN=mPCGj@R%d(Njbl(hoJX&7t*t%pLPO~cd~^RDuu*m#wJ zY5D0lZi~m;Xe-H0*>FzsH-ZmOSvmd*HS`Q>8Kd&D47xF{_L7Dt3oORSA25O(=_;&c zSeT{Kcu|H=g133;+yHdE75Adt zjgy~8J_2DDgx%g+y;+Q-&yfcyckHNw^*1KhI-m@y?7T`RuhbH+WV*-0MoW!HLf+;B zj|VD{VkjAD0+t##+cn)M7)l*{_pRpJIph^TOL7U{R$~s)LqpXmOOVS)L}KhHiwwqx2o;S7C($H%hnbblW{O;iIn`rjXC>*l((qy?x2fjE2Z&arA>fUgK6KEYT|;&S zxq7qSm-g?_UnY!S+wW;)U2g9t(cz2iXujnUTU-L@7Mu*;w*Lsix%P z&t3Nf_gFNS?VesPUb(L23HBK*wxq}z$rW~25c&jXueA69$x)u#Asu~=v6*)=u7Z&u zEZIr%suvZCNW@gDR3TKmj4~<4F{7S%#{*+0n~$%Va0jchW^B*evw|yw9;L)&P^Dtt${%HqrSVUFx9Y zMan3AsX+y~i%D4W9j)@JDnatBJUnFfDkQDH)W=7L)TsU>sX5~EvZ;BE4bfnOl z`gSf=t;hY(<3hF}$!Kez^zk`HLbiu=EG=Vq@9OS9<@CXBsroZCg#bekpN@A$6DAP+ zFJt7wGr0AwS=eM}@eR?U)=jk|UQy>w!)dvrn+HWDugB@l`b;{5eB|HIqi^zB(f}C| zu~OGOI1nKCv~Z%^T)ySn^1H_jMy|GRc*VntfHyi;y)naB(#%Iv%-8BbPhb`H6_ zwrSKm`V?LM=u90SF*!>U>J=Z;QrO{mheYZ9T!zNhfg30Tvy6YMmbrw(GpW6En2;6s>z1~i15uzRc({Aj_x)r zp{b5VR3xjV35U^yMtw*k%Zw`u1cM>nuso!kA&DFiPqF!wE8PD$9s2+}*R5En$# zBx|G!OU~Gn9-s}fJdhBNZHHqOjZp}-)*9y)3L})JI*r>CRaK?_CeenQmRtC7eUWgK6eNZKn>EuMo;WHLRjNP!7+*j|%>qK&KqKC8L~I@2 zXSMWrvmXM@j=IuJTmi1JqXhMa<+EkKf;ICHG`EkOOPtEfLq zj9UAe$ZX+l3E~-CjHO?Br;lN0C`}NasIT%G8(IAPI6GTEKFbRcAC9`}^J!WX?`>>w z_v?kh4vta(06}**Piq7&W2L6SGQ*(sEKwut+6xKD{5YR0*n8=p7(!dOhTWB*LP8&n zaSh|2T8Ev?O>6y=`Jj`Zb7yYN!c~r*`S7FQocg!m#C(fV*K(d%t@FsU2!F5xW5A!e zLV~=4$Vxq(-QtGRzH>$VzJe^4@|ieK6{5WUS{zUP1VjX&H7HMCwJh#uq?KGv4HCL@5>r(>xktIaMIXWX)ybWGyc-ueA+u@xLpbzmu%h9G*J z2=Q(JS>{nhPXL*Ah=ltxTCiBl%#C>aMUY0)&9LV3k;5)NgFb`7=($Id`I64#H&?#0 z7-`#4a)XJD_m)T7kL#8tB_(-goXxfCU*?mRSy9NjWnL=sqZYpr17L56F~eQ%$Z}^h z>#@6^$gy0UGX2YY*iLhZQwvDplWQ0{N&t#e2a}h=M}-bJE`p-Q_6=gzX=2=C=%4gx8mr=Whp#mvY<$J04y&(bxs)zA zp(NxVk^x8!AKb@PM%ZPsJc&cGV>?=Es3p48@dTW~jxH!#-6?o|Twca{!NdK{XnzhO zaM7%G*{GN~zhpLuG#yPL2sQ9deaygE`07E zYdpg$qJjL88?D6M+^G8_rO#2EaWG%`bT+#s;Uqe zQdGT+lCYZj#!m<_1L#m?l$aiuyJkp-QFf>BrN(Q`W5C5kP69708UyAeYG{2L*enz# zWkwv5waa+oDZ7@=PU9OL;WsXnfzTFL4)5%CyjdWMqH#O}5G@3H)6geljnjB$Tl|tB zN4@gLNGiAHXuxEf-JyVl$YV>9q?B`Mg5@)poO7>4XbIZ&N0XMG@~m_{=$-T!Vu%Qy zLKddS!bwH;=3^o`-|{#-ZZ5e+e=cxW&Hx}^dZC|0Ol!Km<0jA`!F~K@k?z$9np=Wp zme7n6d5NN%3!UneQtHtj;r*mQ`gZH&xmZcrJ1CVKt znN#8QQ)~G@%vLM85&=B_fTavTQi0;!0Y!>d)nm%W(`l3BU{*<1LHDn-$4JffD)v@) zCnnH~;cg)9H{RFlobVwo*w;Qiz>}X0o2EzjE6R^J3|nxN*+N$qtc@dvsoOP-NljH@ z&2rRTrbCUw^G35};ui1ttZp^;hPx3(@dEJ#xHU#oO?fXUO{my36~KP)m0BV?)ENS5 zK5&w`5p#1)blysBgpABiBOmW@c2?GBf<9x(fW-e$A*gXh1yrF_1MQ|3vLjzoVfvsd zg->MRGAi318yysMYYZDM(%0**=b(&1k9j>xK~?pwROgpj7R`DKc5KmyI7F;uP>D`oU_xR@HsclXGy?|_Rr@t~vpjWORxp%#ei|O(CLYjUW?0r(YYA%>c8MrkeWO4>j;FQVRNo~VP1B=uRu7C#7j+ov5gO#g` zAy^rsq5a0S-3yOjmW#UVp)8eCMC1sr@uwnEcFw~6FL0-?N)}0<}||mRI*Ns!?P+A zI6&gg)#BJK*t+0_aUZEs_%Wcm?9oIhaR6*kgcDau3XkBB1q(d@h%2!xD#33j;#5u2 zFgl$Rs)cQCc+s)K6++3)cb82v)^kXp7xPKp$sVr@PRV(lij%eIBZ+^dj6)gi-29l4@@@!|E{^Ucsw}c7kV3j*_ zHiY(N)z@?H@~qfqFrwzrSt^Gwq)c@M z?s0#7F{mA4tXGph8{WZDwxc&2cdbiw`;h@v$b2+4k{hl5w>lYNF2 zDYg4BzLL8#oWdS)`tuHvWNO+6EtxyvbXqV+wG4yYvq7v&-mT#soG+)Ccmjb-S7iPbbUkmi*FR>OK{;FH+bqzm-^E#xOSdj6Vi75L50NNW|BFW)Z@J!a@9X zH4-3Q@8dzya-a5tJ@xJe-#)fU*mt@s{WWF#!ut)Iy)>#qeZn0VoPu>bzN=*j1QPq2 zeMYQaO+W}pAcO$3J*CZcOgZmu%z}f_t%82}BuX@)bV(HEA)O1Z4%I_pFg#*6r6{y* zVjwYLF_8jA?1&-Pw5~Qs@7&geCHE>}DhGqbvPL2*VUyzBP0(1IxO@-}dgfxYUxpd= z(U^6I#w9XZ(6tEQbVqT&jk!}1#ujQ%#&>i-RU`klh1S|+eAoQyz~pn8f^+|WY@7JK zkMftFib8e9(~Xz={RY2$lal}%Q39i1ogFt@$uGaS{;D(YE`eOJ}>mm{1EfB;tmTEVlr#CPi>|Q=1LDopohqUPP#l_szXwv0q6k87#-d%`JuTkUt*x5h^Py z%exT2G6#8Gm7Sd@p)6=vCc-`&SznXLK7XOzo4hpLT7#{NAxpx&h*Jzwu4lIkjE+9x zkzYy~c>h>VMA{4Q3O^7}>cbASNtf4WqAOf%SLQV0StG!jKIeFQIdO~z>D!YKC8x&f zFQP6n%ZjiQ2j$tB@t^ml9H5}=%K6D-@np#bOs-Ggoe6}jIBZ!%-9Lb1A;;3nF35|B zf8s+Kr(n==)w-f&23Cq%sHO4CgSyA~ZwFVspY3wfDl~!@xJ^sV!htdghAG8gw8@I_~SyK&4^K4LX zL-2YWZeeuPQE3<4-{O342)U)U7awoh6QI_H6!viQFhv%X5Ei zq1~&n_K%;h!uc1kYxg|i`e**6epW?)Ol(MOYA{>aUT>S^Eh10I;7phMbSFebHNi`G zT(4c6nK`nH&G8vmG~_lO?G+Lp?r{x`f8}(8#IeY&dPF%tx%JJBqytk)t`q1B@Rb=} zOz|stqT(L$bCD2>-fVj zyY=zk>|94`SZoi=d*4@ylsMCiv#Z*FLb(YljCRN-yznNOgEis2Gg(~?BoB)((4EpR zvbk1nx3Yx2S2}@%=FQveVUvQ*6<|`C(uz7D!nx=AT3P~2{>>+J~ zUI}&@@6+wh(4DX?n&;|77a&`sdgl!^k}FP`!Ju-T@NK)Zo+~ad%**x!%ageb*~d>4 z7jUg2L60)%1j-goOJ^5~EV4fB-EBm=yI^xz;!9)B1JhF1uX|h;kfP=}Q5q*yJ~~?} zDJzFY@Tk003gv!`Ybt21_?x@2***2#0zyvu>ec9Y-B;!l-Te3PB!;H4LZ8PtQ7rv?8;SlTIhUUVLcSqdacW2Z;DyJt;Wz;X1 z|6^?~8$SQ}F5+?pN;f#r=%ss7tZG4s|G`to)OVjb2bJ4m{Hopo$8@rx?^$oylpuJ9%Pr3Ve!w(V6eP7 z=(E1wlChIpXyxjG3=cy8)cv|Ue@%F?NtgAM-kHCnTY4vqEs?D`jF%S?#Lg&kSzHg@ z+p#`K+#aVHUPblYsHm_*ml4$lGK_;&4V3+Vx8<_1|vqk74Ho$CN;tKOTMX zpe|>hkpf;d9$h(!$ocx=QEyAavdX2?xqan#>z!Z>JUT9@B3l(PtY=w5k7%|wkrnGR++hcy>iY}N{rS(=f*<6zdhpGjohuD+&Wr8Dd?&wsb zs^-1+vHYAYfo^|Z!$=Gf!Vvp4!QjHda~AIN;@0L zgah)vF*6g@V01tvJxM8)W%z3r1G4(6*AzN2!WJ>EkHGa$+U;)e%+Y|f+q_Xbd}hTe zRdeFJqbl7nIf&4d@a{saAv}A~$Wv*KH~p;j2vp2h<-r|hAEKd_p%=l*7at{hXA$Rk z1P@P-vrNbi2hH5~&L34+vQ=Rx8BgDQ9;z;-Bv3j;d2cc89F&yZ8Y5mD>4 zq9N_CFC}$9WNv8Wi9e`GiFIlUbR1KB)AiO!78Q|nE>tru7ALJHY}Z}(R_mtj^|-C0 zqBW*(d-gR;U@M~O=0Y#UUqwmdUbZ6w9il(L@8rC(IP&SN+vqiM9j#(Wi<`EXJy|jR zUi&3xR8Iz6GtKEWt1XR0VGB%J{G^T+s*Er>Y;iFYyrD{L_-$8Z1uVwap(8!poTzie zrZ*kJAgz{P{)jj5h-hB9$j4l5ykei-5uFv26am~qC7V=2jLYL+>9PtH~3Q3_4wYO?IXIU==OJ8yVcI35%Lrn+oDU@%55L5 zqJ*JAzyVP{e8dZKOSfNWWxjH4GkEU(ck7->+U7e|J`|ERjQz}w^o1xZSK?GrTX6%; zka zx{eI<7Z>CZ6ylQ{V_5)w}+69A52T%dhS{8tD8}0 z&)%u&F5w%Amz`Zz^z@?n^a>ho z5A#_Im)iA}T#pu`rg-!~)x3nuldgJ>aZC44`1 zCK6jnh(>o6Rch91joKp!jajW7d&NjxwO5pgkO_h_-Pln0an!NK z>a(4%_?J3_EFZoy+Qlv5@o^?y?Zi6u-db_f`4PR~i*F^&2db$xN$=h4t=Lk(DN0hF zXSCPynB7kh?{=A;C^e>@mgWVn`5&cikgoBfch1=k60|wfG z>m|a8s#?Fr`(R!c{wJFmo1miUsW+dfIfA1}<#nlqc9zwGf=7`m5)=lXEp} zuQoTo!d>swLM3?#U)T=kN!FlA= zvhTv!w2s)lH-EGlSB#{+#d}XbM?SeAsvG_KLobViae>(%1?EOePD#F*&ePTs(oR9g z`;WV4nH{sVFPXNoPn2QzT}mh;j9u{+8}gV5Pr9}8SAnR<; zz>U^fd8XBk*`Eq?jr08$#Nr=XOT0Bu)wFgqovEbiC)T)jp|{1mnRIpRQInR~Q?UJW zhk>xC_!yggh2T4HMS{}r$&8z~aq*-kMSZSn?+Tr%>ieLiu8eVOVbAGQNNm1OZaP96 zJ$gCV;@Z!o1i&iKQ#4A!X?aa-YLU+=L(QGS3&plk%tgBJcAerUk%18jnN<`lA4 z?9LV7MR54+iytnqF7iCLww8Z7ps>S<{9XR0N$_>BIh?mU-yBl`(f6<%gZqxz;BlZw z4vBJ@5w$VInvb+#IW#EI`6+AGD8c|?-mg*90s4^5W^4)U?2<*QL%AhgExPY3@(e;| za9nV3S$5cauIaJzj8{1M#byN@0`B_mnsqZ-25+16uoj8>e8moTr*j1i!iSAz8Nm3ral6fQ#K;xE~1|cv)j%wWEW$#VIu~ZYlv8DK9SU zz=R8tJRdp0;+ZO;V~9BMa?Uf^3k@Z9S;46p;X*PV537-?1&;ao#!;g zCOhFivyTOTGs*iax$Jt&k#&!A*t>y;umQaw45RO^zUM-*5qxd&Psc7wTUTO|9msdi z4GX?MeylMZ*KxbsW&mZN;@C7>&9CHR5;Ngz<$NwUFo1{zE(IuGq8&Jj>&nrT)<8N- zDY}o8>w#)lUqZZV7~dOq+{$#`_D&UVGc;LB0bmU-nDg{}bu5^g)T_Ff>&OLxll6Lf zD_n2t=|yqyh*dH!q&p?{JGDtl7f~zoOwvMxU@u#G7Na=@kPcfExxHhCJJKFXLk;)FmlSF;S|F6XfL@YkW*{((op=tMCxy zC)~5kkMTSkg^@#OZXlL3LWd2BL8U9?^pP`a9 z(MSfZE%gcuWE^J+!$di0MMN4-Pb5a@bi$Q_>zOx6^yMXg#@UT^A*I%;h?%&D`cX@3 z?a~m0e$7|91*X*bPc}F%5u?GTrr2Cv1x!|JN3`XezU-)=+UhWXCeteENv)H{)={1( zP1ST0BWeg(SYe(NpTaY>KiD&G-Mm@0C%+7AZ7W@y)3O3;?&2`2!Lwd;?T*NG$Ctbn zID_3t{OT2oPu?V82f7stYvgLuiW8ssG-8)uMp2Ae_^{Mj(cUb*GJ2uZ9*6-K|Dq5- zhIR+Ut*bj+BSW;?c9Kd`%6QH}2rKK$_l}>9jhO=JE*0v=Hp0&)nwICZwC7Ic7S@!b zM)8U!L_)ROQzN0?ECcoK)RDZGj!<#ynkwf@E*v~2AH5sS@e3LkLM@$oIX@0OMX@CN zj8wlZI0TEjb6Tsp5~S?)h>fxo3)>mA4u*u-AP|Wm^UGDLV{A?f(z8c7p969TR+(7F zn7xWh0qeiU^bXQ<=rUaxk4O!spa-3*gr!O<;WB?*ZpQeXCsjDlT%u7{w9077;4EYYK(z8z1=aP4=J0oR}F-mSzm&J29#ngL9*avQT3gwFI>G5t2G5HoO0tnDIA$E zGtcy4VSYg-Pz9FE8P^YCY`}qUi)Byt?hg__i+u-ErJXw7Y?6;9Q&FuU%wIN8)CZF{lqKDzT0- zeedf-(yrumYy!AJv_JQr^q!Zf2tnBJ>1tl3>Em-lY1J|n?`t@oi$8eOx+Zyxp;IQ^ z;gJ};@nHV%7;H4^&81IEO#5P2~gfC^SW2Cx1CqJ zxp_4{HL?>go>1>KS}`*g!L!_pDRh(PGq;lv)k}5BH!EBGuD)YIa@+`8_rLa(wS*fi zr&s%`0ofF<1WDkqfQmLHPz^KNi&qJ+Fp%*=`G(x^-ntp**7Tc_Z7Wj|7)x0jYBkkS z=So!edS+tckc}IsS<0mcRfW5BisY$>_J!A7W zE^w;^X}re@tG+-i(WM*D=rmSSvD~m%#16sIDL+Tk<&3Wr7L}JJ?LNT>^1PZ12Oe?r zVf*8QQg)5l66Zg~?z~!E{#WQDyGFI z9eWpCqcXgFc+;Px)w4Pfqd)k(FnDVvE6=Q2X;$~xP3j`vuBnl1@l`KVPr}q;aMV@` z<;uYcEe(56^H$Q@$}#xTT^a9mHf`6}#TRe5G4zkl_>G z1C8yXr;q4+p#6GmaLd6PC!6~{w-*ZEk~~Yy@zn^7kYR;(BY9l)#?2`Fz_|r^s8`ON z>UrFx_{%sU%jEJN^i}tyS&0iA@R1%;+rG4NBZ+l+)J$KdE)W__EQs zSU}2KoK+{cvnx`f?=Et44i6k0S3K9QTO5z~23x_UjbktI;TSKY=FE2TU#=BDMNYU} z`$=Kn1+#j9Am0uJxQ^UPxdIq45XZb~z;pOtHHn~fM1S`ku+ub&a8Q-oI{4tw&mLp) zZQaSl2XciESLaof%l9%*t_9LO$)U%B1=jlnrUlw1FX zzjU)MNJtc7ox|C6fPWJ0>4e1wnmtPV=35XQeN^C;smv{=$mBAgIgQ&n)~Vp{_Z-~9 z_@rAo?*|d>@j(w374VV5fkWvnVXGd4&!m(Rho5rt#pq8HQn?<;$vm&njyxrIJD@#o zreSTrOfZEazuNumgackICdnKFMVo>F73-VwR>kVn==!}2J6;Qs=lNeL2K2DfV>^an ztHE0dt z&V|lu^<%Ku>Y$4kvx8m;I;b^Tp+&ReMaY$C^-{**cD0j;Tq_e3ANuC?D@Fq~j+A`l z*e4PxD@FLvfuz=`N6(t`*4!F6_53EBOOPE&^kN@GMQ%{c`4qnd@3W>j4PJ|^TC$mf>JSplCAC+%NlDP^M6e2Xkzgkk(D*{v zx2h48Qgve4&g#?!w=Ta@I|l8tB*W2k)p+kw=P3Mq7&VRLz zTBhB!43MsI`v!TSI*@z#BcShi0O~Fo{pTRyF>1wD5ElVUxtqrMb85irE|4c4?ZY(| z%ic}B>nFPW@_Zd-WB(twGV7y6`|b5Dw{W(b(+h=5vBFuh4aCS6m27!VEva!T2us<2bXRwu zD6GBcD-RyXbD8hn`?NrMu<$^00^crb9DaC~su5s>uL?lF^StqgfPWs}gB=Eym?~|Y zYt}zTD0M-bM;HZ=D!UEqRm{y~qUOQoSxQ8eCKF2AGTm&4K~RFTp|d@+iW{ueN^Xd78h%aR+*Wu>O-W* z_fd$UJo@Zg7M#`YfAj_uK=du;7oYuxqxc!aI(0uJuB zKFUQ6$mZV_KjKq=7C)YS(ztriU1S37ZF@ZM(zC7DDzQ%e6oDBXZT8H;hmA&2D~4@v zIr*PkPxqT0>whDc@9s^cTEfQ88E^`nI-M*Gx_4_l9plV~1L)&$=C`j5bvC6n{;G*< z3yP}7^9|+IB&DBQ$%zt}r!ocq?izD`leSW`C`ItSIYDW}DAJ_8< zjC(DkLs*aKy)a_tpyUN00k@G3%XkSXUwwD~)fSYOBfMzJ7Puaa@f8;8sJFzoEj_T@ z9(S0uRA%?*fdR?1X$QVn44O#L#3+l0r zi-N%Uyp#gK)tgh1VE_KNr0GueeaR91pzrrsK2sK+HinHc^fMl}u;%mGm*rWa8(m_S zYY&W?L!A3dGDb*7W-^@quHQ*8^{r01tc;9LsH)g4;#YlRYFXF}-=dBpQJk7Sb25uDgYt}oB-U|;0}Pu zIvQXtKspZ>@u(lL9C8mGaU_V#G(yz`9Z5d*13P%kva@PIgp~#*QVh&bRTg{j>!i+f zd4J7a)IMa@$Hd2(*;l8Nbt`!*Cm)nB-s9q4eaSMGD@FQ#-64C!=!u28Ve|bEc}~HkRa!38(a0&U zrsfh!vwPe?VlaWcM#5i{Y0HgCknMaUZ-uxAty*CVSiqf&5AlFxDFh}0_)=hTBvTLU z(lx#xVZ_-H7_gYBsWJ}hY{TMo&HSe>`}K6Dow?~-_B zq%{_{47e%+qj2fNm2!e%&Mm&m%x>8p9P8y;selllWdcq`;DwyITZC|RwIxI~+uI4; zS7j;xX)rOm zr06}Z)SwysfUFCDNaDNK`5MT+E~4`~(F8G^c-~a3H8OI^oCUS=N!6j%oMtQCl9Q%( zz-)f7P%__a%yoe_TC+o-mkTeuH)JkGSFzjod(T#`+P$C^Kx>Tt zf}j^Z3+qKexdzm3#aleDvU%W1IruWrpNWdjrT^g01ykEHHNQoL07}_l(wNj@cG_w%2$4z3y-W4NjAaAY&;Xa!P<(l=(?-dXLmgaG7`LhKY@ODF?zdN?ga_|b^9|fDTx!h~Xd$d=*tws`DnRv0=oMjN zHV^P>*CH7Z)m(R_l(iagz?U^^o5m+G#h|lG?b4kGT?bN!_pqcy2au=tm4PpP57|61 zBFA~V>iv~#uv)eP*VMGTYpO0Q9e0+|8Fb(Z54QlnwU4PYW-}-@XJyStcFI1@6%oS) zrXQMW;||}>rRs)CtFMj1O0l~4#jPKVP!ietIs${Aw!E|$g&YV1-G~U#C%jwD#HQ%1 zF(;tlK=pxN-7~aPTiqT58dvxfAs~32icC)tH#;5|vE1Qr9)eba*BiPdhYL8AU|`!qSst_FLvcN|Lf4V1_-{xK0%QEEak^ z-+xqscVlNISPs(Mt$Y?Sy5bl3vQzBr)NGyBtW7QD>VTc}K!y*l#nin=Y1d8Ppxvqe zWYGBO5Fqs=$Glqt-1yeAtW-C8%%SSgL~KYF6B)A}X-vt5?A`;{=Qtda(*Vkz2b- z16O7^T-Zb`5#^Zf8_bD!%r}LrcU9`%F3KYjYt>&D-(NsFd>>B(h0ck~v-iz?Kz+ED z%s=hcx;MElL&gr~jpi*`!w^Roy23wc0QF47=iy}|C+`}u44V-KlxAr{bXCw%ifF&0%`b4*TK<4e$|IE(enzvl`@@ zT+Q6dZkQfma{)7Atz+kP0WF%;lc76OE?KiB)dma;sP<6DQpZQW64`_9n3Ag z)cMS+5b07rND+`5QuK3Z088y{n^*K9E$P(G0EeUOS6X@=dD`J|3-g?P***6r6(G~` zlq;x}^NSzb_Qr$(2)!6o(rDt+?KH{}(;uMxm9@}s(Z9BLEQn!;KjCG*AXnnh#yi3r zr;bv;-35?QVD5qIg0j6HRnEYdlMs^@DQc(rZ{I4)(|xzpidtiG5%L!a4d835rc(xq ziT9~o@zq-09LS59hxFbmNI!l8L~N4{(tMb z0N2^v$&7lNT~&Qms(m^igDB7G&(X=?F^KjJE{w8{b>x!i3#Ubn$aX5-eS>T2mXxmd z?$E+w_iqRf zAG%)Z6+199B3{vkv<5Aapv%e@oyOH>vgb^5((^2;hpDPGu2*&+)Ffw;5#i3MrEH6e zC{tusS6=PHKt6fo?UJ1A1@m+tFFd*f)8MXZ+&{gA>`a79Sm_kuFh}jUJtnci$H4;l}QK1Xw_If7lLV zSqtwZMZ9sImMkmnytz8H6qf{IPkKXT##h3cgpBpe-Ns@jQi40M?VV(c!WHdzv9uaW zjZvYMUd%;?1XTSQrQ(-FsKN%beVpnBRV4Sqb4MT@I+VwXCS>iTbi&0R;oqf4YQ)=E&UQ$^aWX6H|ODh9tBOXmAp%5m>xb!8q&?EMi_f3#4y z_b@wN(;T`{XZ?_35`4_;FZCw7bw>^6B4>bqjKnw4{m7)%!n*N#gI0%FD_8Z;NW#`$ zDO{k6A5h(7G4e6e0s%RFQ(LE)_ z#2JDwLHeg5{vVf|%AA~P%Ip|$hFd{_`R)0nvr!=Z*H@?QmKm)mmVNepADtX>IMOrz zQUdwUm*ZkURdmXJ2)jKmz^2h05dh=(3jOs%NGy1jI48oI5d!p_x+fQzkyno-vU;2T1$Ig8zkw>-hCld3U zr~GxXCJ}&@k{J@;nE$7F{%=qAIt834pucuJ^lw(?UqAl!@?Q2h92N8Y!1W&y{NHRf z1DE!q6}#=k|KmBFW{2f1SV|cJ;f~|6kaD zYqq&~P>&yx)!5@y6-e*?__yBj^D2o%u%2RT7gq2PiMaTr_jhaYtVly;z;MFz)wQ_S zx>|p0aj4T;BGcE=j^lgC)_%Icp@$5Y?De?42ZY~_+4Y|IO}`Wt_Z~UGTe^H%LbfO- zAxeHxutCvLKm4o7Z}#%I2akuXX|G{#31a~0HVKbz5-z=+R`=e$yt9t!cW=7HtMKXe zNjhnLaZ|EsxkvG-ce~(;*DSvsY@|loRn%l*hncG%!3-G5820WNS>KeSXJ4NM@_2{E zl;oAg(jvs~!wFA6fIOJ^^ynZR$U%Edc+pKta5`))R$VCGQ# zbTG`aU$&Qd?|$w18lz45r<9>xM=iwNLc4n82v3I53q!;2A2sX?i1(DW6kd<_ZNa;L z%>(@yl%N$e|M;h%89&9>F^mW%a+Jq_9S<4+X#!dTzw5il-dhSe=QyTCZ-?&mr)L&6 zy#zoWN%8&uxH9*;zzY`X9|eQfF3aU!xvFiG#{<%>bK7#ir1kgC2o(tO7=M_ak@*t2 zXsjaDMytl2N~V}_m_|?*4E{wAyu@tQA3CY76N7PLK^a=D)2?-HB8T&N_z@naipsy~ z`S1N^-Jch^kMJ+x*Nje|I{JL*5!Zk2iP!}{171w{vwXyFZ2vdb{ZC*a4tRU})9@b) z^Y6C)AD$Y17WH_DAh8EsTzPr_zv|uJ2Iz6_!@xQ1+?97MK>z7-x9V|}dm_xtN#d;n@o^7ZR5-K}6QQD5-T T-otrJz}HPp{p$r+Z9@JF1VmaQ literal 0 HcmV?d00001 diff --git a/media/ticdc/ticdc-summary-monitor-dataflow-mounter.png b/media/ticdc/ticdc-summary-monitor-dataflow-mounter.png new file mode 100644 index 0000000000000000000000000000000000000000..a3607457d3996af270657c4ae116cf47d56cb5b0 GIT binary patch literal 75267 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%0A6$03aSlnhWl23+~@%b_p`TA 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 Y1&@s}{kRo(1Nf4aQjjbVfBXLb0M1mD)c^nh literal 0 HcmV?d00001 diff --git a/media/ticdc/ticdc-summary-monitor-dataflow-puller.png b/media/ticdc/ticdc-summary-monitor-dataflow-puller.png new file mode 100644 index 0000000000000000000000000000000000000000..a960e01d98b388c634947dd91c7f020c10a7bb27 GIT binary patch literal 103350 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

1-`>Ftt{ciR4 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 Xx?@nAlJlK;muS?dv3bR5n9l8?aY$m^pYhZi z`f8UZJrVUl5uNVbl*ke&2INUaDg9Oka!o&CbZ%FpC!3FlCd+O3 zyk#5*2)n6Ef%tKFU!)`+4FUa7cn5ILFoJwH?Gv6$sPg5+3IV;D`DliO%}jax2yW_P z{`2Eb?8&AtG>%SA>Sp30Bm|D($y*d3sAC30$_-8l*Nv(2S&qp&(q-a!x-bA z_CV@f$iL8+yWY}5AFb*13Kg?uc73lDfRd|wdn-4EoSHF&!xecTxf0>qt5gVQUfWqQ zN?*>-vWW6X?OJoCQ|qb3nI4NYZmuCZ0}+eS6iKtegsJD!540=17cZi%Ua7jrUj?NPH+@j#1RoH+@p1nd3^vFQ8)wNd7SZDO>wBD9zCfjF0BFatQIsAJ4 zvJCZ|{zymAx31j*j73AkL?v_bsqgldo zMma_eY05W)dy6$1b8T2S+i>md*o{yP@u_o@`OVX1D7g79XR=6{hU9CZ&+WPv@2`Aq3nnfd zrr#=IObfal>g=B@lPu4aYHAAWy>^mZ#s7iZGm1oxJ7$H6oe}unN~F9pt?9th_G6{H zsdbf~YXLFWdm|-IJ)U(|^G=tHd0zu7Lt+wYL#qC94rMk4{!O2ybXdJOLnvgIM3gqa zYM+fVcz$B1&I?AE5!|lVA}?`wv}CMPvn5x{!m86DX5R)P!sy_$eMr7|SDBT?#Ss$} zed))fQBh(DmNv${3#!`M4Xm@PN859GcG{9XyI1Tg0tGE3aSLC2tUIo&11&%E(XF*c zmC|6dAPz(!a7^cN+4uH6tlqjCZ=^-p0paz=sT1*K1~`PnBU#cN#1O+6#gPs>!SBlA zNOI9oVJgw$Hi|~jTn~3BB?c((OfH} zigbzJ*mpq24g+n&F{56r<7tZg1CpPznQkOdxp9lLSjB=uhN1;=b^As1N1}Qg9`vN; zCqP@j4UzyEe8|zgl|oXtuiMz9tUi3_Ri@fPM=hOAFvZZ%B|O}xGE%5usC<#-lJM+H zIPL+0Xl#pkaD3&7Iw#`}+mg0GTJER4jhqeeV*9;>(vi=ok~!G|dOcy8#-s=cpzz@! zeZ}`=qB8U_zIAh0&PV70f7V9gptgIl_F`xz(PjS(k<-~g`fkCC@!KSTVGC0GR-Mkk*EOsyVy3l zDe6Y!DF%M3C_7)ljNB+YRi}@;-882Mz^G1Z!?Ag=rd-p|ZX?skt~z^&!?1E>ILsO+ ze*I$h+64tNo%|rauOrbo<0A_Qib^6ZvW$rqogO!@F_tvgvs1iR4!-3SM95~2OEt#1 zMQW_AtV>m6^G+-+Z>WAwZyd4+5dFSbfd_oOVsVBZ`9TxqHCInJ${0S2BZkg9q zOX~-jee*|;p5QQEk7bu+6Iggg#J+uU<4xs3#3Y5dhEkdTGV$E2W_1o;h-!6AYs+Sk zYHn3jSte%sw)Xpw1pSGiwbhz4a9>YmfKlf;F*@biKZY0QfsT;1Pve>{YSXNlC!P|$ z9u&;7F6=(``te#izo8d0F{uoUJ~@)-XIvp-CsZuW_Tv5oE5!l|lmGqYTsnm;bM_eG zddnOA0Emf*dv;Xq&+V07IVQxU+)l!P6;^_Zc~6K@0<#<2(m#j5TEn#b(DP)BaKCx3ELt2q16|K@$8)%r1P=niX zo*qmwD?G;!8dN!7Ay>onJ?F%8Q%sbwlTA%?|9!Jj%3kjID(OqsTTlssh4oOToVK>- zO)sh8SSh}L*2B17*;)&o;!0w6X7;ZFq@;ij@53txMGuwEB~yfZ({p}nw0YHM<+d@M zwBhWeavhcW7gO3HOH=aBgp8BOWTwbfz}jBn*Sy+0oNZSHViI?K(dy8Xhv8z) zHD+oNA%;Bo<>Hod<%kxu6D=F%2)kN(UHpm5stb+U#pZA7V|5g)3J7+?<`R1m<%>t& z9VgO)_Z__^~c@5e2^&#$pC zF()SMReaOOQD*(;9|Bc;nIBbil1x~5{CpRjp}5IuASj)&m#3wtSLWGx?XU{zylbx zVoAK3Q(D>4>a%!g{e_{Xs0QzRML7R7!D3P0mHHTIYd&YOWf*-bC&Fzj>`NakOncSOa-q#=d z3I?f6e>-%z_L4ek1Z}E2h-@22e%(H3!X(c3OBQ_-&AJRHC&{Iw?@gy$AWjnS-gV<- zOwacnt&=`1fmyvjt(YXGJ}aM0!I+O$!O(-_suaGuTEaqRizHNeFSWv$~C{W z8>p~6u*X=>G)6_gLu8}^V*SwUW8YCq4^MWc07%7dxji$>{IKB3OJRxCx#MCw>78+C ztGd6jC;7G2x~yk`6RGvto|8F+iG(=wDInhztDkC?ce)Au>N4; zd?;z0Ya|UW2S5wUe70lhhf}rm;Q02&r(h!R@KoE{fq7-=#2FmMO^aVEdqdsz>MiF! zwwC=*NwKytySbLcKE)JiO2w4#jy%TEjcFkoNgRjM<=8xyvsxaKQ$p-vN2+ZiI$Ze2 z4K{aiJF6MZPN&t+lr7f>trXvsPZ_b=UC&l~rt3C>@{$Fdb0q;G8~||ag4+136GpiV zZ?6GdElKonp)q@q-Pm9RT)EfnH)E(dQg1mYyT7@t+pse-MUf4T)ft=5T*SO#EWOAK&%;ums$l<+#0BX&}Gj z*!Rv7VI)wtXYu-r-_6-q52Io@sa=Tu_;+cc;tqP+C{3 zyPHzWtomi(ZDJUtc5}EsiAO=tyuS@MoDtY{+zm2$K|zr!;x2+`saPEnyqyEt*1EZZU>8Ibi6lK>r5_- zaW%D~=@L&~ax3NP@Sk~IZsV#KoPe)8 zDJbb*z5&%jU2L9cYSXAD8Pv15!NoI}vhk%--Ib^12}#2nL2nHSE0uI8JZ6Nf<+R$; zLaqAw9wjqq>mepm=q}DqPsibVR&wkS|I{1$eR?fo)*JQ9%j5JNTul0>LOtUqqMiR* z?Sd)XhKIQik6B0O!{Fc(0!qu8uTjDv?P>3hh0NBoNr^hJ>;CtK^6Y}mbWsJa!u(ra zc(GHX{2i}T$4yORTQTX3ac^0+qLc&~<@bc(NS;>kjQhdCe&)`&x?KEusisQ*JKsSj zva_gGD`?b1xBb(!5;_qP|DJ`a2*c!LgM2P}#S(YL+x`5zbjib4QI>cve?vz9`3=N0 zo;?HHu;uk;?L0bhx>1wC=AiW<={C(o$Y3p1(qFKLto@qw7g5FC5` z>svLqQCGig#@UVybo&@)o}MT?LP3v>ibJM(pD&#|ul6at5Zt&=%yYEgc(4ssW45_8 zC{dF!KvmU+2{@iGfRD)w=qq*V)7mZ|qv`f1nnJs^MXEhj>K;BlNV3q-BDKL#@^=ov z^z}+&==MBwp3N|}1NRVa+R-C!$!fe^rL-FVxP}N^_(|V#KTUn7FV}q|QyBa-Feos! zo*|1}&~5*HT9ZQ02p~}`+o&>S(XJ5>>Ypkzj(-An=eATbtTeiec+OJPR?%SA5%iS2 zFBjEpts77$=(;y~Y<+LU#`%+P9*6SASU-z1EM$&r<0C>Q6Z|pwNue-{0BJld(tSj~ z{Tlm}|1D@a%T<0zw5)1)J&L^}H%f3~V>$f}5*7Ru4rA6VdO5K|t|jPNZ**Agar`3r znO41LJ;9>f^Hev-GCky~W8&>zEo_3GC71N&Ri~xCvw-~U&2eQIsp}H>B>xZeGw)#| zCc4vL0~F)iS%IW7t?IZnGpiMz)6AU1i3FMWgdaLlj1ap1tVZmoxnr%<*<-c&Fzb{u?$T}oY_2eHj>W?9w>hGM24iqAXOdoDc zE;A6vd$MG0ZN<`f>TOm)xAO2*d{<)v04}89u`*gukqa2t2L*PZD(jQW=6%rY`9p=5 zK6!BkL(03P25OrSvkSMhJSo+4xbnVWOBQpo3as#@=nXDwij9xRAJN`mJo`TS1bw_& zZL!|-6*4Pcv-3z=yV-IfsblMx&uabm;e}57 z(?Vh!U)3wMhP|6R*Oidl+^7GAiu-qFu8Gut3pBKK0I6gY5eg9c7OtYyfBq9{scup| z%g}NK7k?~T6?#}mt1LD$y|(;YIB_Gk5wjUT`UL`u@OLrrC zVb4#&nnz$V%nL-5R0YObEVU1yLeFbmj?M}B=!^1uhVyw>C0O22=oZRnLWCG) zTWdw`GTP;l)Fq*Ww6_KgW>d3=`?;h4DJD}Na%MX7;%zGM8L~FO$6dF|ZnGYL0 zhMJ4t5odC-%WTWC@?t)k%iA7PZ5N`Uj;DJt9a$Ox~?hS9Nyn{E-=G}-l1uiHy19f_^i`k5*IRW5Me5Xel1?WbpB(uH zyHJ6uS9%j;T#vrLU)wel3WYPpfQwcV`QG;K#*)~h?eL;i3l(>#r0*1uI8iIa>U*N? z&r#VN>gOMrX{l*w)H;1#L7T+%)adz%Wb2t?IdX&T4?}m2Y6Z~6 zdU}_QL}TvosL<)Jri!|rM%Y*t2F>zjL%^yKbl7^Bc5Jm{&t*7#mvP(Z9&61=-F5A+ zg3WU$R>JS)AgW%X5_x?e!)lRUbt~^}-|=>u;&k3Qg0eJQv7feQcc0zhq(BEMO^tXZ z6hSEtl?=wCP%;s4Ub8IG<2hXvre0rM0ua!bE@H1UDzWRakvr4nit9{j`FYpi04)^) z(a%f2v3#~BB8^#nQe4I0MgNtU`gg|X)h97bdF4HRPO9r97IOJ7d&1lYCkFb`%m%bH z+Cs@0KQLI@6-k}Y3}^(@{6uZ{K!T0pdd2s7b^gmu2GlRQiKP3{tzY~J*lr8KP#3dK ziq`f4Y4x8b*!QF&TsUzKbD!QxRBz%HQ@ja4WUzRdp(r;Tj89S<@4>k|>&M^cb!yxn@z_kLg?8#R*uG!cR}~_+ zTWW|DR;>8WOgFTVdPZOSJ7tRu8d5N;OhB+gcybc)z;3xkqIz#i2~%yQm`<3my2`v8 zK`wjvlsp#%@nF|!dYH(nn-u7ySSUmIJFPf|SK&cak=nR>Reas$>CU+QuCGkIf_R;A zXJ<1!e=e-a0g0i`V3=k9+GAlb&dw{8fcDf`E;jp32wB;E@Yj0tKT0)C@Hylw77jyB zPBFHe4VvpEeU<^wLcLQX2{(B8qCXozq+*HD5Aq6PrdgZ@gSOj_rN7*<8zhy_?eROo zAATuck8c`2nuT6bw)8rw_f*vc+ze)G#Du7wA1o;{zw(6?7E{p#r%wi-$$9&;ApIzBfHoJ|t^-@W%_f(_r@;!ZdMudx*d>9d1Sz25$ z?sSEACPW*5$yx&fLe2W$7N>f+0KMC98Uje-*H?q zI04n9+?hV+x%Fq`pCSaw8o`%o_dv`AOu=oeS3Zw;yh=jnJ0LI-sg=l6x^QW?{n<~Y zn&sbjHPKRP^tFnGia8#JY#LW;<>suHR!a|DDC|5$$on^s(gsBA@4#GBHl}*smR)KK zn+I+R8p~A{i}k$ZNVZbPy~Xy#ooRdNtZRpjwddKYETZ2%t}m1?Z)RM8m<4m%A{TMp zqWgbCoBv5tQwZE65k=y$c-9UKuzXvyF*19_zQQmPr|l(GA;}s*l3eUo%qL@-BhChglMIGDls?r;yEYo3MTC0@#3(K15etb`xt(j5-ICge>36v(yUT345rjk)xf z#YBhQ$Gz2?mh0~mu@Wh;hN}DFazHyslvp!P@2ad~O4hv2{GN?Jf|?8|@XB`|mp0vN zqrCpOs5i8|>ldl?1N*#p8t-}nmwuTPBWLORC%2riw|9m|`&KEzYoEg2KGr=94y20m z4K~B8h4ecOUB($xGs-x5{m^-=N%G<4>`>D`;z-UUU;Qx1SJh0e9WHEVCr~A4Cew1G z>32_Y!FX+wIdnf#*!LFW)Z@nGk5QJ0 zM$yYh*K>V6Vff-Y^lLG;E7FT;q0DOgnK-mN_ASnymk^{%>lgKY>jm99;(qR@x~ z7MZWNA@!wvu88dIHjAfIglEiU!_%gii#0}GG^D{-d%;`Z-`npl=)8vB4D6+Z|Ij6r zS#BmT;rRkPA8v3G1$Kzc=H<%@)QHZ=<2Cm0U;W?v>m*FUs_24}<*D6C@G4&j@<-`h zE!u3)w<7$={oNkmsT7FM&Q*M*zw{iZo*y+x-5fC#W3Sz0MQ6x~2H|mqJ!DCLhSx$} zMQlIgv@x1DU7kH7OgmGet}1#UB}oPa%Xr)oDNZH1SYa5aF3%$+FsqCaA{$x8^)>u+ z;g#l^0N@9BgbUDmgKypMZtME>kZG+);q0d~*MWv(SAaYBjNL`;>wO@nWV&zbynk$G zN_6)oezoYRxtk)C4|J(IB#Djp94aXjAS69e4tAsUn&Fh@pX*O7)c~e}i@$yr$Zh04 z_`}}*7p0OIlfPzb#|Mi~S(7wtmpXerp(f7TUy*#cL&TqX%M7Jd>Ab|hTz@Z0$v7TB zH`=n_xW9=`p9$~AIXw{<{Jvx+tE=XnYA&F1+^5ZR)?V6omt^GQt#xZ{?!qZ)ypg(nbDnWjks%tr?hlIo zl0(^`lN9jFtt{e2W4%L4l}keqA5}3c zRipzz;In)mBQ1?LLqz6){VJl1OQ9%f+)<}pkdd#FlV-(c_WQkh+bI=wDg!lo#VlFf z2D_<}d_y1Y(l)IfeAfpRDU0voX%Xexh_+%ye!W(oC7mSPUO-G^9fZ;zGG)g@x^kOt zaX4-kGN$p_NRDKI1`S+>nC%DsSsb!>K}@H6Xr@elFr7jz^~uohY*i1W)l38H@$x7_ zQ5AXyX%tN*cfywnCsVPTe}D;jOb&M*q^7Rj|7kIVfF(=7t&e?nad?}lyie1Vt600N z@t4B29MATer_-iZT@U6J#u;;cLfZx@l#*|%^b{L$-z;qss#ma-Oa~N!&-V+J2o>cg zlH4VP0r7N+UNgb^Xr}HX>;sp@n3KbfJAZ_yjo*%4CVh5(_Dq?&Q7S3*tEUr-G^MkX zqWr2+3Sa1qPZk;viyENN@@%#Bf%HqiK94gWF94t0nJCb;F4zvRTYj8lKf7yd4jP=a zdc*!(C875!z0p>EkAy9wvLtLZURCvXmAFBhyNvf;Xfoo#lb2&t%rlmU?NGIRX(Q{a zmGF|q_sn=&04Z03>-(Rj4*10xXn1No@eeSw>deRSCL&9c#4T1m=&&ga{Wsz=S!yKydxvrqg`ULIHL^bQ3 z-7m%Z-5Cp5%gh#lYN~~3{$(|{fu+9p^Y=HaFxaj0i-A(TURkw^(A>IjP-svfBF8El zrs`qVMoptic^NMa?h{t%Cc)1_eRHMT3-_ptm~)U7|+)1!j?Mx<5qG9T8&LeW_aO$qKHWO zP%LU`Km_L7NIDp&%fRUcn`}fAh$K1^Tk(gmCKbwlIvDyK@@^-*MQ&WsC%37za5mo7 zZg4KYFbi@jDKyw;AS5e8MLIxxPPk@JLWiz_bkZs+C(<75`Gi3|Vgqw!uCt+~HJj>Z zE`x|rea2M7=)C8%RN4NS5ZYRrN>k*|GzDl)*q@A}W)GpL?u7L#Tq+O=?t8!s@-tF2 z#R8UT5$&frMKE6z(eO}hb0qU4tt^q|hXDb_X$WYc!Qwq0h>x+04itK_3q+NS{$!Mj zrpSBX1()2z08|z(3&V{7lvUh=Js}Rrb&UyihUz;rm{|c`F?(FT`FV zeM{5DLF%SC4|Pf=hzb3rTC1tGX5MmLKynyz?yHSkqzyV7ZQ0o5nTOmWzQrlaHwy0)gskcn7nu$9{eeVkT{BfS)-02ky%$G5DwmY-}b9Q_dI-%-d8g6MR6Ck z(A}3_Sz!d{XGPs4m(MT%ZbT{EFdW(1y?05-KNgNIoi1be{3aH$O$~XsPD{6WnkJ=$ zjPaydzb7zMbJk#{9c_zkVeFD^&0~!^>^pEqcJWU&n%(KjqX;S?aPwgZ5MUKwhN+xq z&f0F^>(F7LwSXtp6Nq#f>N}N0)=u)dZ#`5m&rqz?hYp$(N}=Cdc!UzO=|xn&jo3T@ zpWoWlMhLIkmDT_=*I1~@-JI++(Dxh>28P$DM!L_RABxtw!R$`sa9wtI@|8{cim^2o zP)skLP3+A63ltW>V%;$xHeFuE1Chg*S>m^7)}^@%TJU7VoBLoso{OrA{-BuY$mED~ zfCvIJ@Q`kMXxhv8u=G7yXw8a~=)ndvV2aP~DOYhf6EhXg%e8?c4_GKInv`k3=Sw#l8xF>&rSXIC!gwQGsIVH5;_r~m9=ZunC!EJtX6EQo79fQ zJhp3)lAqJ$&qFT2L%hOL%OaKAMyyJe2Kp~JO*x+UT!Bgk_>euQ!iQ^X8%ZIU3gu${ z7;BrmHZRQFF4(~Okut>{M%|LK?iSkGFd(xg;lyk+OE_r&&vYRY+Lw|hEF^+<&$x^j zu`p^W7)jw*jUG&=ucVm9pq5X7tt|V3%nv*I(xWI?!ZP^W8j@(202hrOphj+i;xz+jq7Vtk;XZ-H5gK&-U9P@MHw*f;D5gV?p8tJaT*x2(Bc zOg>xB22C8Du2G51ObTuEGv&JU3eS;S0((n2don|;3OeT0;*-VXCQO^u9^2upYW~)kcs>Pg1nU<0g8^Q15;(-QNTY~rX=6Ba7 zZPl!x!Ro0A>#350+^$(&Ck^e?8Z*n$j7iu;VXerJlBQ%NS%oie&#}E0L-sF3_a11M zVv73tKQ3TFj1k?s9L<(fr7QBG8QFB+Ygfew03~cWoxv_mfg;dtHbx5%NdtW{XL*x5 zk^qvz^5TcI8zU1=kZyklcz;e z*jfuV+UF?wRB5mTS7uugbp7p_`45HSpI3gJVB+3c9J2h#Yii-}^80n5vzYm~&hm>J z`-{aT;0M~Isv|3>TZc8T;v>}5Du{Ujb8|b~E2B-P_5W*ANU?@%W|O?*c*&{zxJ;fU zWAY3&YL*p*$SruhN*LSK>pcDbH7MmMmQiOkj)*F9y%qWLj`U;$@kAe2f>kS+x@WbW zBjlt9@#LN)Ij@RyUWMkl{e+x5mU-mUvyT@=)eISVA=7Cu5W$93pQp!P_j&tllYw)+ z3kH#!-q)xkiFk}J=J~@|47R4>2MoAivs0scR$3&6zLR}IH{qL%w_zJTxdIohcW1 zhA>oiO3bg?F!5V>!Ly`E)bWA-F(qGdMr9wx{-w_ucf|CmjArch zGo!C5*SX zm6pGAY47n49ripD@Z3w0z5jOYEBYAso?e`(jMdf{)nu-O(+fWH1i5>9eu1qadZr-7 zcV}mSUfm&T{=VT=eq`?=h%n@<5_cSNrph zSk}t4^B%C?_*7HL1~kEKfrJYR2iYWsoZQz!xIZDVw1Ql3uavo+!~`~do%*LaE4hKk zj1B4+=lztv&jK2$%#zvldBdi=J}kM~yT7_P7gf)~qij5S_<}2Gor>U9@ROI;lP*VN zR3>v%T>!5)_53U*`D-okG0Ur9B65FwgDgpASRC}~y%+)WWR|cmyVABWTC>ENQK#OK z|FpqVY|7*MlaA14UpOfs+a?FqJ?Xj`h^J$~tC0qGc|J9HzWEe)^Eemn#K2>CUO!c? znf#cTDPM!KrfF)A*7dq6R3KF#NHxC-x9qQu=UlcJ$hWKXWZS=DHNy{gzs$}0kOj0I zZ;ZaJupdfd<3a_TV2tv+uiH)4U@4?=XKf6p4H!UKC~HWo>Cc!osOn4vUz1emK$!rP zG#F}DN&gCu!~JG|yn7{e`fYTh3x5*L?gz1l5ARXE#tiU#b}{*=XDt;!jD%gLe8CMe zP`ja;9+f$DEcig{>E6r`Yu4~w4WZD?8Tq>i5>~@Pp%!YSm8j_H(_c(^jV{ehI7Ucq z2ki!9GvX((8ugNy++13@R(YQ*$U3=z*`V5FSwXoy-TQ0I$s#K*8ki{Lp1tH}217sk zITWD3+obT`x=P%|eE_@g@C-@!4$W{9?Dy0Wmrim#;52Z7+tJjr z{Kpr4hVhSY4LtdEpXTVrO8XVBxAaMFI}we&OBhn(d6;1-r3CZDkJ;QR%n@m_TLbbW zYI>OXI7*#wh2n-Y-H!d>)2+sMmg0&t(P^n83rU1=er(_~x*wi%GkEsODVi*vX5lf^ zFMHV#5yopw5?>zA6uP&YFzT_S8>~G!lr1jB zB6wC91t~&XtF-NSGxQ~!F>1sH5w+fOtQSm4AH}kXDFKW~$8%lMa(Ue_%?5G_nD*Bd zB4mNql&$wN`zXchyI>aUc8^YJN~)U~qE>O7dV6D1n^*sfwYLnYD@wA3vEUjA&P9U- z4I1161cJL;a1ZXm2^tdI-QC?SxI0{2FYf-GOizE^({Flu-pu>U<(|7w?b>_Su3EL0 z;j;Y6)XS62G>Yv65@C1-z8if}UEe$K_YKZu@#u@0jQKY_Rlx>xU2fUmzTv7rNI<;s z;F)I>s`0Y-(&KXqAZLWDrGg(H*6Qwi%Blm}F&3JfPCfw$R~5ej3kDqE7Kq%s5k?{A zvlvOtF9lpSrixFt@kIK7hIU1~YbYcv{O6hxy^3%AVhG2htrBCaH9rHbPDOrkS`%tE zn{WuT7k&Im3&82LYJem$Es{=re*4AFSbkR^%4@hmObeN0p58(x#BXZlx|>x4Kx2KC zd;=<2dUd{bj8CRvDBKqg9iQb#U;x|9UfA!? z*EKU_kZ^kD7|rVI2(G(K7T{$yr}92$px`kprt(}35P`DAqcR`wE(*=L*Vmmc^3Vp8 zX?v3Ixr4|~9^Qfxnn*^p>hb{TqM|2-R!xq@UfrOVyBjdn#Ve=ubZ&3IYslTNwM_g6 zueEQ_&~fFI{+dyvH)TG+y-ETQbXS@Cz?kuo2qfSsrer$IlH_kWNQT>oPQWdc>W?Y6 zF?N=)JW^8AKljTMQle8IS)^Q6B5>T@?T{}^qMYciXJot(`bM1Jm$AlV!qf^ELmvvN zB|s0z3K;J%<`My&FhOL7W2wAcPgPDRq-qV$T4J4&aO9TpHY*YIaZEb0y`i|9`|?wC zCskp%BWlEUXwygC9Qh8rW#S-)wfmPF!I!H1gE2a(7+TK~Cg+WcbpCN&*6-udwoG~m zTD4Y%x9i*o;PUd7E7Vo9cAsF8Ma^0ZMF#}i<@wcG%h`#N1&8r3@tn!!iHjbIvfnJR zMkQPkoQ+p!w~H8%u>ZDDJMuqgoP5iSAy+ctg=5xj%R$N(AJ6nhfOK6+5reEaze1>5 zEgtVl1f_I%YuIK<@LCFoDpC8da7&kze(hL8(xynJ^u2`I(*`Y>(niR67}W}^+}kin zS7*8Wuk{*E*RO;lQs1xayAgskd0ot8FhEV-X=RGF)H4^>R>8<)$H`nJ`MrF!HSUPc! z$k2b;WdD!7N0j1p=ZxR|>lfaS1G>r_L?S~8Z+M%R16UM{s!T^DahNQuLPrgkSRh_F zJ7Xf95(qxI@h;`jV`Z^8#YMe|3NhvHrW|k$1v-__%VFo>8cUR6_^F}##+XS=$ErN& zJcC;3^{8+gHpXHDBZz|6)>Jp*d=UW-*$4BS~32wv|ab46`j&KC^9@du)D^1KWz{MMi6$h4rV)rlsqw~ zXV{%FMy^m)`MVP&0gJjkS!|F{=HHvK#IKiiL7L}N`IrPG>U^#=nF-s=!Q8v%%=ie@5 z)LF2cx<0&B%d1e!b9ZVf2CI2eCh&L#*?T509iw4DUVy7V9mu`?8{S}`fyM2;C%S<5 zAAYL=T!&3^CM2g0jO;-wmUfWf4)Tt`n@Hoel5 zw*Q0ucF|0&;4Yw}V^X?!;GVgZ_pwGj__WqyWbyJg`Y018meYFGPqo@?11NR=FsvA+KBN^aK-JEQ)k z^xZ>E+B3`se-|>`#vrX}p!$s6@t^KoSz5#eA8boc0baFi=w{><)#b6}@8Pn4J3%>} zi8h8fRrW@3uJOd~CXcB;Vl5<|nbB!~*Re&fRK00_z|ec_gU=3Xt@UgIlTO7Y)*6XO zm{~MH>D?}0FMIs4Lp(Fnjy(Lz?H;Q=S-Z(Dtq+y-vy-K&^PviE@@d~<@YdMav5PG@ zi=Wp;e&rz6e24vJ?0EI~=G%`Pc z=!sY5NRKqSDHe+v6x~0`MIB|~^*a|eR77VfpaM*nMsJo0U;P#d!8&dC`E~rr9;=%o zxTV~GXj;PW`rLzvko+%Ey|Jku3<%+h?LQ7IuI8icL!S=6v>TQ@t@y;uu}3F5BE; z=iNi-*!mJt-$b_FZUf`>#2DND=vejM%r6g{DLCA-`+ZUO1|L`~6pLO4xGu5C*D_Zk z@7xl}HMww8xO>CW<;|B!`RnkI$uo0NZ`@Lme?f70dB9&QC;Z5_5wxEi``x_OEUsK; zrIE(joLq$4#g0g4)ED~k!`Gb*C2ty7TvoU7d8*$(6&IBY_YSTO9e0K`#^7o|F^BY@ z!V_5Ov}PFsFeJQ}oz)D-b$IKGOWJK7BGy*0mHc-HW5d!;&(JE3CDof8&FNTAPJCW? zC8J8Z1YNE=q^%-}7xwor@ElKlUL0PNG!4dww3?axPWcY1ki2R4e_<2rEt}*C^3@pC z{_s00Kd;?6mNaR#a{s8ezS2J!z0jJ4OSm5)5aApk?RbBUn3Tp;#eKn!l0?4j6^|R^ z73pj|kl<_B7yc1p{-P8&&|`8nV|MdX;%eSPiyO9qk1(cgqm;_q@zEGo%H9wHQMZii zo@@?*ZxnLF>a6?3KFiLRZ3jix+`-kRBU0;K!8Gl^X!b!KtXF-n&pxuo(|Z_H)a9GgMR} zn!X#JJ3jPm4cygrSuz}aZGqc)BWht=08N92^|xR_hz0ZXT4Olbb9KvpxhLTJukn;X zX_eC^m3L+Xz``gfDKD~`t3vW=cl$`^T9>)mA4SVrPhcDws_2x>_RTu5o+`)44H*ZK_ zx(Q#3^W{2k&)(+BoN`P{$TdAg`{wJd%g=~Z1!4%kPh>}4%{eakkw00iu=1um*1l# z5;|m0pO(h3OBpi5o~zk+cAF9ykT9!@(WZ*DtrzkdaR_EX5^~2bvN4Sl6tAbvH@JIh z--h0kk9ek3;B|5T8`gdB;kNdZHi~UGcQ800N|OG0nS4{zz{YM~Qh|<`6jq=CL?v08 z^=O+y6N(wVF}o+-(~lU??1JZ%O+)kY+;HR7a2je3C$Q7q|4F1Aw3@feH98*l&J;1t z@+h2yMMxcVS3N8h^L%gy>u$fv(AwgaNb&ZQv;n1r+U`P_CC&Z^6kFJ))vV5zfUeQsNl;n2LOT3@Rbe#|@yN{2grVHW@mrIl9TIods zYIF@AT-h35PkOg#NpI2SJSEht)X5;WNW(;mEV^jaPrro&uHb(c9d_i4b|^^l+FoDE znQjXHWaL0GU#c+^JH>shOh7ajjN_+UBL9c4{Pp|381X_4v=elymDD)YUq3gsJK=_v zEmVTSD!V^Me60MyC*`YYvH4h@p0|YJL9ehM+*~_(KK`jgn3G5G+>4lmGT0WZ~v7c8huA_eWZZaHv&b-jL7@)yw|Y z1%YL5ZftYrnA5m>KLM!@WklfDloqByHoKcNas%L(SgEJmvwk1@%bS~BYc$cDlhunK zKd68UNC!3y#<5^VfkM_~tH)Oxw=U_)f6ODSk@x~BH2f!g3{rv9GR)ssx=4JUr{nX% zW9j@J<<`-If&bic9sOc!BbGkyU++oXKNP>|9nkX6+A24wce8!e8_(9;8Sic-8hDwo zZsyj&f=MUzWr@xfGdlW^6L6ot0;39H(0vS`Kg#Zpf^=0H(uqE~g#Lp1ukF{7FG6Nf zvuB}XyV7v2noP_rOcDEXmK|)X68Q!9Z(Ha;jQBPHDF8`youW6RV!}`!U)THM9<9~g zHCb2i<(7oeyUT+=#;WOO{^DX+F*Gx3Apd0Yj1Fbu*kR z{$G2>zkW?$c_E>InoNBfN$mgei~ZFytNei3+dOs@v;ThA``2UmKWA2mmW)hfQN98@ z2kEa5{~wR;Bn>b-nBSpL;eWLO0xm*^gNaFQO*@Y?3HQG?yNeuP_LH>6>HoF6VQe^8b1| z*FFP|G5VQG>|f2!e?FAIt)(^WKWj)%pJs^qpJl54cD(=d4e;MS;l{=!FJ;3<`n!Pq zf3mEBQyT8iDgFP-r94yo|66uKEQPBw9TO**G|dQ(BAtj!uM3zpftPN6{Z>ls)j2@2 z|5V||#_x5{u09wmvdZl1_v&1!E8zRTkvn)@j= z6m-$(dN56=*=_*4(&9E`-DbD$S>SnB6~m~dD)o~aNvFy2`?Jd}i}kYsTdVieqIH|+ z-8n!qwwpO!s5sU7aI=rEm(Te%4WR`Rkt-b^hm1!jlK9>vhfDheC_wJd>G@={nU1+C zrELAX*S+(t;ln&i_Iw4iWq&-ZvDoOP_04=Zx^OZl7bY-Nei4;`cKDEMYu6>k`ME6u z==rjgHK`}2bVsF^Z@@PmPSHSPXzGIv`$Ipg#c7Lr>TSdXXRKVJ+Ks4LZAc*KA;3Ai z!q~I5TaFxCL^$y-o+)p4EWP*&pVd%dsP1T{qqgvu)mX(o+m|dpPdTTWc;=`5gY7WK z>q~+ryUwR;o*fj%L)UBiF^19er>hQdTKh%rr}Q*rFRk#Mk))lgyshVZqWg{Fayp=N z=J?X-bweusmX)bp`!%lLfx<|@i3E|DHK4^L%IL{d$t50&$DCO&6TCeP8piV4TQQK zyMOs30zQbd1Y@R1DZcCOc04x>Z~sQmhjS8-Q6cFkm5fCRLe00EA8)|SSwO_wB!l~U z4l3pF$}@Q!{BS)PR9oi)iP|Q_e0>9@tt1`8AiB?Hl4UlLHPu*cdZ%N9@ze}{;&{t_ z49(3lyt{pzy0j07l-fk$Ifz{?I?*cT4A7hPUxW7^36^++Y=7a#Tvl(fd-UNnjowh> zFKT64IMrG`2j66CaoJ4XIppu>fIqeQco9E=C~`PXj5Ypw^!k?#%U3QPl8X6)pLFvw)JR!&4^fCQ}3P!?luR-r$$jfm9ldJI(?*jjAuyA>#IY!Q#*_4`i{F z63&FIp4=a!Y_M&FwluR`?JX9nUO64jrlOMy7|zw)o^4JvRA$q?3DX>bue5A+cQPMY ztYx>~_~HMM{Ti>k^Ed2HiQqvt}Zp%5SJs1ayt>&v%yOz#(gDM3IQ?px} z*rNmSbkeHy+9hyzoHpX!L8ukjEQH^QaTRl9ML8_yI7GT10$c!6w2r3n26JhZcyw@^ zbuzhMsZKfhHuD#^AYkjHvR>793u4sBBaWpdIpv*z#q}Re{t!|3WQdJ^z$3DBva7e9 zrwN|PM@?iH(`|og;*j4_xYNinIl5Pl`IyIQ*rNj* zW^LMhO6iDxJG_bLwDS9|vJ3qBZYMw*jU@^{Zj{FHwkFB8dIv|)+Yc%kkJp*FJg~-^ z*U5nVE1k-7DsTN!Kutsvdp3ThA%c4Shp&e_GLD-&XbwMCzDjDt@|;&jhl48}yq{my zdli#Ip4H2sJH0Tzu{0~)=sM3`0L3r)#?aWkz04PdlQf-ymtK_SCtU3tC>#p`<_pi% z_(gWxFKY3{vCJ2zyb9gabpXlqg+=R4Js0t?*E=vqhNa@aXO3w=KserRhL_^i; zkpzJi%!#gdmlH<)F)n5~(3=M{MGC)Pza7??J|9k;Lc?M_@VhyDP>rgx-{{G0tTy4< zCKx-KqFCGoScUs^SITr-ize?XXsR;(;T8Sh&Qi}CQ3_O=Zc0I<>}D$FK~O9WZPL=fYrKNzFOaSFb0oVUnV04gFdsd8E6kh4Xs@LOORkCCq* z_~2tcSUMg!2 zG(L|`(ZiU;3$uj-8RbNNC?j5QAAsJr4l(P*0EOEVcXS2cWP-fl6_;=8Hm9eWe$*>3 zAp266|K2$KR!1}@Tfyt1-Hu@7bNCdc=kuaQ&!475MnTGEpQMRV`jRCPVZuH#a~D;y zJH`M?iU;W%rZORH&EByMRQ~nw;hY0%7x&SwDWWNx>5%LbJVyPJ3b`AGWT!vkItdp` zu~NP75>>q|n5AqVZ#2~*5q-DC9&PR6?Xg>h9hT=bem-}uS`@V%gL0(CRzIH1;aqlCC&RLSd)uqb$QoDC=& zPXN@pD{nn)*LUiYciq4^$Mb)W^aDmEM4S5BO)+3rtQCWfn8s5Vs^`opxd=yXW1 zTKEn?PV4ZvC~l}dIv=i1(K2TQ!b6;JgP>vBAjZcfSFp}am-}Yd!-)r?UfJSp5S6(N za+ZuLs(-(e0sd(W}GD_oGFPWCr3+@$Y(C+NmQqi=Q3~D z#TNTg1&bxwmFf2Z68z21@*otatu-v8SUgEY3a?~#KrK%EfHul|os~najCsGqw|ylq zcmMkh!Xv{Q6*sn#CGY!jwf48 zQh}myjjoN`?v*Fy`~f%q8R~Z0ut4{zl=+k?*-!@5+{rxY0S6R={{?8g$-h_Y-C!z< z36=Gdg_}gk09*TTQhNXkCbQ}27@hd=JRiWtg+uc52C61I)3zGwgoImMF<&}3hw12g zB>7V33K>Vx#?uM4LF#fd&xt+0H7dDO@=S5M&Ir%xF`iD(cQYUVM1RMTbg;@b=Slur znbwvjuf9;R7CDw-pD&avhKqk-L^_5xdQsJ?Jnfl&AW$+$UV_Z$+0&wZ=V>QdevXr` zWW)8H+GurjK&B0Bj_^O*=@CD|v3T9!rTc*N!JvS|$f>~Q#Q-~qJ>~|3YrLcJX~FFq zx!)x3BDb?!i`gR$*6%hs7xB8;TN{iB<>r1-NlO8jjI(>A@u_W{Z`VP=v%sT%2ycY9;K0_Vy(A=i}r0ha4sZYN=I zN*xH)S%EY%ED;2hK}OZEI{o(H-fnXB@5W(Ps7`|rMuW@0?&fjZZ#L0!eDU{h8vAt` z)3BOCBV5{VUrgT9;gn}Owi>Xn=)YvAYtZax$W5x0BYA9(OYFmaV$^rO?2uM$`DxmW z^F+Vt+)9JNI@q*K*gtqr|7xjJLatj&QPq-1%=1D9M5&W+vvMS`2Kr)fq;m}e?_gy+ zlEk6Ref{ah*MFw!c`pA2D!Z%+JTuz~CtQr16@||+h&e&gd4EN;w=<$eZ+*O6$4QW= z!|;u=1=3ab+%khXVfX|@rHgG|2)MCx%fpH93ytq+{*tg0ro`mW+fF0<0|dy^;UK-_#qD7PgP$63abp3d>&?G#lk9lpR8``9QWDC zXa`gQKpfPCaXh2vxu@_8TcIm+gYvfN4 z<1Q+EKG*K2YXU%bSKL9xz~$-7^F>pk)4@U-33U{aafq41nw+2&3;xbMMZKC6m1Io9 z>obQ^UVpq*{7RT>^}GApb}g*Z=C4nYq?u>g;`kFE1YZW#(PdCv;n4u0HH*pEck%wU z<`GGC%3YsuidqNZYyEa0zm){FMpHQH3KmrE*Banc&Up=7RjzWdNGCbS8jhjYeo{&> z1tNfQYeR6M$I=CI6P2h7xFKVUP6x%?F7_A$FV+Ss@y$L?hg__YtS;tjr zJ4?TN^N*=Z)Ha+~~ee!}RH%>J{rOi71Kzj6U6kw%sQB+>{Npd3=pmpuWDe$Tt@ zcu3=#rPPSc6{(=x=X}}p%m^Z`32V^R!RRULzX5=|d4aIU@$TH1$8#$rm+4r@*%UJX zkeo=)XOS++=N$Oh~`Q&B``?gV#GEQ zpj`17lml>wQwbRO>^yU1;(ZnKKMg$*djMJp7qZ)VpW@R1;N}?JGO^wBGQqLriVgZt zWAf8gM4u%C54ILtEmAt+QoU2bAXjXMIs<8$k2^^cv{2I*=1(_hQm zo(iPsm`?V(C^F=F z0h&#v?KKeHjvw9Ha0Qj8;y1GgjB!I|OP*4rQ9xvX_>9ykY9X3-e?+p7miMy;LLoTy z(f*b3aI#=JvX54XV%}$C2*ziu+ac!m@o|Ihqw@x>M0RsNue3vl-d4$p4d>r$PzGJM zl@J-a>`o{o7M+I-a#8b_wkPNPO2sx2H;b99z!d?}22zyy`^ytK%)Tzpmx>7+QgW*~ z*`ZpS9mt0o*9pTS0AO8fy+o+6wbbzab!Xw5LqTHFy^ARj3s(5%?wp=?t^s9AYm~W7 zSOX-cP!a3i+tZVQ)HnKOt@EX_e+YC5Om|6BZKaX8LK@$7RvYxw1J*M-3D0LnEse!+ z7{2Yycm8_~M#0Vy)Ql9Jr3$_J$Cg0xC<2M{`5_a1_{{5{y(qEcB>hJn!v0621TJ^2 z3%k~?q$yUb3V^cYFE&> z4C>>U$okE8jFu~TjQrae&5`g5`#ooyv@%K4eRm&6Qvj2z!z6))`^Yrc0KhoaYRsNnG)I*sXB?5^>a4RBE<$wLYH1~SAC zA*T?pt6XY2;(Dv!>T!}b(uS_LaY5R(#hrH~ zWAUaa!>g=}uG#q{YcQ6+@B-TFXbt;Eu1xZ5h;ExjY-I_aYPp8Y$1qKS$ox<7agmzs zGW)J~Z(#l$xxO7pVxeEo1iUY1BRa4Veo&|!u!}>QoJQv$GDNfT(8U>aZ`#!!Qn~xa za_fXKA8w90&JSPtwAC97I`S!5MnQO(D)d^|$n@^R6JylIX&y-?C)Ut7G`~ZtA5SEg+UocC@;l-0J!5GCACEK_Cy5AF7_=K5e}}l~`R|9rH)u#E zZLv}AocE&ioi8y_Z9QogCK=1mR(1!|YJ}oE$`aK0{+!2iL%~s&IlJJMJw+wNK`FEB zsF>KKBSI0g_f%%WW2Xttd?JKO>vY2C5JGN|>u^3<&h#F6S&Jq(QF2xLH0V#Of3gAk z_8{ad^3i{=B5V;r@EE2)5 z^Xf0-xSj$v@IFOHN3*42JijL^lef>`(0di(i(EP1KqgXu(!7MXJ#L`fC-U-vYxU9a zEcnP;H%7DZ9xJ}o1)&{G)GxE5@j4x_muj`I5|hx!O_;x$B2mlCQb;$W{8}9!j;+x(Wz&mwb)Z2E$Pe<}rl9zC3!L`AM zlkx_=H?3<8r)(2?ew?1KCr8`C_y};{v71I4|9xG;SMG<<0&=Xz^i+74=0{4QAFK|z z08tPA%#F23b}(Ar%kv89m-n>UDoc@%2GoJkHvn4ACa~tJfhnXArb-myB^!_^fQ#As z72&^IcL0&u(K?0;j3)~DvZ^Yn)uOCXGz795CV8fvi~Uh2l3Vm>P$Bv4aXnTzpaz=a z=YWeC6o@09NkfdaB<)$AG16MwpX>`{J`=Wg#~f#OIMK8QF^fh$AcXUzD7t~zx*Hy2 zGOUjo{&kHlSQRO?%4EbM;P92_^d7jJIaS|&u{SIZBcchEL%?s5BWv+UAr}Q&p|xpg zsIgn8pj=*o8PuwF4@~XAGp{T?ecc2kmJjAD*@Ug|67JLqa<&AJT{tba>~M3pokHQ~ z1iako*8lLnM7Vmb*lrzK2JF8=6qSx=`gn?t+^MIJOYSKaE9UWLa(_M0Wxb`5i67la zF#7~(A_8*}CHX>gr04Ohy!l zGy0TIFy{BsHPeZmSn!V)owlCms0gIVIg59s)MkZ8ym|P}VQWCv9|0`~xV$F#r^a=E zsOe21OZk*Qgac{{KiiaeXHcy>w~K%M4n8#BC|ZA$dc?72NDq+*k6BY6(!32(?_uC` zN&F5A?8KB3sQI3EkSHBH*;Jm|W{Z}hejNkMe1!b{i#NJ5Bxp;4o2~%gqH?7a2d}UB zJt~3OY`A$)g8FW++pCkBWOaGHz(D9IQvOK=WeCxse@L`7kIz?eCM!NGSzz z&wgEFbKKT&qS6~^j8!^C>U=iHH>m5~G(n`acm*atvF>-poHa7(4?f3t(g;(y&eY!o zUE=7B;NQGDE56eTz)kO%2zuAton}Rz6Jhui>C1k$(W~}pWIN$Px9#hU`crs2$^OxM z7!q9hwz@Dprh|{0H(hrqeP6#GBDhfs;r^w9)jaVA^k?Pp7Cd}vv1a!mN ztQ)?aX7ed+LNi-s*gc6vBV0)9cDBCD z5gJg6MDGpQqiM|1qfbeugE#P9bDtOO;!n?Of>cvewKRM&dpQt)&b;=s zn%=I;35shvD^X-A&_Pp7=9>IDhAdN>+?xCF!)t+--3QXZxN_~@0`yfnQ9xYK0DDqk zZ4=rWAefASz^x%aHTy8XnnB55?d$9oFLuCyMMSth`BaU^Frxr^;j~y@cCAZg^9t?1 zbL?7cg1;3DDF{XFK7kRg#8@Z%c7#;sA#{#Yh|0HfF^jkr7+*a{HL9&-s0^h^A^5Uj(Xzb-w{WPndZ_rPB{UgbH zyXh&dO4=>@`w0>sOh?_XJGMWicE;wJMNeP z)4}|NaV57c;9Z|S-e!B(64oO6C)eI_T1h5^zGpe?1vzZ?d@ufaWK>>U(9D7n^DW`c zwkYvpw&_hrsC{U^L}zNV^TdyJO0&Jwb^10kkCqt<&Cdq9<+`wgdKo{?!;AQtMQ#fb z#(8m(S#4vBW|WEYWzuaRC?O)%reiw^%bQn#=moyh@nUOokxKb*-DZ@jgv!lu9`~CA z=cUk|ow19m4deOK2$c7+b#cSgXDUe==}I3@tq$f{rG=ObOI0?nb!uirLGa z4ZaObp5PJby00%d9@OlY{p1M*T6IkIS#xnGx|GJ}D>rA{!Y>F!TwHLc-IrsrC)c@2 zwQ8(B1|s9->U!N1dPVQGTTKmCr8^M?VUT2r)iekQl|=CY^pZ5%?+h^O>ui_AX=sMM z=bD_PuZV*$h_^TK;dvn*>TwJju5~4R;-Cw^V$0utfhcas`@ENPdLBnTd4SxH+8pCn zI*;4WueeYOjAi`TG?8k(Su2*en#2ijH!dt@O9+AxbcR=RNBBlg7`c=*z^#^8^A;z) z14P|C{M;s_4#r%z^DQJB#7M)h0X@y1`pK6Z(>)?K29T%mg_U+3s_4Jg%u{WzcP!^t{Clu+N+)g36 zP$}1$a|P?%J-tRQl2@D~iGEc#e{<^}zX_bPpS%#zvlSm75xeaXZBsHQep1&WnIoVQ z$c|{%8L7S*s5eJR;rOOf$wXx0S$Zw4VXx1Kt6B^Q%Re$Km6xa?^6k zbvnE&`nX)r*>svyHudV7h(n5flkmq6@TYS;hOXT)KB<`L4f_W;aFllI5S*%wStv%! zE+c#GHMWg(?w|^tQeU`K%@vXn;!JX6VfFhjl4DAOscbx7z{dXF^7!>Lov=rL*fL>f zm2i!kK?+Bl7tJ9o9Q;=J6F2QBTaixFgi{8)O1pE5r>D71TVJV;#c#k`AE?@ko}>Uc8WT8jy7nU#Fi zTT+45y~3wDTd?qLMyB;`MdszzoZIcDvm-$IL1n#gULEQu#F;#^G=kQAR3xiDT4~oyr@Nx11}}%@y_!!W2-(-AK$^o0+ON@Zv3R+-Xq{%Eul~f^Bv^ z`P{O!n3*bJ?*CT(UosyCTqVdxekdA3-96rlFzaUx6%bQnMwiw9T6 zvmOmVZ|tBEaTXcjpP5hPow>GCw7$Ctl6Zc+3(x9{ARY6Q3Y$W*Qj2F=QCAkw=@pfH z*iH8#Fu(Golp^Vg}hME#dGc z59ILdQX6j6C=PTIHTmNVN-htBYX}jh9EA5l^B)o}VQG{dK&KqaOGBNtOAnwdyn6(Wg|Ko8w9} zsv}Q#&F0j%rV6Fi(vB>14&L>0^jbAs*I0smkE^j^)KqJwjIUFc#A^{?URfu2Sx=iS zIh1KYUd|i0H8Z9Tz@0KKCPXGZnP@R1@ zVOzO4+lF5g6m%AEvVa@R)4*7@VHwii!n;c$?tbO5bgh&_az3eP+Q4E;{AlK-Gn?u3PZf{3bsCEEHsLxQA@NLlnM)8(@Wh$|meOj9fLGG-YU?5X z(N_{BDdQci9@E=Q85c<7=RIM4#kR`64Xh!F25hCU-+Ti*?~&@>h|~a0!_jVE%4Nf& zClZ480seGxiGoOnhanP7Oa`NvM*!TkOznVYzY&n$OiM{jnLhEs>2i-XD&}@AolZ&I zeHetya)lB3%68Zu*;UPWEmIKaBHD5}$Khv>uyKx^Wkv0`cl2gK@c%(j4*tPi@W96!wH(rop)1TU=cgI9DbOK1{hQ(-L=^8vZ6ug zY!V8;XYhhtd+tJnxWxppV z@>7j8*`6scyqNR1rGF3XgsKb<_|mslLDFtpjXmKvb}H;;zMwf&ZL;XN&nE&;?t9E0 zbTfIZvpBW?%eS2R=xdwPC?rE*lYw@oCq~`10 z>x0Qw4CA5bsY42-d>M%kg7qyl9YY4esw3(d#uu(TWou@tmDncZuHc~OGN4Q|nX1JF zi(}V*;_O{;)sBM2I4@KX)+8b#>2Y>$oaRMS>~0&>uiCWhv3r= zEyj{`UfVPsVpX!dz#q8Ry}OOB)G6wKY&dzX%`-yuLY;LxfpEReiu3Dx2H6qHqgpo|YUbL(KN#-yXV1Ye%ASMEV1>Qf8iZrvRdOub*!Ydz0D zY1fltbnW1{Hag~O+>h7ut}T9DLJ~FA4XH#lv{R=)#t0T_G73h=Vg31$ArnQY9;fBJ zZR5d7Xa_Ay>9JLqXz^rsSK>4jSyYdVFQskW+I`S#xy)+9?+zzEaE&EoVZEly3fek~ z>w)j>jdAxlSN_MEo%_+W4~JAaXcqjZ0|&qFjLWz(jOB)!eO`RYvu3tCFP42@o;NR^ z9Yjb;1F~;%RmjpmLPZD+eEOBQx7ByT40%JOn@c{>aTazWddh&>&E}6gae&%@p2Fjl zGzoO%f7f;eJ2){;xUD=h|DdKc zTg)nrDoXx>Y7k<8HlMxjhJ}l>xSrx_`QWp7$$$m%hBFnk!pK^-xh$gPqOa_lr8(SWg1YtNQ z0h|zE$ihB=d<@Xx_|12O)&HyHs98A{orV9E9bU=8%UKPbIC*lTA>8;Vxke**|C%)lD6gxbxF<4xKt}+L372^5b z9ZnlPzn!Nt$I6hWA)NtY2f8s5`*+n|<c14e zcQ&73Xh>w%{LoFiLU{fsP=K!XGGua4hC;OxEi}>?U_cPxqfea-FY{>`EeEE0LdPNd{?d( z^E$OF$rp4`iRZd%pf}~zbIJRhXyPe0NlB-Zdqwp*y&M6ZSRRCmyftPUzSHHrt~r~Q z|I>lPl}xoH;lR@uQ&+HOvlpG@l!V8r5ZH6yw46RD=y3xp(plxpDX5S&% zUn)hD?LK<4KB>5K5Jlzh6!$Vi>t$6)O+glR7k z+A5Y=X*U^B-M81dKdJ|tpZ>_?(e(ZgmD?67sLaf|_M4Ynya+wMVE)}*8OJv9@I8%S zLV>=$1%@~#jjiYq+&9#fvNr+7t~!^q8~t)ZYxPUZD@akxRUDYTC}cD zW+Ko@`1FB$ea$O3Kxf9}0*vIHbC!?#Wz6jqh_%HkTP|q7-Y~1g z5whEu%%%Gtaoa;^BS=^S9?}>nn3QleF8zcg0d9FNx}1YQ-12XjHN(N*yA=}O=OV2N ztnb^+9j`##zM|<=dh4^-_a<)x$Sr~e;@-%RQy&6Xy%>dWPV4A5nF6~43n8A?vK@0R z-%t$=tXG+~67{7BL^)*WV-B!1Auq);&>V=Hp*|Ri=VE>uUL7Ej z0h4a@*SB8q=Gkkv+nxD+g~RHVwhc3%%;5-i#JMAfc_N=F)t!zAm<3Xv=U?^2D5VB( zXfLM{_|?KS^4~&o>zg98=hVaXzD1mVOFP z2bA4-k?bQRg99^8=j%^wXTTV&40%9Z)j8sI;q$|ZPfbw#%T2o|dhU{HbbnE%%9B*7 zW_{&H&3KqaknQz{G$(!h@uR|5wQ0is@UC9ojTTCcRk`4zmKStlWf9Go)IU^Oa*9-P zWkn+3EsSJNZWWY?(z-twsR`CLrA`*8-!pDe4hVUs*NX3SpWkWLAUYi{D{S{U*#Z3n zdjVji!BKx?U|%S_|FGUm2=>u-g1uMk8VMz$Z#0 zsR?9tE1NO6MKco@a^ShBa=UJ2(Ux$(hC`3)hzz9Mo*N$QsXf9}wa?u=heox_+LbrwG$)*MY+P~s=$lk?{Xh!*;^OIr+xxJ);m>}Kop2dJ+?A&6B--lsM z*bjH?0mWoYQABg=#(LQ=2;(?Ew5vpkg*Ys1XGCGhz)e4s3!c?|Nj2{Lhaft}=#J1FT} z(EYjjS(s-doer-20>kJ@@Mm@SqYfQ?p9VR|SVY7+-7s9A7M=Zqkc^V=x}4rwnUie# zAA&H`OyB!G4V*aE9!#s<0Ow@r|Hsx_Mnx4i+}|Q7T_W9}AYIbkUD7Qe-BLqKBPk+C z2uOFs&^dGs-HkLuGvvT~?&o>_wbr}V`RoVqaGh)K-`<oUkFtW>v5cC!guVNz7-kxr@eM?7d;;WCE}1uQRK54)pT ziW!d#$J}L_EFk)RfcgO~0%$dt#ttA~a*8?e_~>mcQ=NsSAmAzyM5MhaQ;#OS1g+F7hb( zRPT83W;^dgk9j(I?_w$#vwSonzFZQS71w&#b--%Ce;4GxFhTT|N(h?Dm4`OHcqH^u zx_moyXoiWXaaX9l>_0Z#8CR+Bvu?TJPGZztMu3>d{^yVlgGOQ)(%wvo787)&a%oRh zv~pOIMC=5_T<)P4A!w`~`ZEUV67}i2ChFrtrH4O7)kea~t|fun!5vWJHca>nfcUos zqy;V@!mt+JG7vN7gI#s0PK8nugIYDgBpq(0I357Ia+8)t{Ffj1`5Q9Uo(#sx?L2(X z%x{)%Sak%(Prg*xc+TM<)awE$bLk8~>65*y6)AVVUN>H+JwDq@5BbZ?R&QggJmI8x?u2^Ib!SflN0_Adu!Cojb#?DSj23f7D@(xzGua?#gjc< zX)x-u4C45l(_$bKgXZ~cKfTn%esEN#mGg$?zfrgU*7@+>y%Y|7PA>h$R{7+0S}oF< zh8fjAEplKpsm%K2qW5B#a7(U8k+wW6vM{tkzvN~$l^blHQ-^ZB;!l}|VA$t2{(VFwA}z7cM$39U zFG`mSu&x7^P&iY;c9**z<3fL_2hgoiN=+-sDvWDlIR!pShTP^5O%V{?LULv6P6^x` z&umt3ORy1ScnN|}2e+v!96tL&kq3|Am})`K=aIc#tR@j2a&NA-1?NINo#F!;gjQxx z+gph^<|`{vE2o4b`Wn`xDNrSa3*C)RXY+*3C&WeUa$!yJ-Sqmd@ZaWg98SM0jpt&# zI(NI@e@}W>8-qEF@rO&`#E9aVgme4*t7O!+gE?~>Vn2XDk@@b*@TuO`Je|)o`r;lw z`#U(O9MWDO9qFZ}ie>8;(gK}qEIQTlK3(xH9Wjy6IP%H39MK_P1GkkGGL#HrQoLqy!V`f&%B&-gipxZVOrH-Q*B-qN7bLBugDjE{dF_CS_xi}pSEH$dG4`{S zc_>1*kzNAZ`lurNQlBwh<^e@?qhkvrqUg)$QbE-NU_^7*_E!fcalI_ZG?a+l!wv`t zenCVe7=46fyL$@E6|8S`Th9L(SN>D$_=l>o3GyU$JORe^N!x@_h%hKo^XGN;KJh~kL|iy&};pw zR)tmSTHBl*zjr4I4HfZ&hvyqwPMEu+8ZqXo0Zc;U)9ZU8oMYLj7Tc$SokbLu9NF{{ z)yR}tyr>a2&!4PVimmQ!)He>aM(RRaZ|Fx~{Dt+89rYF3AQINeMViP=wKMMKc(W2qwaX4vCr^2C7gp+V z-g?iN2=cKi{VHCeo>hEhxf|K{SV6wm_QX@}%@Sl*82O5g_J+Nv zSF#;-rOjvT1HCS*UuIVP#GarCc55x5o$ZTF6ON>i?3u?2dFnJYcRoeX89dkoF0~ni z--R_^7q!|ONtjoeE}kF(^rlTWE5)Z+Dz3r7xu}OI@h^3HodJVJ7f211xvGe%xZk%( zBC7mt9TN55i33;a59>65&DC%Knop)ZNr_PkX@zkpB6E~4%uz3y#_R4h)HjqB~ zwT?m7s8De!{>pfI+Rx|ih&Z*g$*L`YgGSqI^?v{L;%#^?eWCkrXAi)H z<{fU)D#8iF(es}PZCn~kD#8=7?s<(%RxDGY&u*Mg68N&=({aFd42PKBfrj2QQs^&6 z<*4P?*vD0cxeyQO{c19xwouE*_JJ}`Aa!hDknbcm#M>bDg?!{5Afc25A`8h0dDnon zBYrfgpPH6F(n?1xe%A>dMh^dm--ZkU7UUG27V2PQi6BB1r6*mpoA<;V+)JM>zM))#4_q%@G@$JO6rd&D(Ye{8QDPx0 z4CTdBk-o*&n*X$m0uhyRL2i?drQ{E8C(O2hHWLHrE6D?K>Rv9cJCa0TJ6Os2>-=r`goVCWd(m)e-PmEqwDZDUW2FUAH)gutDYsL?H&T7iSaC`gr zXwN5xqF${8yiLrdFQEC_K-n&#=WkRF%ZN$6=13`?`tYXFV0sL93U- zX)Z-i5-_-y?vmHPX8qp9=ks5&`&zCSxnIt=wA*C3;H4P`K3ef(FZXIJ2Q+|D!-G)+ zqo54ueb72N86BLvrbzTy{L`w-c>X`Lnco zzRIjQ?(!WSg?P3t?IF;Km-nEXSTc@TwUs){?gw|Y{~>Rs{vwqFT<$w5JP8im#o%lMZSYZYZ# za$6#XcUbzlUkeL3yZcXnOBm_?r?^_I@jpP+H&l^@N{FJkvK;P-QAc01l%afhwO8tfC7tT zGph0D^I~w=cgNE+A*{~Cin{hy&rJcg{1YTRFqP0P_0Hh6V1Y_n^u{?@4Ix)*03tT5 z`Ss8&J@~ZJuH2rm>6?_=AVgie_*Q^=P*;0&V7fv(L9K?ZZXis*>{RR>S?3|G(*lBK z;b^d%1J3C&cXhZr@PS%N6zvcwkIxr!tF4ZN(90)~og=Y1u07^uk~m$Z*06qg43YhU zt_?ml_yPX)DxWjTtJU*V(kSRj(Gv@>e3>->%NK~<%ktP5hK1_+-Pn*QA6Ip}=HVa5IXH%6lG3_=*b^VYePjQkRKlY}G`dt?WJ>BW;Ahkw3c7Nt+t&$gITR4i%`!ToL z@CB#^25$Azdyb7KqIS2{w56e>^Ka`mmw-`r;w+2VuT*K<)y5^CWbIdn>2PE->JbR2 zI4cchl^)a2gPnsucT9fzsg}=s*srY41llW;x?X`?|EFp_ z%#w#*UCSD*M95N%_*QK-!gfQ4wzla;>Jf(5h>D?b;)}_#v&%H0(PX>uKol9R|@S z>cH3VhU@pK)19!dDdmFN_#h4vp@}*E%Lj19F9s9e5P`Q&iqL7=d&-+~mtCjjE3pg9 z7I~-rjmXVKsw}&_%Pv_?Acl+_m&utd1h%V8sx4aj*UwGVg^w(K?S~#8nUmMA71MtW z@@+lxvJ16*C1o0L3|nlL{%)&z0zthg@r#_R|GH}J`Dn%IWac`D&vom2?U}U__Ea(PB{k6453|!5w*7U!12FBhp8W5$ zuU^5$FoGQv7CTW{12{iCZ{|gIGm!Ld*e+}jRJMbQ2VXp8iUk;=OD6Vax}#im0;_hc z4^7b1tv+R?vyvDYY9^E%TJz^>5)C8glh$>hpVX8$@RE4cg_T!^OfueOYz4a=N$UT3Wg#Rd_@wBpze2FL0wgDddBWMEC1Nl15m4|Eb zd7C293cZZUS0oVLk(77?x4`lHLN?)=)Q3kBh2)~ul)cf!Z6qhgQ7jr!c8bqcrleXpReyA9 zbE}(EQZOp8$BzCIQ0Ute%HDnrqR`J2GKFHqh~-XLgLIAS9kIg;IO_pE$Pm1cE6v%+ z)8e@?bGZi{?N%F!4@g%-H%4(yDAKZx(ItvQ1C6C~^)an2zi58l#6bM#<{QgzM`VsE zoBHdD!}L74IBR1+mu3(y+K^vYNHdS!}^22a74oouUCE;9v?wMy=dNSL>{r?U;jl};;E*Kq|xLfg8cT77-VZ2 zHa|`J;cEvbv-Z#_%7)~AKvQaprptXdr1*7QaPQAMW#g|z_&a18NJ#Hd6W`kqqI_rm zeU)8hUDjAsWaDM+MXY~2emUwvh>xW{~uvE&Is;#etzdz)b{kI*Qf!Ejb zrAj+W_Yl@`Gqlc04Rq-MYngfmYKrxM2Y5`XXv~?ildh3gV@vPSz70b_OTBLUE)fb9 z+T)`1r{Adw!*I?$Xfr>`GUQ#a$asnU7GlNjjDbr_NI1+L#%5fv;78FPNW^r}qT}6p z*H11)4r=BM*(L6CXyEdwbWKO!Glp8dp+WjzPw*|{4_ZrxS+FI4=9wpcJ^c919}r>I z_A%J&`o@0YZ=mk!r6fe&PYh4N((`)hdgdRxW%-6tqvNM=nR<8v8kMi-X?}bzV`m$H z1)9jsmTQ@bd+!1D70Fz5bwqGO{B66}rmt(o5wYV%b|YZ>$Nf}r8dFlgGH!tSa;*5K zoCx7|3L~4R$$#X9cg#5zRB)`AV0r zlKbSn6Lg-kxB6#7oS365i1EgGUhxCfAPcQyYOG=C<<4J^x5c{cDao&7)DwBEi?c*q zjyy>xkH!sng5P{bexg+O?d=%TDD&Q$J416mg9K@5=jI*POj)E7y;lGKJKxe zc(VuljUs0kMpVy4WhCFXt-feQ@*4#!YAQ-i+Rx*(^lZ)TH%0MYFU+AYd$_iPFBZbpK0iKXC{W`lDx(W#|#(hG+yN+2OiC_UAN@uML5tpE!hTB97;x^z#_ah|8alS z@h6Eu^akMOwn~L#v|^mv>sFN3Ng2$!EZ|Wu_NTv=tFAK=5V^mG6-*6^BJK4a$wn_G zX+h*;C!`F^RVZO@LsTz%WQ=3VIvz{|p6-Z!^F;-ONW`6E;dD;8M|{-dT#+r{(p#iFA>oG=R+|PLZTYG1K6n z*A5P^byZtRR;3KpL|(jxqBNTGAc-=&5AxD4&?kXIgA#YW;OnzS(ZRt(2s-=$>qCI3hxr)4sW z?iK!&?gt}X7dgad;@u2^KR;if|9F9p!r-bCk*5aN_#@`S@-T;?^E?g?VdM)5YBWnhKn!3m^*D}R5) zSp1*DwSdk)9pZ?h-en_m4;M)hK6?8v(iaWPfB0Mf@=A}W@wyy&rT7D3_RTjSmJ#iI^mD)B=a9nL zT>v+$QBG}x^QE;5LS1Sdd4pmbs93pgFZ@<7yb{GeRL`__9jDU;N-xnUNv~Y~v66%Q zu+21Ulr-Aj$gq6ou4=1Z5C8dI+mxqIxEvoh<->X5{b@9G7BF5K=Czs}A_Y|ZUMHiL zHIb0*#0vJs>j&*9?Z=T6sb|+{A9~GSFi=0dh47I&%$9~5J}nlRcAi^Wiv1O3g2Z;} zza;EH8MolwP8*{<)(N_0_Hlnc$!pdDOOMN!R)p ziH&!oTlq;xr(C;FUc_i4S#PEnefzqj{Bf7%8a7;Y4UICZ2!s6L%1Xpv&HfB~IPIwW z6x8n}QjyHg1HZ({68n61u_03V-m2+i>z?ZG{5IY29?Q^=+}pMLyE_M=dTF?Q_j2AYsc@`)I5=G5fnc1AfA4p@+c=}vK(xl?_mS(JK|_vy z-u4Q0{I0W$7cPUlOT5z1bq>@O?G$!Fq;mv{}-1eMFJR+e9k;R97?*6J>T-^TeT5-zMykpm$SVm*#ENBQ zzWfxl`;&s}+fPTwowm3+B6MgP9zMfO736G++p@fHCtp-=%h&fIcI)56W#iz&_XsofmD!Pyuz$Z zD}?xWV5oetAf~vE=mU02&bt`9Dt3WDwNv)<#Ou}6eq2oN(y%v8OFneC|B~_G4@2vo zwfJ=7E|cYHJwG-%1xRfdsyng<))R0fQyVrJ#%9X&^xBOMDKp83^;^AEuYsO5UsCGM zBKiKA1ZUYL0>T0>MaHiry+5W4)oSFP6>nsGXB%CpXa7nD@H!6Cyh1WIX5(%Vv1Kt3 z2+E?ep!|A3-t*$cM=V7dNo~8H80U&~-uKzvrGW_F6xZ1->b5?Bvmd`;$L3nv=nk!* zp$_=Cl#Xll8jI5c2P?Bl*z@@BPvrq@68K^)XV}9GaJ|2}7oDUp$Z3BCt6|a-t33Ig zP)@B~Oap`S)DPkzoo~)M7X^yjv8Ai^;!(Y>bt7Or98>&>#zR`e3(2AXUD;Q9U z)xLkQ@|;;eBJ}E8@D#S^^10Aj7@X^P;Vee!4>1rc2!_w=k)1u|!ZX8b{0rpg3qxJ`9rt?QpHX-ffq&M95i!bdU zrz<6SdK;o!G{_MyLXZd?@NkL>1(E+p`!J#oi`Ia8X=7ndV`w6(gf=;UGu5g7CkV~IOm3f_I-O&Q z@a@l7J6yRZj*E46F5~GHXMOD>0?FS9{)ClNhcK}~{_`eDSiC#iiRLJ`xY-xhAbfyk z+zaAn%16dixd5dDZZLb6l}n&*jX^E5z;~#%&_}mN4ur{@H~%HYCFPpD@dr%ts>&2% z-J-?SBa5h2mQ=C9S~g`rD>W5i7Yd^d@QazQds``<=fvq2nklss?hgZ>7kOT+QMK^( zW<{hyQ<>`4#6h}aDcc6ubHW9)O^VZOZk$WVKpfiKc578tD`;=5_Wi{%-m2-R4huq^ z{RRs%%wEv`;G={GYU6uMkvzYM5y#ZL4Pt}n`+z?fzZO!RaxNsK zL1RnQrIne&inu@g@5z*DO}%KsdU2_Mh1{dl?e3Xoa)AWHj}E1xdrOVL9Y-TUFun+1 zHVZNB-m!Rj!B1^3CY9U{w~K%12b+30k74URqW66Z`2NMu5q*M?%{`I zRaCS+?8mCnP1duGVuDV@9KzON*&peKG5gQdo{~V~Ojo{|0a(;O`LZ!D#NMv+RjcFb zlsQY^+1^w-qxRfA8lQ;V&*#fJyuzhWCh&nc`SW1%w-@uG5(a)>TxvKi-UvXZ?i@+x zC>u^;$y+~#IYr@dgij3#(t`f_!@i)@@i`eD9SyXp(^mmdS&74x7)eGB!KpufZH}`% z>ULiYk$p`o0wNyq7GW3KsP}7O%5z!F>QLLxfrXXQmS@D)d}wxoD=*+8Mjl&m`4@?tAMq{hh=!Ni+di!ZD&^WsD|P z^td0m`@!o#bnxTU)YL|JEZx)Lx;f0T)eBbM;&G6l;(zg-jE_~$c8_&0_f^acd0&hJ z$6q`O_2kPb1F(2ssCDNPS7v3VUGKoxnXGo*j&RceoeI|DI8c5i+8_v(2=`1zYE1A4GlT+8!{nlE|D= z4yy_9g-^_*_SWADLWij5D(fnLw|_nPoZrrU+F3On5osgvDLBnC?oRM>*Zj>dUgrgg zM(jLfU_Fgm)K_J|VYx8VkPe6V%xUvIDbjfvhu)x%r)vCSfNl$3E!b{;%@FX6D?vl- zm9j-=?Bt|^I__Q9F2j+0vvU>8hHjjp_d(l*V^fuPZO)dNyzUXWk=R?o@G#Y|cu-OS zmE%lx&Tiyov0r1QsV8>ZWDmY{_3Ol&FZfb4Rl~o0)a7}t25Lw@ezC0{;-dJk zPquGyFM3t_)<5LPf9w{`4X;Q2=rY~iB2M!`MjaB_FA}+#$>Vf?b$|1Vqgm6?G{$=W%I?q*_x*xYMtlr zUF(TMJ-=l}*ogh{>w2(a8T1R6ztpJckF@{1o~7G!X#>?h{eI&D5|UrOX;V*mXcOP? zZCoB}L1i@+P}eEZT=pe42G2aV_nUTn-o+#eH0kZBdO&H%hdp>Ddi;o8Lc~Dfz4bkv zOPpLVSvuAuG5nFaavdXnoWF@U(v|WuU#1wj$&NVd{nKi9*r0)p)9mTEj>H`OQSB?k zHl3si)Z&^Z=$x@osId2;DI|v2hh=+p%G1b(n5JiY^Yt>G!1x)X(@U{EzP+!}@}Kr~ z49j;{NP26Te*1jJp^K)%KwA?tw~-x;iAbV$lpYRXhOi5eJB2FFlkPT&h>*II!>N`( zEk)=HGxfB(RyeocZ^~h3ptf-~o=#};*AjA=s*pjWnL)GRXcTM8r~r~+KVMP?Fv0({ z_@eH+NaBk3-JT&!4fdh1ZK=Nq^y}2^(0Ah;f9RP$iEL>R1+hqtq0Z|z&Hpwc-Ad0g zk-1xT={#UPOQe+2i0U6uJp=8zj*uU1$lg)o$CF8uVZNN9o-ddbV2^O`M$-f$DAwO? zRnrH9_QtatiXsL!V3P5SG6hJgU}$!y1h4&!2I>e0gfbBP=q~CarcK^m&qJw2#L45e zJDTk)AQU9Eq)j)&3-ILTY)ciIbtwirJmHL~u7|m47m_GahMayTA|e}9sE~;&R9uiq z&*wYbb8V|*^SkOw(V7gx|Ir5i`)2b_0O{jY0tt`iS^(9YPXP0pg1Et3Lzi;`MvFC; z=|bf_!`(}6IHIci3iTmYj=yuDC~_OKZshsE3mJ01>fzYX*;11Ywlx95C~{sG^Nq@LWVI5#)JA2&|k zWPvz1VEp1}d@uGAwO86Mj;ukO`uz6Sxncr{>a>CrZLH&Imz;Vt*ADliR#-zLhjIJv zId|xFe`U--ngo%NR`*mvb}9e5Kjd)ZTfGJ~kOr1xGi>W+vD0F=Nw-nU)^$l{EqIMh z@iz;aAwS=_3t<&|Q<>=1U%A?X`hJ+#i9Bi#3S{{U4!_SYDp6}s%x4W@Zf=qi!QA0O z-T8I05q_$_+1o*{)U3V}|A2b02UWFr9+`*u6oMbCOcU(3&j((F2-H_3PzXv1rO5B& zP8S;6X7AJYNItk;?d4;GHS-vjEM1h&(wig zy&x}NVeEgfU2na~@zWnT_FT0L zUw3S_Hu4_pA9nQ4$PJ|6ac;AxgMIqY*nYfu*5zYZDJ45=g3?ztsNkRgHMSh2hFOdH z!hho4f?Y5s8Bec|)|_kwB3p+9?L`)GC>G2Ji4)v{S!XQc>w)w8Z~OaBqtajV?ilf> zK)$zvkIk=R^Pgn`we3>`Y+=>4#O!5XgA0T+D-wrV*Jo$D&F877+5dJBKi~wRjw0n{ zbiI00nj4$WZ!98Jq?|qO&OYc)hebD=R<~Z{+&79@Irs z<-iJV`2s*tQ(3n`7*3gtj^m=^L+<}j30V#jcQ5`85d@g}$kZ<|3fLS>mNm9`oaYXi zsvpg{{7vVxe@6{gKDwN6?ds3FIG(QX^L`b{r{*x3TL2F+2CI-(`67Ex=k~=EsND^c z%1Smp994D3Z2!SAY;&o!`GuQhnZf6BaN`SCRMC|vHkOU(r$S7ASesJ(u*sZqrE?BN)5uUE+Z`q$c5*Z+hCT0K9m1|;(A z-Vl3?O1&zxn%X9FKlVDmYV0eqZ%+H1gzq0Cu&HR)AKpY>{&Dy^8u#h} zEA9*qV(4%u+ix>qU9;YFEwwW8@xogTK`bI=g$aW(pB9n!*hW=gJE`I>h4yR1(~Gvd zGfZ$*Un)1(aiQ%sOSkWv+XRa>TR|7>FA{$96sc>j`(K+4%q`pC!;G-)_4J&Chd=Z; zi%RK2s820eQaH2-`eVFQBJ63oJx z1)gLw#2acQ$Wra7$4kv7?JO1s#wcClm-o-NN0m4T$2$8HXbDIVw=X~?AM#P z>}r@VDYYKJ3nxhMYOeVT8#W;o=f$g};hQOzDY&~To9PDI_>J#P{VMLUlOdcF{tzr` zHoEOU@bu*Sn0jy9tI-hT@{30y*QoFZoQR?p2t6F2*3rx3j9|iDFmmZ1X#&X*lL|22 zH*vTe?YFtk0PIz6EGZL&X5L(;%#wEg{sbVo8FZeBM^|@eq_M{J8GaMho!5VGx!2VpS}MN>XFzvI@8^35 zH$PXRC@)aG2|K#mh)r+N7p|520te-IiUeaj$x@u zkY|2UJin!gRsF-MxfvN>3sofFm&I>@CDsZrGaTDxrr>m|W;AHrD3dF#wfW4Naj(4Z zO>yRPpL4{&9D^^ujY2{Jxqd+!N#~8Ba&oAvkGywSU%npUn2Oib?N)X?S!teG|NUG9 z9#XJVo6M=hJM+RyScQsR)}Op<(^-=J{50&i6~t=ldX8Kt;&WLns_8f5GR3zGHD$X> z?^HEBCbwnlxKX`MFM8a^PuJd33E(f9j{^KX*OR9E~5J}`Vt>_&wji5vNkbm$-e zkRRhGOJ`5_9R&2o{~U@Pc+|;@fHDaahSg#!*n__jLUCMoHy;&(4ri!aDkT=Vhc2yU zc2%Yfo_`3ro_*sXcOZQbvY7dRPzK^}AS!=31QYaEYv3ZK10`AwYarg3I2*k)g3j%6 z7Qz5=DOe>C4-i#e#dgC&sTmL8+O*7&IySm*=T3K`QpAlo6%>%S{qMKIjsBZo?}8@e ziX(33+MrIX0%t^YXAuA9W)8^hm!|O)7S~;fLSd#D!S->{R)i7oz>{WRFID)RmOK5Q!!sTm}g z;r$`0Mxk&44%#(Uwbz)vPD$*3^FNb+kFOHy&>py?M5n;AmI$h3L1o=!B?`iml@4hk z?mrEvb-R!f_wqq@p5V%nEEAE_UG~X*O3yssn=v}EjParNaVG?z5o!Nz^M9lCk0rNN zo-wQacG{%#7me@_4Ik{ER5Qr;H#z|iSLe+9WJECR5Ypbv=Zbnp;|mv!s>&z4;IDmr zZF329SiEy>c3M0~ycHkXPiX%}mu*_&wCVRm6S3t|sicfDDx#&bC6JArI~_F&L5Gf_W?g?<+S1yH&VVTYxSBp!gN`U zoY%g-fjJq}=1La!y@^P#!mvWO{LEh>>;q7;m^l8oa%7Xj9V_FtAJ!UMR^Srjs!AI7 zeL3)6WXm}BM1N@_lC5`aM3sqs-io=qVg`|NQtPN#ipq=w!TLt|^U;xeT{fc+t^CW| z1M2%uO%VW0a!P=zV$^u?k>bG-%e?Q^-L1u8>R#5!0U3{9J)r8M;Im;pyp*(qA1^jE zEtBF)?~&Hcr`8jeL&%;uSqUsRuAj_?@TAk9?^p{H-Q5}g{-WA zmNMn2d9Pjo>9UT3x-D>J<8Cm{iMLdzuXjYlW?JDJ%Kv`eL`VSX6`i?bL65EFMrU36 zh$~#-ya2ykkCg$ff;mX;B7qVuwC6J<8a>w*2E_j~J0gt#0ai1Zd>q%qF!_~lr?Tp|iya>d*mli>E zOAA}5b(C3*-CfyHb6KxtexkK*7G+xyPNswKx&kl9lp%$LiWh7-F#h9EVy1JD<(IF%8FamBYESELfLqGsI`=})C2!!{$@{$C>;L*{77Jd_ zuN=TTc>-9Ho#|ZZDBy1!7h#yvw1&)0Mi8j2rom%_0#o#8{))_vby*wG^Jdcj;A`6S-TJ7q`$_L9avf0^X z7eC*>z(O-Iq9xfKnk8!Ah~@o4nPqE2ky^bP#r0siNUz=ZTI2d?P7@jR%A2sOxq#F* zlL@!YU_66I8Mh|>>@3%)-Iteiyu7oNYTZ>or&1Y+XNKOS<9_|>ci4)HCxY2Cuwm{XSQ>~MQ6S*Am^DZqqPcER868~aBU}* zDsIcAV%u&~T;kJP$h73i;poXmw^jO8Y%C;Di7MUnds~yKiH(1B?&lWCQ=<@9iwR3y zCr}s3*&R(c|IYF|=&4yJb||S(f9s@C>6Zp%63>BJ!XI<%>$hw3 z>e+C(oZHo)W?5iwAU3(sg3!G3FOb&t>HGi-Hv9iElV70s;s)a$@y}5SCz6R2VNouq zuVqlXAxNvL(Uv=uad`v3=7;bbw8nvb-W@EuR1ZJ&DEnR#s9S5(_p8*encFNxFblso zZDE&9xWYTvCYr6b1HLj;4JoT!6Sqp0u+`mVV$tTn%0c_MO207MrZYyS;JYALL(ZV?KmVR|d7B^$LAQ4s1Beq;Sd86)JANQ-1 z4N?1*U!*BTTQ94Kbb)hddU@l{bA0q*&N&FNgW=F&1nnqQsNwf$QQSe;PMl57wXWP> zJ5;!KkG8>mHIv^Pc~M?z`Y=Z9FN4&;17>xHehxMA>%pcLOP@}Yli{)Q*IroW|BsFF ze>krH?QH}vpuPLf)&&Cx9N_N#$1V`^Iw@s{`HRt0%5Al#ciQ=!MHP)h%^HiKGsOo+ zr5uS|hTiTtux(B0ZjIqbSXn00{p4OF9TRG_1K9B|O`!_mIsMtbhfKU?V&faqsiHvb zSCic|L*qVeMTVH@r*_?@YN8JimSJGG#Q#DnjhM~!INezhADcXnH7UEb0i8R#9o=8gmX%UjSzRBRH7o->YC&RnD*mkhj|B7P1Y*Gm)~ckLSJUVpgHwye9tAGAMhaU=XqX z)eXE%h8t?+S+f!1B;-IM%3i)Q)x`a7OG;(>o7FTQsuxv0R)YZa2@AqdOPdTn2L`(B z#d{DiD<@ZxxONMWZRmrvGnQ2Er5h{Ep7VSSMBe66?awvDd@@0{&f$+pS3hQAP>BL= zlEpwG`p6e&po=8pj$C}xvaUD*KSJebvOPmg4R3nOW*nQq6~Mvgu4~mrqFGJuOPEdW zP1wf6H9CCUp^>KU<@hd7A>jgrFXO@fXj%RR~*2WytqHLOY9sW~HNAB$?^j{F?InMkZbstm*N)0d-(ShVS z{i`n#qu_H|DvuX#vr^CCGnxH;LGScO-lWw7d?C4ncRUX0hvef8Hp9Cr|*IjrJf$=oTHie!noIS<=>r*0xQRBh{>PK&ppM;}2y>}a=yLPrM zG~21i&-Q8bSxGWeG4plY%ssUTWq1$2 z%dH#}1x-g>b89d0k-p?=Ygj7o7AYxg4=R3+vs^h?fmjvL=z=+khl zYaAKBPU2S)E(+1nU)Z^p6xrN6%(s-$V@^@QWnXc~TkS2a=9*O#$8XUI+HY6LP2jGe z4Ur1{=F(mBaq=_nhX~pVv2rbS1e=ASCBq8#fM=+ClTFncL+ar=zxA5oK`LNA(EARk zWzK%W7t6z`CP(>hwlI$S00u;y0bBuUlRcWzYloWI_fJ|v?z^!|wVq{SU^yAgxky}U zO+sc}FiH(WIFR}~I(qw3(_LlMEmXm?6iv4EKVtL|Q}32ZtLHqOX8FWkVEq~O-8R|7 zaovtCMN(yF%fGJRP$AYzbSx(8;}9&EUbDSt_90=X0NTd{2^W(I-_5fc8J>+v!8PFqD zn$(G~e{Zv80u%=EI%)**(uXC!{}JW0%lA@6L=S*xmX)6G<5F)bAgH*-yK#p~1OH!l zR~`@by2f#IZFMk7iyE3k%W0$}%V-Frix^6iWtvG*mKsHtk$oFR*-}K7>MBtQ8PS-@ zP6{=RB{RlW$5Li2F(lky_j4L5=H7GscjvEXp5ME_-)H$fpXc|!THK;!RA<1yU?x+b zP_0h;j{3{DNGCM!`g(Ile}#MiuB6M%YdURoW;%ZzEH5@iV+Tz;2I|RvWjn(iYkI)7 zUM=GDkv0A}2Sp00$X{7)$_UdUXlAuM_}sXc=(>q<&yY6N7Qi%Hk0jQ1V<9aEw44;r zlUElj_Dwb4Z~erf-ML*fiSiUS5gf z#mVLgsU5+-S9Go)yKh;@Y;@OjX_!rOACy-r9;xMwa9NGfrAz^%`Zk(Pp0D$xtx9{2NL)b(UBFP?FO-%ta>`~ zx>nvws&#+Y#=0^!OGH@vX7KSjFAtedYgNpidJJwqfwyMG>W}xJvt7(kSeQ+v?OxnA zj-X4+Declwab3*J@bdW?2|<-UDNtBT)xrD(rGvR|rh1Q@AF6LO-Ja z)r24eb>AD}&I#9h+)d^SY9y3Jb{kZG@DV3j5bV?ToTGkblR4EA)+VSshn2>e7qmPN zby1Qa?KgamTwl9D%kdIWmnN7P;cb}|a*PHy@z21BtDI18jhV$JSfM4iGw@jsmJ~Jn zR>B)aNX5O$4fS91o!`TYrSKyZuwqQPN7=jc5$0Ww4hC))O&TU|8}oje><{;4Gt;Q| znYy6jY~jWX-A5ndA3OTsI*tqzp^sIbeKtX5+hTBU3k)$-Kbxf4nrOMfif{>+4j{_X z!L7d+Dgp|yZbcBHtCe`3z91-1y4dS|)YF}~b(0v)!1AK-$HZ`f^tp!Jz!mHnRfo?e zCd`L`78!QeuaNWRG?9ePvRS76j8B7I`3talvTXzfKXAMCA{0-1HK)U9TPYJsqS$TdS3VQ{_{9bf`SsWYToU* z6tj0Xqi0tV)W&_&bgbpGh->0-8X-J7evxr6@J9JR1!)V4JFlLWc9>d-TK;u@ep&(9 zzZqxUwvNbmG5HTlA%FGFIQ4vay~K>=v;q~9`TtrJBX=^V46v83Tu6Z*4-|icAjS#6 zXp=$Tw-@hm5dRyC z!K(tSN_Zi0_+~yo5#*I#ig4Qs2mo`v>I!~ZfTs=?CxQ`1z8X{Gq97_nC- z3;i|S|J`QqhbRK`f$VdFsxGG$rkI71oHxNVcsT+s4FcvP4OWv)UQR1);R-1lE7CWY z|6tg7p^?{#8|0mtBR5Mzm)dQB?+p(gW*jzCS5m{;nxlu#Z(tFPdq#phl(--pJl-(ObUzkreY*) zjHX+UC()bFSkWn5Rubb(&ron<={O zcJqMoOF8a!tqh0a5PrB|YYItG({;U%V#r>~*olV1TGrN8m3)nLF-4SV!F5`b({I>I zu`8090Zttrsvhg>p@ZcT<7B7Bea-?NL3ZHGbSLDV8Hn-^^uE*Y9?Q@+K)y?d`vD8g z5@FZKzP9^=qq=idm$uq!ASDkxsl8ZAOOdsH68C3f&o|$1ei#44(YRFhP>Kc=$5J<{ z4CT9lXfS3Q3p)5Rg5T8ti#qO#QM4OFT$&l{jaH|6&9Ej-A_smL^I!YB|KwLM;3Uiz yx??#?qf{D@cb0|f=A|LV7sFq{99)IyniF)sP)7GZDv1&Re#VAKM6SMF$iD#ueDh=g literal 0 HcmV?d00001 diff --git a/media/ticdc/ticdc-summary-monitor-redo.png b/media/ticdc/ticdc-summary-monitor-redo.png new file mode 100644 index 0000000000000000000000000000000000000000..c9d155f77c2626722213539173489e1b2d4126ab GIT binary patch literal 236415 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

oQ`Hx{X=iP@ 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%0AapcoCgW96`o{Z~Ws?8G(V+bmB2X6Uz*`10F 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

84yEBYCAeQ@?TyU*%8`a4& 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%0DLO>Lj2?%_?B)g(mIE(D4@`TwL~Oz!y_DHJiMk#h z9yMP>?QiR!4a7|CXU{~z_qp%a^j7OpUr}iVNZ^1M1IB9$(~dkmu={TaI1^fiXBAss zM?R5Z($!^?N`k$Ui58F$+}kJ+kMd_$tX2a?u_Pj}2MR6Q@8Ym%mOg(N5&aO-JoDvk zr}G1whA823y>ket5bex^Bp7!%h(j*koKFA&#VPkQ_fAa@?i|W z*Y2{nt@z>$&6c?>vRyqiO{{(IA&zzt9zrzqz***Q#WVdkAe5xO7XDRMeWW{)|0A`r9Dc^JPNL!;%_p_ z?78L8b7qtF)??+n^LlcGy-5TMFmt4dQp)3g8nPbdBMcYdl=%jo@A2-F<@5qRJ@Wpj zgd+0w{Q#?EWRYmf#R@nnMX*pju7~>i`tD6uZOiZ*rYc3*n;^1tqaXi2?7eqXliRm0 zywxpibt5VQ(k&ou1Jb1{RX}Y|sd<10rsz2f6EE?jy@jc1s_MzJ z4=R2FU$1tyw=9sK<##;2>q%$CZiCY&VK)Hre{N%?WD=Mx^pjIcA{|zeqenLCH?G>L@ z84vPXRRsAU9}i8wc6E(M`SIU(JZ_&$u&CUs zaVnAMSr`k}@ayWio{~WmbEbniU9q!qAqio%SAy9L5aoZvJHql3YfgWo4z*qGyJ9T# z%%p*;@H^~uUh3BC0_`-v1Uh@$_Iv)W&t8>=3`T2h=Q0do@v^Sh@PyUKIA9F6|vYam5!9kTD zWQXdyA+ z^E(Yc>Np?!`r6~)VvzsJo}dFf2{A4MnO#11bUL=0y#XE8@unzn&Q}W16GbYa)8l!6 z>oCwEJw$?j#{s9qcR?|hT3K;m%^{lt7Bdwj>Ce|)wV$04kdOXawB z>jgB)=pC}=1H$4htOem2E6QeGYp!+i3Ttzg;qlVA=!8RL?zfH}5VLAcF|+d0t-e0J z6424NVnDd=p~v27ta-JbEU+sWayIf42gYQ}JC471LC*3iz8EO9KRrE1*JzRb1HYke z_AgFDoaZLn!uaXYRC|J>V}m7~Uaw$LWj^hox&Who(EVWGRpZdqOpCw`y0@?hMuyuo zWctiZ?@Yr3+jWx*{HNQ7<|Af?t^TsD5zCYF#IGfJqRVpV$$+f4Zn-0)+70b7Wgda6 za=I%&{_z42)~IgDtAiZ84Cx$VExh(-_i8e16xwwA2_UXxyH_hx`v`(JnAVj1^;Bo z{jlt18oN@Mxsuk()rloX%WA@Ul*kOMHq$7#QmVkKDgeo#*oJ#`qTYdV)dXI2ximI2 z4M9hlyRAYj9$gU}v}hO#wkQFDcxK6!H!hq{-`f@Mzs6m4VZd@@$Rsws(!rzdG$b>i z*|*HQZWn!E-@clrP^$Om#_g2bYCE1WYxALC*%9XT zQFmyE-RD<#XH0GOY9P*B@}j`e+8XK;(E?H?(PyfB!jEWCSYrY>n2%)L!J2-m^W6BA zn{-(s*K9Su+0^tcfA{tr1gN@R{oMlZb=q6(B0Z0ZlwyqFu^>m!EWYw;4YkJ^f9ZF&D{zv}g7r0}7v9(LN8U60zd(cWMYIm1xpG5gbSDKFd{HpA=dZ!Wa}3&ugA zDFHyH6+C8bN+I%T0*(dqLenj7<L6JW*f+!TnYh1OHm6 zn}h33^*Wii^z={G7bg2o-@$S(ibVM-^$qJYPWqbCtQdvd2u=VhjT`f&C80kUTCU>N zBIp-Xbp@`12Y$Q>dQSvIDhhgJY@c%q2&_*G)7 z>gmek3~AiQk0s$SpB}%O!zVy3cx?^Ol{4eTnK<9^}m3H;`?x;bgY0kIhW)}3fxWWtfL>oyeHTM|5B=eHO3 zrTu(>PPVgub-+BRMS%^n{`LFC%k=<*MN}R~+Py=(k?}H4QS@PGwgOugWOWN+QEQ`6 zM|oZ>5?osnLCVHYb#}d%zNZH8VgAWhQdhB4H%P@QVr}-$^oK+HP8Vt@);i=IJi3`I zYO$U0t=}Bc5pt?*2B)AcciK@6U!1|IC^Dq~9?uF3Th-1LiTu60TY1-4kOkG}dANj- zZ5l#!y>t0PcXwzinr-S@`{=&jRDKubX7&|6oN7uaMyBEfX9!eEmerN&xsrilcp z7|AloTeSMFS=%*XIwqT{mS{fwdw;G)wrH@vWi}2Yf1i=^sqbg@tiQ|SxjBrrs>SX`RKK|h zviY>}Q8*Q5m8lI6I!=MVugNzu;Pt3@^W!1UOyCnShpqB$m%D`CbZk1riYweoy!;+y zLZs0&3e$ni8Oot1Yee&!p)b%@_*knEfowHLw1RYqhwP3G%=Drcn@Lh}s4%fsL86CS zzSl|KMWRq+Alk0P(`@3;92lKIrWCLcr< zaVB^w!d`qjloRrCR2#~6KCrW^^;E_feCzRSQeY?Y&0An*vc{K$k$KLg`88KP%a(OY zSBnRr2$bVa^%82pi-6V=!Pcj4Vu6(<%-klgd&6aU7j(b1N_o&~S2s@${W2tR?E-0R zLNyk$8JjNkF;tZ7%%qtGs$m^0I~B!eAF;z!XKVD_Aa4^LLo@x@a>%?bk}~pP=8SrI z-ebt<6H~uCyw&n;&ejWS7Q6#F5PBmr_U2e~R_asrvj({6O$G1l^8;DqVCf3TixdWt z1$bey_iX8h=~(oygpk9lL`<{57TR}kUc?$%mKg;i!{rtD?e5gIiT2Iv^tRMn6&7o( zI<}<~Q4~U>m*2O$&o@aFTr7pMO9RKOE3=)0I7A3+z6Q} zlGBqr8(>5DR7P~n>Rg1d!k`yc_k4=)?w}fud+)o*;<6Q);pPEvU+m1bSq1Cl;!9ei z>hszj*(imWKbcolZ1%0YY&lq3ks@a`M*f{gk|dN8HD}Nb(ezxCPeg}@>0>q=w7hUo zE9;!|BB4fs-Fc%QQ%=II<9N5BufCIEZp8B$+%u0`_iF0ZvQCQk1LDrwh&`Jt4W%Mf zO}~rmLv=gI(~xPnyklKSjbvH%P_EZraaUz}Q*?Cr>QH%XBAdu(;&0)sa-^6%Hqk0| z4lS4z$$3pw)(Hg)yBe5`AI#~>UyhO{#auXRV?HssE;}IXrW433?Fik*6%@TSl96o5 zC+Yi zIdvM``M{GvTldZIw$sBS^XrIRn>B=AfSHEpP*B~TVhLOUOLm_xVcJw_M!uI9s=w%n z8ZDn(s3l8RcbnCrB-hI8MCBl;Sy~3tQc{c>Qh(x=i}&o-Rz!F;bp*OtWEvKvyPqmN zh}dG&I^uPul)kwtabjUJ(`@2Sqr6|}&^=wV{;)mopvx;o%2ASNCtBW`GmV?Yj4W7i zS(K<75_qGshJgGz_<2>8GZ(9jx*V(V9tqQ4H$atdN(}({5}~fYX4d*mY!EK*(0iu* z47?YRj)GXMMUuWNiJ_g11yFen4&4xT*@Zxj~0wpxSnMe_g-(?wgDK<0YAw zgCu*2ofrDK*Q$Y7cgTMJV}KNmSvG9vJJ}Z%+GJ7d%(Lq4U?>S>7ItG}R-yXpYrP;% zc7P|>r~N3^5fIZ{$^o}*Yh^trb8Vek%XUWe+HH75bKQwF*<=2EAgc8&>SDSm1cWrS zs&6((uXDN3y**X^<56Iz*L>HU1VzMk84!n#G%lR(UtgzeoTx+=AmbA_%3`zoTCMTC zSIj%emLD`2N$n^}FB(gmsG;hbva^BP@JSQVmVP%|qf^>Yp@?Pu=DXe~EoGtFtPm#wC;!H!L4RbC8G>9+moImeJh92>XnL%M(^=b(64OeGlU7Ckt1)pdlKk0$3=x`t|V+?h$A z$PRULNAJIl*gWL~G&;rWX)~;kyVVH)a0I}DDk~6zul zqtlk?_2M-J*+zZUovBc}Z=Jf7wV0)TzC{nBe^zJ8Wz$|`W>6!ws?eRQnq6@fv!*iI zpE_;C;!stsoCA^xC%TH|<6lLDK&o06PP_kf9e)dd&4}C{G}^*J zF&|nD`+mG zN#kd);@2dmON=Us#`6^>l+Dt(h*d&n+u7m_0QNFb1a~x|6MK1JQraYXTd}@1EuzW> zw0yXsj*x7Fzg4x?$K!lb-M-CioZy7!_hR9yx+MmUhbZ+{S-Ev(|SGcrevQHU?zZR)!$)x=B<+*!sRd5G)9qHxfv6 z!^mUBrS`^$)~x?3-RsF4t{s#le{CWJJv)=U$ltRG+_L^4)4O!Ulq*|N%m5RwViv4x z#!5>Bqblba4YQrUIkNONo0)fBGstZl>p0_rI1ZeT*xRy*fa&-n!u&XVW`og@JzG$} z1wTk+YwQsXrgns{eZ1*3)W!E9r>=5lWfZ?=J@-WkFdY!*`C4+I;NBy(6Bs}rMXtAE z#5+jg+82%FF-=Btqmk82Ov(65fKwdgc{kk zj$1%GXHiDsxqFWTL$$Y-Um4HmeA8GiW%kNW0aL;$p0pem5leX}nGH?6pS)Bjuoek_ zrfCDOPSGu z28mgJe%#&fifQtb%cu-(Y^F76G=YUn?}xrwj|I1^cL~-^$u(teo1=uHK`%q^glFHH zs)%)y0nH#hjV1K>qNQ~Fkdub7d(dhdWW8C}_o#@L==9X5$|1N0X-crVJVqARozg2Y zk+%o8oa7adb*3oF)@9o`^VU^`;ah$TIah9p1-!9ndn^pW}wv{_g zAa=1D{5i;-7+*?AYgM%rzV)m=Wp?MZ1L~(`kl&`qBkDGmhq%1{hRl7m(vX%rCmY}I zhDRT}P-Q82;^tgSepEip6rq&uHP#fGd#mRXetJ^DKoa*|Nl$YfqB|g4?q$eS`_aTv zT&3uo&*d#Rbzo!U)3To2K_k7af%JlJQH)Q?Q6I@m_KS%eVonT97H zOyTgj^G{nbi7o4Ra74}Xf$x;1*o#^Az(m2ED2O{luw?HK)A32XAjuSRKaQ~5yVh|G z;8G#(7XV=HO`v%Ws;?WF3!E{~Tn5?^%QfLUg}x{MaYuKnnQvk{K?VKAAu5TsEziUk zoE5=bU5j1I9qzhJ*`S>>F%9Tw_Esqq4pui8Y--)JiMHlz>91g{Vesmq-1D5Odbhwe zt(ibyFbBBn2Ki%F7_Svf7FZ1J#uq$E)A00~F%repCMe*}f_GG2?q^5kD;r}VD;PJ& zLFD$#Y<(0jf?%vwpc-t+IP}AF(2B>R(N2!GPcXFzFM%A<Y^iGa*@sTSmRkyCk-`)11kdKEKNGu8Pz^9=S>1(-Sc?vp|AkNiC;derNGApjBRoU0!aof<2 zmOsD&hfd+a5RPJbLBFy6)N>IfU!W7Y)*+`a#~pp1{)rLPm6qqj_(`Oj^?E*!*osH} zZFd*FvC7y)A@rR7pd;|n6*bQiA|YUF2WnZ>_gQ;Qx-oaAGooED>+L zY%vbGS*^!Za@` z^vqO3{A5v*lj|Z24H1yYR~>^5O^aW3LG}-fgP(GBK5%umb;ZPD)MWy@Ofb^WgVO;6 zR0|F;xu8ba%2u*KsAPNr)LK*0%=$*OLOy={=B41Knp+ra|g!ECgD5 za*#|tQDeFn7_BCa)J}`#FirLku{q0I`wh#K@F0+dC`bKpMQy|0r(Lg9jWo7hOIjd~ zP}G7P`cYs}t5XZ&v%a&^0pfe;ukJXn^!aTkEhJ$kv`u3e8JSgLFerC=wq3v&Y1fS* zrod7y5d)sP2&+Hqr*3h@R#(IdGn|j!QIE}oMEEhpa=Wg>hK2Hlalcsq-=ACc59p8)z9(gpe zy^Q75h~vA^dcZSxnVxv~MWxm5AH`Jf8eG zK<}uX#`8rne=}(8+=6OeS{@f-@Y~h(XQ>YlE|mX)jKQU)df#@4>I>)3d+UZO)aU52 z)o5xJPc*bwzrqgIRy)D^nN2sNz~v&$873)y$7+beZ&%PlwbRiDof-}=Hk9X62X65Q#VA;CT2C+PKDjP+o}F*Q;C zkBc+27=L-c!F1{&Bo~dlKV;P(lPPnG{>Jt2F0XwdxcBV}SC3!arH8`Vdww#@80zVby7mln>Ez|+1&P;}t_{)Jcke2g--VFwPT4{unK86-t@cLv1^E{vr9aBt>ZHn-Lfchcd9 zftM{X0^EWlS+myMs`29_gF^2=pD zE>8G;3BfPf=zBrN3`c~ZYFxHKY|+a* zk)0#qzLF;IsDC4Am2<|wDP-ouVZ@(e0DN%ph8Dtbq9j)SP;YaQ@97^|cLsH;E=i0} zKj{pqEVj`|6d1HMmBt$_o$9SF8!mjkPHY){pnCQ9pzsPGFJBK+n#kmrhmP!imp}3Q zoy(%?sp+Ri?McDbox~_7Dw`edPY-i+k1W6A_=7)(L@xZ^zv9g2C>k-L>m`_m7r-Zk z46!Fq0=8#TdbBy)LK}NhA3hM#g$XU2rdAicDwY)V`b*UeAind9;;-t_{=uwz>scaO zpi&a`@QW<`mee7WY*g*iv-Xc4Kh^cb##0-UsIctBw9d4{K`pf0gm)E~`1sKI>S#8< zSz?!sQpvQXD!9->og;GlIVz+vlRu%kOc~PCQFwz;Fx3E(t$+)yu5u6!JsJ$MCcFH2 zGY+37CD^Cme#<{v;_l7Qm&eI9NHp`Rjbo5v&PdtG9v^Y~IJ zO6cVQWMo`NOMWjB2-XWX9ADUhNN!l^mS`DOPJHq{N)LHw|6zGAH!qj`eCTtcx0;Ho z$^^yJq@Kgq-9%=h;JeXQ{tAGDFZHR?ebPt%5XmI0=U=+G@myJaj$bdkSjbBkhL@_2 z?6b}qiPtrh8jICUxw5hf`OV>oS)C^C^pEJF4=hV#Rj*Q1yxH?wq5N8}0nR4vKbKX; z#WHQSd1kflfvdY0y{-5YhVfsTFb%z*Ll3{9m%=9M(Rwm@Tcd#wN4*`BY~a>QJJ5k; zgIN$h?n_}RfX6bawWM{pSPNdO-WJqx8tkrTwMcqr9nbT`_MGqfI0% zaZ9xC2=V=Iw;^$m?Y!B$8J^t8D}p(XE?v`b=BbtBlL)DbtUxp!FFc({_+Y~B^&!k( z-PAnMn=ONFIt$m>!w*iA?OAgqvyM7lX>pbTvtJPj{&*YCKkB6S^$1bYZJlHT^0PCQ z*WLSh_qjASQKQ@h1pxUOR;;b!{3jqjK6^dZk)9*_WY5PxVc@qZayymB3oDTg<|Q^p zXcEJ;>JufssjKhi*>=8&0dBSnRrkUYO~jf_JCqzjf`FS?;XYWX3L7}ryCKx4j**DC z$OfDoA~X1hSELNd!Ni=qhDaJpP;6nX3fb2^Kn@%Pjnc+n_M%%CW8?N}aOq4W+_9&0! zw|#CtBk1>T@Gt6@de(yvE7E_AGkjO2sr z0Pf(m3b7o+oD~RZ5Oku%%Kv&&+@DD~fIknWQu*<79aZ)#hY!K&yblWR1WYd^u(OD* z*+#m&9)KlMDGPrM2{zq0s7|n_aLk~ygQKjz51&hY5yh?(QTPi-M!;IE5>fp`Jyj1K zWyT)@JHw>@e4|w5_BTs#W*N|)kg6XAeOjxPbML(oQ?Cb5a9L;Dx>$gZ?{3W3>jqz4 z^>2sIrh9}YulJV(IC7kS*SlG-sZ1P5gJJ8zP}Hq#!u03>{-v%Iv!C?Rr8RD0??KRt z&2S`HQ*c;pML{!FncB}?7AlUR)>b+_^W;^1kUOl%+|t9-cC1sB8i7+qG)R#@RqPJ>BTaVq zn#|gwl%MA|OA1_7>HeXshOTGw56N4)hwtvL>dx}_*@+mSey(yDI=Q4m-+>{76E#kw zXFUZ8ik1_rtC4jP4t#6TIU4yaUBnCafW!hSAxr z&G)@7@ZRe|qx_pYB|kePDO8z7+4t!}ncRIClaAkz4~s&Q{X%Aw+|TmPkUMgEgHS-`*9j;n8UN zju|+x*1eIk^Wcz7))_2`eRsY0BTmFIOSzbfC|>1kQqfa8{Kf>>%eggjt0csP^=q_D zfcG~XUzKVuTLPD zOM%{O_XV;8kK4uz@XYSm()GL|xI3Y`VlM-JPQ{l9(MoR8Pt695KzrY=>tF-!KcT^l%g>8dBH4 zSFy!DJ}?VO9!=cCg#1EG2+kc-?1)P3+XUsRn(OJ8ynC-}48|Qb`B|;HlhNtCYOV@2 zoB33RO9VJe$!AgD^U%YBZ*>#3Qs#~#NlB>X17eum))ZeB|71M3JDsTk-~|Ia-R<5WAN_hKKu^28 zJ}c|!-hE`Y${sNgi?q?Ze0G^yh}4lEj~euYwTEqNQ0JeDmb0<3Rey&-AZRS;Y^tf! zu0U}_+eRAMdhlph;*4Zas-0v~`Qp2$Vq0hU)m}IMFVP4*DQM%O+qf3)uSG}dLiK`! zC@Hn&IBIKck0*Jykn{^+-V zY^qnz{cr|W-{GAdIIna2xAXsfds%z!VTn9Cm&OXU>sh#RN`x6$GbkfT1 z@U;8_L$2efgl~K74VG1~(Vd934Z%_zGbsjqmhkb-o8J}VXP+-%JKXf%pW^5Mh3xi| z|6aI%6MCQH5Bh~mSC|f_9M~TIv+|we9)15bXFPpNR9HzVk2mtjk+HVMyNuQYw;J1N zneQhTnsXUt+52Zi<#N3s|kLS%tRzjJDC?H=dTWT>0Ts zL;Fx{Y)TDNvutNhS^|Aciu}^Bt$m!N}))P5ef6vUh zSO%S~qwVoC)!N`ki~qx{9PR1B3y~2;;b!8Jlmb*{6-H+|L>;ttwtRK_heh(QRbl-5p!M?U%iFw=>g*5KQs%*W zFR%Wihjz~V-iek+FHk3ybWgF4HPtm`(ndK*B=mHv^{_x`eRDvfwrn-+~<9oI9O4rOrlcF{{1gD}e3a6cO7onxCJCWns;!qnjBk0gBAlY@PqO z3(zMR13WtvOg$rIT}vrIGPC_~COv-5@{d;D&$z!|?pvjj|H8$&?&K`I%*R$P?IfDN zOio8sg|@P+qi$i$_&;m&T1p%}PxK!(m>hEcKnHliIQoAY<$s#czl`?q=J_dOpwQ7v zu|Hn@_J7;Hni&1Y<(Wbe*Szpw1x^k=|H+x>w;AStboBpKiSbY9BQamUEzbD2$~Er3 zDqxO(!^|H0Z?b)@y#E`PTK#G9{QvHxAF}=NOk<~EWWfF2AFsZC(z(6+6LQ1zpBLT# zD$9TB_llhJu2QiC^6oJFOLhOVZXbI8emAV)`*Y{S*N^|J5r4hB_Vw*d*JDUy`P1ykBYcE3*U2A(sd??~Li zziX%P^vc~X4B4I1{`5!Q6@L2C*Sf7FnDRbR|L2BxX+;l%@ws!?K3}^f<^51#)~qUE z&-ai@%k+Es$N65l7&O|PQzq;dxvj(80#2HG8#596i0`}rjnUZBRSq*bXooeixbFaF(ITumHH@umOS^Ul-aXZTeA?x{Ant*BCm zj-A2M;F|Lr9vhnxI$rq7w%s%-!AMhvNapjsiZLg5%4Gr;4=#7rAk}oRryDt&$JM=- zqc8zM<5ZOxMeYLghUd&E2Pq2>X&8&Vg(5*2t;TBcxQ{3{9UlY3nTG1*w?hToVtx~F zeat~cCAQ>ZmY8v`Pw>?mA-|GyWgj{CgwWv9yQFkZTYoQXBy<-*9 zzUbij)(FOOwijmKemN25sVSX?_l6Y=c=YoI4=0ee+QQv&>ElTHaHGhD5{|6=+GK27 zOG^~j!h&AhJw{^(e{rqv&m-^&B#+}81xEe!x>z6(3s3a-+nZMDS}H1cA{P5nHjV~d zYYutaXaW>4--aCG^t(2v6zHbQT3H$rlGohPP&i~?L7pdXv5ry@)RSJB(;t`83v<-% z3seDTM7i9kwM#Y1i%y@Xm3THk!_*7b-7awuJSG`H|XiBsiWWXx}fh`qp|MW)<1_q#RSq0MP^Rqv$q zDb-TVs(3b(Z3W(@_p6SdcX7@*gQ@?Sw}TKfJ*O4)g#9mYU41LHMM7)OmPlmalm`j9 z;M`0@Z$A-rJkEA4kQW4~;XC(`Uy|4Ux}~d7+b!<*$|3yu6_kAq+!^yDmz8g{$RjP6ET{Q)yDU9yunzHf2lOj+Y7U^MBzc);6o?L29#?2|hSl2la|68S(6aXgr+o zF!AXd-YY(VrXS@KQP#@3AVJ!5&uwzNYLPI`Lut)B=p&@Dup(dP@oJOj!3GkckBbI% zDmprj>M4<6qx&2PfDF}nwG=uE(+^gITge(%jcb+CQ4tt%mdcD&7j!6xPj$2>zgFdA z0@v&mz|{)B;8}B>JpDsi%V#6pfAZI9^|=LnayH8X%2|B^dz<&?emok&I+mo>V*odk zawfN@Kj+P*Yfs0*?dJ}TE_1$o&pUt-Ei8NN=1^O|Cxq2b)2ED)BZ0v*d;Q z{agy~#;#0>GiboJFd494PIZ#P!|17a2|BIHzf?#-Fzxl}Zy88#v@ zXs_GFK2-FkOmow7t0-5DRp!Nze~rOX)6*ox@y~b}n%x1t=yM|iGH;^6Vl)cEJf!ZoZYuDT6`l6RNqJ0Sg&0>oIj{hNK5H0JiKNSZ&led!mZA0YW*&+gh2RO+VfxxB2OUvCZt zIFn9xUD`IOGtr6jk{lM^^|wR*FqhJsZ4c!OOIVApvr4>Qih_`g9SlX1Zk6uLUx<#1 z&76ll!F&VIf1|!EQcrA@yy*zcF?6W6vF`o4MjEJce{ycigu0N$7am_hFG`T%1{a)N zn134H#b_LI-AnRD1$?-}NYFvqaW##OSk*-Zvj|+}G4u%cW{>TNStl@i{JdLW6bYM- z2V$w&_ffoB8wwoTKpJcZMS$&}-zlx*v?VM7avw%_93ps$h&=4PdeiVGJkgc!{a(Qr zcTR!wscJ}MF*TXIcm=D;|_fJCMG&wODDCx{Blj-KyXToSResvsoKt4r#gr&$%b#rtDB>9A!Lsd})osF$$j)&4^pI=< zaCITeeP|Ugq#&HoIN>%{FT&??m7{u7@N^WNVSz*`i9SRoQIf_&{83$^>-~G1K;68- zgU_^Om2|LA<)`JNrXB<`y5K#|3u}AUleWoweBnQW++RQMKJfL9Zd*}T$)ar38I2yM zpVqvF2Dgl1D*r4>{}JXHba6eF=c;1pn?lk&<$16SRzHS~0v3oBl2lFhoV@`1rVl%k z;kiIP@UtB8Q5(fm+IOSleU&wOFN$!fm`_~S(Kj3)PF8DQJsX7%kKsS5by{dyyJZ8rDU2y++tS&w)i{3$p|h;FUWtij5o9BRGPqy zr?4|y&;uMt$8ub{U!7ms*yC`Sw_p z1I#xbDn5>%1kVu+VNs&Zu(7fRn)|cooc<3pccT!g_3aD4zOUvCg6F5yX|_A*Tv<;Z zUmjN~mTSB1*sHqhT~+Rvwf?0a!m|TAesg{^>yu{TqikMKQ?lWro3(Dr@n#7D7@#96 zmIKgit-gd_U@glEg^#aZNg_(Io3SvfG~}`sO2>_jZKD^~iZOdx;~V<2iE06nBrD{X zCmFP_v3{c&g2YPx38&c7MAaFzCeCn_&~(_2>n;eQag++H7FJbE>*w|7Zqz0q$WeoU zte|KuX%KFUqTp=gqqI}+TRFbA{xD`=dX{P&c+cLx%2|uGr2C6+?xYck;Mc!Nr(f+{ z;2TTnEXDQM4s2G>Pix^_z3R?Zn%Os8os*U&LOb--&JvQheCDjRV(6intW6V~I6G{$ zT>%~*8xG-XYF66pl95t1z|c&hK}Sj)@vipr`zh*|@2`!dUsn*pLcvovFbMc|=s-a_ z_|ubRCLipnwg7G4iAV4zDtCDejsbdj`^y<{kEWbI<)(CFZP&TF63wT_Ld+7+s)NR+ z(t5@}e*-Xv&f^*8!;+I1>07=&tD&CPld}AmcjF!|G|F}Bvg5D3x~&a*l%zo9JsI|G3sO~UI(+C8LfJrwp@J5b>9@FbRrH)hd7635DaIUi*tvvi+bVc;lWS|uY}83H z8U`K>_^sm{$|bv!L0`8`8L~#+BmibZ_wh@OTyP%XdNOMefi!GRn%{q}kmTuADH%Q^ ze(LXah4xFEHYW;lZl=L4xKjoj#^0SrY|}Qdv+GKN%$6=yopO=A`nI+nVf--+6*HJn zW`8?c4-{q9J8@VD^b#~si+V_q=qu(;?p1wxHXB5FQHHu^Sw(@wL~W^$HTQFts*n43*t%5V+8hO z3$J20cl^xPhLa{Yj-Ai$M2U`5Qe7ha?1osT?D0Cx3rhWDaUq8{jZc{;~uoj8=}cIax1*(bq|x+LktWxnmP^zkcCua(JF)J}=9-2;Jr z5sR9^NodRqSpQ-%`u5o~DFrQ1Xte$X5U{MX=kI{$!zj(;_=!C>emAn96BzR^|A)-- z$dov8GU5D1Hij|?j7NyH6t1Ti^c#f-B@Eke2`L-VL!5Q>4ar^XAuZz{%B8E{z^CTt zHJH_iy!OFKyk<*ygLeF0rRDhR>m24^8`z-G_){8KC5ZfRXZB5bbwhO2+!OsCb|LKS zx6aV+X12DIFq9?Chk#%&RDL}cUi)xL{1n&i1B02*N-hQ%8V4TVE-uJS84^@d!rYH$ zuJa;|aM)SV$yNCh^}oV@$-CXG4)bQ}ohOyygnU97fe){?$wy$7_MFc=2Oo=w@R)Zt z$@P$Oo%e8hH;c)A`jzh@iTVjL(xn$JQw8S3B5 zYEjV`@NP2zez))Fxlysv3UJnAe9N>!#|y8Fdr;g}GX27XSZHI`!{Srwc4x9;Qj#99rh$~ zy^6(+nPghV4nl$Xx}%3D)u5T_-k6#DwcghPDqpGGzPV5wQ@=Q;^J<(0yhByBkU|<> z%#MD;8@X=}2!Ru?PlQiMbE_3d3&p)Z4BKf`(o8|v8cY^c?z~0s4d(qn?0sigliRlL zvLY4`QIIau1cXTMMWy%Ni_#(VUV~UbKtSmbiu6vTOA9I`^iJp?9Ri^wB#?x1(el8PtS*S5_7ddE>|*v#|~T1 zb!U$%$_uy^*U&Xrhb|Ev_0r7m2E~G!oSFl}pUeau-H_M}U3ZW$+S(s0G}kaOOD#Yd z*PSZ7eghRT9irh9_h;Y{c%xzZ8JRv|`F^i8ARe0|F&i@e!*^qKg`^CX&#->~6uFmG z!~_`k3Lo%cbn5HNoA#=0(?UK$aERm2MspH74yKa8Z}cc=WLFAlfR}cd)Xj}C1PT}` zVfmT&oQ?U}5N;aLW#vL$k$(JsV?=pgm^L#v1Tl{s@J9HUM04*3KAoTm{pD5v_DSOv z)5<5Jw@o_o+p)m9R*$GuSn9yj;Tw=tn%310w9oBl8jqVCsBUF{=6KJ+OY8M5SjXbb zU5bxZJm_JMz49l~T$&ARvdD66W1^6frd<(Fy4rf{9i*^HV1P5jb&@U8@i~FQ(mgkILTa(pn12CR7F_^D#=lLUGWbbB*vqg~e)en~1@B-*%9 zsg*JyuaebKw?|D%nP*Klu1>Ot8b+7K)^o6l6ZfABwNX|(Ew@z-kRS7ghP6;k^$zu( zd{DI;Ic&s-c}cpxtp(Y)D%5)ZFq2Yd5O8rIK8(vJdtSJyeD;cyB`^JBQ_3J15L&_t zOKbOr#yeW;Tc#}<&obMpp0dSc3b-=4hT`#iqCIDO@Z zGET@v))leJ#j$1Y0~qxlLkb6`FUm-7c-rx*bPP2k7RuZHyef8#S`pS zwI6`iD>}7xufh`TU7F1VoSNXv!<_Bbf+G!XQ5>7! z#^0|fcCOYqsl}4S(v>47-B6c>s3u6x+GiquyzDlrs7m9Ai*r&#nHZ~_swgHFKU~ie z=S$Z-PHz%~^f2YuiDrqkrrEN7QU6l^9KmtQ<#^Fej~_ja3!9cq-ea{CCb3}S5#4+H zsEu{uwyjIVYTwV8{`gg+vlP~i@>6D8Fjga$BRj{XZmzvWp_0-xAvO1s`Keu|91gaH zibwlXyq5thAF~xW1aTngJmTS2XWxE=%)G4Ga?BjJM?7Gu z=dq*M)mx(mAUF|#x`t+dq0EsX$gTi@16RM=yoFnxrzHduQX&fLKss4lK``FbJEwzP zH{#)hULh+=))+H)v%}_&#QfBz-Vj^L&#Yy8>h`8KNb;q4L*n|Z^&5{6?7W@~q-%Eh zR8|?WZ)k4Bc*j>8MZ>Wwr#k#W$oc%SI`hZNO@}-Hp69a?Vr~1*&#gm(A;;OratyZ< z2x=zzmy9}}->}AO;RQ4du8WaEUV7c+L6P6X!!>P}Wma2`xs;#7j^ajAedv3?a;D~A zGRNgb9Aa~{!?|9a-%h5qa|jX%MtliD*smuv#io{0KO*2Q%Glrb8L`NEFTduqshcoJ z_LTH&!M38QVq(%rR5JTn(WU)5NbYxWC1uCQUpK2(lhBQq>RKgs6FEnGyXm`4WW)xA zKyrc`{f^ooU$SSWXwtUCU@3C?dUv}-O9NjgHS+=n+^O{RkxE<7+;I8!FAk|Zw9If~d5eY-%M8vF&>=$gr zlQ`?b`25Pky?YWbCUV{R5;i46b9ps)qVz-IzA3)VGF%NJA>W4?`cQ-aov z-M&MmmueQ*o^iUpI%tmx8&l}q{Dz>+uM}gcjiYLIuFHm37c4Zkc$klVZKSlC0k$gm z-{PZ+)R6G<)SE@M-vPzU2XUUX-%=he)D5U<&Oce6vcEN=YLX0sf0XXa zEYJR~XLoYp9}ye(4vOO$RDdAb|8z%GOgcfMZYv;M?+{@eIARc+f>wwrX-ShC^_~qw zhqz3ur8_t`iKE9!y^*#GH$R9}S^%Au;`u8Zoup&q$@03+~`%1@@^Y;a!o1-9%A zChgCALEpP2^~uGudxv7zi4}yR$~5xB-gwUgWW4CjgP;o!zym`s*Q-_&2+6eIXUV*b z${V~RL*rM{diXF2SSnPZma@)X8TGb(dahbfe@FqDn1bX}l(|QBmLl2Dm?E9S813_V~IFNCJ9{EyPfqM7BW{!B)mnYmJGYk3BCW+f5=&LW3Qy$Y$^02(IegPNmIe1{*j-F0Yi>v30 z2z90#V~4s$@)afzJ&wUfY!3G7h}y#(d3tf&U5=SYs)~__{_sZEg%HhF-Orvu4z+Yj2Ufk zvtxk3HhU7HtkK4`ER)$!biAZ(N8YA_YOpznu#SrilqTInM}=MaF(I>p@TutoLF?!VMz z*BL!BTA_-)JmeAVpbMWcck~K6>5y%_Kr`l39_-mRem}+-mh%C8Wrx7ZFjU2}?FX;F z(MK7hzFre>L)JQApiLx&`X#a(SI zgaW_rHq@l3eQ@H)ntW#6byt8tWKZm5<#NrUf5rz`PCC6>84d^F_zfKP()q4c8-G9R2vAww_BmF^J5b#z^2F1oR$ z=vn+!(j`YVgkP_k)YWh`dZLqf4Cv&UStr>z)Iu6K)Uh)<74W&vZPg!}c&9N#L)ydU z16jHB)7~uK4D5(iN`>{%ctj#ICQDLza_?}3q@#8+FlL{2V2)KCWg}mg`R%1MFkn<9 zFJjx5xRuv|!t6{9)<&UHGSIh^QEDI>XX=V0;v9)L1zm8tFGuie`Rt{QNu{^XnO%nX z;8#~^6I>|VE(`Z1x9GH;m`N$fQ`&DhWTv>cOqG)2cr!ztS(Wj`nm02?rIi2M#8XS--`1iSex&3XI_Qp;6-$PWseNrWYX)0))uKr2y`<=fqE`V@> z-HU(n#9t2Q?|1?Cw|9uWu+&;>@%)#U{6BUk3=sZnx%o0YsQ){?up|EPTj+Cs^>Ph)U+>0$hk~M+iEt9joAz^8{%gHJQJ23^tZ^@P zIz0G0Uj^HezF_r&J72{Y3!+m*XM*^D93^gOF10w%J|Iavogbq ze0`>tvR=tyA<@4C;3#tc!l}Tsp11x6hxQMdL-y_)MOzNGC7QQjZPJW-tSjtI#PA`d z-KcFJBxf69qF@0L!G}0Gam^EktrNjuYAFtq=MizAaW|+&%K)uPM{^ih>K@tQQiKfQ z%0QL`0AH8r@uPg&yFF&Ha2wK?LErM7>MtS7P_E0w5^$x5tTX>SZ~yBS?K_fogwEW6 zcAwN}N^&-()fW{-5R)Fu(oI$r$UgX7`YAJ0yxRWJ#zk0t37SDi-&Oe1Ouq^Uc0Gtar5CdRim)60*_)KKFSr{uK?! za{Yqx=+D3F{k?4bn{Wsoyd1kJGM?46>OEmLJsdcXvR!p{ixxhIga*C8dW%NoO$1qV zR$qT_&g<781iIO+O*!=I>Ey`X)tj_(ev9YVh{>Qw>MYOMD=ctNf8E$M^Y5`m)Dmf< zEZJPiBF;2K+HuLM2}h90O-$4?@tyX>&r10r_fSK@8VC-suMB5FetvOGClNrLP`w=V zSL}2w_iH})DVD29?B2NjlOLfEFMruNxwoYx_|NDakzjsmU85hNbBZ8mDw(NwJe^4$ zs3jK9owO(bLe810r=1g%lZoV#vOWlgp!%5n&d#u#RrKQqhGioCvGh{mo+y+Rber&U ze>exhQ|ozV87Fmzi0RK>3_uGtosa;fwFF>f5I zY(nA1^fgoS#+0*z{ly8epW7)0DHyopucDz*xV!60#G*f!!S6OGE%XC_!Mry~WT5X9 zKG0Uo@NC%D9N_DKn|^Ij%xB@{blWAjzgm(ncVs204vfke-EaP>_JYy=!u(gXFMY1$ z1+-$bQ;xP$Mq2m`;)f;+gvWXh5=&q`mg8#&T95AQ!Qe8lyTk%+?1ZXXcWJx_oz8G` z=fc*%V=GJ@&R)MuOiHlM692haa7xfsP`DbCEoyw~wqPoJk(@#LHR!BwF@AO}cV}+S zfks(bSYF|DEC0vKRoU_)U$6ct!4p|CcJmf7+ghm4P5S^!G1m))=oE(shfcP>P3ZhofD3W@SXKFV{OKMCP_ z%v*SNiR2Rx^HUcx3*TwfrX4XUA`;@T7PMC^GHQXwxD8KlSje)m6$riIE3vJ3FQ}X<5CgkA$z=;l~)- zB88s{w+V}gXmhk3Or)=>e>sxgFP>@P+F)8zuQ=zqMJs3&GLJmk69JD+H#0YU{p#Ho zfb~OVHJ`}=P=(VPDG6r>!>3MfDpnI>>L<+uNPj`Z|Ay5k079cIc-`ug1nuVhF%7Hc zr%NPv$s#7gXGnIN!3ZGmSiMzR+!cQ_iR5pt=07`@e9O80i=L;RkC0bh`Ln}oSl*{s zJbav62Dx7^!KH+F%tL19$67TReeSgdV4{`MjK!Q-Dq6NC)Eu|A^mN2uNuT^QN9z&u z)(PWx$wO5pLsk@2maUbE#ZASfaL0LkI6Ua9`}DoULEC2BKn)5$1uZGgf2)xZS}lIM zAmOHc!);kgE8S~3n6{hF`+3go({*Z@m>%D*=?xuEPyROj`Y4Ow-Ly?V^;;P4tu-P} zQ);cbICz6B{txWOoc2e=7zNd16E!I*DLq5e3gH##;j-7^UAL}z<9aERE)IsfcMtQ_ zK+Ud!fmhGYFJBdtzq0D+#Nro1hp7#G#JiwC2Ornszu7hRk6ZxuLFBfp_PU*2TqkW-K_0E_23Wnh9>o;l~`(Q$e-D_7a3OkiMup6p! z_y`A*5OI&$Px?1M)`D35DhX(J^;`3XkrH_W!3;J7}eKKrR ze`49R?QJhzF}Ltp{E&Fl(-5VAnK5uxtS`;x8C0Mt>Cw}N%Q6sHclF!cA3QTY_0*qU%DRTjynyg%DlRL0nq;q8wH-XyP{1Y@ z6;K?}-5Ihtx|&;xqH-!jm!8F+ZKB>9Q;H#Iufw#v+liKatzXI;T3~BpYGN^h+C74^ zIUBA)->KUmp){z#QKv6)ml`}!DEM@NQDty2uQKX-JXHDG6=MOi>!@?#dd&lmgK=nH zd~q4r^A_?w`|=4hJm<~!y57k{=T3RU`N}_zn7x)j4II-w@b>fyr?s=Fd^%a~5KBHh#2!0TUe$dw9< z>)!apQj|=c_n-_Vl%6xNCCIt@C zQ=c#ItB1RK3i|5E8{ZJ}0`K(r`YgT&$l>HotSNX0_Yg}5%el#|b27x@lsn2M)>*fc z?g9rCejJQ1-PD!hLAl6o$#7DJU^%ql=1%r^U?#>Mm&J8G!pC8Q*I zYhtP%VtL2!6=Iu&&)Up^$ssk(!GKP`Dqkb(T-7Q+N3)(TE|NO9kAu3Ll4JkMroqv@ zd0$hM;OBM=O{PUZJEN46 z(zMORIkNIlf{-tZVN_Y)(l{R#ES)k_y-?4_Fd%*1eF2LSpAacYb1YRq=;umt@ft{` zy^fk9uO*Zu2pKfzJ*`sH(9}O-tB>w1n2xfIlTp)vr$Sm2#IeGqsQBr^8-3S8Q?wtX zSJ-6MVD`Or6{DkR1DyM&D0!~uxw@ss<8Be+0n$HQmJgQg+SpH7thqPH+WiV}!6^S~5)#PS?d^FV}(5b41!%6c_<9R;R{1zFi z%C*xls+Ce=U0d3OFwR=vuaNtn?QI}Bs<$Ihi#=`tT9-md%4K% zv-i@{euhtC7A5DZ8e}Uld#Az4?W^K!^8+9!xQ{YK>GaO>o#FsZ%7CfKD2sBa$k1>- z5AUbY!z8r{3A)C;rn@PO@Z33(;UCz_Y{pAgdpZfa#lb+9#;J3m37=09+if8sG1U_M z9G?j6`zI`7LP_a<)do`wxXy*fAf&mSMYxsRcmLkO!OskI(@?%iI6G70l*QhR83dWy zd8DI4hU034Ok2!`SP<(Rmqjg+(P3}`*|FD%@ zFaW4FL;Z4*&Sr7d_lvoWhK_}&N;UlcY+8PXuyxx5t*w$|@sTctM6A#FpIsSABP z2pEM*#?JCW8)8mPLgdS=(mtks7V7flo7`_bm-Ou@$mTzJ2`l&OW_o{DH>w`Ov z@TZbwQ-%2H*vJZ@jj)#~mIK_jYSWD_!u1E0>2|0CNv-wl?^z$6A|}7%`UB`@CFmL& zT>!vOG`&;XOZeXVJ_nM+{VCm0kvkeX=x3<0Cr($l@cI5kZ&-#1F9&v zu8S1?xTpT5NUL2V%h02>bs*Rhl5NuKU+!+MTT_#$sbpo~xaGJyqpSL|9!vpOZ)lFD zmjLQX6T@yQLwXzSP}l2KWT!g>u-|^m$JxZRq)G&}O^j_d56`SoJ662gYyOW}egJZ2 zv^dz-$u0^J_h2Z;)_q~mc+;`GVT7D!SMuq0sYLzMyk6^gn~j6fk@2TwS-{A8 zO5^BJ5fCvSk8S~^bD@*a$WtzFSn<40Bx|V0kD|UzIW3@u8XyfYkKQVwSDY!&f%`IG)C>*p0tx>U0gC6=rFQ&emRE|jj^w@iX5fU?dZ z>o~{f-5QA5L6p$aLzjO?7)M&`Ri2a`Oe+r{rT zv^^K)g05C9&JdCNqQ#Fm^d|s!vXy+ZCY^mf`-?fUoC0@NQQ-~~v1Fyr(OS$y5e1dZ zvB*L+y<-Ri%=was-dK{XM(jB;Mb7LX4wV)&F4TRn{5XpavVp7ScFw~;kg-1SnlgcE z%p`(y8jsr}6NiXdzw2v1g4-ZK@=tFzPQf^1otea>`21cp%xjk9-Y7!-#2My=R2ZDx z*&k7ey`?AY5uC9?sv|>8g`pBnWc-s8vzcYp&+M^bE-UutoPZc>)A%6fwr6{(rX9}Nz>Y}oHpHN?=9nhkY4sk5CDlTP}KfKgC$ z^^B!Iu-p1DRT5>*)9mm1$ZXZ}x>;jk`iw1TpsL{((}equP*{s(D5Sz$XTT!X_KPno zW3!Xbl{%Dwo3cT*lOi#JMEi%@2#ns=O)gNi@Pj6&gD!0k*Cuf)rlo^UZ84Zlsl+ob zCYi`#6Oe-Q(pOnhShhS<oUdvHim zoxZJNO?uxeL$0^j=W@yWY|4D~gYv3tGJ7sOz``y&K-`7MnydPB;O*w()NH?eb;(zv z3lxgr#vzlLMxHr0S5SD$Suu8|m}yb9mQq=%@T;o?Qhjww{SHi#-#D6H;9O~@bLC0g zHXG)KmpS^X-B^(6zY$!v)&LbOPuVX?Q19~u2(#6ghpeuS9WqT`{lb5J0j&Mk@VD$wk$v6!@o+} z+rQ@uP%mkD=A0Pee4_RUH`64_Bs11s6_Y(75x`KKTNRBJ#7%_Qnm={?w5?-SPS9G; zb!F5Hn&LI^$ascldFXKyp85vXQtqJyW@X%7lWZ2nnyieP+%&E=>Zqb=RM@flm`#w2 z_UYFaqK?Wi5rz}Zxarbbnj8!6=XZW>;*SHTwon5D#3hMg)^ zmGHrR$$=2(xCDggI-AL%S5QaFq^Fv0Foc$Sr;KH;t71o!R-(469NO>^Mids3vn8xp zFH>U(&wLB0%eu3@UT)WPdi41_Ge8gZ%b<+ZZ$QzOCsW_I(aWK7HQUD$FO5?Z3U}$O zw$lbZ;22_gmO-rQNlU^CIg`tXNxw+%4Zf6GxmZh&kA3Y2y9V`&4D@l+9Uzn58vH_k z{Kc7;`q)W^H{)H_ZAn5^&|KZB{&mdtt>;X@=2Tca0>O(|7JEiHyM773aN$a62ncQ@ zKq$Rhj|P|3nycB$lnHiWzj}}VF+sfHPXTYsrWJLq&HF%zNGo)g$R{_S>(Z$|{UO=0 zGO-k;#S=G@DQWS}_Rj3(5=%wRhxY_n#F7I(BnTM}co58E8HEgpYcQTl-RS`(JK%8E zE&WRNgKfc8x4sFCMEv0jIaGh`@L}>psi{Z7W95&Gs(Z8$?d1q1smGp+$cStherT z7GSfK6u34$R_tuLCpp|#CB0;5x>0DB1?kBU3QH^8*r(-ykTe{aWYr$YLPe4$B}Bel zo$=>sD$NXGhKN*}nC5i>FD&{EI4uCb)iVpQWWv47#(Sz{8x1ASPe;PVlK@@Bic)z( z!3%5aQXJ(~!WJx+&8_+|keiHNI&Dt~Z`^ z2B>IiTelD4=p}vAr-qzeZx%xbZwJ8wDVntezZy*leY5_Wu1<@sC z5wQe1l}8{wz;Tn=;Fj8$(@!7HFT27wNfO-%lYZtE=6dtXMVT$W4}BGv zmq#NQ_|NG-LhuUf5)95Tt~7Nq8GEIG17fzh?79OE;S#JUTPZZ#aSQB&}4A>YA`HT$UR7A$4f5*#56 zOYdaUB96VLK!k-n$bCq8HC z+`LOMJ~4zLO?EiD~cQ!&(*e)Gqh0l&}NGJ9y! zdOflyY{gau$ZWq;vbq-N%aUQnYJOt?Rg-M5TKyqz_c;?2Jn#_paKUJ4Z6mAJ z!O|4Xu;XFkL~Cnn%Sl*RT7JJzkx}k)E?FD$6Gdhb9nvQ{x*uYUsaZ&2=^wef&R})W z^5DT1dY@tBHThUrzW}Szl6$R|h?}rH-uto|!`s*N`AaW4QZoDTN>XGEXXQuL^#u3D z$v{YZfb+%!Yhp3PE63CM6)_^?zZ~^)q&8k(j6kBpBTK6T>@6%8h#@msiZ2I0T$tU8 zZ^=JwVc!0BPz0f^WUw`j>t!!EVE0juO)h+18VYKA=+ipMg8mMWVP=f>-${Y|cwQF9 z!^v$TTP%UKY={OOaFRLuss>!3PRnk88Vf_^9u%psV?52@_Yu?%rlftuwHWXV+p;)l zG5R3V@uXRvg%S9Y^N5-%BAu+RH3Sj|vTLKqXIQ61%)o~NLu%E{zHNM;Ga&~~FEK8B z>_6q%s#(}@AQlN0qvwRd&yLGO+(lrc^-=!mZ8JO>0|d;qmq*U{AbM8wf{3^(x>1)nggH$buPyN{CQ zE6V`iS9g~h@H2D19xw8o!GOzX95j13cct55GmsgcM(;F(uoQLt3D&}2X^;JTlhqZj#Y_W>^>Vplf7lOZb%VuV>MfCrf2>8CW5a`8bWh{Bl8k)!%_~I73L_c76LGjC@ z{3QxqHA@tU!*!A+i?VzGzr#p>jXfdQTtkNq)1E=w+jr4<{y zy6M^ZbTj$!qu!H)mBmAg2k&GzrSzWOy(jU$^@ZD`DNJZ!)|!SCW~V3%sijRWg>gR7 z*g;C()2w>Hb?srR-!mnaR_C)Jw6ib&w2cV3TGnp;xDkeL_f+ z3S?wH@3u0?yaMM+znv&rj6_6IsgCPPN~6j?oG#F14=YO5*;eECXP#l87_YYVS&K-R z94wt9DLJX6=qB2trFE)@L+kQ5rcxzDw?9iN$i`B87W9Qn>)IoZi!r2|9M3z8i$e8E zs#tazVo0khq%Pl&vz4ru!l%ig-zytvE=m04$EaU3wV90bGRf4>2#mMwdP{@YI@z|J z)CBZ?>q#k%FqiM?0_;+rhE1*WdLU*2{9Ty<| zceJR&&_M#5uuJNW#YyR1r2zBB1nZgY+=+ySn%=~4z3sNy#T3j8+!@vSFPH17SD;|T-fx-2ry zW%3qbf{e4d*YUW|wdEf1Q%5f_xA>TpzgH%K1}ktqNB4t@JM2Gv+9^19MMI}fMlUZ= ze1O$g4qR1lRgnsPtS5YOG^oMH2%c(A$&Zm#$GQ-dt3}#on|g&jYKglw=JLv$$+vvf z4X+SVwjP=;%KyYyfRXM#QjSwX>D9p$*=r7Bq~M#sv%OmmmeaB*Q!5CuW#4COXl{L1 zL&nkR4Mdci*C3AE(DJ;HsctTG_Yl@zjT4k_Fx&X$%H9HM=%DGL=;lzSI$q#ve(Q_8X)PM&Z`yn82+4ay}n@LFms zga@kl6q7cOx<+x-K+wuJAjE&tfE5Mo|AU8G{mQ|?C=OwY-{-v zdY7v9ETcq^avCFe`V1pDww$|OWN3WPx;L+{pwF-Zx~v9xhj{)+LBW9L5dB;aC|^%h zCipXCZvn5N8pS}f798c)*vq0RH9y-pUMtEZ)h4N+E(&<8XKA`#klm19?h>LVZ-z{e z)?*S3Q9OmKh9RQaDmJ4h^al^kj-H*$HF`3gr+rM{Jt5KcP@Zk@F+IlYARlMT;By;L zTfjyOEK*mq$H0=jIK>l_lVOG#4{qJ;Ny=<(+ww$c)+v-h-VO~dma%(^oM%Uh-=f0k zzemiB(y)&!z~B}#`j&@&=QWE#&)ap>L>_T-V}hW_iN#)PRW?pB;}Fq8Q3u4hh3_im z$wfYdo7w45*~x1&45$&K$#Mh4=QO2%`Ny~+IaR@t7E`(B8N-x5LS0Hifk-0ZyB}b} zf}|ZhNjb{#CD(Upb%8Dnr4Ps0o)_8E#Z4@(rxbNrGb9Z##Z^RBFvL}OpAAgJA585! zJvNjf)F??!&&)2mlyH%^-YxZ*eXa2%>s|@tgJHuYm=Gg4r%Ni&8#nH6>Oq$XNofj2 z$hWmUcKm+q>KucPEKRCAT9QU=|HQ;we(w5a@}$s?Y}ZC6e!{4v()Iva&y;sV-5ZPa z#7JQq1A=T{^>WDFDh=GuTkyZ=CNmwh%6@fNuQY&W(LIe zsFJUPPQEvLuJ{=C5y2w;^}8j5kx3xHO`89+GWtI%q04HKK4CO%6QhZ%*!xa<@gL3q zxtzNB)6ZiX#pbwK&+V;`ZG?99(Y%PW{sylRN=K$sf-|NL`_is`(sEFwElx5p3RjVx zi|g0bR0>oWQn18E76raWEZPt80qhaE&_Yn=-4e(?yl=}sn>#J!&^|x2Z~jQ899k&! zqr64PtrA$X7@AU|Ng5Fm(dSr{ZM(MDE6Cm@R%Ikp5P#*uWnwzHfBoZ7`Nv8Xrt|(^ z&EOl3VL0$uzoKUL)_cA{&xRfQ^eEkjGf>Ci|w z;p4~K0VgFJl5myKy0Kcyj087WEFIty3Ay9#qa~8Pgyy|aC2x}<=srN;yD-1F$-{{R z4-9I$D7#xz=CQMTMw@Uyn9yVvg2d!EJMrG+=d7ZZPgs+zn{@H zs|#J$+akQgX-OG9|IL(TKXYI6p5YjGI!Uqc*H{3dZ;fbXOc3uiHTfirA9@R<8MvA5 zPo$uV=pZ#SoKktaob~W7_KRc@c_a5#K_;x^^PzEihKAtNgUCp`< zU1OS`)Q7II-_QfEG~XTBW;y`la_y+Yb;_9%EQ!p z9vehe&hqL%lgxjRku;IK`uxi^8Qv-VN8^9`bh$*fDCAj1AE8rhs0Vz06#jvxIr}DE z7F*!%7TyPFy9H3q|MFny-oS~klu!La7rVi3dHrH0=vjs9+uR?|aIW7c*C!}qs)MI> zMj(Spe_G3b z;qX@?7ud%G$6hl1maqTnP1)faPjZAe!Kv3D{%%Zv+2&9A;#q|V1NOJG`O7yixBfxt z^adJP^5DNb;QyKGzd;`Vv#b9WUHyL|;4pVLiD@F2pHV#GoE|GAogFJHp5nkyq<3an zsE!>7-LfQB8KWPN8f=x^-5yXMk^%w8YM3l_S8fxUf-J(CEDREn4Y{+eJ1^U8ry}q8 zLLh`duV^Qk1#R7lT&RO)UL&qS@g$ZjTgsAnSXo?P#BjvLQa<9DpY=!!>TZ-GWJ>{p zi1@mx5B~=#339$TCp7hROUpf4G!y~p8yh^zwX87O*{Tzyu^ihMvQX_CnOm9bTY)aj z9nP&Z2ul$T0wv+l-7Le;m4q4%Y%Ow0w(k0&ryo{$b7$?wA-3ow>q>95r{vzwXDMWW z^c1=}LZTR96a9~$_5LcWL}Bq%y6nzn;a@twbP{r3ybvVVlVqP$O3 zLQPlS_Le5~6%;C%^BUcj{dSGjPxTYgZdA5du$Zp%BH_CB;05LVCk|ia6g#`SZUGC* z%lqpi9$YjxeIP7sfX6Vg7O-_zJC21{#ymw*xKnOUG{>>BvG-w-rukn!e{%tpUGp{% z`|`z|M*OjAX<3=g03ykp`k|~7BX#x*mGp$xGJQ4;^`R#)YU;Y(OJfyWmq}P&$wm-0 z-t5amo4FpMWJj*vk~DPJCpHl0U2G=+L@;16ImxVMF zpV`s!iyg2|@QN39#})3OF27D%r%qbML_G6cdl>e;y-?ZNtZ8-Eyo8<0IpOS59ABMj z{c+=iQd@!{+rx(%)e4pl#<4V^1*C4%f|e++Ns}v4?^P1ZKWzxTZ*Xk4*GXOEqb$36 zQ`+Lr9fHc!Gxq5kzs5tFkW$V?gqvO8m*)_^CH1!c1Wy@hv8jtF-ER|&Z9E~$;dYtK z6rV_|gC?z}TUQii)}~N4=C>t+w_v}b`L_%cvxU+BBUf^I7I0leqv9> z!($fOgMnYK3^qK&h95FLk+-rMvvC`|J`J@EYiOUEeE+J?v#$`qrZI1+GpeBC=onjW zjx%7XlJM0%e+pB!(vk5wpM4C5pBGu*ppA_@(<22;yR|)5e9D_NJnTMQg_P*& zITL#CL~Ew6j1bns-`Za!$WGRMUp!iHy+rnL_YHY`X_U@13Zq&IuyDe3{&eDVdh-uL z`xk}z>x*H=i#fATyKOvDj^cOc;eWQhwtPiOT#2sn+y8oK{^vu#KbCxpCTil= zpI>hLm*0GFd?i(j?!-my)?W|qcfZ?m?MV*&23hm(zWeL8|C#FlV?+ODMEuXL{?3;A zzuNwP5%2@a`(^hjD456W&Dh(kt63X^qVBG5^vwvBtq}tP2`CiGPCsBgwTd6v@5L%4 zq>i<*?>kxyVOiuk&L-Yi5$0xi_-97g_eVs%^Q4~3=h^=?*T4Pyd7Jd|{M#9#i)}Tm zO^R7tTiXDLMI>>yD}G2^(G-{8Z91hgZaU@wW;cA}@tfmGAd~nJ#qYjqCMN})TitATYLAl<^#dh(z~>@T*O-kB0zo@kZa{*ljF?0 z_mBb;H_6FUB=!Qn&Fod|+Goqmr>mJ77_iHne$j$gTCfQT39TPbds)OEcgVRZeY+yc^8@6 zK|RrnAmG?ga@oqtD!--0jGjzUS9?0{PZp}Sk?6{B(NKB)d)sU{?BY|Q9N+QcDylU) zNUQTZpBKB^=lqmTK3@$XYNvfGqoF@#w>j(GT2S#qX$DODYa7|UhiNG)CMHevz8%`? z8pWB?EBs<-tGc$tpeAb96m5h5pqjtKgS%_b6NRS|x!oafwAi+1tBT zPfxGA3$win2ZI1fNl6A`x?^K&nhmG&;Wz1cU%q^4*9;2W9g;bFKtAu6qDkpd(eeAi z6D_}r+b<;R3-1NeNBw^Ond%Q}Ywi^btxY$2MfeW{YwjhFe%jjie`^|iW#q_ zG~qS9-*Qivkc^0-XLU_0Ejc6q_znO7NQsY+zv?krVQlR(Mrj^mOuS8qKscqLcg8%w z8;{v6%uNow4776bJlc)V&ISO^y<+El(M&c+gPC@gd(czX$8)&bOE-8kUP=iaxrMeG zYDj>pGdy>+Q46zf>0j|B%^`RUy5LdA)87dKVw(xiH~+^gRTaB(tiQF?WjXF#DVo!%oj; zuPnQZ%E=U91B9OX5#T&JM2@2*6YcI;BKa*N|9w|z;xK+pEFr%YHZ!{4aK~fV{*kx< zd3pIB7er6(Qk|yHgz;9<4@A*7guGj*6;@_^bpkC=J z*%C%SA)ywMkg&|k)q=(lP@@y2!DVbb6%l%!;mQX;8gtVX@Q1s)kiFFFKFdswC60G! zC<+$bl9csr=f!?ntiGOmr}ME4Z!u(nFufWaq`8)*pbGb@-T=4bZLrD1AI+?Z2{O9s zzFbKy=;R*9xV~##c=z@#jp}J+>!817WYlAUwdkmwuPEYjf`b$T%*yev%wT3mro;W} z^mk15@Os8jiwa1}U5tpnv-d{xps;otZ;ga_y?v`Ma677Dbpf27&RbRGu|B7yp@J<@ z`qV?JQ+s&M`mA$zR^-cWlC=IurE8DEhKIGh_J)sQs(BCnW|Miqj^}?+ypV(+g-7cLdIaa9EorcU%p z6_qda620y)oEA(ZN^|^ldakIS^ERBA>u$|S!mfCP_sx)nuQM!?f)?~bJ{SyqZ+>h)!*q7nBWWTZ zQLNf5X)y4|-Jr#i*-4t`BO_IJa>O;B1-Izw83b@zA;mtIQd4Y!D*eUECz>;G3i8_; zd#2eAKFLqPvK5v}r`H1|+7PhA7CRa8vQpFpNnZx#jtNL+=eQou^kevl4C6yPN~Ms6 znF)#;gM-}0*sfKIi>tT)pwzQe}T^UKgQphp#387$q(_q&7%ovaYQ?w zNDJ16%q9ZFaJ0)+D(&XPS0R$gNAl*STP5Y>7ylP~?;RG^vg{3SF(A4T6%mn~1q3!A zAQ_b$L~;g^oO7CCKmgwvM`c+lKW4aGwZ)u(y@L%X-$locv{R#@%H5#%c!)0 zIEE}~WI5Ou{o(EAoZggi&S)Q{yCa?O{1suMho^^Cm%r_2c6}4p@S=!XGUdUbMUK)c zI?q`$!Ii0{m1J6I3RPcRjgT3U4s_-94thCA57bB3e1gTGd9mBwco)l<>96xsSTa63KC5`}m6V zWj1zip#=NOmv*gOx20)=3HE6iq)r)-nCO!+u$z^1Zx7ZuAXm4c zy>o9Ym+KOmT&+$*3Q8jeuI=u%6Z2-i?%NmRH%ZB*o@i+)_8bVi_Rhb>J9bzYhAV5; zGgpCDN;k-$JAzNY*;jFbD~rQn0hv;CB^;L(6cl(iOBpaMlJ{JLEt; zDHGY6v^mFPwfVhzf^FZ#uz58jn%98GBSx3WT?^cY`^vQq7s-K2?*z z`F#}jdtYBtR#HmLY_98rLx|#**SIK2=vl7byvcX%THMC^fbN?mFQv<|_S%2r2c!<8 zMbIAL{&9xWD0-0t0%g;M@kA6MY*oZgvXQ}iD<+?oX}Ac`^`fdiTsy-GoVoO8g1b&% zn9VPBCI?Q~1Du95*YqA2ng7Tl^${Ci$Xub7y0 z%G`mxxYVXpp$z@>NnWd*gHY?k#mlcdX8%Z@K%+lXuAZ<2yWCL0!_NL`gJ(E1;e?yJ zSDn^RCLXrMm2*;TS^yt}=heumjPDmvL!#F_cPzkH0Iuf@| zW+=|4qMvP1`ekrG(M{T$<>BFRM2L)APpYPE=nG##A!~Yjfif45v_;^X{9HVm8fPm6 zP+=lg4|3Q^DqQ`F%F1F#XV7Ka`oRIFW39_hXQZB&V(2F(bl=hj&m}%E26b7|#E{Pn&IMChO4gm- z>1oowJk@QvpOLFAO7#-`3!u_b4PKeyw!H2vVzO?Opt+6Q#{6NIu>^~@tA zdx}qQp3ae_5x*1&?{u$weEeQDtfrx1$_=ML&^P#l%dd4;ICp>v2bldm(& zgav5pepbug4(il=Q!@j3Y;`lX@Q9lE)|Qz!cR7t|ELi_cC!2Zne8-^668Szm?#Eis z7W-8lN{4zEpFro5K*4t45<4fFu&}URuEK0~0In23>XnydTrA}*I)>os_B`l6xF3mg zao@dHT9^%~u)?pSXV`&i4Id6lU>B>8CtDgPeS%1P$H%xjIyzSF=~Cz)S4dhud#3*3 zH<_W@h=m`kyU(AS1MF)pISHkI)A>WskDcuqlrLGmXTfpr_D3Qnp88lAp(Y9Y@-A)F zzTy)Ruj~M73JncSbt)|>S&nO+ccik|Y}lEUGj@D`N%HUu#9?>y(Q1RO`S+Bxr?fQm zym1>mcm4^t-usIGF5tS2_5hB^$iPcmw5~ySKmgoo@K3na7kuNTkgEC!S7d0>Hw!oha_f6_dipncsi>%` z9!M4Yd?hR>Jzy~BpZw(w`Hz|Ai~gwz)vLPrm!Oo$39V4gN!?@ZURlxh`oRFFOQz-%c(o~o4V5ZpY6RLZo0oUHeziHota#7 zzx$U*EZcSpUw_Gnz4S9u{ee9HoPLc0;59EFSu*(fzd zQGmnU_qd0~A2 zl6*uu`xB#do`V%5{A!uU`Ten@(V=ZPp}%G?@>C?T3fJ^1oM1w+VKoF_ET{=x9QyA zKBri8?zybBb>$RtfZ@vXMN-pio}PNI0~?c*Yr0=sLmRHRA{Mr-=NgZ~eFn1oudb<) z7>f>2A9?U@qrx2}TCdq@1Xsns1rZMM{TVI4r}U53rmYpAJ`T!XOxoDi#>}Z|6f^RU zQ*s4k$^+cGp4eNWW!Uma;{vEc`)|si}8UPf@q?^RPyGNn%-RsvlBhIS~^qe7s zO#^II2T3x0fs}!qnj;Zapidd`+0Av{5%o(W?qo2l@hO_cqKZVu){_i1$#KI%bLyeE z_;{%SKILZ~K|Qy<;W~OZ`WEGbT=6^Gq-?&7+#L#UxmK+Acl$J|=X{AZ(su1$%1Sg$ zNc})=a9vGc)yC&aA$IB9LMH=a+~zcFyioA_?PA+ixpj%BRcoA^701pM&~Wb!zsemN zK~Sq|UY90sBpm!1Rn>H`IQr=%)+~+Gm@v;v+xm?ws&hHGgg>kF;91;8WOaZz$1qEj zR)u@7?@>AhJ15w%nJTE23{iwOt!kPd&_*;1Zza2`3U0`(-CrN^Y}uS|G!Q92(NK-I ztGAqm`c`;8-JuAgK4QM25y>+jbD1$Ax1&&5Yxfu2@mEir^s~6aM=dVC`Soka*4|eF z)TL-ses37jz!Vd>12Xvy^Cnt7sd5SWo9?eQ1Xvp7P+VufW_<5dcB zof8tIk`q$gf|X`1lauYXaW&!^J#sC8A zIK7^@hxeOQ_@7P|zpFqj6X`9HpCKzhrww5Cag6&!`4lAoyv@(#Gy|Y!pwEO2{Pj0Y z9|2O?^nGSA`~NhvKlJ^a^fXxPxrNYQep40!P{|o#XX_C0m&Njz2f% zZ(r;*U1ca8a6)egTdcR4aQ+F7s$6YIc8%sID%!<|fK?IlL9_V!4|j;^6Q(te@vg3} zUZIl!`6geDV#Hg(`i^6b$zsV4_zv&S!WqCIS$ZywOD<_%Q`aV4GP^n-ar8_e%=q<9 z#Z5iN&l%tRiO!i*dI<TddRz<|-|l?|xqh=$Wq_D_Py) z%w!>D1f|w)bGhO7$I5$ZfW*MvF^bF9TN}Ds+S;rD+$(6jLYbYqw(eHPxEhhsfCJc~o(xuEqESgi}WQm=Oj4ZAXdYBn- zGC<;JZW&xX)I99O$IF|PM*WuelRUBiKoeLl0BkMo?Ck74PdylmvKeyN{C3lIY-KFL zC&TFf9eRrYz#3h1C);oN0Z$o_+~q2wkxDNvsoIpEH;zQXPXW}u8%D6BD1EakjYd&NofT-VfREVojm!6ZIl`(ZCm#JY3xI8zm(d zqIGMLSna1UUPD#|<7Szo?`L^7FCF61f?~UCT=9PdQ2iTsC;uBboz{QC)HBy?Y<~)Z ze<-^qh)zSTZ1nMoAeSg9SEi}WDme}|3a2(|u>TF4nuslt@R0v_fK1Py%lzF}lzkLg z^FzzS&NX-#KRBGdFNObh_s zJ5B3tqH5JOyl~bd3Ff7xrPhPh8hz(&)f4!kPe*KLcnKmxIoR)Mhnel%wIpG``L<2{N3fd z@mTK1)AeEr2B4u*&erXDnChhoO7pGA!0VerLno@(WnEYc_RteQN8WyPfD=V>_x9f2 z9HZUc-QZZpZ>CM#z3mbi%)&LaKsnlO-dry3sXn=ip!CFH{v9+$yPbljR#9};f#`;X zpk`URE8%N}-ICGY4;C*W}_Yc9rr!nw#@sXUqlvsDYUce6XI2< zU%!xWdHA%kj>$Mvw3v#Ne{D72wYa$5@C?@^;BqT1EafxY?h5K8shc6N%`q-J$hrax zpps(K(}H{L)wG?Nr$Hk}6~qCbBRNAUvdJ-zzAfJ#wxrfT@$$fuGKl}m0!GEdqsnQ% z;X$D93On9(_hZnB?c|97QF;H%T>WyG%shvpdYVJs)^vh%mKza>aY&D-!Ck?+v-9$r z#>Y49-^#GdI@iu}JLsXiw{>peBN7)dw1573$zZlKvTl;68MZxn41Tq`6sG9zurg z3w8AL414No9^;qFI(6C*dwqc|(C(={vQRh0iOTo8&dM2HVSq*}uS|iHHVL8(3)H~a zyYrVi&S{$R2}gTqgc}kV6}^i?!#)}87|mcz_h%N+>vG2FS-LsDTxn1v8DVDQn2x6? z_b~W6IGQ!rRH$U)RJN}`LvVfVKG%waA*n>D+={-wnfaut%a$8g8pf0BSc5}R%|N_dl3V4J!W8Humu z&WygFx??c3@unM8XQ2T(qX8tWSXPF~A}Bw^bl+TF@s;|;;mvdE)8}SaET~CLAGRTO zruc#%umjPy-$WSDH(TV*)*WQZCGy4<{c0`6G3*sf#%M|G?YWU1hfJT7b` zF1qPtsQddjZa3d9YyB@Em5qZ#0s93F9J;P%`;CpeOYdIp9+dK@k+qRu!B#z>aI3z@ zcQy0==!~XrrE&W+P&#h6#k_n={OW}Bt6G-@>f3E~ngWoCvA0V=9_4F2CAo$@!Ca!M z)8WPHxvzJUs^X*c=DZ=6OQc5K20JB@6IS@&$jH1O-y2`|2M#gPQoliIL%kM-cS~U+ zO38^U4Mt$+cfIM~QIo$o z3ri+~i=Mw_$e_Ae91QD}8_(C*ZPagP)w-=dq^k!3O8gnwYry3#^g+VHR9aM8%(>SF zm7@+?+_!jm%*tmVsmiTgnjHD;v;n<5g6^@Qp`X$lR{Z-W{MQ5C)gQebm$1|^C)0!| z@XsHrouiO3u`Vy^P5Cy?phcCzWKl_VU9(P(h4L+=vSmZx+RQix0%m6kEW+hp>8_}~ zo-8<(XV&PLrc2m(4ZD7G-RUx{I)9~_8mX%XE7!^ty*4t)Sprs-kYwrF$Qbmq){CF7 zaI9$Q?bFFtzx9+}TQ`k2cV|%A5$Y%hsDwhN6#m7i z-BNp;?Y6Dt9Q+!MWq(D9RB66~x}YcTHFwB(=xtOUGyRZvmi~=09m)|E(-EDwbqy4g zNl^CnmtmoZ=K02r>STpV@3%tFlFPllHYV;TUhN*Nj$Inz|EH0C=jbH7S$m@3Q4~Sx%nA5S0pxNlJ3L zA+WPS}WOz{A&? z`1Dpw380=qg0C>>x{Gyw`YT#nPj^_Waq&U4(B=~arfRh5*oFoCJr@(s95+Y^o}f)O z_OF#c`4(#(G5~t!?)7GGetABKR<6$3tyaEJ5=}#Qt?#f3#t-fBPEZSv!r?LEFQA7T-HP-~jr?Q+SZ&IAQT0}W~QZ2Nk{xzO`^!c@Kk_?xx0x1V=NIxe;GH~C)TF?XWla#^*%bj{|DUx7uz^FjqZSwfMpS{C$ z{i5#4Q@?K`hVjCqV!0&+1znO!cmU1S)KDtL78jh~_vbLPs@cnK-6r)$Z@=w-UyrgP zigYwq#gWxkcsV+0Ot?FHo@4@8mC&HXBfiGP+hTI+W$H>Ej}=t)ti@IvD6M)cyZd-W z&G>ne`MqUoMsSBO0!H|gyUri{dYdWjEJxoYE?Z@LUR`kUl~7)dTXPxF-3)dXWJ?~$ z5E7HT#Um4MdgcI|2%^&B;VS+bFTBArol*S|OKH*G@o<7I{mJx)z^Gpb(sQ!n1r_wl z{Y-I36LpUsEf2HWmIOUTe6BK|*F-JIDJ#=*@dSb8A3kEWGMH?vvL#$k$lA&QeZ;;w zMv@0^e}yXD%A>B3YxV&H9t#DyS0flQ+h%pO3jxt}9x`5KrYIyc4F@ zqNKj2l&l^pogfV)raf;O`eS_U7AAAmx_tdxiPL#&Txe3LAWcK!RO z`l53?x|Kj(=M0-S)VcI2=`YaxwcObB!B>V*v?{fa|C+my47n2$9u-%^uw;enZ7do3 zp6p66s}y{CvL0V=8R4XLpP-OE=t7GN)Ct@`%DH5!N;{x|b zsoBhu#EKDYT!?)a6MoB>Oy&tHc8-NW!){flA?7Mv2q&9(zRDz`qjHeLYK?SdOqIU> zbi+_9y;>93D7w-XGNeN}b=`WTci%zKcy7!hA)dz?8_22j;G;qUrc)VJMA6yV^KL;p z;dO5l=Q3x(&|n6)Nthf(jj8p@=N;g`pR0t2%N0@y_PbtRuq8@%|h8@y*}C)49YcccD+Y z6~0ZbF}J}D8<8Qp<^g8Ady@y{+?peE%g;jw^%!kFySkZTlkIiAlRD+(`@*8o{R#JB zpK#U-p%H~eWbVa)SNt+tevm>n1{R@gU5jWQD2So=`)ue?<@%y28On1K%k{G-b#`IsUKugyxv$%3!9tShpAE6Rp9`m4@`CwOt-!LG_X z47TR|#tUt;W;vl*xub+4?L0pe_gI+W5}!V!QA9ksObd`;9Tm$!L(BlXT3frr;PUr2ZR05Opx}kI>O#_2)^TE6 z%}CWoJz~625+Xs`B+sETM9G)jP9@VDP3~wtOO{fMcC!uv*T5b-(?{!A-~Sf7H{J+` z8X_u>@Y&ouWU!T#?Ciwv3?uPr-tRWeM9uLo^LL0ElB(+5^Nypm?w!il6H>WK;UJwR z-^jXc*fe;2;i_ULtF?SH?IHQdq&HR=27j-hH1oW}3cc%_SMxOd*G#Y1n|%|AX8*pUa0`@G3~L^Td&9C*plY3eW7w~Z{y7_w?{&-rCLGP_1XN5hS`#>z{XQ-2EG8O7 zGq&@N)XH_ph1<@WKBKa2*(6^#LT-V|RD_aN(j(NmaGq&Eb=x(a2*{Q;BQF6lP7$y805x)~1q@kJ3ZMzS~l|C48U}h%usG zOa1kwxF>swwg~McZ@T7}+d-g_j%HBvBXyf`)ue-T%85BCAYIu35=MLI$pJ z#mEZ;de&lw&GQ4pwUz=rETei2U7>X=#`Jo~Fm4#AyWx7pk*OhaQdgJT9Fa#69!@AC*a$ za#S~rjuGd^# zR*$}B#7pbxB7J8E<`U`;s5P|x8U_cPUZONL6(+PZVNPmQ&fLE;Y3xTYIT zWq7ocB?LL)Yl4wU_pGSNE6BCLA%_w7uwq&?H!HT!;*c|lrMabv`3vLTMz!9Tw_yi# zW0B}410lTAkz>@U!jgd#%J=Ov*ZBuK(3K_|gpTiAWZ#yl#e$5?&plr@3!t|;7*)X7m0%-NYB`CC-w{d%| zX+xe7y~W_nvX2f23BnC^tT(+~xh3=$D)ca=WrSj2d@ysbIiw`K)e~*0zJg#NmO3nC zr?#4!5bSCP8vGgvb&8E9{suvh?(H0pA>elTg)<)tgs}4Z^7~P;z_ke*Qc3VEy;7pP zXNBcJf7sf^8WkX@>@s9`i4GqTp`_9#%}~1FTLt*Sv~wQ9>JgYo?1Ht4_Bz$YacW>| zP8}3ihsl1qly&UE!RV zfWt;Li9Nc6msuvn9a2nh6vDJTi>a~837xfZ*!wsrDcI|W9y-90lmgi8Z@QZfNLqi` z;^Kue_Mbz3UbBmM^X8tr3=vDYzaIXQJbDii26!1$N}(__ ztkoCM`QsURVlY(Z61K9?ynI$-Y;qOMSx^B>$Nu;=+Cyf4@hT>D`ol=t6e|!_Xl(;(cH5t(k-A^fEY`IPUs1D4HSPyNtVA;a@~OKhgmzaq-3Yge^ZT2 z=jatF-`Nd;gL?BIt^;A)(`~B0OFvh<&`Er_%3(;h`@|U}n z9livFLfK^`zy9m>IKH#Ag&LVBzWUDz(?6Q>)tb{_vzdbYXMbvX|MCg=X%;Xw`{JJg zf&b;ji|5J#D*Zgo?>`OYIsa)?jC{oX|J3MT*W@34|9@s#Ym{;d zs$u7j_@8S2`^At&12KI_&?Bv%p$R|UtEU3y;!_~V;DXzdrq@s4l%Gf;;ETbNKulj9 zE-ddKbpP`!b+zr38^3hDU;Fd#{G*q0>Wi+B>v_**-7YyTU~6?NGtsS8?b~NuiL*-= zdJpP&FW=^Mke841o3ULmGfOt-&w`l0CquZ@bXSL~zOFtEm)-cpGt0%kv0}7IG(p}b zI=en{?e;?=44Sr)mpl*=fsHpc)>pR7*x#AgMnYFSKOtJT?5Uj$o-OFQW=omDl!S$G zixWu1i=>T`UC{b8y2cYp(0iSf#Ex4ult{lgt~%7WzflQS&%?}^YPA^SKFw9=x^J3s zFBXZQ@q&rlb9_L6n@941?|JK?-llKxcIS8I75TL*p7~1$&Kg4uK3lGv_0XNo?$u30 z7jvrSmoPZkhrg712>xuymr(HuZ;ETj*LWiM%j$tgF)6UdikRsoujCJ~ZR?lQT6zWu z#i~}~D0czu@it`S^>X-gSU{lCd?6cQwXBSK$VJmNJcSA@RpooKC{Q4kC8ZT5j*!}_ z?)IcW#!NR3cxHRcRMevJ0b7Wis?k{x?%Tv@Ru;_Z0PfgII7rWuB6qdW*at~;A*I0} zyxaEt#5;5PriMB2*2AzDxY@UG7a+~1b$y|JYPA`*uXc(s9pk=*SzEvh zPIt_2!?tu+H+r?WhK_1`Ho1E*2W&)cBP58m!}E{TZIsUaM;;F5W4(HvmfD>4`eJ2! zvAtCP{JX_>7u@?bnX_V?-F^WMG^Q`-!eVX}SDeYMa#-;w)})j=tzyCzJIgB%!f&$s z1GVW8gY+K&9Z~&hTh7Pp^i-@s-MFNxDnTT}i;G^)!9W=LIwB}GG5JPcfjVuI$c0+P zHuW5RjC6cr>Rn{LYh3#al6qJf%dq$P_V#w`wGVfTD=OlJOVL4}i_j%r^Xc86I8)nK ztS}C`%-Ul@{W|~@ZPs&J?B6*zUBiv8i~4AC!~n6 z^ubyT2M{QS5#134=YKZ!eQV#YZz3&!CH1$d&;>A&gA$XH&2SIBzTV@pAcac(#x4{c z|L6*XP5a(4hJs^$*PKBBJ=fIT_b3R~7FuZTmP!|BkW4lN*%GI8ohVUM7h7DkT&`?Y z7bOl#p{}L{VC^UaSMnXzTF4!bT_)eZXSJTB6jJ-%KgJ2TP@{#rTfem@am?E?nzEW7 zqHdE>P$b!AHI8pe>@Smfj4Cgwf1kGHPZ=J*I{g91Wmvzj?AiZTOg|OUO)vAfKwV-u zG&{hfKu#_!BS56wvkSbRjY!2=7QBh89+Ljt3Er%X1nTMchU!BDXY&X%j;%uIa7KZL zeD^U=Jo^_Inq=eSm-_K5eJ87LLB(IFhF}C z>&1bS&Bv4&*pN%I`J@cn(S?E@jEm%8C_ik~jz+2pDz=)S;Uci(b=<_iu{*ni8dLwi z!Bg04pldeA;MyAWK7x?#>LP59eS#aqjT60K1evEF$WDmPwv1!a;!<1rb6!D{(Fs@F z@t;IdX0D^gm7AKB8bmZuoOjJfOsh8LO6zfNEysL%QcMQ!dxM=nb|+E|WSi+7ODF7~ z*hAP)sSw-|aZ0tuuOIJxFQc(p;2OIUOBqdT8y$4aI0$cW9&@U$AR=Y58fQZ_#NC6$ zc9xF@1gdS!Su8AaIa++i?k3=6P$t%k^uC*c9!(nyO^>T}7@8K)RU3P<{0A+==mW_S zROA)(9_NEhMe!EUCrgfbT2~Xt(fc}?zGH)Q{FneifMC`oot&R~`edZt*|u8RLyoZ#-?XF-3OZcs z5%hBl>p``ei|=L1ocL6`ejYaS7*pp=`-VegGd&6;+*<+fvD#*TA3AXnLNo-P9bKN3 z$+Q`T<4@=jIsAb~M{^uU^Dyn@Nn~N#H*5XJaRN&R8Q5dtA^*Ak^+HlLGa8z?<@x4J zM6;?b13T$sI;Xl;+$4DcgKCPj)ns!a+vgBqk#}Ks2VdU}IYR~@JGfHy7Wr1`r<0VF zmdkPB{P%VSWqjl5e5{hEk7H7xzwN-y1EE}sYHE3s*s1e23&pl-vBlkQ1OQv@MRkC& zh@|yoM|;Q0dLh4n^?ls<+2ziq?u;$ZEYE^Mq(Uopch)l{!;drTzS(1KcN~6N!;D*; zoPN@NLmrij@XoT$5*P`!m6Cq+%n}&0u;W`qGig?{fwZ}ME1lcalXcJU4?NlnQJ?Em7Cs(4^{g+%ra)F?M`g+(;OHlmbDaW7nH+Kv|8Zx+U{dI^U6^F&LH4@BFIG5Fa z)|D?I;ii73ooffS_m7Cp?u+RoAG8s2|BX^)5kACoNDscNcARw zp>T!uC7iG-KR|ou$&PUtVY-lC=&Lpsrf<6EB?%!PM?9pTL@2=gnh6{5YP+O8(C!d5 zRM7gq0`8O0V7eV0L!eVrBVhwOS>a_yjjJ_*q8*9*C=J1G$-@tO^QHA@aBvS{f=6vZ z^2?Wx9>?3irw@X$9926i~w!?D$T;*os%e&F%PY3eP)d>=I3sn@qJyHMHO8#B{QHD{kO2BDDefwS0%1K$@PfD^ zEHbmrBmuI4&(mw9nDfi<2DFtCHYQBHq;S%v7&0QoJychezn=mH(TN>~o30U&zQi=6ji$NIYTelCU$Bp*zp&|3Y45z~L zSzz3ZI^sP}nG{wxCRhWPI?lEbfyD2(j2#pa^KjZju%`ZW;nQz~jl07N=zasLxg4SW z8qpuC2O333_)hjNEuc)@hhU(nQuL^!84N#BV|E!)n(Z{EN-bqouM17{HiEKBd}gPn zw;fyBmQut*Dv&}!aA@?paKm6BVj1LIVGq-zkR)sf!}tmj-}SFxTq76%mY_J)Jb%CNi;B{aeY)|XN9t&lWp^|Yi9LaAmPQ_km5gCMCr)OO zxG%{fC+`Wa^+X9^lMI2;WI|uOa$QSe;>^oI*ikgvY0o?$_lx-OTg14= zkY@s?xz(6$mcJY@wC3(Bi3AzA)?>*=I;6w&-V+VcJ*ag1(IyWh{Z2D-E=N>Z5PHBp( zRAKu|ZO0z@U^r{@($!<;W6<|^q%AdsgjO?L)jkGvR2xs*JMTKG zVh%5e91TgS=etlX1o*l*yY@AUG}mTMa2So+@L>G>= zj1N|XtHvG=swZ`6%@w#J19LJlU2jBuTGGZ7gO)|=*3Ycg7LR{e&k&lK*>@3uHnpm& z9Y>ts%Y14^5bCo(CNH3)uQ8!V;NDhoP81N+arM6;bN3NxTccm2%eOZDj<_SB4>a9)gvw4dA6mOH6&8W=!BH@%(#txkg~KA00jI(d>;Z;3BJG9Y`VdQYe+1ig1&Nt(}z_1zj5*)u(u zU}$v9atZ#dYY1=h%MlQ3%8AZ&QA6JtuWWu(d*#@BXX?fNh4dzaAvzvYOlyDTn1$Q} zQzv_eBlq*(J35|sX>X2KYM%GrJWw;IcXZk4-2oo6X;W)oUTyXc*QSPem!(a2yxVv; z2u0@h#fay_$}%Kn74U=!?PiO^A6EYTn}M7|ckW^lFR7Ov5OB|Y?vjhxw@k{t~ba(wh>a{;?hZ^aj4VM{;hw z>yY``*}pzw6>VU|qvQEb|Iw%Nqs)xpRBEOikyVOow6Fd#;zX#d*?vV*}G(SiT>_)ogY`$vvV~@XNpQW zLn>3qge~8X7l=p*St=IwEbBfwGh@lK7HnDl$F&T;PkpBuZ$MeFA(J}tobIHUsK&|3 zj$9cNb(uo7#P!Qk)W+Ef@c(tznGfPfHz*=S9AKmU=I6J#mcBE@qese@dt`OVFt9w@~hzyQ9n#P z`j2=lkndB8Q}}G@s$j#%qY}7QN3`9bb?`GWHy{v7$HPhO`N9pkJ{kTr!x5YlIle0!s9;-*+LIQA~Y^%5+mPOO-0s@+Y zt>3lQ#~Vv^%8hiB@0!`Io|x#Bn_Tk<6ukCLB}XNRThLl4*4kG zk!M{x2}I5+i?~cNd7=XNF)jP8ANoRp{2)DEvF-0cpL4_M`H1yS>@>*w48rtn|Mi!s zcDM`+MCPRtzyC!!*5Nu+QX1(+(7yHbkl;#jP&n`6D>KDDfo^=#WI6KlB(L#uDZfk# zbig+7@#Du+)(_QRt(v%v7Kbda%|r4YXNm)1aY=$`G{4oymPVk4B%=e>GV_-kH)Y97MUCh4O!^sHaFI6{vYFA?WD`p_9lL+4GKd=fs|X7NVd7EX?`x8I%HbhW~l@v}=v zG`D;=aHYG`y0pTJ;xhxlaS<|w~Ha)ddNq@EepPj`z81r zNlkZHy@krkjU1^u4+dX6XaRV#jeI4h!to^EN2@AAuIPGQ;_uH-wb<*xnbR58_6A|A z;-T_7;9w_wcPcO90d0QpZ4F5w_1mKM*YBx^#G66Fs3 zb6h`rkY-BDg_-($Kgpa-t55s#v6Qd%^M$T3lPP}fv!%yE-c94B`a}GPlyO2g4?moV zUn8huxJGF~= z?LC{GYGR(%p0sFi<;gSW#8i5V`$lr4Gn%c(nydkt{fF)w7YfUM!^oV(PHgx|L_aU_eC;!zn{%Usab}7S-;7I(V-{Kfu@*J(gqhodOtxM3s{18n0%VLQp~jA2 zF%2c9*!gZ;f`)W}xzG0d?pC|O^AxFB`NlOa&Ip+G7zb@bDZ0#(gua$@I7<;9A0zE2 zYM0R?o0CT}ppGF@NFTa_qw=gF$J3luAIHHb51@`&se%JALnSbiNsC?Xc#&DhVc!M$I$igIV^vZ_*hcahfsRv%BIV*dV6X zvK`+U-8MF6Rwc!ZzPYY#UNbl$xZs)Drm`glcxzgF%vXDU6Zg|q#7RWswcd3^J0q>W z9x`qbwT5IsnS~m8Bl<_t&`0+W&wL&n%d@{`&XRgH&0m_+#SmMn*NlfQ3fB_E13b7cA_J#V-W!)Uev&nmYMO2 z7br0)X?>kTXRqeorANO63sN<#jq)rfJ~&A z_h)$cdoF7iPSqUeh&p$n>o~K=!r!uv6&}?WO$d?)KfBD9`ZS`LAMS8=`<~k~^Nv{0 z!Fq2aRI_`hZq+VgWt&C2u+;(F?PSm335`+2Vf+U&i<#mQ6WI>zEa~SVM0Nkwp6*Kp zugDErPjVHv{7%kr_Pk!{a}pmVBp5T1oqKoVevP6=<4TANNlO1{=U6oNgGVA9H+_kE_oh9XCGDOMWa@Yh> z>8gYfdmd44*Y2B{F35TE-4etGG?P!SD#WM`(y~0pL_;)gF^SHDnvb@0Xy zj;&exSwSo6U_OaD4H*L0y*RVTMu~?cr)qglEFkz^-oN#rjVecKGM_0JZ~<;rp1J_P z0Ok~0EA|g9G+ zoKH|ADYvmxg$p}A(#OnCw9dfBj2Rn^-aa)l)#stSTN*Ms(w0-m-}=4(@mLVKT1@R= z&KZV-`C%Dy6~xzDdm*(#lEnUm$D?qE98mIlk9znK#r-z;hD@RD`XW4g_PjFF)%>jWbxSkxkCf9^AX5bD?FNhu7*S0dwo^9!Vh2n^6bMa zVw-NXcP4PLkG2F4&el@qeV^uJq~caogdgvEW)#X4G0rS0Ww;C%RYJ%o_O@m*t)4-L z5+y18-zEq9WzMNE<$R={xm>+>{5=paDxX|uy=Nm~$_Qiz2=7xUGLCgeZ?J}lmKmcS zJIr{=5a)+w+eMryYW8O`17?7G-abpZOsqE!7|Md(JYV#q(wThd-}%dkt?ay(tswzv zzucQ2MhvX4TSST%S#tW$45{91w&&bwUcaVJdeo1ZYK%d3%0)*&zFF+ z#`smpwR0xGQDb`P`o(jnhmYLD3nUeQoZvf8_U}I^aFOZo2zj z9{N8Xg_t(^ud{G0yoEq9q+{|Fx@`0b*-1C z&SiR$?Gb#?Z{2@A(2oL1iSp!!aqpo9<7#T|iS=SDW*gi~Ol`i#cwXjh=Jc(XfZN7k zj&>^6bJb7YJ_xa^MHO{`>6od_JkrR;#|hJL-;|?PS;+l`%h@4%aqT?R3yy&RYp8Mkq-l82 zvyPcs{L%Wk5~2oc6u@FLNVpIiXW{*xSZMP=t?od&@PKd<|91&D4)Vl_2N(_t;pNqp z8K*(|T(8fO?7@cS5Wc?TLpHF7r}I!sFjBjC8BF= z(rXNaoQEdKzJ{Lo@H)g!UDkNmyy0zHtzieewQl{1#%Lzp+=bTGU<)82zlQRnMptMTCcRDcz7i9TnjhR-#@;H; zQCzOB!Zt(sRrvs6zC!K{8nvb!v!~Jg=iuQOdKcv6$E?qam<siXNO&(E9%ki1?*nYhr3ih{TSggl88yhLcg%Hf@0n2_@tZ_{r31Uqd#WtTvaqx}& zi+7{a93X9`!1-s|99V&?QO6ZB0BDL)1ch|AuZS~Ya8=j$oAlPaO|LO74!a%%p&>{U zylAIRyUo1e?5D0Ru+0if)HotFJgcb2es82dH&cuDEPkg{3Tzy2zIxS$z05p|&cYM` zE7bN=uO$&dylFU|$MZ|Khu_xT7j)beITjk&Q?niF5I+C%MhcF)(#CcF-K859p>!Na z2gz)V)|Jxw&a3YIlSc{HczK)epRE%NT^l0&EJB66xkyTz(5Nl+b&n@&nrs#vIOI{q zM8+oM{VaJuw59}`Q@!dH)&-va5uLkTpq|KA7pJ(bN*kyVJz)gl~G}E4n(nlLN!AFE!Oo+taP!`0DU@f3LGpenI9 z;P)NM!i?n>!|=}*PgaKw4wDt5HED@q>v!QB*gle2$2zbZ&Q?;+0I(1@0pS+~Kv&NgP?OvT@zN_LI9C|I2A zp8R~HOb`n#EF(5v#&fSX#241+oJ}4uXhn(W)E`XjF;*Xc^gtAxlt|w@@L*qei6z0| zAy}sqkuNDNwR~UaLeBx6xGjHdJ8*+vj)}v_hSW-D%rO8+2hFALO_k^6sAYxdxqKe9o9APcc4bDcGG$qtnxN5j4R^;| zs?zVue^JxNr4@ulQ5m=^aML;ZqJ6b(t{zOIoaQ=%dc(1~fVRH=6bSv>d$tpcwuSCz zgZ{);YsYMTC)67z(g4Zn2=7<(8urbq*r>|+$#CK0%;9;$&2Mn-s-NZ-BX9ukhsRFuXO0nj7bNaKM_iaP$lP*M0+&(*or$5mZT z4;wt(M~kiEIZsStIe*wD={X?^9P2!fzq^j?$l7y{RPpMDbMYybVt#QnEo8$Jpd+NDPs@{$_+m|n5@M5sYDhkxk1>V=~ctDp_j z47s7+D#puP3tSxD3fv6?+bwP(bu0t0WAh%oy(y?nLVRcf`rGCK%Yc0oyr6zhcjsnZ z?+|nfmT;{u03wm#{8BpQF0MwNW+Y)aoqe)o>Qq&^)>s>>*xaPvOoZAP%wfM*LHZ;r zE?#uI1NY$ZVz!Y>*Mz{7P&|Vhj}r)e0po0lW3j&OO4|aUQ#;%0Tnx<5Au8#`P&7{9!zQDI#cvde{>p#|UZ|TitvSyX>y(+OLe4 zma{s#8U4E|O6wycTz1yj7v02a+BNLg*~0wa+`4|#c*)uBKwApUr{?GgpMbR$z$edv z3~a&WcjMZ)4AV^Znh_>wPW~w6AL6L)dI{!&+(}lV@qUhf_{wbf=qOsxx-gv1`P*^I z6CJMcJVC+ZCfT*UkmVCsp*fb`ed~>?Ec2HuNDMgvzUO&n5xUz&3bc* zzlP?Yd&Eo%Z0hB!#*V7bLqA+*Ak_y?e&c`e9hg|14bB^c-Z7MYlZLSD$Oxu41UUJ} zkcry;@bOM`V!i2(IcDs`_%(@DQN-cR zjf)$-7mtimcoVho<)x;T8yLRB7jB_a{g}4u`=6q!%TrluoX0G(E}es0Y%J`vmKBds zYo5R*v5867R-m}{`8#4MzQjX);@{W((REKHhYP%C+G1pBRzKS9^X!&qd%jO1sz2Ga z&`p?p*?-Jna3(^{Bahz-3-UW|Z}p1)E+h{K=#KY1*D$loW;_H1d$mM7Fq@$t+vy}e znV4rU*1rui(B|PT8o0%x?ht2+^x}u|#8m8=);3!0{-IN@yi<12#Wi~#2ZWMjL+H}C z)so~yPJJ@A_l-@c>KYM*c~Q5Po?SiU4kY(U(aO>RY}NAnK}M`f)9mBwgO%!@?V#mi zO@9F6u1WquXkvR06ovV#(ac@S6cPRq67CvJL*VNa9?0R?asvIjO0Vb0_0I(KBNh>} zk?spIPp3)K|F~36rlMO$qDB?~@%ANh6R|NrgRFc*q99przFu!e@+yl&pe@8g#eZ^t z<>IiuXQ}YP+?A@Wbz7wVut(eDAUo8v7z}lGNDpRL>^C zkL7k8F5R&`zk0Dt=zfG!^2w|oMyFR;=|@RkVX@g_vZ(paYtMw|vK5wNbGw0*%b1QE zp&)#eoCfgh3s>rf6o!~i?TrGbx3;dooow(b3ykjaA*&dHMYAaCdC_%MWY;4{HQkSP zcyGRLmcC?pVnT0!JAH3rUycEc&En*Eys!{!L#48M)^l~s%(-6m3XX>q=~P``I#}?Q zrK?yBO{LPaT%4Jh8F(L{ier^But6&L00fT@8ziLq^*>1+3Dl5w?{s^GE87Z53x7a}C6^ttK1)lTfUz-6gGQ;E0ZvTEt}=>)HPB^CdtxqrMDg6c4vt}rH`Sr z%#e)low^$}8#xIHS4ZI{rOVWUqi97nPs@gXK&kNj=ab6oGVjD2@w}fUxvIwTO&M&r z`aNAB`|RDk8e2!M81Gjo((SBLKej zC||MWIF4h!f}#s8aD8Bd2pU|imeBf_GrFY71! zVhYvsX^mO%aq*Lq4${C`JCj*;_zxTb(!Mbr?%q__oqDEI1yf*?8}|ELDg#K z#zLO$V0_8(PX>s3J2-emH>_p<06GG>-bJjr21;T}Nj&7{tui_F@OV&4N@WQLQhAGM z+D*p4rWF__ze|+y4>Pd>c>~Ik_XK><{D{}O5EToomx)YwpdmJs`b|vSQojlt0u&z7 z6;8a)Js=@S$EiBDf33)Bkr1c-0yNh=U3_DTD}t0sZ@qoKC0kryKM7TG=ri2dUHg5E zV;+RMR`BD#q00N@d;ar}YaFpCG1rv`7SFzHxf`2#1@J!qI1|9Z9hslc8Lxpj6i4GD z%vILfEec-5|M zU=fR%!d-;#(QBJKUi8PX&ei|U2Jn}WI<1}?Yv_QHaCc$|5 zXCPnx_+*mgw(Z0t2(r**Nzv^fC1kfcThUP)vpxZas&_K4}9ntwF{YGNCBs% z18X{gi6Jw^Ri`zXoSZb}&OZAveGWy}-B`({GC>0%A=MXu=NyUm<0{36pOn8nxm?zE zVDYZ-0d9{gxr|VKSY0(A?AOxZgoS>mlMoccWmuERvR`(I$5JnpM+bRmnL1>wAJrvrHJeDT9*R zrE}q-Q%>~7G=&LQ$mLx18jkrNeMcyZUU7FL#=|YXo+2i?cQ-BC;cj-ibAm0N_Rjc) zt;rv^a$Q`WU@i@eZd;Ea58LZKj$HQVqd%n8kx}wt^Risd%xlx-;@Ic_lPZ#t<6L`` zxqWAUX!{}r{p=;!w3e280wr2DfX@*0<=8O_BK&nn^dTK?|9Pf3@jAv(L7B1G-lJSX z4U_pmip{~rvYg+xwD56?3T@H^s2rBZ6kTW$vL26*gT5TB*mv+r_+32T z66Qq(E4yE6I#6!mWM-6fzSIiCuQnAOYw^KX+M^+KTZc31i=n&jQY!yYDCxLA;2Z;W z0yJC!I2N-&&o+aT_<+vMul9}^X#t%Z5#hJgwghQ11k&bR5TFPa+-SLS4UJTFjTvm> zX^U2Ud-7pWiVLUwbK|q09;nO)STsQcPicNabxOhYm?^#Wn~HAatJnXHjq{%vIv~TB zzMTE_d+TMD)mvE|~r3W%Nws+hD?^^^GV88?h7q56-KLYil3& zgA$pF{vv(iAFym1WB4`i}48e={Nr!;bJJnFVh|SB=tgRX4!;K zM%+sKekt9rzT}K|%oTvcvXBr#eE%}8zcUk3P8C7-F`!JGivNFwixsEnAdfkPKgpZ` z^Rv6Te?9@yVzA_7;l;l^UoY`D1o8uQmiMEGi)ZkWe&W}NepN5TQ!MeXhXx0`y>Ukq z;*?`98~*w+6<)HqljoXURIlTd)6wb&{tw0^=8t3}=yhnf705Fav&!Ki4ZYdA_xmx9jTL7)-_10vxpc&awo?Yr{A0Zc=IRThIAa4#bJ;dOGWC5cvsY+ z=jPb^0vDDuD(Yq_{F8bAbWSS$_`++UL+NRN{rMagfc_uuTf5A5-_oi) zWq{pQCb|%1{4MsGLb^<_iIGm68x#YH6tzcatFZ4$s(J-fa+tsu&w)r>KixE@f{PRUnorS>fQOll?LayYsU*)m^19FWj`>83^%HD% zevvRiw=9}i*B5+mc3j;elySdz_RC3jXAGvx`42BB%n{JK0SQL9c`|WrBq­ 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 literal 0 HcmV?d00001 diff --git a/media/ticdc/ticdc-summary-monitor-server.png b/media/ticdc/ticdc-summary-monitor-server.png new file mode 100644 index 0000000000000000000000000000000000000000..b28f788b6e227e2f33632cf523d2a33bba4ee79f GIT binary patch literal 102710 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 ffR{~%(J-gIVrtvM5&8xdp@8rBnnAo5 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%0DRsmgkj&RLz$Z$&e-8qq04 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 literal 0 HcmV?d00001 diff --git a/media/ticdc/ticdc-summary-monitor-transaction-sink.png b/media/ticdc/ticdc-summary-monitor-transaction-sink.png new file mode 100644 index 0000000000000000000000000000000000000000..c6c9ceb8d5fa9a685f6eeda837d9ff9f051bccd0 GIT binary patch literal 140171 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%0A=lXK5!8*yiAl$&1&DkvzZd79$pcHF5_c{oYL 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 $!d- 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

a!Fro9?*{FoiB{Xe8ka>?AC&|LcO&@v% z2F3~5cV9TlbK)!oRO{(f)Xg@yC+A@!jvcsrMbcrF*pYGBYEdr*u{6^UikGoqbo8OW8m1Ye7)zZ9|ZjluN7|Kb)ypiAtWA@$X>)HO&X|`9~}F z7wM(qbB)W^<&q}92Qe+AyQF>(SP+GxBFx0YToMG{$mW-W4iW=?q$CE)23QK)q134B z*VDHG-~fR*PcHL(1(=fX&1JnSV@`@b&Dp=M(2u)Q_`DjvwWpow3Z(&IfMrXM>pa=3 zS#f!Nh)!+zKuL*hiBrTBx{eBTI9I8Z+(&yk>gQX>l1$F2P?eRZuhJ}t zE24_{-+tsHNRcXu>#cgvZr>OnWX+wEk*P%~Fk%+@eTOO`tId3un(;B{? zjs5~+*L4uSIo2Gr=CS(W!^Y(mjA;b8xLL9*32%+TH9w<;vj&lsi{$|N$4Y3 za8BA}PO^KXXpMwB5tpxA8>_p!nR`yu`^Zj5b(6G(e9lJ8{@ zoeaigrG_q$QjHDsuRl&mlJkfGI^X!w4okJ>ehI5LZDSl-?vbjY${(@It8zYzp_+PL zpZg`o9YC zZaPc6p@h43e-b$qozIpwwYLz zq_bKK>LXmX8Q#V5zMFJXE35LpFgAbhT%PoxU390AZEa{ zpjKcc3xDpPXX_~Y!?j{Lzt88fGKE` zsP_2URfav1>N(#(gHykAl}S$`qRBK0)s$lpEe(NGx*@TaX!P?kPoDV}IB=lW-+1Zs zyJnJ{rKbHOh;1k0P9MvOm-G$fE1-IiEhUKRn0jQwZhJe+Y3Jyc)80_3MK=)3{Bbce+7TtzsM3TF6`Aedj)>#>uExL^F z1QR)|zsnMOCEw|gG=YPHY_rR_rL5&)%+#yBZ0UKuw-Z&~KLpyOI>gPvZ&SAv3 zYhR05;&jtl|PmQ<9zL`Im>u+2?JyI}@ z1?c$SYrXszKlDzIJgfd_`2Vigs*(drrMkLuEh)MU?QnNi5jl!^1Jo;c5k?hWEz#T0 z_pZPIRY9@dZruac;&mpH&LZ&f3-qRh(RVxj(!vXeL4;9K(Gxlspsqov=tJ}%GOfkC zcgkQ$2`b|)f#YJvcWQ>rb@&n$y`~dOZgr#P0yZiJ4?k4i;qL$nIM1@xE+$3Z3!>Ox zJY_Z$H_h6+)B6L;dQex3j+lJ9FxLwW7&HL00}2;LhMo|=rK0k79}^REwDqQ$)y3_# zZAO?q2Aoj3Rea-GzwPAHL+`+oId>|$i<5O$GUpw9RP}ct3rUY3S;2sj-7F7vqT~BY z&woy-aTmGeNB#DhRVs~15?Bj-WS!%{Qq|zei&12_qPoBiOS@Q!N%9-F-zkGH56s1z zc?#(KJa1Ztz{jUO`*s*IYgqL>`E#APn)e*yz|bKh&qY^O*4AX1hYA`2;Y*@2Na<|X z9^Na}kz$6PI%9%5k&jS(u|hJm^;d5DxBr#79D&6$Ar;=ggH|L6eUVll9cH&x1nLa< z#;%6#cwm|gQx8~=qHy&l&xyGDWOdSzdFQdj7Z`2(n-&-aaoFEy%K!W<0bqfV2rw@$ z{_Y5=*t2_r{Ag*1rLs-n^H20?u@4+4TqEaQ!+(D81Sl<(;B*!8^Z$FpLB?7CuU4%c zcH{1S9b(|@BtLQZ=MlC?0JeGPh$G;@wtA9PtGLr%+<6Yt4Id3VlrrzQ!FHYl!P5u9 zv3pP}1aW<*-MQo7TUc;AxpU$a-q_1vrXgZ>v? CRiYLE literal 0 HcmV?d00001 diff --git a/media/ticdc/ticdc-summary-monitor.png b/media/ticdc/ticdc-summary-monitor.png new file mode 100644 index 0000000000000000000000000000000000000000..9c255b6e711f48df521c6ecea83f3ac077850c00 GIT binary patch literal 86999 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 literal 0 HcmV?d00001 diff --git a/ticdc/monitor-ticdc.md b/ticdc/monitor-ticdc.md index e88f53b3dd62..503a89e2eba7 100644 --- a/ticdc/monitor-ticdc.md +++ b/ticdc/monitor-ticdc.md @@ -1,10 +1,10 @@ --- -title: TiCDC 重要监控指标详解 -summary: 了解 TiCDC 重要的监控指标。 +title: TiCDC 详细监控指标 +summary: 了解 TiCDC 详细的监控指标。 aliases: ['/zh/tidb/dev/ticdc-grafana-dashboard'] --- -# TiCDC 重要监控指标详解 +# TiCDC 详细监控指标 使用 TiUP 部署 TiDB 集群时,一键部署的监控系统面板包含 TiCDC 面板。本文档对 TiCDC 监控面板上的各项指标进行详细说明。在日常运维中,运维人员可通过观察 TiCDC 面板上的指标了解 TiCDC 当前的状态。 diff --git a/ticdc/ticdc-summary-monitor.md b/ticdc/ticdc-summary-monitor.md new file mode 100644 index 000000000000..8f3b9acf8fd5 --- /dev/null +++ b/ticdc/ticdc-summary-monitor.md @@ -0,0 +1,101 @@ +--- +title: TiCDC 基本监控指标 +summary: 了解 TiCDC 基本的监控指标。 +--- + +# TiCDC 基本监控指标 + +从 v7.0.0 版本开始,使用 TiUP 一键部署 Grafana 时,会自动在 Grafana 监控页面新增 TiCDC Summary Dashboard。通过该监控面板,你可以快速地了解 TiCDC 服务器运行状态和同步任务的基本情况。 + +下图显示了 TiCDC Dashboard 的监控栏: + +![TiCDC Summary Dashboard - Overview](/media/ticdc/ticdc-summary-monitor.png) + +各监控栏说明如下: + +- Server:集群中 TiCDC 节点的概要信息 +- Changefeed:TiCDC 同步任务延迟和状态信息 +- Dataflow:TiCDC 内部各个模块处理数据改变的各种统计信息 +- Transaction Sink:下游为 MySQL 或者 TiDB 时的写延迟信息 +- MQ Sink: 下游为 MQ 系统时的写延迟信息 +- Cloud Storage Sink:下游为 Cloud Storage 时的写速率信息 +- Redo:开启 Redo 功能时的写延迟信息 + +## Server 监控栏 + +Server 监控栏示例如下: + +![TiCDC Summary Dashboard - Server metrics](/media/ticdc/ticdc-summary-monitor-server.png) + +- Uptime:TiCDC 节点已经运行的时间。 +- CPU usage:TiCDC 节点的 CPU 使用量。 +- Memory usage:TiCDC 节点的内存使用量。 + +## Changefeed 监控栏 + +Changefeed 监控栏示例如下: + +![TiCDC Summary Dashboard - Changefeed metrics](/media/ticdc/ticdc-summary-monitor-changefeed.png) + +- Changefeed checkpoint lag:这个指标代表上游 TiDB 集群和下游系统之间的数据复制延迟,延迟以时间为单位。该指标反映了 Changefeed 整体的数据同步状况是否健康,通常情况下,lag 越小,说明同步任务状态越好。而当 lag 上升时,通常说明 Changefeed 的同步能力或者下游系统的消费能力无法匹配上游的写入速度。 +- Changefeed resolved ts lag:这个指标代表了上游 TiDB 集群与 TiCDC 节点之间的数据延迟,延迟以时间为单位。该指标能够反映 Changefeed 拉取上游数据变更的能力,当 lag 上升时,说明 Changefeed 无法及时地拉取上游产生的数据变更。 + +## Dataflow 监控栏 + +![TiCDC Summary Dashboard - Puller metrics](/media/ticdc/ticdc-summary-monitor-dataflow-puller.png) + +- Puller output events/s:TiCDC 节点中 Puller 模块每秒输出到 Sorter 模块的数据变更个数。该指标能够反映 TiCDC 拉取上游变更事件的速度。 +- Puller output events:TiCDC 节点中 Puller 模块输出到 Sorter 模块的数据变更总数。 + +![TiCDC Summary Dashboard - Sorter metrics](/media/ticdc/ticdc-summary-monitor-dataflow-sorter.png) + +- Sorter output events/s:TiCDC 节点中 Sorter 模块每秒输出到 Sink 模块的数据变更个数。值得注意的是,Sorter 的数据输出速率会受到 Sink 模块的影响,因此在发现 Sorter 模块输出速率比 Puller 模块低时,不一定是因为 Sorter 模块排序速度过慢;而应该先观察 Sink 模块的相关指标,确认是否是因为 Sink 模块 Flush 数据的耗时较长,导致 Sorter 模块输出降低。 +- Sorter output event:TiCDC 节点中 Sorter 模块输出到 Sink 模块的数据变更总个数。 + +![TiCDC Summary Dashboard - Mounter metrics](/media/ticdc/ticdc-summary-monitor-dataflow-mounter.png) + +- Mounter output events/s:TiCDC 节点中 Mounter 模块每秒解码的数据变更的个数。当上游发生的数据变更包含较多字段时,Mounter 的解码速度可能会受到影响。 +- Mounter output event:TiCDC 节点中 Mounter 模块解码的数据变更的总个数。 + +![TiCDC Summary Dashboard - Sink metrics](/media/ticdc/ticdc-summary-monitor-dataflow-sink.png) + +- Sink flush rows/s:TiCDC 节点中 Sink 模块每秒往下游输出的数据变更个数。该指标反映的是同步任务向下游进行同步的速率,当 Sink flush rows/s 小于 Puller output events/s 时,同步延迟可能会上升。 +- Sink flush rows:TiCDC 节点中 Sink 模块输出的数据变更的总个数。 + +## Transaction Sink 监控栏 + +Transaction Sink 监控栏示意如下,该监控栏只有下游为 MySQL 或者 TiDB 时才有数据。 + +![TiCDC Summary Dashboard - Transaction Sink metrics](/media/ticdc/ticdc-summary-monitor-transaction-sink.png) + +- Backend Flush Duration:TiCDC Transaction Sink 模块在向下游执行一条 SQL 语句的耗时。通过观察该指标,能够判断下游的性能是否为同步速度的瓶颈。一般来说,p999 应该维持在 500 ms 内为佳,超过该值时,同步速度可能就会受到影响,引起 Changefeed checkpoint lag 上升。 +- Full Flush Duration:TiCDC 中每个事务从 Sorter 排序完成直到发送到下游之间的总耗时。用该值减去 Backend Flush Duration 的值,即可得出一个事务在被执行到下游之前的总排队时长。如果排队时长较高,可以考虑给同步任务分配更多的内存 Quota。 + +## MQ Sink 监控栏 + +MQ Sink 监控栏示意如下,该监控栏只有下游为 Kafka 时才有数据。 + +![TiCDC Summary Dashboard - Transaction Sink metrics](/media/ticdc/ticdc-summary-monitor-mq-sink.png) + +- Worker Send Message Duration Percentile:TiCDC MQ Sink 的 Worker 往下游发送数据的延迟。 +- Kafka Ongoing Bytes:TiCDC MQ Sink 往下游发送数据的速率。 + +## Cloud Storage Sink 监控栏 + +Cloud Storage Sink 监控栏示意如下,该监控栏只有下游为 Cloud Storage 时才有数据。 + +![TiCDC Summary Dashboard - Transaction Sink metrics](/media/ticdc/ticdc-summary-monitor-cloud-storage.png) + +- Write Bytes/s:Cloud Storage Sink 模块往下游写数据的速率。 +- File Count:Cloud Storage Sink 模块写文件的总数量。 + +## Redo 监控栏 + +Redo 监控栏示意如下,该监控栏只有在开启了 Redo Log 功能时才有数据。 + +![TiCDC Summary Dashboard - Transaction Sink metrics](/media/ticdc/ticdc-summary-monitor-redo.png) + +- Redo Write rows/s:Redo 模块每秒写数据的行数。当开启 Redo 功能时,如果发现同步任务的延迟上升,那么可以观察该指标是否和 Puller Output event/s 的值有较大差距。如果是,那么可能是由于 Redo 模块的写入能力不足造成延迟上升。 +- Redo Write Byte/s:Redo 模块每秒写数据的速率。 +- Redo flush log duration:Redo 模块往下游刷写数据的耗时。若该指标值较高,则可能是它影响了同步的速度。 +- Redo flushall duration:数据变更停留在 Redo 模块中的总时长。 \ No newline at end of file From 82f51062c5a4a9bd9fc2cbc1ba6a1106b89ad9e1 Mon Sep 17 00:00:00 2001 From: ShuNing Date: Fri, 14 Apr 2023 17:48:47 +0800 Subject: [PATCH 018/257] resource-control: add the error number comments (#13658) --- error-codes.md | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/error-codes.md b/error-codes.md index d61aaf6f9df6..f81a86272063 100644 --- a/error-codes.md +++ b/error-codes.md @@ -401,6 +401,34 @@ TiDB 兼容 MySQL 的错误码,在大多数情况下,返回和 MySQL 一样 TiDB 目前不支持在新添加的列上使用 Sequence 作为默认值,如果尝试进行这类操作会返回该错误。 +* Error Number: 8248 + + 资源组已存在。在重复创建资源组时返回该错误。 + +* Error Number: 8249 + + 资源组不存在。在修改或绑定不存在的资源组时返回该错误。请参考[创建资源组](/tidb-resource-control.md#创建资源组)。 + +* Error Number: 8250 + + 完整的报错信息如下: + + `ERROR 8250 (HY000) : Resource control feature is disabled. Run "SET GLOBAL tidb_enable_resource_control='on'" to enable the feature` + + 资源控制的功能没有打开时,使用资源管控 (Resource Control) 相关功能会返回该错误。你可以开启全局变量 [`tidb_enable_resource_control`](/system-variables.md#tidb_enable_resource_control-从-v660-版本开始引入) 启用资源管控。 + +* Error Number: 8251 + + `Resource Control` 组件在 TiDB 启动时进行初始化,相关配置会从 `Resource Control` 的服务端 `Resource Manager` 上获取,如果此过程中出错,则会返回此错误。 + +* Error Number: 8252 + + 完整的报错信息如下: + + `ERROR 8252 (HY000) : Exceeded resource group quota limitation` + + 在尝试消耗超过资源组的限制时返回该错误。一般出现该错误,是由于单次事务太大或者并发太多导致,需调整事务大小或减少客户端并发数。 + * Error Number: 9001 完整的报错信息为 `ERROR 9001 (HY000) : PD Server Timeout`。 From a4c504b9524f5b0ee24bf1aaae49cbaf544011a6 Mon Sep 17 00:00:00 2001 From: Ran Date: Mon, 17 Apr 2023 17:33:18 +0800 Subject: [PATCH 019/257] *: adjust tool order in toc and learning path (#13698) --- TOC.md | 158 ++++++++++++++++++++++----------------------- _index.md | 16 ++--- migration-tools.md | 30 ++++----- 3 files changed, 101 insertions(+), 103 deletions(-) diff --git a/TOC.md b/TOC.md index 99eafc4963a2..1168f05a61fb 100644 --- a/TOC.md +++ b/TOC.md @@ -383,51 +383,7 @@ - [tiup-cluster 部署运维生产集群](/tiup/tiup-cluster.md) - [tiup-mirror 定制离线镜像](/tiup/tiup-mirror.md) - [tiup-bench 进行 TPCC/TPCH 压力测试](/tiup/tiup-bench.md) - - PingCAP Clinic 诊断服务 - - [概述](/clinic/clinic-introduction.md) - - [快速上手](/clinic/quick-start-with-clinic.md) - - [使用 PingCAP Clinic 诊断集群](/clinic/clinic-user-guide-for-tiup.md) - - [使用 PingCAP Clinic 生成诊断报告](/clinic/clinic-report.md) - - [采集 SQL 查询计划信息](/clinic/clinic-collect-sql-query-plan.md) - - [数据采集说明](/clinic/clinic-data-instruction-for-tiup.md) - [TiDB Operator](/tidb-operator-overview.md) - - [Dumpling](/dumpling-overview.md) - - TiDB Lightning - - [概述](/tidb-lightning/tidb-lightning-overview.md) - - [快速上手](/get-started-with-tidb-lightning.md) - - [部署 TiDB Lightning](/tidb-lightning/deploy-tidb-lightning.md) - - [目标数据库要求](/tidb-lightning/tidb-lightning-requirements.md) - - 数据源 - - [文件匹配规则](/tidb-lightning/tidb-lightning-data-source.md) - - [CSV](/tidb-lightning/tidb-lightning-data-source.md#csv) - - [SQL](/tidb-lightning/tidb-lightning-data-source.md#sql) - - [Parquet](/tidb-lightning/tidb-lightning-data-source.md#parquet) - - [自定义文件匹配](/tidb-lightning/tidb-lightning-data-source.md#自定义文件匹配) - - Physical Import Mode - - [概述](/tidb-lightning/tidb-lightning-physical-import-mode.md) - - [必要条件及限制](/tidb-lightning/tidb-lightning-physical-import-mode.md#必要条件及限制) - - [配置及使用](/tidb-lightning/tidb-lightning-physical-import-mode-usage.md) - - [冲突检测](/tidb-lightning/tidb-lightning-physical-import-mode-usage.md#冲突数据检测) - - [性能调优](/tidb-lightning/tidb-lightning-physical-import-mode-usage.md#性能调优) - - Logical Import Mode - - [概述](/tidb-lightning/tidb-lightning-logical-import-mode.md) - - [必要条件及限制](/tidb-lightning/tidb-lightning-logical-import-mode.md#必要条件) - - [配置及使用](/tidb-lightning/tidb-lightning-logical-import-mode-usage.md) - - [冲突检测](/tidb-lightning/tidb-lightning-logical-import-mode-usage.md#冲突数据检测) - - [性能调优](/tidb-lightning/tidb-lightning-logical-import-mode-usage.md#性能调优) - - [前置检查](/tidb-lightning/tidb-lightning-prechecks.md) - - [表库过滤](/table-filter.md) - - [断点续传](/tidb-lightning/tidb-lightning-checkpoints.md) - - [并行导入](/tidb-lightning/tidb-lightning-distributed-import.md) - - [可容忍错误](/tidb-lightning/tidb-lightning-error-resolution.md) - - [故障处理](/tidb-lightning/troubleshoot-tidb-lightning.md) - - 参考手册 - - [完整配置文件](/tidb-lightning/tidb-lightning-configuration.md) - - [命令行参数](/tidb-lightning/tidb-lightning-command-line-full.md) - - [监控告警](/tidb-lightning/monitor-tidb-lightning.md) - - [Web 界面](/tidb-lightning/tidb-lightning-web-interface.md) - - [FAQ](/tidb-lightning/tidb-lightning-faq.md) - - [术语表](/tidb-lightning/tidb-lightning-glossary.md) - TiDB Data Migration - [关于 Data Migration](/dm/dm-overview.md) - [架构简介](/dm/dm-arch.md) @@ -486,33 +442,33 @@ - [导出和导入集群的数据源和任务配置](/dm/dm-export-import-config.md) - [处理告警](/dm/dm-handle-alerts.md) - [日常巡检](/dm/dm-daily-check.md) - - 参考手册 - - 架构组件 - - [DM-worker 说明](/dm/dm-worker-intro.md) - - [安全模式](/dm/dm-safe-mode.md) - - [Relay Log](/dm/relay-log.md) - - [DDL 特殊处理说明](/dm/dm-ddl-compatible.md) - - 运行机制 - - [DML 同步机制](/dm/dm-dml-replication-logic.md) - - 命令行 - - [DM-master & DM-worker](/dm/dm-command-line-flags.md) - - 配置文件 - - [概述](/dm/dm-config-overview.md) - - [数据源配置](/dm/dm-source-configuration-file.md) - - [迁移任务配置](/dm/task-configuration-file-full.md) - - [DM-master 配置](/dm/dm-master-configuration-file.md) - - [DM-worker 配置](/dm/dm-worker-configuration-file.md) - - [Table Selector](/dm/table-selector.md) - - [OpenAPI](/dm/dm-open-api.md) - - [兼容性目录](/dm/dm-compatibility-catalog.md) - - 安全 - - [为 DM 的连接开启加密传输](/dm/dm-enable-tls.md) - - [生成自签名证书](/dm/dm-generate-self-signed-certificates.md) - - 监控告警 - - [监控指标](/dm/monitor-a-dm-cluster.md) - - [告警信息](/dm/dm-alert-rules.md) - - [错误码](/dm/dm-error-handling.md#常见故障处理方法) - - [术语表](/dm/dm-glossary.md) + - 参考手册 + - 架构组件 + - [DM-worker 说明](/dm/dm-worker-intro.md) + - [安全模式](/dm/dm-safe-mode.md) + - [Relay Log](/dm/relay-log.md) + - [DDL 特殊处理说明](/dm/dm-ddl-compatible.md) + - 运行机制 + - [DML 同步机制](/dm/dm-dml-replication-logic.md) + - 命令行 + - [DM-master & DM-worker](/dm/dm-command-line-flags.md) + - 配置文件 + - [概述](/dm/dm-config-overview.md) + - [数据源配置](/dm/dm-source-configuration-file.md) + - [迁移任务配置](/dm/task-configuration-file-full.md) + - [DM-master 配置](/dm/dm-master-configuration-file.md) + - [DM-worker 配置](/dm/dm-worker-configuration-file.md) + - [Table Selector](/dm/table-selector.md) + - [OpenAPI](/dm/dm-open-api.md) + - [兼容性目录](/dm/dm-compatibility-catalog.md) + - 安全 + - [为 DM 的连接开启加密传输](/dm/dm-enable-tls.md) + - [生成自签名证书](/dm/dm-generate-self-signed-certificates.md) + - 监控告警 + - [监控指标](/dm/monitor-a-dm-cluster.md) + - [告警信息](/dm/dm-alert-rules.md) + - [错误码](/dm/dm-error-handling.md#常见故障处理方法) + - [术语表](/dm/dm-glossary.md) - 使用示例 - [使用 DM 迁移数据](/dm/migrate-data-using-dm.md) - [快速创建迁移任务](/dm/quick-start-create-task.md) @@ -521,6 +477,43 @@ - [常见问题](/dm/dm-faq.md) - [错误处理及恢复](/dm/dm-error-handling.md) - [版本发布历史](/dm/dm-release-notes.md) + - TiDB Lightning + - [概述](/tidb-lightning/tidb-lightning-overview.md) + - [快速上手](/get-started-with-tidb-lightning.md) + - [部署 TiDB Lightning](/tidb-lightning/deploy-tidb-lightning.md) + - [目标数据库要求](/tidb-lightning/tidb-lightning-requirements.md) + - 数据源 + - [文件匹配规则](/tidb-lightning/tidb-lightning-data-source.md) + - [CSV](/tidb-lightning/tidb-lightning-data-source.md#csv) + - [SQL](/tidb-lightning/tidb-lightning-data-source.md#sql) + - [Parquet](/tidb-lightning/tidb-lightning-data-source.md#parquet) + - [自定义文件匹配](/tidb-lightning/tidb-lightning-data-source.md#自定义文件匹配) + - Physical Import Mode + - [概述](/tidb-lightning/tidb-lightning-physical-import-mode.md) + - [必要条件及限制](/tidb-lightning/tidb-lightning-physical-import-mode.md#必要条件及限制) + - [配置及使用](/tidb-lightning/tidb-lightning-physical-import-mode-usage.md) + - [冲突检测](/tidb-lightning/tidb-lightning-physical-import-mode-usage.md#冲突数据检测) + - [性能调优](/tidb-lightning/tidb-lightning-physical-import-mode-usage.md#性能调优) + - Logical Import Mode + - [概述](/tidb-lightning/tidb-lightning-logical-import-mode.md) + - [必要条件及限制](/tidb-lightning/tidb-lightning-logical-import-mode.md#必要条件) + - [配置及使用](/tidb-lightning/tidb-lightning-logical-import-mode-usage.md) + - [冲突检测](/tidb-lightning/tidb-lightning-logical-import-mode-usage.md#冲突数据检测) + - [性能调优](/tidb-lightning/tidb-lightning-logical-import-mode-usage.md#性能调优) + - [前置检查](/tidb-lightning/tidb-lightning-prechecks.md) + - [表库过滤](/table-filter.md) + - [断点续传](/tidb-lightning/tidb-lightning-checkpoints.md) + - [并行导入](/tidb-lightning/tidb-lightning-distributed-import.md) + - [可容忍错误](/tidb-lightning/tidb-lightning-error-resolution.md) + - [故障处理](/tidb-lightning/troubleshoot-tidb-lightning.md) + - 参考手册 + - [完整配置文件](/tidb-lightning/tidb-lightning-configuration.md) + - [命令行参数](/tidb-lightning/tidb-lightning-command-line-full.md) + - [监控告警](/tidb-lightning/monitor-tidb-lightning.md) + - [Web 界面](/tidb-lightning/tidb-lightning-web-interface.md) + - [FAQ](/tidb-lightning/tidb-lightning-faq.md) + - [术语表](/tidb-lightning/tidb-lightning-glossary.md) + - [Dumpling](/dumpling-overview.md) - TiCDC - [概述](/ticdc/ticdc-overview.md) - [安装部署与集群运维](/ticdc/deploy-ticdc.md) @@ -573,6 +566,21 @@ - [故障诊断](/tidb-binlog/troubleshoot-tidb-binlog.md) - [常见错误修复](/tidb-binlog/handle-tidb-binlog-errors.md) - [FAQ](/tidb-binlog/tidb-binlog-faq.md) + - PingCAP Clinic 诊断服务 + - [概述](/clinic/clinic-introduction.md) + - [快速上手](/clinic/quick-start-with-clinic.md) + - [使用 PingCAP Clinic 诊断集群](/clinic/clinic-user-guide-for-tiup.md) + - [使用 PingCAP Clinic 生成诊断报告](/clinic/clinic-report.md) + - [采集 SQL 查询计划信息](/clinic/clinic-collect-sql-query-plan.md) + - [数据采集说明](/clinic/clinic-data-instruction-for-tiup.md) + - TiSpark + - [TiSpark 用户指南](/tispark-overview.md) + - sync-diff-inspector + - [概述](/sync-diff-inspector/sync-diff-inspector-overview.md) + - [不同库名或表名的数据校验](/sync-diff-inspector/route-diff.md) + - [分库分表场景下的数据校验](/sync-diff-inspector/shard-diff.md) + - [TiDB 主从集群的数据校验](/sync-diff-inspector/upstream-downstream-diff.md) + - [基于 DM 同步场景下的数据校验](/sync-diff-inspector/dm-diff.md) - TiUniManager - [概述](/tiunimanager/tiunimanager-overview.md) - [安装和运维](/tiunimanager/tiunimanager-install-and-maintain.md) @@ -590,14 +598,6 @@ - [v1.0.2](/tiunimanager/tiunimanager-release-1.0.2.md) - [v1.0.1](/tiunimanager/tiunimanager-release-1.0.1.md) - [v1.0.0](/tiunimanager/tiunimanager-release-1.0.0.md) - - sync-diff-inspector - - [概述](/sync-diff-inspector/sync-diff-inspector-overview.md) - - [不同库名或表名的数据校验](/sync-diff-inspector/route-diff.md) - - [分库分表场景下的数据校验](/sync-diff-inspector/shard-diff.md) - - [TiDB 主从集群的数据校验](/sync-diff-inspector/upstream-downstream-diff.md) - - [基于 DM 同步场景下的数据校验](/sync-diff-inspector/dm-diff.md) - - TiSpark - - [TiSpark 用户指南](/tispark-overview.md) - 参考指南 - 架构 - [概述](/tidb-architecture.md) diff --git a/_index.md b/_index.md index f1c761a72849..8afdc81a7952 100644 --- a/_index.md +++ b/_index.md @@ -101,24 +101,22 @@ hide_commit: true [TiUP](https://docs.pingcap.com/zh/tidb/dev/tiup-overview) -[Dumpling](https://docs.pingcap.com/zh/tidb/dev/dumpling-overview) +[TiDB Operator](https://docs.pingcap.com/zh/tidb/dev/tidb-operator-overview) -[TiDB Lightning](https://docs.pingcap.com/zh/tidb/dev/tidb-lightning-overview) +[TiDB Data Migration (DM)](https://docs.pingcap.com/zh/tidb/dev/dm-overview) -[Data Migration](https://docs.pingcap.com/zh/tidb/dev/dm-overview) +[TiDB Lightning](https://docs.pingcap.com/zh/tidb/dev/tidb-lightning-overview) -[Backup & Restore (BR)](https://docs.pingcap.com/zh/tidb/dev/backup-and-restore-overview) +[Dumpling](https://docs.pingcap.com/zh/tidb/dev/dumpling-overview) [TiCDC](https://docs.pingcap.com/zh/tidb/dev/ticdc-overview) +[Backup & Restore (BR)](https://docs.pingcap.com/zh/tidb/dev/backup-and-restore-overview) + [PingCAP Clinic](https://docs.pingcap.com/zh/tidb/dev/clinic-introduction) [TiUniManager](https://docs.pingcap.com/zh/tidb/dev/tiunimanager-overview) -[TiDB Operator](https://docs.pingcap.com/zh/tidb/dev/tidb-operator-overview) - -[TiSpark](https://docs.pingcap.com/zh/tidb/dev/tispark-overview) - @@ -127,7 +125,7 @@ hide_commit: true [TiDB 命令行参数](https://docs.pingcap.com/zh/tidb/dev/command-line-flags-for-tidb-configuration) -[TiDB Control](https://docs.pingcap.com/zh/tidb/dev/tidb-control) +[TiDB Control](https://docs.pingcap.com/zh/tidb/dev/tidb-control) [系统变量](https://docs.pingcap.com/zh/tidb/dev/system-variables) diff --git a/migration-tools.md b/migration-tools.md index 8d9c942021f7..5bb761ba7224 100644 --- a/migration-tools.md +++ b/migration-tools.md @@ -18,15 +18,6 @@ TiDB 提供了丰富的数据迁移相关的工具,用于全量迁移、增量 | **主要优势** |

  • 一体化的数据迁移任务管理工具,支持全量迁移和增量同步
  • 支持对表与操作进行过滤
  • 支持分库分表的合并迁移
| | **使用限制** | 数据导入速度与 TiDB Lightning 的 [Logical Import Mode](/tidb-lightning/tidb-lightning-logical-import-mode.md) 大致相同,而比TiDB Lightning 的 [Physical Import Mode](/tidb-lightning/tidb-lightning-physical-import-mode.md) 低很多。建议用于 1 TB 以内的存量数据迁移。 | -## [Dumpling](/dumpling-overview.md) - -| 使用场景 | 用于将数据从 MySQL/TiDB 进行全量导出 | -|---|---| -| **上游** | MySQL,TiDB | -| **下游(输出文件)** | SQL,CSV | -| **主要优势** |
  • 支持全新的 table-filter,筛选数据更加方便
  • 支持导出到 Amazon S3 云盘
| -| **使用限制** |
  • 如果导出后计划往非 TiDB 的数据库恢复,建议使用 Dumpling。
  • 如果导出后计划往另一个 TiDB 恢复,建议使用 [BR](/br/backup-and-restore-overview.md)。
| - ## [TiDB Lightning](/tidb-lightning/tidb-lightning-overview.md) | 使用场景 | 用于将数据全量导入到 TiDB | @@ -36,14 +27,14 @@ TiDB 提供了丰富的数据迁移相关的工具,用于全量迁移、增量 | **主要优势** |
  • 支持快速导入大量数据,实现快速初始化 TiDB 集群的指定表
  • 支持断点续传
  • 支持数据过滤
| | **使用限制** |
  • 如果使用 [Physical Import Mode](/tidb-lightning/tidb-lightning-physical-import-mode.md) 进行数据导入,TiDB Lightning 运行后,TiDB 集群将无法正常对外提供服务。
  • 如果你不希望 TiDB 集群的对外服务受到影响,可以参考 TiDB Lightning [Logical Import Mode](/tidb-lightning/tidb-lightning-logical-import-mode.md) 中的硬件需求与部署方式进行数据导入。
| -## [Backup & Restore (BR)](/br/backup-and-restore-overview.md) +## [Dumpling](/dumpling-overview.md) -| 使用场景 | 通过对大数据量的 TiDB 集群进行数据备份和恢复,实现数据迁移 | +| 使用场景 | 用于将数据从 MySQL/TiDB 进行全量导出 | |---|---| -| **上游** | TiDB | -| **下游(输出文件)** | SST,backup.meta 文件,backup.lock 文件 | -| **主要优势** |
  • 适用于向另一个 TiDB 迁移数据。
  • 支持数据冷备份到外部存储,可以用于灾备恢复。
| -| **使用限制** |
  • BR 恢复到 TiCDC / Drainer 的上游集群时,恢复数据无法由 TiCDC / Drainer 同步到下游。
  • BR 只支持在 `new_collations_enabled_on_first_bootstrap` 开关值相同的集群之间进行操作。
| +| **上游** | MySQL,TiDB | +| **下游(输出文件)** | SQL,CSV | +| **主要优势** |
  • 支持全新的 table-filter,筛选数据更加方便
  • 支持导出到 Amazon S3 云盘
| +| **使用限制** |
  • 如果导出后计划往非 TiDB 的数据库恢复,建议使用 Dumpling。
  • 如果导出后计划往另一个 TiDB 恢复,建议使用 [BR](/br/backup-and-restore-overview.md)。
| ## [TiCDC](/ticdc/ticdc-overview.md) @@ -63,6 +54,15 @@ TiDB 提供了丰富的数据迁移相关的工具,用于全量迁移、增量 | **主要优势** |
  • 支持实时备份和恢复。
  • 备份 TiDB 集群数据,同时可以用于 TiDB 集群故障时恢复。
| | **使用限制** | 与部分 TiDB 版本不兼容。推荐使用 [TiCDC](/ticdc/ticdc-overview.md) 替代 TiDB Binlog。| +## [Backup & Restore (BR)](/br/backup-and-restore-overview.md) + +| 使用场景 | 通过对大数据量的 TiDB 集群进行数据备份和恢复,实现数据迁移 | +|---|---| +| **上游** | TiDB | +| **下游(输出文件)** | SST,backup.meta 文件,backup.lock 文件 | +| **主要优势** |
  • 适用于向另一个 TiDB 迁移数据。
  • 支持数据冷备份到外部存储,可以用于灾备恢复。
| +| **使用限制** |
  • BR 恢复到 TiCDC / Drainer 的上游集群时,恢复数据无法由 TiCDC / Drainer 同步到下游。
  • BR 只支持在 `new_collations_enabled_on_first_bootstrap` 开关值相同的集群之间进行操作。
| + ## [sync-diff-inspector](/sync-diff-inspector/sync-diff-inspector-overview.md) | 使用场景 | 用于校验 MySQL/TiDB 中两份数据的一致性 | From 5e35aab4da13e6a5c33c76d3260fcb8e5d9e0a8d Mon Sep 17 00:00:00 2001 From: xixirangrang Date: Tue, 18 Apr 2023 14:09:19 +0800 Subject: [PATCH 020/257] *: add mirror dependency on CPU (#13715) --- hardware-and-software-requirements.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/hardware-and-software-requirements.md b/hardware-and-software-requirements.md index 66ed02527720..53dd7d554874 100644 --- a/hardware-and-software-requirements.md +++ b/hardware-and-software-requirements.md @@ -52,6 +52,13 @@ TiDB 作为一款开源一栈式实时 HTAP 数据库,可以很好地部署和 运行时所需的依赖库:glibc(2.28-151.el8 版本) +### Docker 镜像依赖 + +支持的 CPU 架构如下: + +- x86_64,从 TiDB v6.6.0 开始,需要 [x84-64-v2 指令集](https://developers.redhat.com/blog/2021/01/05/building-red-hat-enterprise-linux-9-for-the-x86-64-v2-microarchitecture-level) +- ARM 64 + ## 软件配置要求 ### 中控机软件配置 From a4d46e5009113f2bead6331f77fa5bffb8eb46d3 Mon Sep 17 00:00:00 2001 From: Ran Date: Tue, 18 Apr 2023 16:43:20 +0800 Subject: [PATCH 021/257] toc: remove recommended from tiup deployment (#12741) --- TOC.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/TOC.md b/TOC.md index 1168f05a61fb..0e068ee84efb 100644 --- a/TOC.md +++ b/TOC.md @@ -92,7 +92,7 @@ - [跨机房部署拓扑结构](/geo-distributed-deployment-topology.md) - [混合部署拓扑结构](/hybrid-deployment-topology.md) - 安装与启动 - - [使用 TiUP 部署(推荐)](/production-deployment-using-tiup.md) + - [使用 TiUP 部署](/production-deployment-using-tiup.md) - [在 Kubernetes 上部署](/tidb-in-kubernetes.md) - [验证集群状态](/post-installation-check.md) - 测试集群性能 @@ -125,7 +125,7 @@ - [与 Apache Kafka 和 Apache Flink 进行数据集成](/replicate-data-to-kafka.md) - 运维操作 - 升级 TiDB 版本 - - [使用 TiUP 升级(推荐)](/upgrade-tidb-using-tiup.md) + - [使用 TiUP 升级](/upgrade-tidb-using-tiup.md) - [使用 TiDB Operator](https://docs.pingcap.com/zh/tidb-in-kubernetes/stable/upgrade-a-tidb-cluster) - [TiFlash v6.2 升级帮助](/tiflash-620-upgrade-guide.md) - 扩缩容 From 7835bb76d2c0d0223262fad4a2815e126d29c88d Mon Sep 17 00:00:00 2001 From: Ran Date: Wed, 19 Apr 2023 14:53:20 +0800 Subject: [PATCH 022/257] lightning: fix a wrong description in command line flags (#11150) --- tidb-lightning/tidb-lightning-command-line-full.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tidb-lightning/tidb-lightning-command-line-full.md b/tidb-lightning/tidb-lightning-command-line-full.md index 60335ae2351c..858eb9bd4bf1 100644 --- a/tidb-lightning/tidb-lightning-command-line-full.md +++ b/tidb-lightning/tidb-lightning-command-line-full.md @@ -20,7 +20,7 @@ summary: 使用命令行配置 TiDB Lightning。 | -d *directory* | 读取数据的本地目录或[外部存储 URI](/br/backup-and-restore-storages.md#uri-格式) | `mydumper.data-source-dir` | | -L *level* | 日志的等级: debug、info、warn、error 或 fatal (默认为 info) | `lightning.log-level` | | -f *rule* | [表库过滤的规则](/table-filter.md) (可多次指定) | `mydumper.filter` | -| --backend [*backend*](/tidb-lightning/tidb-lightning-overview.md) | 选择导入的模式:`local`为 Physical Import Mode,`tidb`为 Logical Import Mode | `local` | +| --backend [*backend*](/tidb-lightning/tidb-lightning-overview.md) | 选择导入的模式:`local`为 [Physical Import Mode](/tidb-lightning/tidb-lightning-physical-import-mode.md),`tidb`为 [Logical Import Mode](/tidb-lightning/tidb-lightning-logical-import-mode.md) | `tikv-importer.backend` | | --log-file *file* | 日志文件路径(默认值为 `/tmp/lightning.log.{timestamp}`,设置为 '-' 表示日志输出到终端) | `lightning.log-file` | | --status-addr *ip:port* | TiDB Lightning 服务器的监听地址 | `lightning.status-port` | | --importer *host:port* | TiKV Importer 的地址 | `tikv-importer.addr` | From 1abde95370612d63284b27d0c5ec152d45f5b77c Mon Sep 17 00:00:00 2001 From: pepezzzz <35323945+pepezzzz@users.noreply.github.com> Date: Thu, 20 Apr 2023 11:47:19 +0800 Subject: [PATCH 023/257] Update command-line-flags-for-tidb-configuration.md (#13707) --- command-line-flags-for-tidb-configuration.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/command-line-flags-for-tidb-configuration.md b/command-line-flags-for-tidb-configuration.md index 6522d639e675..de017f56917c 100644 --- a/command-line-flags-for-tidb-configuration.md +++ b/command-line-flags-for-tidb-configuration.md @@ -132,7 +132,7 @@ aliases: ['/docs-cn/dev/command-line-flags-for-tidb-configuration/','/docs-cn/de ## `--proxy-protocol-fallbackable` -+ 用于控制是否启用 PROXY 协议回退模式。如果设置为 `true`,TiDB 可以接受非 PROXY 协议规范或者没有发送 PROXY 协议头的客户端连接。默认情况下,TiDB 仅接受发送 PROXY 协议头的客户端连接。 ++ 用于控制是否启用 PROXY 协议回退模式。如果设置为 `true`,TiDB 可以接受属于 `--proxy-protocol-networks` 的客户端使用非 PROXY 协议规范或者没有发送 PROXY 协议头的客户端连接。默认情况下,TiDB 仅接受属于 `--proxy-protocol-networks` 的客户端发送 PROXY 协议头的客户端连接。 + 默认:`false` ## `--proxy-protocol-header-timeout` From d9de254c8331c62f60f52c6617592882f64a8a66 Mon Sep 17 00:00:00 2001 From: pepezzzz <35323945+pepezzzz@users.noreply.github.com> Date: Thu, 20 Apr 2023 11:53:19 +0800 Subject: [PATCH 024/257] Update tidb-configuration-file.md (#13706) --- tidb-configuration-file.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/tidb-configuration-file.md b/tidb-configuration-file.md index 085bbe89759b..38574494d04c 100644 --- a/tidb-configuration-file.md +++ b/tidb-configuration-file.md @@ -896,6 +896,11 @@ PROXY 协议相关的配置项。 > > 需谨慎使用 `*` 符号,因为 `*` 允许来自任何 IP 的客户端自行汇报其 IP 地址,从而可能引入安全风险。另外,`*` 可能导致部分直接连接 TiDB 的内部组件无法使用,例如 TiDB Dashboard。 +### `fallbackable` 从 v6.5.1 版本开始引入 + ++ 用于控制是否启用 PROXY 协议回退模式。如果设置为 `true`,TiDB 可以接受属于 `proxy-protocol.networks` 的客户端使用非 PROXY 协议规范或者没有发送 PROXY 协议头的客户端连接。默认情况下,TiDB 仅接受属于 `proxy-protocol.networks` 的客户端发送 PROXY 协议头的客户端连接。 ++ 默认:`false` + ## experimental experimental 部分为 TiDB 实验功能相关的配置。该部分从 v3.1.0 开始引入。 From c4d4660184343b5bd8fc4ce1d37c3d3054200576 Mon Sep 17 00:00:00 2001 From: xiongjiwei Date: Thu, 20 Apr 2023 12:57:19 +0800 Subject: [PATCH 025/257] tidb: doc for multi-valued index GA (#13396) --- choose-index.md | 4 ---- sql-statements/sql-statement-create-index.md | 7 ++----- 2 files changed, 2 insertions(+), 9 deletions(-) diff --git a/choose-index.md b/choose-index.md index e28d4cd75971..3cbc29b82681 100644 --- a/choose-index.md +++ b/choose-index.md @@ -143,10 +143,6 @@ mysql> SHOW WARNINGS; ## 使用多值索引 -> **警告:** -> -> 当前该功能为实验特性,不建议在生产环境中使用。 - [多值索引](/sql-statements/sql-statement-create-index.md#多值索引)和普通索引有所不同,TiDB 目前只会使用 [IndexMerge](/explain-index-merge.md) 来访问多值索引。因此要想使用多值索引进行数据访问,请确保`tidb_enable_index_merge` 被设置为 `ON`。 目前 TiDB 支持将 `json_member_of`、`json_contains` 和 `json_overlaps` 条件自动转换成 IndexMerge 来访问多值索引。既可以依赖优化器根据代价自动选择,也可通过 [`use_index_merge`](/optimizer-hints.md#use_index_merget1_name-idx1_name--idx2_name-) optimizer hint 或 [`use_index`](/optimizer-hints.md#use_indext1_name-idx1_name--idx2_name-) 指定选择多值索引,见下面例子: diff --git a/sql-statements/sql-statement-create-index.md b/sql-statements/sql-statement-create-index.md index 8da6e18d1d9d..d49ad9474624 100644 --- a/sql-statements/sql-statement-create-index.md +++ b/sql-statements/sql-statement-create-index.md @@ -271,10 +271,6 @@ SELECT min(col1) FROM t GROUP BY lower(col1); ## 多值索引 -> **警告:** -> -> 当前该功能为实验特性,不建议在生产环境中使用。 - 多值索引是一种定义在数组列上的二级索引。在普通索引中,一条索引记录对应一条数据记录 (1:1)。而在多值索引中,存在多条索引记录对应一条数据记录 (N:1)。多值索引用于索引 JSON 数组。例如,一个定义在 `zipcode` 字段上的多值索引会对每一个 `zipcode` 中的记录产生一条索引记录。 ```json @@ -375,13 +371,14 @@ Query OK, 1 row affected (0.00 sec) ### 特性与限制 - 如果是空 JSON 数组,则不会有对应的索引记录。 -- `CAST(... AS ... ARRAY)` 中的目标类型不能是 `BINARY`、`JSON`、`YEAR`、`FLOAT`、`DOUBLE`、`DECIMAL`。其中源类型必须是 JSON。 +- `CAST(... AS ... ARRAY)` 中的目标类型不能是 `BINARY`、`JSON`、`YEAR`、`FLOAT`、`DECIMAL`。其中源类型必须是 JSON。 - 无法使用多值索引进行排序。 - 只允许在 JSON 数组上建立多值索引。 - 多值索引不可以作为主键或外键。 - 多值索引使用额外的存储空间为:平均每行数组元素个数 * 普通二级索引使用空间。 - 相比于普通索引,DML 会对多值索引产生更多的索引记录的修改,因此多值索引会带来比普通索引更大的性能影响。 - 由于多值索引是一种特殊的表达式索引,因此具有表达式索引的限制。 +- 使用备份恢复工具 (BR)、同步工具 (TiCDC)、导入工具 (TiDB Lightning) 无法将定义了多值索引的表备份、同步、导入到低于 v6.6.0 版本的 TiDB。 ## 不可见索引 From 50019b664b79f6dec6899924632ffe8a12f238e2 Mon Sep 17 00:00:00 2001 From: you06 Date: Thu, 20 Apr 2023 13:57:19 +0800 Subject: [PATCH 026/257] document `tidb_load_based_replica_read_threshold` (#13584) --- system-variables.md | 8 ++------ troubleshoot-hot-spot-issues.md | 4 ++++ 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/system-variables.md b/system-variables.md index 724c895721e0..4179c47f4caa 100644 --- a/system-variables.md +++ b/system-variables.md @@ -2155,16 +2155,12 @@ v5.0 后,用户仍可以单独修改以上系统变量(会有废弃警告) ### `tidb_load_based_replica_read_threshold` 从 v7.0.0 版本开始引入 -> **警告:** -> -> 当前版本中该变量控制的功能尚未完全生效,请保留默认值。 - - 作用域:SESSION | GLOBAL - 是否持久化到集群:是 -- 默认值:`"0s"` +- 默认值:`"1s"` - 范围:`[0s, 1h]` - 类型:字符串 -- 这个变量用来设置基于负载的 replica read 的触发阈值。当 leader 节点的预估排队时间超过阈值时,TiDB 会优先从 follower 节点读取数据。格式为时间,例如 `"100ms"` 或 `"1s"`。 +- 这个变量用来设置基于负载的 replica read 的触发阈值。当 leader 节点的预估排队时间超过阈值时,TiDB 会优先从 follower 节点读取数据。格式为时间,例如 `"100ms"` 或 `"1s"`。详情见 [TiDB 热点问题处理](/troubleshoot-hot-spot-issues.md#打散读热点)。 ### `tidb_log_file_max_days` 从 v5.3.0 版本开始引入 diff --git a/troubleshoot-hot-spot-issues.md b/troubleshoot-hot-spot-issues.md index 1ba69cb7b1ac..9b24820f6aa8 100644 --- a/troubleshoot-hot-spot-issues.md +++ b/troubleshoot-hot-spot-issues.md @@ -171,3 +171,7 @@ TiDB 的 Coprocessor Cache 功能支持下推计算结果缓存。开启该功 + [TiDB 高并发写入场景最佳实践](/best-practices/high-concurrency-best-practices.md) + [Split Region 使用文档](/sql-statements/sql-statement-split-region.md) + +## 打散读热点 + +在读热点场景中,热点 TiKV 无法及时处理读请求,导致读请求排队。但是,此时并非所有 TiKV 资源都已耗尽。为了降低延迟,TiDB v7.1.0 引入了负载自适应副本读取功能,允许从其他 TiKV 节点读取副本,而无需在热点 TiKV 节点排队等待。你可以通过 [`tidb_load_based_replica_read_threshold`](/system-variables.md#tidb_load_based_replica_read_threshold-从-v700-版本开始引入) 系统变量控制读请求的排队长度。当 leader 节点的预估排队时间超过该阈值时,TiDB 会优先从 follower 节点读取数据。在读热点的情况下,与不打散读热点相比,该功能可提高读取吞吐量 70%~200%。 From 99994841a5a909ff1bf42c5d844c0146e6624b3f Mon Sep 17 00:00:00 2001 From: CharlesCheung <61726649+CharlesCheung96@users.noreply.github.com> Date: Thu, 20 Apr 2023 14:35:19 +0800 Subject: [PATCH 027/257] ticdc: fix sink uri for storage sink (#13654) --- ticdc/ticdc-changefeed-config.md | 4 +- ticdc/ticdc-sink-to-cloud-storage.md | 56 ++++++++++++++++++++-------- ticdc/ticdc-sink-to-kafka.md | 2 +- 3 files changed, 44 insertions(+), 18 deletions(-) diff --git a/ticdc/ticdc-changefeed-config.md b/ticdc/ticdc-changefeed-config.md index f53d63738448..e92c0a706e0c 100644 --- a/ticdc/ticdc-changefeed-config.md +++ b/ticdc/ticdc-changefeed-config.md @@ -118,8 +118,8 @@ protocol = "canal-json" terminator = '' # 文件路径的日期分隔类型。可选类型有 `none`、`year`、`month` 和 `day`。默认值为 `none`,即不使用日期分隔。详见 。 date-separator = 'none' -# 是否使用 partition 作为分隔字符串。默认值为 false,即一张表中各个 partition 的数据不会分不同的目录来存储。详见 。 -enable-partition-separator = false +# 是否使用 partition 作为分隔字符串。默认值为 true,即一张表中各个 partition 的数据会分不同的目录来存储。详见 。 +enable-partition-separator = true # 从 v6.5.0 开始,TiCDC 支持以 CSV 格式将数据变更记录保存至存储服务中,在 MQ 和 MySQL 类 sink 中无需设置。 [sink.csv] diff --git a/ticdc/ticdc-sink-to-cloud-storage.md b/ticdc/ticdc-sink-to-cloud-storage.md index edeb45ff211c..75e5bbdd8054 100644 --- a/ticdc/ticdc-sink-to-cloud-storage.md +++ b/ticdc/ticdc-sink-to-cloud-storage.md @@ -35,23 +35,13 @@ Info: {"upstream_id":7171388873935111376,"namespace":"default","id":"simple-repl ## 配置 Sink URI -本章节介绍如何在 Changefeed URI 中配置存储服务 Amazon S3、Azure Blob Storage 和 NFS。 - -### 配置外部存储 - -Amazon S3、GCS 以及 Azure Blob Storage 的 URI 参数与 BR 中这三种存储的 URI 参数相同。详细参数说明请参考 [BR 备份存储服务的 URI 格式](/br/backup-and-restore-storages.md#格式说明)。 - -### 配置 NFS - -NFS 配置样例如下: +本章节介绍如何在 Sink URI 中配置存储服务 Amazon S3、GCS、Azure Blob Storage 以及 NFS。Sink URI 用于指定 TiCDC 下游系统的连接信息,遵循以下格式: ```shell ---sink-uri="file:///my-directory/prefix" +[scheme]://[host]/[path]?[query_parameters] ``` -### 可选配置 - -URI 中其他可配置的参数如下: +URI 的 `[query_parameters]` 中可配置的参数如下: | 参数 | 描述 | 默认值 | 取值范围 | | :--------------- | :----------------------------------------------------- | :--------- | :--------------------- | @@ -59,10 +49,45 @@ URI 中其他可配置的参数如下: | `flush-interval` | 向下游存储服务保存数据变更记录的间隔 | `5s` | `[2s, 10m]` | | `file-size` | 单个数据变更文件的字节数超过 `file-size` 时将其保存至存储服务中| `67108864` | `[1048576, 536870912]` | | `protocol` | 输出到存储服务的消息协议 | N/A | `canal-json` 和 `csv` | +| `enable-tidb-extension` | `protocol` 参数为 `canal-json` 时,如果该值为 `true`,TiCDC 会发送 [WATERMARK 事件](/ticdc/ticdc-canal-json.md#watermark-event),并在 canal-json 消息中添加 [TiDB 扩展字段](/ticdc/ticdc-canal-json.md#tidb-扩展字段)。 | `false` | `false` 和 `true` | > **注意:** > > `flush-interval` 与 `file-size` 二者只要满足其一就会向下游写入数据变更文件。 +> +> `protocol` 是必选配置,如果 TiCDC 在创建 changefeed 时未解析到该配置,将会返回 `CDC:ErrSinkUnknownProtocol` 错误。 + +### 配置外部存储 + +Amazon S3 配置样例如下: + +```shell +--sink-uri="s3://bucket/prefix?protocol=canal-json" +``` + +GCS 配置样例如下: + +```shell +--sink-uri="gcs://bucket/prefix?protocol=canal-json" +``` + +Azure Blob Storage 配置样例如下: + +```shell +--sink-uri="azure://bucket/prefix?protocol=canal-json" +``` + +> **建议:** +> +> Amazon S3、GCS 以及 Azure Blob Storage 的 URI 参数与 BR 中这三种外部存储的 URI 参数相同。详细参数说明请参考 [BR 备份存储服务的 URI 格式](/br/backup-and-restore-storages.md#格式说明)。 + +### 配置 NFS + +NFS 配置样例如下: + +```shell +--sink-uri="file:///my-directory/prefix?protocol=canal-json" +``` ## 存储路径组织结构 @@ -76,7 +101,7 @@ URI 中其他可配置的参数如下: {scheme}://{prefix}/{schema}/{table}/{table-version-separator}/{partition-separator}/{date-separator}/CDC{num}.{extension} ``` -- `scheme`:数据传输协议,即存储类型。例如:**s3**://xxxxx。 +- `scheme`:存储服务类型。例如:`s3`、`gcs`、`azure`、`file`。 - `prefix`:用户指定的父目录。例如:s3://**bucket/bbb/ccc**。 - `schema`:表所属的库名。例如:s3://bucket/bbb/ccc/**test**。 - `table`:表名。例如:s3://bucket/bbb/ccc/test/**table1**。 @@ -92,10 +117,11 @@ URI 中其他可配置的参数如下: > **注意:** > -> 表的版本会在以下两种情况下发生变化: +> 表的版本可能在以下三种情况下发生变化: > > - 发生 DDL 操作后,表的版本为该 DDL 在上游 TiDB 执行结束的 TSO。但是,表版本的变化并不意味着表结构的变化。例如,在表中的某一列添加注释,不会导致 `schema.json` 文件内容发生变化。 > - 进程重启,表的版本为进程重启时 Changefeed 的 checkpoint TSO。在有很多表的情况下,重启时需要遍历所有目录并找到上一次重启时每张表写入的位置,这样的操作耗时较长。因此,TiCDC 选择在一个以 checkpoint TSO 为版本的新目录下写入数据,而不是在旧版本的目录下继续写入数据。 +> - 发生表调度后,表的版本为该表调度到当前节点时 Changefeed 的 checkpoint TSO。 ### Index 文件 diff --git a/ticdc/ticdc-sink-to-kafka.md b/ticdc/ticdc-sink-to-kafka.md index a2676ed5e654..6e44056e4424 100644 --- a/ticdc/ticdc-sink-to-kafka.md +++ b/ticdc/ticdc-sink-to-kafka.md @@ -60,7 +60,7 @@ URI 中可配置的的参数如下: | `compression` | 设置发送消息时使用的压缩算法(可选值为 `none`、`lz4`、`gzip`、`snappy` 和 `zstd`,默认值为 `none`)。| | `protocol` | 输出到 Kafka 的消息协议,可选值有 `canal-json`、`open-protocol`、`canal`、`avro`、`maxwell`。 | | `auto-create-topic` | 当传入的 `topic-name` 在 Kafka 集群不存在时,TiCDC 是否要自动创建该 topic(可选,默认值 `true`)。 | -| `enable-tidb-extension` | 可选,默认值是 `false`。当输出协议为 `canal-json` 时,如果该值为 `true`,TiCDC 会发送 [Resolved 事件](/ticdc/ticdc-canal-json.md#watermark-event),并在 Kafka 消息中添加 TiDB 扩展字段。从 6.1.0 开始,该参数也可以和输出协议 `avro` 一起使用。如果该值为 `true`,TiCDC 会在 Kafka 消息中添加[三个 TiDB 扩展字段](/ticdc/ticdc-avro-protocol.md#tidb-扩展字段)。| +| `enable-tidb-extension` | 可选,默认值是 `false`。当输出协议为 `canal-json` 时,如果该值为 `true`,TiCDC 会发送 [WATERMARK 事件](/ticdc/ticdc-canal-json.md#watermark-event),并在 Kafka 消息中添加 TiDB 扩展字段。从 6.1.0 开始,该参数也可以和输出协议 `avro` 一起使用。如果该值为 `true`,TiCDC 会在 Kafka 消息中添加[三个 TiDB 扩展字段](/ticdc/ticdc-avro-protocol.md#tidb-扩展字段)。| | `max-batch-size` | 从 v4.0.9 开始引入。当消息协议支持把多条变更记录输出至一条 Kafka 消息时,该参数用于指定这一条 Kafka 消息中变更记录的最多数量。目前,仅当 Kafka 消息的 `protocol` 为 `open-protocol` 时有效(可选,默认值 `16`)。| | `enable-tls` | 连接下游 Kafka 实例是否使用 TLS(可选,默认值 `false`)。 | | `ca` | 连接下游 Kafka 实例所需的 CA 证书文件路径(可选)。 | From a1df3428b2cc2691d2a226b930ba7792a17a3627 Mon Sep 17 00:00:00 2001 From: xixirangrang Date: Thu, 20 Apr 2023 15:03:19 +0800 Subject: [PATCH 028/257] system-variables: update description of datadir (#13748) --- system-variables.md | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/system-variables.md b/system-variables.md index 4179c47f4caa..dfa593f0bbff 100644 --- a/system-variables.md +++ b/system-variables.md @@ -176,9 +176,8 @@ mysql> SELECT * FROM t1; ### `datadir` - 作用域:NONE -- 默认值:/tmp/tidb -- 这个变量表示数据存储的位置,位置可以是本地路径。如果数据存储在 TiKV 上,则可以是指向 PD 服务器的路径。 -- 如果变量值的格式为 `ip_address:port`,表示 TiDB 在启动时连接到的 PD 服务器。 +- 默认值:${ip_address:port} +- 变量值的格式为 `ip_address:port`,表示 TiDB 在启动时连接到的 PD 服务器。 ### `ddl_slow_threshold` From 3f37d62779020f128b98e3b4c821f0222d33732f Mon Sep 17 00:00:00 2001 From: TomShawn <41534398+TomShawn@users.noreply.github.com> Date: Thu, 20 Apr 2023 20:55:20 +0800 Subject: [PATCH 029/257] Generated Columns GA (#13383) --- develop/dev-guide-create-table.md | 8 ++++---- develop/dev-guide-schema-design-overview.md | 4 ++-- generated-columns.md | 4 ---- time-to-live.md | 2 +- 4 files changed, 7 insertions(+), 11 deletions(-) diff --git a/develop/dev-guide-create-table.md b/develop/dev-guide-create-table.md index cdb6c00e3366..c80501a94a15 100644 --- a/develop/dev-guide-create-table.md +++ b/develop/dev-guide-create-table.md @@ -60,9 +60,9 @@ CREATE TABLE `bookshop`.`users` ( **参数描述** -- `{column_name}`: 列名。 -- `{data_type}`: 列的[数据类型](/basic-features.md#数据类型函数和操作符)。 -- `{column_qualification}`: 列的限定条件,如**列级约束**或[生成列(实验功能)](/generated-columns.md)子句。 +- `{column_name}`:列名。 +- `{data_type}`:列的[数据类型](/basic-features.md#数据类型函数和操作符)。 +- `{column_qualification}`:列的限定条件,如**列级约束**或[生成列](/generated-columns.md)子句。 可以为 `users` 表添加一些列,如他们的唯一标识 `id`,余额 `balance` 及昵称 `nickname`。 @@ -107,7 +107,7 @@ CREATE TABLE `bookshop`.`books` ( > **注意:** > -> TiDB 中,关于 **Primary Key** 的默认定义与 MySQL 常用存储引擎 [InnoDB](https://mariadb.com/kb/en/innodb/) 不一致。**InnoDB** 中,**Primary Key** 的语义为:唯一,不为空,**且为聚簇索引**。 +> TiDB 中,关于 **Primary Key** 的默认定义与 MySQL 常用存储引擎 [InnoDB](https://dev.mysql.com/doc/refman/8.0/en/innodb-storage-engine.html) 不一致。**InnoDB** 中,**Primary Key** 的语义为:唯一,不为空,**且为聚簇索引**。 > > 而在 TiDB 中,**Primary Key** 的定义为:唯一,不为空。但主键不保证为**聚簇索引**。而是由另一组关键字 `CLUSTERED`、`NONCLUSTERED` 额外控制 **Primary Key** 是否为聚簇索引,若不指定,则由系统变量 `@@global.tidb_enable_clustered_index` 影响,具体说明请看[此文档](/clustered-indexes.md)。 diff --git a/develop/dev-guide-schema-design-overview.md b/develop/dev-guide-schema-design-overview.md index 68743979fc0f..a27a63de4d9e 100644 --- a/develop/dev-guide-schema-design-overview.md +++ b/develop/dev-guide-schema-design-overview.md @@ -26,7 +26,7 @@ TiDB 集群包含一个名为 `test` 的数据库。但建议你自行创建数 TiDB 语境中的 Table 或者说表,从属于某个[数据库](#数据库-database)。 -表包含数据**行**。每行数据中的每个值都属于一个特定的**列**。每列都只允许单一数据类型的数据值。列可添加[约束](/constraints.md)来进一步限定。你还可以添加[生成列(实验特性)](/generated-columns.md)用于计算。 +表包含数据**行**。每行数据中的每个值都属于一个特定的**列**。每列都只允许单一数据类型的数据值。列可添加[约束](/constraints.md)来进一步限定。你还可以添加[生成列](/generated-columns.md)用于计算。 ## 索引 Index @@ -39,7 +39,7 @@ TiDB 语境中的 Table 或者说表,从属于某个[数据库](#数据库-dat > **注意:** > -> TiDB 中,关于 **Primary Key** 的默认定义与 MySQL 常用存储引擎 [InnoDB](https://mariadb.com/kb/en/innodb/) 不一致。**InnoDB** 中,**Primary Key** 的语义为:唯一,不为空,**且为聚簇索引**。 +> TiDB 中,关于 **Primary Key** 的默认定义与 MySQL 常用存储引擎 [InnoDB](https://dev.mysql.com/doc/refman/8.0/en/innodb-storage-engine.html) 不一致。**InnoDB** 中,**Primary Key** 的语义为:唯一,不为空,**且为聚簇索引**。 > > 而在 TiDB 中,**Primary Key** 的定义为:唯一,不为空。但主键不保证为**聚簇索引**。而是由另一组关键字 `CLUSTERED`、`NONCLUSTERED` 额外控制 **Primary Key** 是否为聚簇索引,若不指定,则由系统变量 `@@global.tidb_enable_clustered_index` 影响,具体说明请看[聚簇索引](/clustered-indexes.md)。 diff --git a/generated-columns.md b/generated-columns.md index 5a55a12f1258..06da3251294c 100644 --- a/generated-columns.md +++ b/generated-columns.md @@ -5,10 +5,6 @@ aliases: ['/docs-cn/dev/generated-columns/','/docs-cn/dev/reference/sql/generate # 生成列 -> **警告:** -> -> 当前该功能为实验特性,不建议在生产环境中使用。 - 本文介绍生成列的概念以及用法。 ## 生成列的基本概念 diff --git a/time-to-live.md b/time-to-live.md index 20d2b5fefe5c..2a9651e5dcf4 100644 --- a/time-to-live.md +++ b/time-to-live.md @@ -100,7 +100,7 @@ TTL 可以和[数据类型的默认值](/data-type-default-values.md)一起使 ### TTL 和生成列 -TTL 可以和[生成列](/generated-columns.md)(实验特性)一起使用,用来表达更加复杂的过期规则。例如: +TTL 可以和[生成列](/generated-columns.md)一起使用,用来表达更加复杂的过期规则。例如: ```sql CREATE TABLE message ( From fb40424b3481989978e41bd4211f62f710f13c01 Mon Sep 17 00:00:00 2001 From: glorv Date: Fri, 21 Apr 2023 12:31:20 +0800 Subject: [PATCH 030/257] resource_control: add privilege for calibrate resource (#13714) --- privilege-management.md | 4 ++++ sql-statements/sql-statement-calibrate-resource.md | 8 ++++++++ 2 files changed, 12 insertions(+) diff --git a/privilege-management.md b/privilege-management.md index 3760f40efa14..6a2d2f59d587 100644 --- a/privilege-management.md +++ b/privilege-management.md @@ -458,6 +458,10 @@ SELECT * FROM INFORMATION_SCHEMA.USER_PRIVILEGES WHERE grantee = "'root'@'%'"; 需要拥有 `SUPER` 或者 `RESOURCE_GROUP_ADMIN` 权限。 +### CALIBRATE RESOURCE + +需要拥有 `SUPER` 或者 `RESOURCE_GROUP_ADMIN` 权限。 + ## 权限系统的实现 ### 授权表 diff --git a/sql-statements/sql-statement-calibrate-resource.md b/sql-statements/sql-statement-calibrate-resource.md index d4308da1dfc6..b9b7538b194d 100644 --- a/sql-statements/sql-statement-calibrate-resource.md +++ b/sql-statements/sql-statement-calibrate-resource.md @@ -13,6 +13,14 @@ summary: TiDB 数据库中 CALIBRATE RESOURCE 的使用概况。 CalibrateResourceStmt ::= 'CALIBRATE' 'RESOURCE' ``` +## 权限 + +执行此命令依赖如下配置和权限: + +- [`tidb_enable_resource_control`](/system-variables.md#tidb_enable_resource_control-从-v660-版本开始引入) 需要处于开启状态 +- 需要拥有 `SUPER` 或者 `RESOURCE_GROUP_ADMIN` 权限 +- 需要拥有 `METRICS_SCHEMA` 库下所有表的 `SELECT` 权限 + ## 示例 ```sql From f9b603e822f22217e3f531b3877c8a3a65fa8846 Mon Sep 17 00:00:00 2001 From: Ran Date: Fri, 21 Apr 2023 13:23:20 +0800 Subject: [PATCH 031/257] add 6.5.2 release notes (#13700) --- TOC.md | 1 + releases/release-6.5.2.md | 106 +++++++++++++++++++++++++++++++++++ releases/release-notes.md | 1 + releases/release-timeline.md | 1 + 4 files changed, 109 insertions(+) create mode 100644 releases/release-6.5.2.md diff --git a/TOC.md b/TOC.md index 0e068ee84efb..6b3a54ff5f4d 100644 --- a/TOC.md +++ b/TOC.md @@ -990,6 +990,7 @@ - v6.6 - [6.6.0-DMR](/releases/release-6.6.0.md) - v6.5 + - [6.5.2](/releases/release-6.5.2.md) - [6.5.1](/releases/release-6.5.1.md) - [6.5.0](/releases/release-6.5.0.md) - v6.4 diff --git a/releases/release-6.5.2.md b/releases/release-6.5.2.md new file mode 100644 index 000000000000..48f4155f9c07 --- /dev/null +++ b/releases/release-6.5.2.md @@ -0,0 +1,106 @@ +--- +title: TiDB 6.5.2 Release Notes +summary: 了解 TiDB 6.5.2 版本的兼容性变更、改进提升,以及错误修复。 +--- + +# TiDB 6.5.2 Release Notes + +发版日期:2023 年 4 月 21 日 + +TiDB 版本:6.5.2 + +试用链接:[快速体验](https://docs.pingcap.com/zh/tidb/v6.5/quick-start-with-tidb) | [生产部署](https://docs.pingcap.com/zh/tidb/v6.5/production-deployment-using-tiup) | [下载离线包](https://cn.pingcap.com/product-community/?version=v6.5.2#version-list) + +## 兼容性变更 + +- TiCDC 修复了 Avro 编码 `FLOAT` 类型数据错误的问题 [#8490](https://github.com/pingcap/tiflow/issues/8490) @[3AceShowHand](https://github.com/3AceShowHand) + + 在升级 TiCDC 集群到 v6.5.2 或更高的 v6.5.x 版本时,如果使用 Avro 同步的表包含 `FLOAT` 类型数据,请在升级前手动调整 Confluent Schema Registry 的兼容性策略为 `None`,使 changefeed 能够成功更新 schema。否则,在升级之后 changefeed 将无法更新 schema 并进入错误状态。 + +## 改进提升 + ++ TiDB + + - Prepared Plan Cache 支持缓存 BatchPointGet 计划 [#42125](https://github.com/pingcap/tidb/issues/42125) @[qw4990](https://github.com/qw4990) + - Index Join 支持更多的 SQL 格式 [#40505](https://github.com/pingcap/tidb/issues/40505) @[Yisaer](https://github.com/Yisaer) + - 将 Index Merge Reader 中的一些 Log 等级从 `"info"` 降低为 `"debug"` [#41949](https://github.com/pingcap/tidb/issues/41949) @[yibin87](https://github.com/yibin87) + - 优化带 Limit 的 Range 类型分区表的 `distsql_concurrency` 设置以降低查询延迟 [#41480](https://github.com/pingcap/tidb/issues/41480) @[you06](https://github.com/you06) + ++ TiFlash + + - 减少了 TiFlash 在读取过程中的任务调度对 CPU 的消耗 [#6495](https://github.com/pingcap/tiflash/issues/6495) @[JinheLin](https://github.com/JinheLin) + - 提升默认参数下 BR 和 TiDB Lightning 向 TiFlash 导入数据的性能 [#7272](https://github.com/pingcap/tiflash/issues/7272) @[breezewish](https://github.com/breezewish) + ++ Tools + + + TiCDC + + - 发布 TiCDC Open API v2.0 [#8743](https://github.com/pingcap/tiflow/issues/8743) @[sdojjy](https://github.com/sdojjy) + - 引入 `gomemlimit` 以防止 TiCDC 出现 OOM 问题 [#8675](https://github.com/pingcap/tiflow/issues/8675) @[amyangfei](https://github.com/amyangfei) + - 采用 multi-statement 的方式优化批量执行 `UPDATE` 场景下的同步性能 [#8057](https://github.com/pingcap/tiflow/issues/8057) @[amyangfei](https://github.com/amyangfei) + - 支持在 redo applier 中拆分事务以提升 apply 吞吐,降低灾难场景的 RTO [#8318](https://github.com/pingcap/tiflow/issues/8318) @[CharlesCheung96](https://github.com/CharlesCheung96) + - 支持在 redo log 里 apply DDL 事件 [#8361](https://github.com/pingcap/tiflow/issues/8361) @[CharlesCheung96](https://github.com/CharlesCheung96) + + + TiDB Lightning + + - 支持导入带有 BOM header 的 CSV 数据文件 [#40744](https://github.com/pingcap/tidb/issues/40744) @[dsdashun](https://github.com/dsdashun) + +## 错误修复 + ++ TiDB + + - 修复缓存表执行新增列操作后,新增列值为 `NULL` 而非列的默认值的问题 [#42928](https://github.com/pingcap/tidb/issues/42928) @[lqs](https://github.com/lqs) + - 修复分区特别多并且带有 TiFlash 副本的分区表在执行 `TRUNCATE TABLE` 时,出现写冲突导致 DDL 重试的问题 [#42940](https://github.com/pingcap/tidb/issues/42940) @[mjonss](https://github.com/mjonss) + - 修复对于执行中的 `DROP TABLE` 操作,`ADMIN SHOW DDL JOBS` 的结果中缺少表名的问题 [#42268](https://github.com/pingcap/tidb/issues/42268) @[tiancaiamao](https://github.com/tiancaiamao) + - 修复读取 cgroup 信息出错导致 TiDB Server 无法启动的问题,报错信息为 "can't read file memory.stat from cgroup v1: open /sys/memory.stat no such file or directory" [#42659](https://github.com/pingcap/tidb/issues/42659) @[hawkingrei](https://github.com/hawkingrei) + - 修复在分区表上执行修改列操作时,数据截断没有正确发出警告的问题 [#24427](https://github.com/pingcap/tidb/issues/24427) @[mjonss](https://github.com/mjonss) + - 修复了生成执行计划过程中,因为获取的 InfoSchema 不一致而导致的 TiDB panic 的问题 [#41622](https://github.com/pingcap/tidb/issues/41622) @[tiancaiamao](https://github.com/tiancaiamao) + - 修复了使用 DDL 修改浮点类型时,保持长度不变且减少小数位后,旧数据仍然保持原样的问题 [#41281](https://github.com/pingcap/tidb/issues/41281) @[zimulala](https://github.com/zimulala) + - 修复事务内执行 PointUpdate 之后,`SELECT` 结果不正确的问题 [#28011](https://github.com/pingcap/tidb/issues/28011) @[zyguan](https://github.com/zyguan) + - 修复在使用 Cursor Fetch 且在 Execute、Fetch、Close 之间运行其它语句后,Fetch 与 Close 命令可能会返回错误结果或造成 TiDB Panic 的问题 [#40094](https://github.com/pingcap/tidb/issues/40094) @[YangKeao](https://github.com/YangKeao) + - 修复 `INSERT IGNORE` 和 `REPLACE` 语句对不修改 value 的 key 没有加锁的问题 [#42121](https://github.com/pingcap/tidb/issues/42121) @[zyguan](https://github.com/zyguan) + - 修复 TiFlash 执行中遇到生成列会报错的问题 [#40663](https://github.com/pingcap/tidb/issues/40663) @[guo-shaoge](https://github.com/guo-shaoge) + - 修复当同一个 SQL 中出现多个不同的分区表时,TiDB 可能执行得到错误结果的问题 [#42135](https://github.com/pingcap/tidb/issues/42135) @[mjonss](https://github.com/mjonss) + - 修复在开启 Prepared Plan Cache 的情况下,索引全表扫可能会报错的问题 [#42150](https://github.com/pingcap/tidb/issues/42150) @[fzzf678](https://github.com/fzzf678) + - 修复在开启 Prepared Plan Cache 时 Index Merge 可能得到错误结果的问题 [#41828](https://github.com/pingcap/tidb/issues/41828) @[qw4990](https://github.com/qw4990) + - 修复全局内存控制可能错误地 Kill 内存使用量小于 `tidb_server_memory_limit_sess_min_size` 的 SQL 的问题 [#42662](https://github.com/pingcap/tidb/issues/41828) @[XuHuaiyu](https://github.com/XuHuaiyu) + - 修复分区表动态裁剪模式下 Index Join 可能导致 panic 的问题 [#40596](https://github.com/pingcap/tidb/issues/40596) @[tiancaiamao](https://github.com/tiancaiamao) + ++ TiKV + + - 修复 TiKV 解析 cgroup path 没有正确解析 `:` 符号的问题 [#14538](https://github.com/tikv/tikv/issues/14538) @[SpadeA-Tang](https://github.com/SpadeA-Tang) + ++ PD + + - 修复 PD 可能会非预期地向 Region 添加多个 Learner 的问题 [#5786](https://github.com/tikv/pd/issues/5786) @[HunDunDM](https://github.com/HunDunDM) + - 修复了切换 Placement Rule 时可能存在的 leader 分布不均衡的问题 [#6195](https://github.com/tikv/pd/issues/6195) @[bufferflies](https://github.com/bufferflies) + ++ TiFlash + + - 修复 TiFlash 无法识别生成列的问题 [#6801](https://github.com/pingcap/tiflash/issues/6801) @[guo-shaoge](https://github.com/guo-shaoge) + - 修复了 Decimal 除法在某些情况下最后一位未进位的问题 [#7022](https://github.com/pingcap/tiflash/issues/7022) @[LittleFall](https://github.com/LittleFall) + - 修复了 Decimal 转换在某些情况下进位错误的问题 [#6994](https://github.com/pingcap/tiflash/issues/6994) @[windtalker](https://github.com/windtalker) + - 修复了开启 new collation 后 TopN/Sort 算子结果可能出错的问题 [#6807](https://github.com/pingcap/tiflash/issues/6807) @[xzhangxian1008](https://github.com/xzhangxian1008) + - 修复由于不兼容 TiCDC 导致 TiFlash 进程失败的问题 [#7212](https://github.com/pingcap/tiflash/issues/7212) @[hongyunyan](https://github.com/hongyunyan) + ++ Tools + + + Backup & Restore (BR) + + - 修复当 TiDB 集群不存在 PITR 备份任务时,`resolve lock` 频率过高的问题 [#40759](https://github.com/pingcap/tidb/issues/40759) @[joccau](https://github.com/joccau) + - 修复了在 PITR 恢复过程中等待 split Region 重试的时间不足的问题 [#42001](https://github.com/pingcap/tidb/issues/42001) @[joccau](https://github.com/joccau) + + + TiCDC + + - 修复同步到对象存储时,partition 分隔符不生效问题 [#8581](https://github.com/pingcap/tiflow/issues/8581) @[CharlesCheung96](https://github.com/CharlesCheung96) @[hi-rustin](https://github.com/hi-rustin) + - 修复同步到对象存储时,表调度可能导致数据丢失的问题 [#8256](https://github.com/pingcap/tiflow/issues/8256) @[zhaoxinyu](https://github.com/zhaoxinyu) + - 修复不可重入的 DDL 导致同步卡住的问题 [#8662](https://github.com/pingcap/tiflow/issues/8662) @[hicqu](https://github.com/hicqu) + - 修复同步到对象存储时,TiCDC 扩缩容可能导致数据丢失的问题 [#8666](https://github.com/pingcap/tiflow/issues/8666) @[CharlesCheung96](https://github.com/CharlesCheung96) + - 修复在部分场景中 `cgroup` 的内存限制不生效问题 [#8588](https://github.com/pingcap/tiflow/issues/8588) @[amyangfei](https://github.com/amyangfei) + - 修复 Redo log 在 apply 时,特殊情况下出现数据丢失的问题 [#8591](https://github.com/pingcap/tiflow/issues/8591) @[CharlesCheung96](https://github.com/CharlesCheung96) + - 修复 `db sorter` 使用内存时未受 `cgroup memory limit` 限制的问题 [#8588](https://github.com/pingcap/tiflow/issues/8588) @[amyangfei](https://github.com/amyangfei) + - 修复同步数据时由于 `UPDATE` 和 `INSERT` 语句乱序可能导致 `Duplicate entry` 错误的问题 [#8597](https://github.com/pingcap/tiflow/issues/8597) @[sdojjy](https://github.com/sojjy) + - 修复由于 PD 和 TiCDC 之间的网络隔离引起 TiCDC 程序异常退出的问题 [#8562](https://github.com/pingcap/tiflow/issues/8562) @[overvenus](https://github.com/overvenus) + - 修复了 Kubernetes 上不能平滑升级 (graceful upgrade) TiCDC 集群的问题 [#8484](https://github.com/pingcap/tiflow/issues/8484) @[overvenus](https://github.com/overvenus) + - 修复了当所有 Kafka server 不可访问时会导致 TiCDC server panic 的问题 [#8523](https://github.com/pingcap/tiflow/issues/8523) @[3AceShowHand](https://github.com/3AceShowHand) + - 修复了重启 changefeed 可能导致数据丢失或者 checkpoint 无法推进的问题 [#8242](https://github.com/pingcap/tiflow/issues/8242) @[overvenus](https://github.com/overvenus) diff --git a/releases/release-notes.md b/releases/release-notes.md index cc17e50cad50..f306143477d1 100644 --- a/releases/release-notes.md +++ b/releases/release-notes.md @@ -17,6 +17,7 @@ TiDB 历史版本发布声明如下: ## 6.5 +- [6.5.2](/releases/release-6.5.2.md): 2023-04-21 - [6.5.1](/releases/release-6.5.1.md): 2023-03-10 - [6.5.0](/releases/release-6.5.0.md): 2022-12-29 diff --git a/releases/release-timeline.md b/releases/release-timeline.md index 213f72a97080..978d7a925828 100644 --- a/releases/release-timeline.md +++ b/releases/release-timeline.md @@ -9,6 +9,7 @@ summary: 了解 TiDB 的版本发布时间线。 | 版本 | 发布日期 | | :--- | :--- | +| [6.5.2](/releases/release-6.5.2.md) | 2023-04-21 | | [6.1.6](/releases/release-6.1.6.md) | 2023-04-12 | | [7.0.0-DMR](/releases/release-7.0.0.md) | 2023-03-30 | | [6.5.1](/releases/release-6.5.1.md) | 2023-03-10 | From d5e09d89afd141ed45d9446df2440db019004b8a Mon Sep 17 00:00:00 2001 From: Zhou Kunqin <25057648+time-and-fate@users.noreply.github.com> Date: Fri, 21 Apr 2023 14:07:22 +0800 Subject: [PATCH 032/257] plan-replayer, slow-queries: update new diagnostic information in tidb (#13730) --- identify-slow-queries.md | 8 +++++++- sql-plan-replayer.md | 1 + 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/identify-slow-queries.md b/identify-slow-queries.md index d840d8762b4c..d21659723a18 100644 --- a/identify-slow-queries.md +++ b/identify-slow-queries.md @@ -63,7 +63,13 @@ Slow Query 基础信息: * `Txn_start_ts`:表示事务的开始时间戳,也是事务的唯一 ID,可以用这个值在 TiDB 日志中查找事务相关的其他日志。 * `Is_internal`:表示是否为 TiDB 内部的 SQL 语句。`true` 表示 TiDB 系统内部执行的 SQL 语句,`false` 表示用户执行的 SQL 语句。 * `Index_names`:表示这个语句执行用到的索引。 -* `Stats`:表示这个语句涉及表的统计信息健康状态,`pseudo` 状态表示统计信息状态不健康。 +* `Stats`:表示这个语句使用到的统计信息的健康状态、内部版本号、总行数、修改行数以及加载状态。`pseudo` 状态表示统计信息不健康。如果有尝试使用但没有完全加载的统计信息,会在之后输出其内部状态。例如,`t1:439478225786634241[105000;5000][col1:allEvicted][idx1:allEvicted]` 的含义如下: + - `t1`:本次查询优化过程中使用了 `t1` 表上的统计信息 + - `439478225786634241`:其内部版本号 + - `105000`:统计信息中维护的总行数 + - `5000`:自上次收集统计信息以来记录的修改的行数 + - `col1:allEvicted`:`col1` 列对应的统计信息没有完全加载 + - `idx1:allEvicted`:`idx1` 索引对应的统计信息没有完全加载 * `Succ`:表示语句是否执行成功。 * `Backoff_time`:表示语句遇到需要重试的错误时在重试前等待的时间。常见的需要重试的错误有以下几种:遇到了 lock、Region 分裂、`tikv server is busy`。 * `Plan`:表示语句的执行计划,用 `select tidb_decode_plan('xxx...')` SQL 语句可以解析出具体的执行计划。 diff --git a/sql-plan-replayer.md b/sql-plan-replayer.md index bb21b1ea44a8..2453e17c881d 100644 --- a/sql-plan-replayer.md +++ b/sql-plan-replayer.md @@ -31,6 +31,7 @@ TiDB 根据 `sql-statement` 整理出以下集群现场信息: - `sql-statement` 中所包含的表结构 - `sql-statement` 中所包含表的统计信息 - `EXPLAIN [ANALYZE] sql-statement` 的结果 +- 优化器进行查询优化的一些内部步骤的记录 > **注意:** > From ffaf0ee8317daee2aa41d92120e102ee83ef12f1 Mon Sep 17 00:00:00 2001 From: Yuanjia Zhang Date: Fri, 21 Apr 2023 16:41:21 +0800 Subject: [PATCH 033/257] planner: update the doc of non-prepared plan cache (#13662) --- media/non-prepapred-plan-cache-unsupprot.png | Bin 0 -> 229194 bytes sql-non-prepared-plan-cache.md | 64 +++++++++++-------- sql-prepared-plan-cache.md | 30 +++++---- system-variables.md | 29 +++++++-- 4 files changed, 79 insertions(+), 44 deletions(-) create mode 100644 media/non-prepapred-plan-cache-unsupprot.png diff --git a/media/non-prepapred-plan-cache-unsupprot.png b/media/non-prepapred-plan-cache-unsupprot.png new file mode 100644 index 0000000000000000000000000000000000000000..6c365ffe639b77fdd5614d5451e3c907d015efd5 GIT binary patch literal 229194 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 literal 0 HcmV?d00001 diff --git a/sql-non-prepared-plan-cache.md b/sql-non-prepared-plan-cache.md index 0fd0d34a3df7..5dd326f0de7f 100644 --- a/sql-non-prepared-plan-cache.md +++ b/sql-non-prepared-plan-cache.md @@ -5,24 +5,26 @@ summary: 介绍 TiDB 中非 Prepare 语句执行计划缓存的原理、使用 # 非 Prepare 语句执行计划缓存 -> **警告:** -> -> 非 Prepare 语句执行计划缓存 (Non-Prepared Plan Cache) 目前为实验特性,不建议在生产环境中使用。该功能可能会在未事先通知的情况下发生变化或删除。如果发现 bug,请在 GitHub 上提 [issue](https://github.com/pingcap/tidb/issues) 反馈。 - 对于某些非 `PREPARE` 语句,TiDB 可以像 [`Prepare`/`Execute` 语句](/sql-prepared-plan-cache.md)一样支持执行计划缓存。这可以让这些语句跳过优化器阶段,以提升性能。 ## 原理 -Non-Prepared Plan Cache 为会话级别,并且与 [Prepared Plan Cache](/sql-prepared-plan-cache.md) 相互独立,缓存的计划互不影响。Non-Prepared Plan Cache 功能的基本原理如下: +Non-Prepared Plan Cache 为会话级别,并且与 [Prepared Plan Cache](/sql-prepared-plan-cache.md) 共用一个缓存。Non-Prepared Plan Cache 功能的基本原理如下: 1. 开启 Non-Prepared Plan Cache 后,TiDB 首先根据 AST(抽象语法树)对查询进行参数化。例如,将 `SELECT * FROM t WHERE b < 10 AND a = 1` 参数化为 `SELECT * FROM t WHERE b < ? and a = ?`。 -2. 然后,使用参数化后的查询在 Non-Prepared Plan Cache 中查找。 +2. 然后,使用参数化后的查询在 Plan Cache 中查找。 3. 如果能找到可以直接复用的计划,则直接使用,并跳过整个优化过程。 4. 否则,继续进行查询优化,并在最后将生成的计划放回到缓存中,以便下次复用。 ## 使用方法 -目前,你可以通过 [`tidb_enable_non_prepared_plan_cache`](/system-variables.md#tidb_enable_non_prepared_plan_cache) 开启或关闭 Non-Prepared Plan Cache。同时,你还可以通过 [`tidb_non_prepared_plan_cache_size`](/system-variables.md#tidb_non_prepared_plan_cache_size) 来控制 Non-Prepared Plan Cache 的大小。当缓存的计划数超过 `tidb_non_prepared_plan_cache_size` 时,TiDB 会使用 LRU (Least Recently Used) 策略进行逐出。 +目前,你可以通过 [`tidb_enable_non_prepared_plan_cache`](/system-variables.md#tidb_enable_non_prepared_plan_cache) 开启或关闭 Non-Prepared Plan Cache。同时,你还可以通过 [`tidb_session_plan_cache_size`](/system-variables.md#tidb_session_plan_cache_size-从-v710-版本开始引入) 来控制 Plan Cache 的大小。当缓存的计划数超过 `tidb_session_plan_cache_size` 时,TiDB 会使用 LRU (Least Recently Used) 策略进行逐出。 + +`tidb_enable_non_prepared_plan_cache` 在 v7.1.0 之前版本中默认值为 `OFF`,即默认关闭。在 v7.1.0 及之后的版本中默认值为 `ON`,即默认开启。 + +> **注意:** +> +> `tidb_session_plan_cache_size` 定义的内存会被 Prepared 和 Non-Prepared Plan Cache 共享。如果集群已经开启 Prepared Plan Cache,那么开启 Non-Prepared Plan Cache 可能降低原先 Prepared Plan Cache 的命中率。 ## 示例 @@ -37,7 +39,7 @@ Non-Prepared Plan Cache 为会话级别,并且与 [Prepared Plan Cache](/sql-p 2. 开启 Non-Prepared Plan Cache: ```sql - SET tidb_enable_non_prepared_plan_cache = true; + SET tidb_enable_non_prepared_plan_cache = ON; ``` 3. 依次执行以下查询: @@ -66,24 +68,36 @@ Non-Prepared Plan Cache 为会话级别,并且与 [Prepared Plan Cache](/sql-p ## 限制 +### 缓存限制 + TiDB 对参数化后形式相同的查询,只能缓存一个计划。例如,对于 `SELECT * FROM t WHERE a < 1` 和 `SELECT * FROM t WHERE a < 100000` 这两个查询语句,由于参数化后的形式相同,均为 `SELECT * FROM t WHERE a < ?`,因此它们会共用一个计划。 如果由此产生性能问题,可以使用 `ignore_plan_cache()` Hint 忽略计划缓存中的计划,让优化器每次重新为 SQL 生成执行计划。如果无法修改 SQL,可以通过创建 binding 来解决,例如 `CREATE BINDING FOR SELECT ... USING SELECT /*+ ignore_plan_cache() */ ...`。 +### 使用限制 + 由于上述风险以及执行计划缓存只在简单查询上有明显收益(如果查询较为复杂,查询本身执行时间较长,使用执行计划缓存收益不大),TiDB 目前对 Non-Prepared Plan Cache 的生效范围有严格的限制。具体限制如下: - [Prepared Plan Cache](/sql-prepared-plan-cache.md) 不支持的查询或者计划,Non-Prepared Plan Cache 也不支持。 -- 目前仅支持包含 `Scan`、`Selection` 或 `Projection` 算子的单表的点查或范围查询,例如 `SELECT * FROM t WHERE a < 10 AND b in (1, 2)`。 -- 不支持包含 `Agg`、`Limit`、`Window` 或 `Sort` 等复杂算子的查询。 -- 不支持包含非范围查询条件,例如: - - 不支持 `LIKE`,例如 `c LIKE 'c%'` - - 不支持 `+` 操作,例如 `a+1 < 2` +- 不支持包含 `Window` 或 `Having` 的查询。 +- 不支持包含三张表及以上 `Join` 或子查询的查询。 +- 不支持 `ORDER BY` 或者 `GROUP BY` 后直接带数字或者表达式的查询,如 `ORDER BY 1`、`GROUP BY a+1`。仅支持 `ORDER BY column_name` 和 `GROUP BY column_name`。 - 不支持过滤条件中包含 `JSON`、`ENUM`、`SET` 或 `BIT` 类型的列的查询,例如 `SELECT * FROM t WHERE json_col = '{}'`。 - 不支持过滤条件中出现 `NULL` 值的查询,例如 `SELECT * FROM t WHERE a is NULL`。 -- 不支持参数化后参数个数超过 50 个的查询,例如 `SELECT * FROM t WHERE a in (1, 2, 3, ... 51)`。 +- 不支持参数化后参数个数超过 200 个的查询,例如 `SELECT * FROM t WHERE a in (1, 2, 3, ... 201)`。 - 不支持访问分区表、虚拟列、临时表、视图、或内存表的查询,例如 `SELECT * FROM INFORMATION_SCHEMA.COLUMNS`,其中 `COLUMNS` 为 TiDB 内存表。 -- 不支持带有 Hint、子查询、Lock 的查询。 -- 不支持 DML 语句。 +- 不支持带有 Hint 或有 Binding 的查询。 +- 默认不支持 DML 语句或包含 `FOR UPDATE` 的查询语句。若要启用支持,你可以执行 `SET tidb_enable_non_prepared_plan_cache_for_dml = ON`。 + +开启此功能后,优化器会对查询进行快速判断,如果不满足 Non-Prepared Plan Cache 的支持条件,则会走正常的优化流程。 + +## 性能收益 + +在内部测试中,开启 Non-Prepared Plan Cache 功能在大多数 TP 场景下可以获得显著的性能收益。但是它也有代价,其自身也有一些额外的性能开销,包括判断查询是否支持、对查询进行参数化等。如果此功能不支持负载中的大多数查询,开启此功能反而可能影响性能。 + +此时,你需要观察 Grafana 监控中的 **Queries Using Plan Cache OPS** 面板中的 `non-prepared` 指标和 **Plan Cache Miss OPS** 面板中的 `non-prepared-unsupported` 指标。如果大多数查询都无法被支持,只有少部分查询能命中 Plan Cache,此时你可以关闭此功能。 + +![non-prepared-unsupported](/media/non-prepapred-plan-cache-unsupprot.png) ## 诊断 @@ -94,7 +108,7 @@ TiDB 对参数化后形式相同的查询,只能缓存一个计划。例如, 执行下面 `EXPLAIN FORMAT='plan_cache'` 语句,查看查询是否能够命中: ```sql -EXPLAIN FORMAT='plan_cache' SELECT * FROM t WHERE a+2 < 10; +EXPLAIN FORMAT='plan_cache' SELECT * FROM (SELECT a+1 FROM t1) t; ``` 输出结果示例如下: @@ -112,11 +126,11 @@ SHOW warnings; 输出结果示例如下: ```sql -+---------+------+-----------------------------------------------------------------------+ -| Level | Code | Message | -+---------+------+-----------------------------------------------------------------------+ -| Warning | 1105 | skip non-prep plan cache: query has some unsupported binary operation | -+---------+------+-----------------------------------------------------------------------+ ++---------+------+-------------------------------------------------------------------------------+ +| Level | Code | Message | ++---------+------+-------------------------------------------------------------------------------+ +| Warning | 1105 | skip non-prepared plan-cache: queries that have sub-queries are not supported | ++---------+------+-------------------------------------------------------------------------------+ 1 row in set (0.00 sec) ``` @@ -139,7 +153,7 @@ SHOW warnings; 2. 打开 Non-Prepared Plan Cache 开关: ```sql - SET @@tidb_enable_non_prepared_plan_cache=1; + SET @@tidb_enable_non_prepared_plan_cache = ON; ``` 3. 依次执行以下三个查询: @@ -153,7 +167,7 @@ SHOW warnings; 4. 查询 `statements_summary` 表查看查询命中缓存的情况: ```sql - SELECT digest_text, query_sample_text, exec_count, plan_in_cache, plan_cache_hits FROM INFORMATION_SCHEMA.STATEMENTS_SUMMARY WHERE digest_text LIKE '%SELECT * FROM %'; + SELECT digest_text, query_sample_text, exec_count, plan_in_cache, plan_cache_hits FROM INFORMATION_SCHEMA.STATEMENTS_SUMMARY WHERE query_sample_text LIKE '%SELECT * FROM %'; ``` 输出结果如下: @@ -162,7 +176,7 @@ SHOW warnings; +---------------------------------+------------------------------------------+------------+---------------+-----------------+ | digest_text | query_sample_text | exec_count | plan_in_cache | plan_cache_hits | +---------------------------------+------------------------------------------+------------+---------------+-----------------+ - | SELECT * FROM `t` WHERE `a` < ? | SELECT * FROM t WHERE a<1 [arguments: 1] | 3 | 1 | 2 | + | SELECT * FROM `t` WHERE `a` < ? | SELECT * FROM t WHERE a<1 | 3 | 1 | 2 | +---------------------------------+------------------------------------------+------------+---------------+-----------------+ 1 row in set (0.01 sec) ``` diff --git a/sql-prepared-plan-cache.md b/sql-prepared-plan-cache.md index 5dd47ab096a5..206014ff9bef 100644 --- a/sql-prepared-plan-cache.md +++ b/sql-prepared-plan-cache.md @@ -1,19 +1,21 @@ --- -title: 执行计划缓存 +title: Prepare 语句执行计划缓存 aliases: ['/docs-cn/dev/sql-prepare-plan-cache/','zh/tidb/dev/sql-prepare-plan-cache'] --- -# 执行计划缓存 +# Prepare 语句执行计划缓存 -TiDB 支持对 `Prepare` / `Execute` 请求的执行计划缓存。其中包括以下两种形式的预处理语句: +TiDB 支持对 `Prepare`/`Execute` 请求的执行计划缓存。其中包括以下两种形式的预处理语句: - 使用 `COM_STMT_PREPARE` 和 `COM_STMT_EXECUTE` 的协议功能; -- 执行 `Prepare` / `Execute` SQL 语句查询; +- 执行 `Prepare`/`Execute` SQL 语句查询; TiDB 优化器对这两类查询的处理是一样的:`Prepare` 时将参数化的 SQL 查询解析成 AST(抽象语法树),每次 `Execute` 时根据保存的 AST 和具体的参数值生成执行计划。 当开启执行计划缓存后,每条 `Prepare` 语句的第一次 `Execute` 会检查当前查询是否可以使用执行计划缓存,如果可以则将生成的执行计划放进一个由 LRU 链表构成的缓存中;在后续的 `Execute` 中,会先从缓存中获取执行计划,并检查是否可用,如果获取和检查成功则跳过生成执行计划这一步,否则重新生成执行计划并放入缓存中。 +对于某些非 `PREPARE` 语句,TiDB 可以像 `Prepare`/`Execute` 语句一样支持执行计划缓存,详情请参考[非 Prepare 语句执行计划缓存](/sql-non-prepared-plan-cache.md)。 + 在当前版本中,当 `Prepare` 语句符合以下条件任何一条,查询或者计划不会被缓存: - `SELECT`、`UPDATE`、`INSERT`、`DELETE`、`Union`、`Intersect`、`Except` 以外的 SQL 语句; @@ -23,7 +25,7 @@ TiDB 优化器对这两类查询的处理是一样的:`Prepare` 时将参数 - 包含 `ignore_plan_cache` 这一 Hint 的查询,例如 `select /*+ ignore_plan_cache() */ * from t`; - 包含除 `?` 外其他变量(即系统变量或用户自定义变量)的查询,例如 `select * from t where a>? and b>@x`; - 查询包含无法被缓存函数。目前不能被缓存的函数有:`database()`、`current_user`、`current_role`、`user`、`connection_id`、`last_insert_id`、`row_count`、`version`、`like`; -- `LIMIT` 后面带有变量 (例如 `LIMIT ?` 或 `LIMIT 10, ?`) 且变量值大于 10000 的执行计划不缓存; +- `LIMIT` 后面带有变量(例如 `LIMIT ?` 或 `LIMIT 10, ?`)且变量值大于 10000 的执行计划不缓存; - `?` 直接在 `Order By` 后的查询,如 `Order By ?`,此时 `?` 表示根据 `Order By` 后第几列排序,排序列不同的查询使用同一个计划可能导致错误结果,故不缓存;如果是普通表达式,如 `Order By a+?` 则会缓存; - `?` 紧跟在 `Group by` 后的查询,如 `Group By ?`,此时 `?` 表示根据 `Group By` 后第几列聚合,聚合列不同的查询使用同一个计划可能导致错误结果,故不缓存;如果是普通表达式,如 `Group By a+?` 则会缓存; - `?` 出现在窗口函数 `Window Frame` 定义中的查询,如 `(partition by year order by sale rows ? preceding)`;如果 `?` 出现在窗口函数的其他位置,则会缓存; @@ -31,7 +33,7 @@ TiDB 优化器对这两类查询的处理是一样的:`Prepare` 时将参数 - 会访问 `TiFlash` 的计划不会被缓存; - 大部分情况下计划中含有 `TableDual` 的计划将将不会被缓存,除非当前执行的 `Prepare` 语句不含参数,则对应的 `TableDual` 计划可以被缓存。 -LRU 链表是设计成 session 级别的缓存,因为 `Prepare` / `Execute` 不能跨 session 执行。LRU 链表的每个元素是一个 key-value 对,value 是执行计划,key 由如下几部分组成: +LRU 链表是设计成 session 级别的缓存,因为 `Prepare`/`Execute` 不能跨 session 执行。LRU 链表的每个元素是一个 key-value 对,value 是执行计划,key 由如下几部分组成: - 执行 `Execute` 时所在数据库的名字; - `Prepare` 语句的标识符,即紧跟在 `PREPARE` 关键字后的名字; @@ -40,7 +42,7 @@ LRU 链表是设计成 session 级别的缓存,因为 `Prepare` / `Execute` - 当前设置的时区,即系统变量 `time_zone` 的值; - 系统变量 `sql_select_limit` 的值; -key 中任何一项变动(如切换数据库,重命名 `Prepare` 语句,执行 DDL,或修改 SQL Mode / `time_zone` 的值),或 LRU 淘汰机制触发都会导致 `Execute` 时无法命中执行计划缓存。 +key 中任何一项变动(如切换数据库、重命名 `Prepare` 语句、执行 DDL、修改 SQL Mode/`time_zone` 的值)、或 LRU 淘汰机制触发都会导致 `Execute` 时无法命中执行计划缓存。 成功从缓存中获取到执行计划后,TiDB 会先检查执行计划是否依然合法,如果当前 `Execute` 在显式事务里执行,并且引用的表在事务前序语句中被修改,而缓存的执行计划对该表访问不包含 `UnionScan` 算子,则它不能被执行。 @@ -58,9 +60,9 @@ key 中任何一项变动(如切换数据库,重命名 `Prepare` 语句, > **注意:** > -> 执行计划缓存功能仅针对 `Prepare` / `Execute` 请求,对普通查询无效。 +> 执行计划缓存功能仅针对 `Prepare`/`Execute` 请求,对普通查询无效。 -在开启了执行计划缓存功能后,可以通过 session 级别的系统变量 `last_plan_from_cache` 查看上一条 `Execute` 语句是否使用了缓存的执行计划,例如: +在开启了执行计划缓存功能后,可以通过 SESSION 级别的系统变量 [`last_plan_from_cache`](/system-variables.md#last_plan_from_cache-从-v40-版本开始引入) 查看上一条 `Execute` 语句是否使用了缓存的执行计划,例如: {{< copyable "sql" >}} @@ -99,7 +101,7 @@ MySQL [test]> select @@last_plan_from_cache; 1 row in set (0.00 sec) ``` -如果发现某一组 `Prepare` / `Execute` 由于执行计划缓存导致了非预期行为,可以通过 SQL Hint `ignore_plan_cache()` 让该组语句不使用缓存。还是用上述的 `stmt` 为例: +如果发现某一组 `Prepare`/`Execute` 由于执行计划缓存导致了非预期行为,可以通过 SQL Hint `ignore_plan_cache()` 让该组语句不使用缓存。还是用上述的 `stmt` 为例: {{< copyable "sql" >}} @@ -152,7 +154,7 @@ mysql> SHOW WARNINGS; -- 查看查询计划无法被缓存的原因 mysql> PREPARE st FROM 'SELECT * FROM t WHERE a SET @a='1'; +mysql> SET @a='1'; Query OK, 0 rows affected (0.00 sec) mysql> EXECUTE st USING @a; -- 该优化中进行了非 INT 类型到 INT 类型的转换,产生的执行计划可能随着参数变化而存在风险,因此 TiDB 不缓存该计划 @@ -181,10 +183,10 @@ Grafana 中 `Plan Cache Memory Usage` 和 `Plan Cache Plan Num` 监控如下图 ![grafana_panels](/media/planCache-memoryUsage-planNum-panels.png) -目前可以通过变量 `tidb_prepared_plan_cache_size` 来设置每个 `SESSION` 最多缓存的计划数量,针对不同的环境,推荐的设置如下,你可以结合监控进行调整: +从 v7.1.0 开始,你可以通过变量 [`tidb_session_plan_cache_size`](/system-variables.md#tidb_session_plan_cache_size-从-v710-版本开始引入) 来设置每个 `SESSION` 最多缓存的计划数量。针对不同的环境,推荐的设置如下,你可以结合监控进行调整: -- TiDB Server 实例内存阈值 <= 64 GiB 时,`tidb_prepared_plan_cache_size = 50` -- TiDB Server 实例内存阈值 > 64 GiB 时,`tidb_prepared_plan_cache_size = 100` +- TiDB Server 实例内存阈值 <= 64 GiB 时,`tidb_session_plan_cache_size = 50` +- TiDB Server 实例内存阈值 > 64 GiB 时,`tidb_session_plan_cache_size = 100` 当 TiDB Server 的内存余量小于一定阈值时,会触发 Plan Cache 的内存保护机制,此时会对一些缓存的计划进行逐出。 diff --git a/system-variables.md b/system-variables.md index dfa593f0bbff..4d17621a7474 100644 --- a/system-variables.md +++ b/system-variables.md @@ -1316,15 +1316,20 @@ MPP 是 TiFlash 引擎提供的分布式计算框架,允许节点之间的数 ### `tidb_enable_non_prepared_plan_cache` -> **警告:** -> -> 非 Prepare 语句执行计划缓存目前为实验特性,不建议在生产环境中使用。该功能可能会在未事先通知的情况下发生变化或删除。如果发现 bug,请在 GitHub 上提 [issue](https://github.com/pingcap/tidb/issues) 反馈。 +- 作用域:SESSION | GLOBAL +- 是否持久化到集群:是 +- 类型:布尔型 +- 默认值:在 v7.1.0 之前版本中为 `OFF`,即默认关闭。在 v7.1.0 及之后的版本中为 `ON`,即默认开启。 +- 这个变量用来控制是否开启[非 Prepare 语句执行计划缓存](/sql-non-prepared-plan-cache.md)。 +- 从旧版本升级到 v7.1.0 及之后版本,该变量开关保持升级前的状态。 + +### `tidb_enable_non_prepared_plan_cache_for_dml` 从 v7.1.0 版本开始引入 - 作用域:SESSION | GLOBAL - 是否持久化到集群:是 - 类型:布尔型 - 默认值:`OFF` -- 这个变量用来控制是否开启[非 Prepare 语句执行计划缓存](/sql-non-prepared-plan-cache.md)。 +- 这个变量用来控制[非 Prepare 语句执行计划缓存](/sql-non-prepared-plan-cache.md)是否支持 DML 语句。 ### `tidb_enable_gogc_tuner` 从 v6.4.0 版本开始引入 @@ -1922,7 +1927,7 @@ v5.0 后,用户仍可以单独修改以上系统变量(会有废弃警告) > **警告:** > -> 非 Prepare 语句执行计划缓存目前为实验特性,不建议在生产环境中使用。该功能可能会在未事先通知的情况下发生变化或删除。如果发现 bug,请在 GitHub 上提 [issue](https://github.com/pingcap/tidb/issues) 反馈。 +> 从 v7.1.0 开始,该变量被废弃。请使用 [`tidb_session_plan_cache_size`](#tidb_session_plan_cache_size-从-v710-版本开始引入) 进行设置。 - 作用域:SESSION | GLOBAL - 是否持久化到集群:是 @@ -3081,6 +3086,10 @@ EXPLAIN FORMAT='brief' SELECT COUNT(1) FROM t WHERE a = 1 AND b IS NOT NULL; ### `tidb_prepared_plan_cache_size` 从 v6.1.0 版本开始引入 +> **警告:** +> +> 从 v7.1.0 开始,该变量被废弃。请使用 [`tidb_session_plan_cache_size`](#tidb_session_plan_cache_size-从-v710-版本开始引入) 进行设置。 + - 作用域:SESSION | GLOBAL - 是否持久化到集群:是 - 默认值:`100` @@ -3252,6 +3261,16 @@ EXPLAIN FORMAT='brief' SELECT COUNT(1) FROM t WHERE a = 1 AND b IS NOT NULL; - 取值范围:`[128, 9223372036854775807]`,单位为 Byte。支持带单位的内存格式“KB|MB|GB|TB”。 - 开启内存限制后,TiDB 会终止当前实例上内存用量最高的 SQL 语句。本变量指定此情况下 SQL 语句被终止的最小内存用量。如果 TiDB 实例的内存超限是由许多内存使用量不明显的会话导致的,可以适当调小该变量值,使得更多会话成为 Cancel 的对象。 +### `tidb_session_plan_cache_size` 从 v7.1.0 版本开始引入 + +- 作用域:SESSION | GLOBAL +- 是否持久化到集群:是 +- 类型:整数型 +- 默认值:`100` +- 范围:`[1, 100000]` +- 这个变量用来控制 Plan Cache 最多能够缓存的计划数量。其中,[Prepare 语句执行计划缓存](/sql-prepared-plan-cache.md)和[非 Prepare 语句执行计划缓存](/sql-non-prepared-plan-cache.md)共用一个缓存。 +- 从旧版本升级到 v7.1.0 及之后的版本,`tidb_session_plan_cache_size` 的值与 [`tidb_prepared_plan_cache_size`](#tidb_prepared_plan_cache_size-从-v610-版本开始引入) 保持一致。 + ### `tidb_shard_allocate_step` 从 v5.0 版本开始引入 - 作用域:SESSION | GLOBAL From 8a267ef39a4b680f184082a1597b4185b9aa246a Mon Sep 17 00:00:00 2001 From: you06 Date: Sun, 23 Apr 2023 10:34:44 +0800 Subject: [PATCH 034/257] add notice for now usage in stale read (#13738) * add notice for now usage in stale read Signed-off-by: you06 * Update develop/dev-guide-use-stale-read.md Co-authored-by: Aolin * Apply suggestions from code review --------- Signed-off-by: you06 Co-authored-by: Aolin --- develop/dev-guide-use-stale-read.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/develop/dev-guide-use-stale-read.md b/develop/dev-guide-use-stale-read.md index 07b72bd8ac22..aa5bdf558f42 100644 --- a/develop/dev-guide-use-stale-read.md +++ b/develop/dev-guide-use-stale-read.md @@ -101,7 +101,7 @@ SELECT id, title, type, price FROM books AS OF TIMESTAMP '2022-04-20 15:20:00' O - `AS OF TIMESTAMP TIDB_BOUNDED_STALENESS('2016-10-08 16:45:26', '2016-10-08 16:45:29')` 表示读取在 2016 年 10 月 8 日 16 点 45 分 26 秒到 29 秒的时间范围内尽可能新的数据。 - `AS OF TIMESTAMP TIDB_BOUNDED_STALENESS(NOW() - INTERVAL 20 SECOND, NOW())` 表示读取 20 秒前到现在的时间范围内尽可能新的数据。 -需要注意的是,设定的时间戳或时间戳的范围不能过早或晚于当前时间。 +需要注意的是,设定的时间戳或时间戳的范围不能过早或晚于当前时间。此外 `NOW()` 默认精确到秒,当精度要求较高时,需要添加参数,例如 `NOW(3)` 精确到毫秒。详情请参考 [MySQL 文档](https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_now)。 过期的数据在 TiDB 当中会由[垃圾回收器](/garbage-collection-overview.md)进行回收,数据在被清除之前会被保留一小段时间,这段时间被称为 [GC Life Time (默认 10 分钟)](/system-variables.md#tidb_gc_life_time-从-v50-版本开始引入)。每次进行 GC 时,将以当前时间减去该时间周期的值作为 **GC Safe Point**。如果尝试读取 GC Safe Point 之前数据,TiDB 会报如下错误: From 3d8afe8dbb8ecb6b9cfa75e9ea5f7e311b1ecfb1 Mon Sep 17 00:00:00 2001 From: xixirangrang Date: Sun, 23 Apr 2023 12:12:44 +0800 Subject: [PATCH 035/257] Update hardware-and-software-requirements.md (#13770) --- hardware-and-software-requirements.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hardware-and-software-requirements.md b/hardware-and-software-requirements.md index 53dd7d554874..0a838baa3bf2 100644 --- a/hardware-and-software-requirements.md +++ b/hardware-and-software-requirements.md @@ -107,7 +107,7 @@ TiDB 支持部署和运行在 Intel x86-64 架构的 64 位通用硬件服务器 | **组件** | **CPU** | **内存** | **硬盘类型** | **网络** | **实例数量(最低要求)** | | --- | --- | --- | --- | --- | --- | -| TiDB | 16 核+ | 48 GB+ | SAS | 万兆网卡(2 块最佳) | 2 | +| TiDB | 16 核+ | 48 GB+ | SSD | 万兆网卡(2 块最佳) | 2 | | PD | 8 核+ | 16 GB+ | SSD | 万兆网卡(2 块最佳) | 3 | | TiKV | 16 核+ | 64 GB+ | SSD | 万兆网卡(2 块最佳) | 3 | | TiFlash | 48 核+ | 128 GB+ | 1 or more SSDs | 万兆网卡(2 块最佳) | 2 | From 11d4e39bbbddcae22fb2dd3e471edda6994a8101 Mon Sep 17 00:00:00 2001 From: Hu# Date: Sun, 23 Apr 2023 13:34:44 +0800 Subject: [PATCH 036/257] sql-statement: calibrate resource support workload (#13709) * support workload Signed-off-by: husharp * support workload Signed-off-by: husharp * Update sql-statement-calibrate-resource.md * update Signed-off-by: husharp * Update sql-statement-calibrate-resource.md * update Signed-off-by: husharp * update Signed-off-by: husharp * update ebnf Signed-off-by: husharp * Apply suggestions from code review Co-authored-by: Aolin * update case Signed-off-by: husharp * Apply suggestions from code review Co-authored-by: Aolin * update Signed-off-by: husharp * Update sql-statement-calibrate-resource.md * Update sql-statement-calibrate-resource.md * add parameter Signed-off-by: husharp * Apply suggestions from code review * Update sql-statements/sql-statement-calibrate-resource.md * Update sql-statement-calibrate-resource.md * Update sql-statement-calibrate-resource.md * address comment Signed-off-by: husharp * address comment Signed-off-by: husharp * Update sql-statements/sql-statement-calibrate-resource.md --------- Signed-off-by: husharp Co-authored-by: xixirangrang <35301108+hfxsd@users.noreply.github.com> Co-authored-by: xixirangrang Co-authored-by: Aolin --- .../sql-statement-calibrate-resource.md | 93 +++++++++++++++++-- 1 file changed, 85 insertions(+), 8 deletions(-) diff --git a/sql-statements/sql-statement-calibrate-resource.md b/sql-statements/sql-statement-calibrate-resource.md index b9b7538b194d..3e9c0dd4e105 100644 --- a/sql-statements/sql-statement-calibrate-resource.md +++ b/sql-statements/sql-statement-calibrate-resource.md @@ -10,8 +10,39 @@ summary: TiDB 数据库中 CALIBRATE RESOURCE 的使用概况。 ## 语法图 ```ebnf+diagram -CalibrateResourceStmt ::= 'CALIBRATE' 'RESOURCE' -``` +CalibrateResourceStmt ::= 'CALIBRATE' 'RESOURCE' CalibrateOption + +CalibrateOption ::= +('START_TIME' 'TIMESTAMP' ('DURATION' stringLit | 'END_TIME' 'TIMESTAMP')?) +| ('WORKLOAD' ('TPCC' | 'OLTP_READ_WRITE' | 'OLTP_READ_ONLY' | 'OLTP_WRITE_ONLY'))? + +``` + +## 预估方式 + +TiDB 提供两种预估方式: + +### 根据实际负载估算容量 + +如果应用已经在线上运行,或者你能够运行实际业务测试,建议利用一段时间的实际负载来预估总容量。为了提高预估准确性,需要遵守以下约束条件: + +- 使用 `START_TIME` 参数指定预估开始的时间点,格式为 `2006-01-02 15:04:05`,默认预估结束时间为当前时间。 +- 指定完成 `START_TIME` 参数后,可以使用 `END_TIME` 参数指定预估结束时间,或者使用 `DURATION` 参数指定距离 `START_TIME` 的预估时间窗口。 +- 时间窗口范围为 10 分钟至 24 小时。 +- 在预估的时间窗口内,TiDB 与 TiKV 的 CPU 利用率不能过低,否则无法进行容量估算。 + +### 基于硬件部署估算容量 + +这种方式主要根据当前的集群配置,结合对不同负载观测的经验值进行预估。由于不同类型的负载对硬件的配比要求不同,相同配置的硬件所输出的容量也会有所不同。这里的 `WORKLOAD` 参数提供了以下不同的负载类型供选择,默认为 `TPCC`: + +- `TPCC`:数据写入较重的负载,根据类似 `TPC-C` 的负载模型预测。 +- `OLTP_WRITE_ONLY`:数据写入较重的负载,根据类似 `sysbench oltp_write_only` 的负载模型预测。 +- `OLTP_READ_WRITE`:数据读写平衡的负载,根据类似 `sysbench oltp_read_write` 的负载模型预测。 +- `OLTP_READ_ONLY`:数据读取较重的负载,根据类似 `sysbench oltp_read_only` 的负载模型预测。 + +> **注意:** +> +> 集群 RU 的容量会随集群的拓扑结构和各个组件软硬件配置的变化而变化,每个集群实际能消耗的 RU 还与实际的负载相关。基于硬件部署估算容量的预估值仅供参考,可能会与实际的最大值存在偏差。建议[根据实际负载估算容量](#根据实际负载估算容量)。 ## 权限 @@ -23,16 +54,62 @@ CalibrateResourceStmt ::= 'CALIBRATE' 'RESOURCE' ## 示例 +指定初始时间 `START_TIME` 和时间窗口 `DURATION` 大小,根据实际负载查看 RU 容量。 + ```sql -CALIBRATE RESOURCE; +CALIBRATE RESOURCE START_TIME '2023-04-18 08:00:00' DURATION '20m'; +-------+ | QUOTA | +-------+ -| 68569 | +| 27969 | +-------+ -1 row in set (0.03 sec) +1 row in set (0.01 sec) ``` -> **注意:** -> -> 集群 RU 的容量会随集群的拓扑结构和各个组件软硬件配置的变化而变化,每个集群实际能消耗的 RU 还与实际的负载相关。此预估值仅供参考,可能会与实际的最大值存在偏差。 +指定初始时间 `START_TIME` 和结束时间 `END_TIME`,根据实际负载查看 RU 容量。 + +```sql +CALIBRATE RESOURCE START_TIME '2023-04-18 08:00:00' END_TIME '2023-04-18 08:20:00'; ++-------+ +| QUOTA | ++-------+ +| 27969 | ++-------+ +1 row in set (0.01 sec) +``` + +当时间窗口范围 `DURATION` 不满足 10 分钟至 24 小时的条件,会导致报错提醒。 + +```sql +CALIBRATE RESOURCE START_TIME '2023-04-18 08:00:00' DURATION '25h'; +ERROR 1105 (HY000): the duration of calibration is too long, which could lead to inaccurate output. Please make the duration between 10m0s and 24h0m0s +CALIBRATE RESOURCE START_TIME '2023-04-18 08:00:00' DURATION '9m'; +ERROR 1105 (HY000): the duration of calibration is too short, which could lead to inaccurate output. Please make the duration between 10m0s and 24h0m0s +``` + +当时间窗口范围内的负载过低,会导致报错提醒。 + +```sql +CALIBRATE RESOURCE START_TIME '2023-04-18 08:00:00' DURATION '60m'; +ERROR 1105 (HY000): The workload in selected time window is too low, with which TiDB is unable to reach a capacity estimation; please select another time window with higher workload, or calibrate resource by hardware instead +``` + +指定 `WORKLOAD` 查看 RU 容量,默认为 `TPCC`。 + +```sql +CALIBRATE RESOURCE; ++-------+ +| QUOTA | ++-------+ +| 190470 | ++-------+ +1 row in set (0.01 sec) + +CALIBRATE RESOURCE WORKLOAD OLTP_WRITE_ONLY; ++-------+ +| QUOTA | ++-------+ +| 27444 | ++-------+ +1 row in set (0.01 sec) +``` \ No newline at end of file From 641c7ad2a51f15a7d82b94a5b1fd120942c80cc2 Mon Sep 17 00:00:00 2001 From: Yifan Xu <30385241+xuyifangreeneyes@users.noreply.github.com> Date: Sun, 23 Apr 2023 13:46:44 +0800 Subject: [PATCH 037/257] *: add configuration performance.lite-init-stats (#13719) * add configuration lite-init-stats * Update tidb-configuration-file.md Co-authored-by: Aolin * more description about lite init stats * upd * upd * Update statistics.md * Update statistics.md * Update statistics.md * Update statistics.md * Apply suggestions from code review Co-authored-by: Aolin --------- Co-authored-by: xixirangrang Co-authored-by: Aolin --- statistics.md | 11 +++++++++++ tidb-configuration-file.md | 11 +++++++++++ 2 files changed, 22 insertions(+) diff --git a/statistics.md b/statistics.md index 4304d346fb30..e51b3348d0f3 100644 --- a/statistics.md +++ b/statistics.md @@ -684,6 +684,17 @@ DROP STATS TableName GLOBAL; - 通过修改 TiDB 配置项 [`stats-load-concurrency`](/tidb-configuration-file.md#stats-load-concurrency-从-v540-版本开始引入) 的值控制统计信息同步加载可以并发处理的最大列数。该配置项的默认值为 `5`。 - 通过修改 TiDB 配置项 [`stats-load-queue-size`](/tidb-configuration-file.md#stats-load-queue-size-从-v540-版本开始引入) 的值设置统计信息同步加载最多可以缓存多少列的请求。该配置项的默认值为 `1000`。 +> **警告:** +> +> 轻量级的统计信息初始化目前为实验特性,不建议在生产环境中使用。该功能可能会在未事先通知的情况下发生变化或删除。如果发现 bug,请在 GitHub 上提 [issue](https://github.com/pingcap/tidb/issues) 反馈。 + +从 v7.1.0 开始,TiDB 引入了配置参数 [`lite-init-stats`](/tidb-configuration-file.md#lite-init-stats-从-v710-版本开始引入) 用于控制是否开启轻量级的统计信息初始化。 + +- 当 `lite-init-stats` 为 `true` 时,统计信息初始化时列和索引的直方图、TopN、Count-Min Sketch 均不会加载到内存中。 +- 当 `lite-init-stats` 为 `false` 时,统计信息初始化时索引和主键的直方图、TopN、Count-Min Sketch 会被加载到内存中,非主键列的直方图、TopN、Count-Min Sketch 不会加载到内存中。当优化器需要某一索引或者列的直方图、TopN、Count-Min Sketch 时,这些统计信息会被同步或异步加载到内存中。 + +`lite-init-stats` 默认值为 `false`,即关闭轻量级的统计信息初始化。将 `lite-init-stats` 设置为 `true` 可以加速统计信息初始化,避免加载不必要的统计信息,从而降低 TiDB 的内存使用。 + ## 统计信息的导入导出 ### 导出统计信息 diff --git a/tidb-configuration-file.md b/tidb-configuration-file.md index 38574494d04c..01f446f5898b 100644 --- a/tidb-configuration-file.md +++ b/tidb-configuration-file.md @@ -551,6 +551,17 @@ TiDB 配置文件比命令行参数支持更多的选项。你可以在 [config/ + 用于控制 TiDB 是否开启统计信息缓存的内存上限。 + 默认值:false +### `lite-init-stats` 从 v7.1.0 版本开始引入 + +> **警告:** +> +> 该变量控制的功能目前为实验特性,不建议在生产环境中使用。该功能可能会在未事先通知的情况下发生变化或删除。如果发现 bug,请在 GitHub 上提 [issue](https://github.com/pingcap/tidb/issues) 反馈。 + ++ 用于控制 TiDB 启动时是否采用轻量级的统计信息初始化。 ++ 默认值:false ++ 当 `lite-init-stats` 为 `true` 时,统计信息初始化时列和索引的直方图、TopN、Count-Min Sketch 均不会加载到内存中。当 `lite-init-stats` 为 `false` 时,统计信息初始化时索引和主键的直方图、TopN、Count-Min Sketch 会被加载到内存中,非主键列的直方图、TopN、Count-Min Sketch 不会加载到内存中。当优化器需要某一索引或者列的直方图、TopN、Count-Min Sketch 时,这些统计信息会被同步或异步加载到内存中(由 [`tidb_stats_load_sync_wait`](/system-variables.md#tidb_stats_load_sync_wait-从-v540-版本开始引入) 控制)。 ++ 将 `lite-init-stats` 设置为 true,可以加速统计信息初始化,避免加载不必要的统计信息,从而降低 TiDB 的内存使用。详情请参考[统计信息的加载](/statistics.md#统计信息的加载)。 + ## opentracing opentracing 的相关的设置。 From ab3e41933b54d54263f7fe6b2432a9bc90dcd7b5 Mon Sep 17 00:00:00 2001 From: Zhou Kunqin <25057648+time-and-fate@users.noreply.github.com> Date: Sun, 23 Apr 2023 13:56:44 +0800 Subject: [PATCH 038/257] system-variables: add `tidb_opt_fix_control` (#13733) * add * Update system-variables.md Co-authored-by: Roger Song * Update system-variables.md Co-authored-by: Roger Song * Update system-variables.md Co-authored-by: Aolin * include fix control description * Update control-execution-plan.md * Update control-execution-plan.md Co-authored-by: Aolin * Update control-execution-plan.md * Update control-execution-plan.md * Update control-execution-plan.md Co-authored-by: Aolin --------- Co-authored-by: xixirangrang Co-authored-by: Roger Song Co-authored-by: Aolin --- control-execution-plan.md | 2 ++ system-variables.md | 10 ++++++++++ 2 files changed, 12 insertions(+) diff --git a/control-execution-plan.md b/control-execution-plan.md index fc341840122f..bda403c24afd 100644 --- a/control-execution-plan.md +++ b/control-execution-plan.md @@ -10,3 +10,5 @@ SQL 性能调优的前两个章节介绍了如何理解 TiDB 的执行计划以 - [Optimizer Hints](/optimizer-hints.md)中,我们会介绍如何使用 Hint 来指导 TiDB 生成执行计划。 - 但是使用 Hint 会侵入性地更改 SQL,在一些场景下并不能简单的插入 Hint。在[执行计划管理](/sql-plan-management.md)中,我们会介绍 TiDB 如何使用另一种语法来非侵入地控制执行计划的生成,同时还会介绍后台自动对执行计划进行演进的手段。该手段可用来减轻诸如版本升级等原因造成的执行计划不稳定和集群性能下降的问题。 - 最后在[优化规则及表达式下推的黑名单](/blocklist-control-plan.md)中,我们会介绍黑名单的使用。 + +除以上手段之外,执行计划还会被一部分系统变量所影响。通过在系统级或会话级对变量进行修改,能够控制执行计划的生成。自 v7.1.0 起,TiDB 引入了一个相对特殊的变量 [`tidb_opt_fix_control`](/system-variables.md#tidb_opt_fix_control-从-v710-版本开始引入)。这个变量能够接受多个控制项,用来更细粒度地控制优化器的行为,避免集群升级后优化器行为变化导致的性能回退。 diff --git a/system-variables.md b/system-variables.md index 4d17621a7474..6141ef39703d 100644 --- a/system-variables.md +++ b/system-variables.md @@ -2597,6 +2597,16 @@ mysql> desc select count(distinct a) from test.t; - 这个变量用来控制是否启用 [TiFlash 延迟物化](/tiflash/tiflash-late-materialization.md)功能。 - 默认情况下,如果 `SELECT` 语句中包含过滤条件(`WHERE` 子句),TiFlash 会先扫描查询所需列的全部数据后再进行过滤。当设置该变量为 `ON` 开启 TiFlash 延迟物化功能时,TiFlash 可以先扫描过滤条件相关的列数据,过滤得到符合条件的行后,再扫描这些行的其他列数据,继续后续计算,从而减少 IO 扫描和数据处理的计算量。 +### `tidb_opt_fix_control` 从 v7.1.0 版本开始引入 + +- 作用域:SESSION | GLOBAL +- 是否持久化到集群:是 +- 类型:字符串 +- 默认值:`""` +- 这个变量用来控制优化器的一些内部行为。 +- 一部分优化器行为的选择依赖用户场景或 SQL 编写方式。通过设置该变量,你可以更细粒度地控制优化器的行为,并且避免集群升级后优化器行为变化导致的性能回退。 +- 该变量支持设置多个控制项,不同控制项之间使用逗号 (`,`) 分隔。格式形如 `"<#issue1>:,<#issue2>:,...,<#issueN>:"`,其中 `<#issueN>` 代表控制项编号,对应链接 `https://github.com/pingcap/tidb/issues/<#issue>` 对该控制项进行说明,`` 是为该控制项设置的目标值。 + ### `tidb_opt_force_inline_cte` 从 v6.3.0 版本开始引入 - 作用域:SESSION | GLOBAL From 24b2153d460cd5da85580e99c1f35bcfd2f72fd8 Mon Sep 17 00:00:00 2001 From: xixirangrang Date: Sun, 23 Apr 2023 14:02:44 +0800 Subject: [PATCH 039/257] sql-plan: add description about plan baseline (#13769) * Update sql-plan-management.md * Update sql-plan-management.md * Update sql-plan-management.md Co-authored-by: Grace Cai * Update sql-plan-management.md Co-authored-by: Grace Cai --------- Co-authored-by: Grace Cai --- sql-plan-management.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/sql-plan-management.md b/sql-plan-management.md index ec14dba57512..bb91d5d8acea 100644 --- a/sql-plan-management.md +++ b/sql-plan-management.md @@ -432,6 +432,8 @@ SHOW binding_cache status; 自动绑定会对符合捕获条件的查询进行捕获,为符合条件的查询生成相应的绑定。通常用于[升级时的计划回退防护](#升级时的计划回退防护)。 +Plan Baseline 是一组被允许用于 SQL 语句优化器的可接受计划。在典型的应用场景中,TiDB 仅在验证计划性能良好后才将其添加到 Baseline 中。这些计划包含优化器重新生成执行计划所需的所有信息(例如,SQL 计划标识符、提示集、绑定值、优化器环境)。 + ### 使用方式 通过将 `tidb_capture_plan_baselines` 的值设置为 `on`(其默认值为 `off`)可以打开自动捕获绑定功能。 From 47f9b661ec2fdb64a17a70eadc359ea8af3cbc5d Mon Sep 17 00:00:00 2001 From: Roger Song Date: Sun, 23 Apr 2023 15:12:44 +0800 Subject: [PATCH 040/257] resource control: GA for 7.1 (#13732) * update as per 7.1 1. calibrate resource 2. FAQ * remove trailing spaces following full stop * Update tidb-resource-control.md * append additional description to workload type * Apply suggestions from code review * Apply suggestions from code review Co-authored-by: Aolin * delete descriptions about experimental * Update tidb-resource-control.md * Update tidb-resource-control.md * Apply suggestions from code review * Apply suggestions from code review * minor rephrase --------- Co-authored-by: xixirangrang Co-authored-by: Aolin Co-authored-by: xixirangrang <35301108+hfxsd@users.noreply.github.com> --- .../information-schema-resource-groups.md | 4 -- tidb-resource-control.md | 41 +++++++++++++++---- 2 files changed, 32 insertions(+), 13 deletions(-) diff --git a/information-schema/information-schema-resource-groups.md b/information-schema/information-schema-resource-groups.md index 08c2b4df0100..b1908094d58a 100644 --- a/information-schema/information-schema-resource-groups.md +++ b/information-schema/information-schema-resource-groups.md @@ -5,10 +5,6 @@ summary: 了解 information_schema 表 `RESOURCE_GROUPS`。 # RESOURCE_GROUPS -> **警告:** -> -> 资源管控是 TiDB 在 v6.6.0 中引入的实验特性,其语法或者行为表现在 GA 前可能会发生变化。 - `RESOURCE_GROUPS` 表展示所有资源组 (resource group) 的信息,见[使用资源管控 (Resource Control) 实现资源隔离](/tidb-resource-control.md)。 ```sql diff --git a/tidb-resource-control.md b/tidb-resource-control.md index 19eb1cae2891..b9bfc941abae 100644 --- a/tidb-resource-control.md +++ b/tidb-resource-control.md @@ -5,10 +5,6 @@ summary: 介绍如何通过资源管控能力来实现对应用资源消耗的 # 使用资源管控 (Resource Control) 实现资源隔离 -> **警告:** -> -> 资源管控是 TiDB 在 v7.0.0 是实验特性,其语法或者行为表现在 GA 前可能会发生变化。 - 使用资源管控特性,集群管理员可以定义资源组 (Resource Group),通过资源组限定读写的配额。 TiDB 资源管控特性提供了两层资源管理能力,包括在 TiDB 层的流控能力和 TiKV 层的优先级调度的能力。两个能力可以单独或者同时开启,详情请参见[参数组合效果表](#相关参数)。将用户绑定到某个资源组后,TiDB 层会根据用户所绑定资源组设定的读写配额对用户的读写请求做流控,TiKV 层会根据读写配额映射的优先级来对请求做调度。通过流控和调度这两层控制,可以实现应用的资源隔离,满足服务质量 (QoS) 要求。 @@ -22,6 +18,8 @@ TiDB 资源管控特性提供了两层资源管理能力,包括在 TiDB 层的 - 你可以将多个来自不同系统的中小型应用合入一个 TiDB 集群中,个别应用的负载升高,不会影响其他业务的正常运行。而在系统负载较低的时候,繁忙的应用即使超过设定的读写配额,也仍然可以被分配到所需的系统资源,达到资源的最大化利用。 - 你可以选择将所有测试环境合入一个集群,或者将消耗较大的批量任务编入一个单独的资源组,在保证重要应用获得必要资源的同时,提升硬件利用率,降低运行成本。 +- 当系统中存在多种业务负载时,可以将不同的负载分别放入各自的资源组。利用资源管控技术,确保交易类业务的响应时间不受数据分析或批量业务的影响。 +- 当集群遇到突发的 SQL 性能问题,可以结合 SQL Binding 和资源组,临时限制某个 SQL 的资源消耗。 此外,合理利用资源管控特性可以减少集群数量,降低运维难度及管理成本。 @@ -54,10 +52,10 @@ Request Unit (RU) 是 TiDB 对 CPU、IO 等系统资源的统一抽象的单位, 资源管控特性引入了两个新的全局开关变量: -- TiDB: 通过配置全局变量 [`tidb_enable_resource_control`](/system-variables.md#tidb_enable_resource_control-从-v660-版本开始引入) 控制是否打开资源组流控。 -- TiKV: 通过配置参数 [`resource-control.enabled`](/tikv-configuration-file.md#resource-control) 控制是否使用基于资源组配额的请求调度。 +- TiDB:通过配置全局变量 [`tidb_enable_resource_control`](/system-variables.md#tidb_enable_resource_control-从-v660-版本开始引入) 控制是否打开资源组流控。 +- TiKV:通过配置参数 [`resource-control.enabled`](/tikv-configuration-file.md#resource-control) 控制是否使用基于资源组配额的请求调度。 -这两个参数的组合效果见下表: +从 v7.0.0 开始,两个开关都被默认打开。这两个参数的组合效果见下表: | `resource-control.enabled` | `tidb_enable_resource_control`= ON | `tidb_enable_resource_control`= OFF | |:----------------------------|:-----------------------------------|:------------------------------------| @@ -68,6 +66,17 @@ Request Unit (RU) 是 TiDB 对 CPU、IO 等系统资源的统一抽象的单位, ## 使用方法 +下面介绍如何使用资源管控特性。 + +### 预估集群容量 + +在进行资源规划之前,你需要了解集群的整体容量。TiDB 提供了命令 [`CALIBRATE RESOURCE`](/sql-statements/sql-statement-calibrate-resource.md) 用来估算集群容量。目前提供两种估算方式: + +- [根据实际负载估算容量](/sql-statements/sql-statement-calibrate-resource.md#根据实际负载估算容量) +- [基于硬件部署估算容量](/sql-statements/sql-statement-calibrate-resource.md#基于硬件部署估算容量) + +详情请参考 [`CALIBRATE RESOURCE` 预估方式](/sql-statements/sql-statement-calibrate-resource.md#预估方式)。 + ### 管理资源组 创建、修改、删除资源组,需要拥有 `SUPER` 或者 `RESOURCE_GROUP_ADMIN` 权限。 @@ -82,7 +91,7 @@ Request Unit (RU) 是 TiDB 对 CPU、IO 等系统资源的统一抽象的单位, 下面举例说明如何创建资源组。 -1. 创建 `rg1` 资源组,RU 的回填速度是每秒 500 RU,并且允许这个资源组的应用超额占用资源。 +1. 创建 `rg1` 资源组,限额是每秒 500 RU,并且允许这个资源组的应用超额占用资源。 ```sql CREATE RESOURCE GROUP IF NOT EXISTS rg1 RU_PER_SEC = 500 BURSTABLE; @@ -169,7 +178,21 @@ TiKV 中也记录了来自于不同资源组的请求 QPS,详见 [TiKV监控 ## 工具兼容性 -资源管控目前为实验特性,不影响数据导入导出以及其他同步工具的正常使用,BR、TiDB Lightning、TiCDC 等工具不支持对资源管控相关 DDL 的处理,这些工具的资源消耗也不受资源管控的限制。 +资源管控不影响数据导入导出以及其他同步工具的正常使用,BR、TiDB Lightning、TiCDC 等工具不支持对资源管控相关 DDL 的处理,这些工具的资源消耗也不受资源管控的限制。 + +## 常见问题 + +1. 如果我暂时不想使用资源组对资源进行管控,是否一定要关闭这个特性? + + 不需要。没有指定任何资源组的用户,将被放入系统预定义的 `default` 资源组,而 `default` 资源组默认拥有无限用量。当所有用户都属于 `default` 资源组时,资源分配方式与关闭资源管控时相同。 + +2. 一个数据库用户是否可以绑定到不同的资源组? + + 不能。一个数据库用户只能绑定到一个资源组。但是,在会话运行的过程中,可以通过 [`SET RESOURCE GROUP`](/sql-statements/sql-statement-set-resource-group.md) 设置当前会话使用的资源组。你也可以通过优化器 [`RESOURCE_GROUP()`](/optimizer-hints.md#resource_groupresource_group_name) Hint 为运行的语句设置资源组。 + +3. 当各个资源组设置的用量 (`RU_PER_SEC`) 总和超出系统容量会发生什么? + + TiDB 在创建资源组时不会检查容量。只要系统有足够的空闲资源,TiDB 就会满足每个资源组的用量设置。当系统资源超过限制时,TiDB 会优先满足高优先级 (PRIORITY) 资源组的请求。如果同一优先级的请求无法全部满足,TiDB 会根据用量 (`RU_PER_SEC`) 的大小按比例分配。 ## 另请参阅 From a2d330048f0a8240cde865db94a60c2ebffbc9b9 Mon Sep 17 00:00:00 2001 From: D3Hunter Date: Sun, 23 Apr 2023 15:20:44 +0800 Subject: [PATCH 041/257] sql: GA load data logical mode and add experimental physical mode (#13708) * doc * doc * change * change * doc * polished wording * Update sql-statements/sql-statement-load-data.md * Apply suggestions from code review * Update sql-statement-load-data.md * Update sql-statement-load-data.md * Update error-codes.md * change * Update sql-statements/sql-statement-load-data.md Co-authored-by: xixirangrang * Update sql-statements/sql-statement-load-data.md Co-authored-by: xixirangrang * Update sql-statements/sql-statement-load-data.md Co-authored-by: Frank945946 <108602632+Frank945946@users.noreply.github.com> * Update sql-statements/sql-statement-load-data.md Co-authored-by: Frank945946 <108602632+Frank945946@users.noreply.github.com> * Update sql-statements/sql-statement-load-data.md Co-authored-by: xixirangrang * move order * Update sql-statements/sql-statement-load-data.md Co-authored-by: lance6716 * Update sql-statements/sql-statement-load-data.md Co-authored-by: lance6716 * Apply suggestions from code review Co-authored-by: Frank945946 <108602632+Frank945946@users.noreply.github.com> * fix comments * Update sql-statements/sql-statement-load-data.md * Update sql-statements/sql-statement-load-data.md * Update error-codes.md Co-authored-by: Aolin * Update sql-statements/sql-statement-load-data.md Co-authored-by: Aolin * Update sql-statements/sql-statement-load-data.md Co-authored-by: Aolin * Update sql-statements/sql-statement-load-data.md Co-authored-by: Aolin * Update sql-statements/sql-statement-load-data.md Co-authored-by: Aolin * Update sql-statements/sql-statement-load-data.md Co-authored-by: Aolin * Update sql-statements/sql-statement-load-data.md Co-authored-by: Aolin * Update sql-statements/sql-statement-load-data.md Co-authored-by: Aolin * Update sql-statements/sql-statement-load-data.md Co-authored-by: Aolin * Update sql-statements/sql-statement-load-data.md Co-authored-by: Aolin * Update sql-statements/sql-statement-load-data.md Co-authored-by: Aolin * Update sql-statements/sql-statement-load-data.md Co-authored-by: Aolin * Update sql-statements/sql-statement-load-data.md Co-authored-by: Aolin * Update sql-statement-load-data.md * Update sql-statement-load-data.md * Update sql-statement-load-data.md * Update sql-statements/sql-statement-load-data.md * Update sql-statement-load-data.md * Update sql-statement-load-data.md --------- Co-authored-by: xixirangrang <35301108+hfxsd@users.noreply.github.com> Co-authored-by: xixirangrang Co-authored-by: Frank945946 <108602632+Frank945946@users.noreply.github.com> Co-authored-by: lance6716 Co-authored-by: Aolin --- error-codes.md | 10 ++- sql-statements/sql-statement-load-data.md | 75 +++++++++++++++++-- .../sql-statement-operate-load-data-job.md | 4 - .../sql-statement-show-load-data.md | 14 ++-- tidb-configuration-file.md | 1 + 5 files changed, 81 insertions(+), 23 deletions(-) diff --git a/error-codes.md b/error-codes.md index f81a86272063..406113b8e878 100644 --- a/error-codes.md +++ b/error-codes.md @@ -351,7 +351,11 @@ TiDB 兼容 MySQL 的错误码,在大多数情况下,返回和 MySQL 一样 * Error Number: 8172 - 指定 `LOCAL` 的 `LOAD DATA` 不能在后台运行,只有使用 S3/GCS 路径的 `LOAD DATA` 可以在后台运行。请参考 [`LOAD DATA`](/sql-statements/sql-statement-load-data.md) 更改 SQL 语句。 + 指定 `LOCAL` 时,不能指定特定的选项,比如 `DETACHED` 和 `import_mode='PHYSICAL'`。请参考 [`LOAD DATA`](/sql-statements/sql-statement-load-data.md) 更改 SQL 语句。 + +* Error Number: 8173 + + 执行 Physical Import 时,TiDB 会对当前环境进行检查,比如检查下游表是否为空等。请根据提示进行处理。 * Error Number: 8200 @@ -412,7 +416,7 @@ TiDB 兼容 MySQL 的错误码,在大多数情况下,返回和 MySQL 一样 * Error Number: 8250 完整的报错信息如下: - + `ERROR 8250 (HY000) : Resource control feature is disabled. Run "SET GLOBAL tidb_enable_resource_control='on'" to enable the feature` 资源控制的功能没有打开时,使用资源管控 (Resource Control) 相关功能会返回该错误。你可以开启全局变量 [`tidb_enable_resource_control`](/system-variables.md#tidb_enable_resource_control-从-v660-版本开始引入) 启用资源管控。 @@ -424,7 +428,7 @@ TiDB 兼容 MySQL 的错误码,在大多数情况下,返回和 MySQL 一样 * Error Number: 8252 完整的报错信息如下: - + `ERROR 8252 (HY000) : Exceeded resource group quota limitation` 在尝试消耗超过资源组的限制时返回该错误。一般出现该错误,是由于单次事务太大或者并发太多导致,需调整事务大小或减少客户端并发数。 diff --git a/sql-statements/sql-statement-load-data.md b/sql-statements/sql-statement-load-data.md index a6f09b661573..7575f1cf54a3 100644 --- a/sql-statements/sql-statement-load-data.md +++ b/sql-statements/sql-statement-load-data.md @@ -8,15 +8,22 @@ aliases: ['/docs-cn/dev/sql-statements/sql-statement-load-data/','/docs-cn/dev/r `LOAD DATA` 语句用于将数据批量加载到 TiDB 表中。 -在 v7.0.0 版本集成 TiDB Lightning 的逻辑导入模式,使 `LOAD DATA` 语句更加强大,包括: +从 v7.0.0 开始,`LOAD DATA` 集成 TiDB Lightning 的逻辑导入模式 (Logical Import Mode),使 `LOAD DATA` 语句更加强大,包括: - 支持从 S3、GCS 导入数据 - 支持导入 Parquet 格式的数据 -- 新增参数 `FORMAT`、`FIELDS DEFINED NULL BY`、`With batch_size=,detached` +- 新增参数 `FORMAT`、`FIELDS DEFINED NULL BY` 和 `WITH batch_size=,detached` + +从 v7.1.0 开始,`LOAD DATA` 支持以下特性: + +- 支持导入压缩的 `DELIMITED DATA` 和 `SQL FILE` 数据文件 +- 逻辑导入支持并发导入 +- 支持通过 `CharsetOpt` 来指定数据文件的编码格式 +- `LOAD DATA` 集成 TiDB Lightning 的物理导入模式 (Physical Import Mode)。该模式不经过 SQL 接口,而是直接将数据以键值对的形式插入 TiKV 节点,是一种高效且快速的导入模式。 > **警告:** > -> 新增的能力和参数为实验特性,不建议在生产环境中使用。 +> v7.1.0 新增的并发导入和物理导入模式为实验特性,不建议在生产环境中使用。 ## 语法图 @@ -29,6 +36,9 @@ LocalOpt ::= ('LOCAL')? FormatOpt ::= ('FORMAT' ('DELIMITED DATA' | 'SQL FILE' | 'PARQUET'))? +DuplicateOpt ::= + ('IGNORE' | 'REPLACE')? + Fields ::= ('TERMINATED' 'BY' stringLit | ('OPTIONALLY')? 'ENCLOSED' 'BY' stringLit @@ -39,7 +49,11 @@ LoadDataOptionListOpt ::= ('WITH' (LoadDataOption (',' LoadDataOption)*))? LoadDataOption ::= - detached | batch_size '=' numberLiteral + import_mode '=' ('LOGICAL' | 'PHYSICAL') + | thread '=' numberLiteral + | batch_size '=' numberLiteral + | max_write_speed '=' stringLit + | detached ``` ## 参数说明 @@ -64,6 +78,28 @@ LoadDataOption ::= 你可以通过 `FORMAT` 参数来指定数据文件的格式。如果不指定该参数,需要使用的格式为 `DELIMITED DATA`,该格式即 MySQL `LOAD DATA` 支持的数据格式。 +数据格式 `DELIMITED DATA` 和 `SQL FILE` 支持压缩文件。`LOAD DATA` 会根据文件名称的后缀来自动决定压缩格式。目前支持的压缩格式如下: + +| 文件后缀 | 压缩格式 | 示例 | +|:---|:---|:---| +| `.gz` 或 `.gzip` | gzip 压缩格式 | `tbl.0001.csv.gz` | +| `.zstd` 或 `.zst` | zstd 压缩格式 | `tbl.0001.csv.zstd` | +| `.snappy` | snappy 压缩格式 | `tbl.0001.csv.snappy` | + +### `DuplicateOpt` + +该参数与 MySQL 行为一致,具体请参考 [MySQL LOAD DATA 文档](https://dev.mysql.com/doc/refman/8.0/en/load-data.html#load-data-error-handling)。 + +该参数只适用于逻辑导入模式,对物理导入模式不生效。 + +### `CharsetOpt` + +当数据格式是 `DELIMITED DATA` 时,可以通过 `CharsetOpt` 指定数据文件的编码格式。目前支持下列编码格式:`ascii`、`latin1`、`binary`、`utf8`、`utf8mb4` 和 `gbk`。 + +```sql +LOAD DATA INFILE 's3:///path/to/data/foo.csv' INTO TABLE load_charset.latin1 CHARACTER SET latin1 +``` + ### `Fields`、`Lines`、`Ignore Lines` 只有数据格式是 `DELIMITED DATA` 时,才能指定 `Fields`、`Lines`、`Ignore Lines` 等语句。 @@ -104,16 +140,41 @@ LINES TERMINATED BY '\n' STARTING BY '' 你可以通过 `IGNORE LINES` 参数来忽略文件开始的 `` 行。例如,可以使用 `IGNORE 1 LINES` 来忽略文件的第一行。 -### `WITH detached` +### `WITH import_mode = ('LOGICAL' | 'PHYSICAL')` -如果你指定了 S3/GCS 路径(且未指定 `LOCAL` 参数),可以通过 `WITH detached` 来让 `LOAD DATA` 任务在后台运行。此时 `LOAD DATA` 会返回 job ID。 +可以通过 `import_mode = ('LOGICAL' | 'PHYSICAL')` 来指定数据导入的模式,默认值为 `LOGICAL`,即逻辑导入。从 v7.1.0 开始,`LOAD DATA` 集成 TiDB Lightning 的物理导入模式,可通过 `WITH import_mode = 'PHYSICAL'` 开启。 -可以通过 [`SHOW LOAD DATA`](/sql-statements/sql-statement-show-load-data.md) 查看创建的 job,也可以使用 [`CANCEL LOAD DATA` 和 `DROP LOAD DATA`](/sql-statements/sql-statement-operate-load-data-job.md) 取消或删除创建的 job。 +物理导入模式只能在非 `LOCAL` 模式下使用,采用单线程执行。目前物理导入尚未接入[冲突监测](/tidb-lightning/tidb-lightning-physical-import-mode-usage.md#冲突数据检测),因此遇到数据主键或唯一键冲突时会报 checksum 不一致错误。建议在导入前检查数据文件是否存在键值冲突。其他的限制和必要条件,请参考 [TiDB Lightning Physical Import Mode 简介](/tidb-lightning/tidb-lightning-physical-import-mode.md)。 + +物理导入模式下,`LOAD DATA` 将本地排序后的数据写入 TiDB [`temp-dir`](/tidb-configuration-file.md#temp-dir-从-v630-版本开始引入) 子目录中。子目录命名规则为 `import-/`。 + +物理导入模式目前尚未接入[磁盘资源配额](/tidb-lightning/tidb-lightning-physical-import-mode-usage.md#磁盘资源配额-从-v620-版本开始引入)。请确保对应磁盘有足够的空间,具体可参考[必要条件及限制](/tidb-lightning/tidb-lightning-physical-import-mode.md#必要条件及限制)中存储空间的部分。 + +### `WITH thread=` + +目前该参数仅对逻辑导入生效。 + +可以通过 `WITH thread=` 指定数据导入的并发度。默认值与 `FORMAT` 有关: + +- 当 `FORMAT` 为 `PARQUET` 时,默认值为 CPU 核数的 75%。 +- 对于其他 `FORMAT`,默认值为 CPU 的逻辑核数。 ### `WITH batch_size=` 可以通过 `WITH batch_size=` 来指定批量写入 TiDB 时的行数,默认值为 `1000`。如果不希望分批写入,可以指定为 `0`。 +### `WITH max_write_speed = stringLit` + +在使用物理导入模式时,可以通过该参数指定写入单个 TiKV 的速率限制。默认值为 `0`,表示无限制。 + +该参数支持 [go-units](https://pkg.go.dev/github.com/docker/go-units#example-RAMInBytes) 格式。例如,`WITH max_write_speed = '1MB'` 表示写入单个 TiKV 的最大速率为 `1MB/s`。 + +### `WITH detached` + +如果你指定了 S3/GCS 路径(且未指定 `LOCAL` 参数),可以通过 `WITH detached` 让 `LOAD DATA` 任务在后台运行。此时 `LOAD DATA` 会返回任务的 ID。 + +你可以执行 [`SHOW LOAD DATA`](/sql-statements/sql-statement-show-load-data.md) 查看创建的任务,也可以使用 [`CANCEL LOAD DATA` 和 `DROP LOAD DATA`](/sql-statements/sql-statement-operate-load-data-job.md) 取消或删除创建的任务。 + ## 示例 后台运行 job,执行后会输出对应的 job id: diff --git a/sql-statements/sql-statement-operate-load-data-job.md b/sql-statements/sql-statement-operate-load-data-job.md index 80254bc1ad0e..d3d061586718 100644 --- a/sql-statements/sql-statement-operate-load-data-job.md +++ b/sql-statements/sql-statement-operate-load-data-job.md @@ -9,10 +9,6 @@ summary: TiDB 数据库中 CANCEL LOAD DATA 和 DROP LOAD DATA 的使用概况 `DROP LOAD DATA` 语句用于删除系统中创建的 LOAD DATA 任务。 -> **警告:** -> -> 当前该功能为实验特性,不建议在生产环境中使用。 - ## 语法图 ```ebnf+diagram diff --git a/sql-statements/sql-statement-show-load-data.md b/sql-statements/sql-statement-show-load-data.md index 7bb0c0db3593..a11b6dc10a7e 100644 --- a/sql-statements/sql-statement-show-load-data.md +++ b/sql-statements/sql-statement-show-load-data.md @@ -7,10 +7,6 @@ summary: TiDB 数据库中 SHOW LOAD DATA 的使用概况。 `SHOW LOAD DATA` 语句用于显示系统中创建的 LOAD DATA 任务。该语句只能显示由当前用户创建的任务。 -> **警告:** -> -> 当前该功能为实验特性,不建议在生产环境中使用。 - ## 语法图 ```ebnf+diagram @@ -36,7 +32,7 @@ ShowLoadDataJobStmt ::= | Job_State | 表示任务当前所处的阶段,对于 `logical` 模式的任务,只有 `loading` 这一个阶段 | | Job_Status | 表示当前任务的状态。有以下几种状态:`pending` 表示任务已创建但还未开始运行;`running` 表示运行中;`canceled` 表示已经取消的任务;`failed` 表示任务失败并退出;`finished` 表示任务已完成。 | | Source_File_Size | 源文件大小 | -| Loaded_File_Size | 已经读到并写入目标表的数据量大小 | +| Imported_Rows | 已经读到并写入目标表的数据行数 | | Result_Code | 任务状态为 `finished` 时,其值为 `0`。任务状态为 `failed` 时,其值为对应的错误码。 | | Result_Message | 如果导入成功,则返回摘要信息。如果导入失败,则返回错误信息。 | @@ -48,9 +44,9 @@ SHOW LOAD DATA JOBS; ``` +--------+----------------------------+----------------------------+---------------------+---------------------------+--------------------+-------------+------------+-----------+------------+------------------+------------------+-------------+----------------+ -| Job_ID | Create_Time | Start_Time | End_Time | Data_Source | Target_Table | Import_Mode | Created_By | Job_State | Job_Status | Source_File_Size | Loaded_File_Size | Result_Code | Result_Message | +| Job_ID | Create_Time | Start_Time | End_Time | Data_Source | Target_Table | Import_Mode | Created_By | Job_State | Job_Status | Source_File_Size | Imported_Rows | Result_Code | Result_Message | +--------+----------------------------+----------------------------+---------------------+---------------------------+-------------------+-------------+------------+-----------+------------+------------------+------------------+-------------+----------------+ -| 1 | 2023-03-16 22:29:12.990576 | 2023-03-16 22:29:12.991951 | 0000-00-00 00:00:00 | s3://bucket-name/test.csv | `my_db`.`my_table` | logical | root@% | loading | running | 52.43MB | 43.58MB | | | +| 1 | 2023-03-16 22:29:12.990576 | 2023-03-16 22:29:12.991951 | 0000-00-00 00:00:00 | s3://bucket-name/test.csv | `my_db`.`my_table` | logical | root@% | loading | running | 52.43MB | 323339 | | | +--------+----------------------------+----------------------------+---------------------+---------------------------+--------------------+-------------+------------+-----------+------------+------------------+------------------+-------------+----------------+ 1 row in set (0.01 sec) ``` @@ -61,9 +57,9 @@ SHOW LOAD DATA JOB 1; ``` +--------+----------------------------+----------------------------+---------------------+---------------------------+--------------------+-------------+------------+-----------+------------+------------------+------------------+-------------+----------------+ -| Job_ID | Create_Time | Start_Time | End_Time | Data_Source | Target_Table | Import_Mode | Created_By | Job_State | Job_Status | Source_File_Size | Loaded_File_Size | Result_Code | Result_Message | +| Job_ID | Create_Time | Start_Time | End_Time | Data_Source | Target_Table | Import_Mode | Created_By | Job_State | Job_Status | Source_File_Size | Imported_Rows | Result_Code | Result_Message | +--------+----------------------------+----------------------------+---------------------+---------------------------+-------------------+-------------+------------+-----------+------------+------------------+------------------+-------------+----------------+ -| 1 | 2023-03-16 22:29:12.990576 | 2023-03-16 22:29:12.991951 | 0000-00-00 00:00:00 | s3://bucket-name/test.csv | `my_db`.`my_table` | logical | root@% | loading | running | 52.43MB | 43.58MB | | | +| 1 | 2023-03-16 22:29:12.990576 | 2023-03-16 22:29:12.991951 | 0000-00-00 00:00:00 | s3://bucket-name/test.csv | `my_db`.`my_table` | logical | root@% | loading | running | 52.43MB | 323339 | | | +--------+----------------------------+----------------------------+---------------------+---------------------------+--------------------+-------------+------------+-----------+------------+------------------+------------------+-------------+----------------+ 1 row in set (0.01 sec) ``` diff --git a/tidb-configuration-file.md b/tidb-configuration-file.md index 01f446f5898b..3bb78f99a22c 100644 --- a/tidb-configuration-file.md +++ b/tidb-configuration-file.md @@ -46,6 +46,7 @@ TiDB 配置文件比命令行参数支持更多的选项。你可以在 [config/ + TiDB 用于存放临时数据的路径。如果一个功能需要使用 TiDB 节点的本地存储,TiDB 将把对应数据临时存放在这个目录下。 + 在创建索引的过程中,如果开启了[创建索引加速](/system-variables.md#tidb_ddl_enable_fast_reorg-从-v630-版本开始引入),那么新创建索引需要回填的数据会被先存放在 TiDB 本地临时存储路径,然后批量导入到 TiKV,从而提升索引创建速度。 ++ 在使用 [`LOAD DATA`](/sql-statements/sql-statement-load-data.md) 的物理导入模式时,排序后的数据会被先存放在 TiDB 本地临时存储路径,然后批量导入到 TiKV。 + 默认值:"/tmp/tidb" ### `oom-use-tmp-storage` From cfacb6284b8a47d5a7eb67e79e974c0419d6a453 Mon Sep 17 00:00:00 2001 From: Jianjun Liao <36503113+Leavrth@users.noreply.github.com> Date: Mon, 24 Apr 2023 12:38:45 +0800 Subject: [PATCH 042/257] br: restore checkpoint (#13624) * draft Signed-off-by: Leavrth * Apply suggestions from code review Co-authored-by: Aolin * Apply suggestions from code review Co-authored-by: Aolin * commit some suggestions Signed-off-by: Leavrth * commit some suggestions Signed-off-by: Leavrth * Apply suggestions from code review Co-authored-by: Aolin * fix broken links Signed-off-by: Aolin * Apply suggestions from code review Co-authored-by: xixirangrang * commit some suggestions Signed-off-by: Leavrth * Update releases/release-6.5.0.md Co-authored-by: xixirangrang * Apply suggestions from code review Co-authored-by: Aolin * Apply suggestions from code review Co-authored-by: xixirangrang * Apply suggestions from code review * fix typos Signed-off-by: Leavrth * Update br/br-checkpoint-restore.md Co-authored-by: Aolin --------- Signed-off-by: Leavrth Signed-off-by: Aolin Co-authored-by: Aolin Co-authored-by: Aolin Co-authored-by: xixirangrang --- TOC.md | 3 +- ...-checkpoint.md => br-checkpoint-backup.md} | 23 +++---- br/br-checkpoint-restore.md | 62 +++++++++++++++++++ releases/release-6.5.0.md | 2 +- 4 files changed, 77 insertions(+), 13 deletions(-) rename br/{br-checkpoint.md => br-checkpoint-backup.md} (81%) create mode 100644 br/br-checkpoint-restore.md diff --git a/TOC.md b/TOC.md index 6b3a54ff5f4d..50f0254a99be 100644 --- a/TOC.md +++ b/TOC.md @@ -151,7 +151,8 @@ - BR 特性 - [自动调节](/br/br-auto-tune.md) - [批量建表](/br/br-batch-create-table.md) - - [断点备份](/br/br-checkpoint.md) + - [断点备份](/br/br-checkpoint-backup.md) + - [断点恢复](/br/br-checkpoint-restore.md) - [使用 Dumpling 和 TiDB Lightning 备份与恢复](/backup-and-restore-using-dumpling-lightning.md) - [备份与恢复 RawKV](/br/rawkv-backup-and-restore.md) - [增量备份与恢复](/br/br-incremental-guide.md) diff --git a/br/br-checkpoint.md b/br/br-checkpoint-backup.md similarity index 81% rename from br/br-checkpoint.md rename to br/br-checkpoint-backup.md index 38ea87914e00..fa4f6a90159f 100644 --- a/br/br-checkpoint.md +++ b/br/br-checkpoint-backup.md @@ -1,17 +1,26 @@ --- title: 断点备份 -summary: 了解断点备份功能,包括它的使用场景、使用方法以及实现原理。 +summary: 了解断点备份功能,包括它的使用场景、实现原理以及使用方法。 +aliases: ["/zh/tidb/dev/br-checkpoint"] --- # 断点备份 快照备份会因为一些可恢复性错误导致提前结束,例如硬盘空间占满、节点宕机等等一些突发情况。在 TiDB v6.5.0 之前,在错误被处理之后,之前备份的数据会作废,你需要重新进行备份。对大规模集群来说,会造成大量额外成本。 -为了尽可能继续上一次的备份,从 TiDB v6.5.0 起,备份恢复特性引入了断点备份的功能,此功能默认开启。开启该功能后,备份在意外退出后可以保留上一次备份的大部分进度。 +为了尽可能继续上一次的备份,从 TiDB v6.5.0 起,备份恢复特性引入了断点备份的功能。该功能可以在备份意外中断后保留上一次备份的大部分进度。 ## 使用场景 -如果你的 TiDB 集群规模很大,无法接受备份失败后需要重新备份的情况,那么,你可以开启断点备份功能。开启该功能后,br 工具会定期记录已备份的分片,使得在下一次重试备份时回到离上一次退出时较近的进度。 +如果你的 TiDB 集群规模很大,无法接受备份失败后需要重新备份的情况,那么,你可以使用断点备份功能重试备份。br 工具会定期记录已备份的分片,使得在下一次重试备份时回到离上一次退出时较近的进度。 + +## 实现原理 + +在快照备份过程中,br 工具将表编码成对应的键空间,并生成备份的 RPC 请求发送给所有 TiKV 节点。接收到备份请求后,TiKV 节点会选择请求范围内的数据进行备份。每当 TiKV 节点备份完一个 Region 级别的数据,就会返回给 br 工具这段范围相关的备份信息。 + +通过记录这些返回的备份信息,br 工具能够及时获知已备份完成的键范围。断点备份功能会定期将这些新增的相关备份信息上传至外部存储中,从而持久化存储该备份任务已完成的键范围。 + +在重试备份时,br 工具会从外部存储读取已经备份的键范围,再与所需备份的键范围做比较,获得一个差集,从而得出断点备份还需要备份的键范围。 ## 使用限制 @@ -42,11 +51,3 @@ br backup full \ - 由错误引起的退出,br 工具会在退出前将已备份的数据元信息持久化到外部存储中,因此只有正在备份的数据需要在下一次重试中重新备份。 - 如果 br 工具进程被系统中断,那么 br 将无法把已备份的数据元信息持久化到外部存储中。br 工具持久化已备份的数据元信息的周期为 30 秒,因此大约最近 30 秒内的已完成备份的数据无法持久化到外部存储,在下次重试时需要重新备份。 - -## 实现原理 - -在快照备份过程中,br 工具将表编码成对应的键空间,并生成备份的 RPC 请求发送给所有 TiKV 节点。接收到备份请求后,TiKV 节点会选择请求范围内的数据进行备份。每当 TiKV 节点备份完一个 `region` 级别的数据,就会返回给 br 工具这段范围相关的备份信息。 - -通过记录这些返回的备份信息,br 工具能够及时获知已备份完成的键范围。断点备份功能会定期将这些新增的相关备份信息上传至外部存储中,从而持久化存储该备份任务已完成的键范围。 - -在重试备份时,br 工具会从外部存储读取已经备份的键范围,再与所需备份的键范围做比较,获得一个差集,从而得出断点备份还需要备份的键范围。 diff --git a/br/br-checkpoint-restore.md b/br/br-checkpoint-restore.md new file mode 100644 index 000000000000..19f735553a70 --- /dev/null +++ b/br/br-checkpoint-restore.md @@ -0,0 +1,62 @@ +--- +title: 断点恢复 +summary: 了解断点恢复功能,包括它的使用场景、实现原理以及使用方法。 +--- + +# 断点恢复 + +快照恢复或日志恢复会因为一些可恢复性错误导致提前结束,例如硬盘空间占满、节点宕机等等一些突发情况。在 TiDB v7.1.0 之前,在错误被处理之后,之前恢复的进度会作废,你需要重新进行恢复。对大规模集群来说,会造成大量额外成本。 + +为了尽可能继续上一次的恢复,从 TiDB v7.1.0 起,备份恢复特性引入了断点恢复的功能。该功能可以在意外中断后保留上一次恢复的大部分进度。 + +## 使用场景 + +如果你的 TiDB 集群规模很大,无法接受恢复失败后需要重新恢复的情况,那么,你可以使用断点恢复功能重试恢复。br 工具会定期记录已恢复的分片,使得在下一次重试恢复时回到离上一次退出时较近的进度。 + +## 实现原理 + +断点恢复的实现原理分为快照恢复和日志恢复两部分。 + +### 快照恢复 + +快照恢复的实现原理与[快照备份](/br/br-checkpoint-backup.md#实现原理)类似,br 工具会批量恢复一段键范围 (Region) 内的所有的 SST 文件。恢复完成后,br 工具记录下这段范围以及该范围对应的恢复集群的表 ID。断点恢复功能会定期将这些新增的相关恢复信息上传至外部存储中,从而持久化存储该恢复任务已完成的键范围。 + +在重试恢复时,br 工具会从外部存储读取已经恢复的键范围,并匹配相关的表 ID。在恢复过程中,会跳过与断点恢复记录的键范围重叠且对应表 ID 相同的范围。 + +如果在重试恢复前,你删除了某些表,那么重试恢复时新创建的表的 ID 会与之前记录在断点恢复的表 ID 不同,从而绕过使用之前的断点恢复信息,重新恢复该表,也就是说,新的 ID 的同个表可以不使用旧的 ID 的断点恢复信息,而是重新记录新 ID 对应的断点恢复信息。 + +由于数据采用了 MVCC(多版本并发控制)机制,带有固定 TS 的数据可以被无序且重复写入。 + +快照恢复在恢复库表 DDL 时添加了 `ifExists` 参数。对于已经存在的库表(视为已经创建完毕),br 工具会自动跳过恢复。 + +### 日志恢复 + +日志恢复需要按照时间顺序恢复 TiKV 节点备份下来的数据元信息 (meta-kv)。断点恢复首先会根据 meta-kv 数据为备份集群和恢复集群建立一一对应的 ID 映射关系,以确保在不同重试恢复过程中 meta-kv 的 ID 保持一致。这样,meta-kv 就具备了重新恢复的能力。 + +与快照备份文件不同,日志备份文件的范围可能会重叠,因此无法直接使用键范围作为恢复进度的元信息。同时,日志备份文件数量可能非常多。不过,每个日志备份文件在日志备份元信息中的位置是固定的,因此可以为每个日志备份文件指定一个日志备份元信息中唯一的位置作为恢复进度的元信息。 + +日志备份元信息中包含一个存放文件元信息的数组。数组中的每个文件元信息代表一个由多个日志备份文件拼接而成的文件。文件元信息记录了这些日志备份文件在拼接文件中的偏移和大小。因此,br 工具可以使用三元组 `(日志备份元信息名,文件元信息数组偏移,日志备份文件数组偏移)` 来唯一标识一个日志备份文件。 + +## 使用限制 + +断点恢复功能依赖于 GC 机制,且无法记录所有已恢复的数据,具体描述如下。 + +### GC 会被停止 + +在日志恢复过程中,日志数据恢复的顺序是无序的,因此可能会出现一个 key 的删除记录优先于该 key 的写入记录恢复的情况。如果此时触发 GC,该 key 的所有数据会被删除,导致该 key 后续恢复的写入记录无法被 GC 处理。为了避免这种情况,br 命令行工具会在日志恢复过程中暂停 GC。当 br 工具中途退出后,GC 将仍然保持暂停状态。 + +日志恢复完成后会重新启动 GC,不需要手动启动。但如果你不想再继续恢复时,请手动开启 GC,开启方法如下: + +br 工具暂停 GC 的原理是通过执行 `SET config tikv gc.ratio-threshold = -1.0`,将 [`gc.ratio-threshold`](/tikv-configuration-file.md#ratio-threshold) 的值设置成负数来暂停 GC。你可以通过修改 `gc.ratio-threshold` 的值手动开启 GC,例如执行 `SET config tikv gc.ratio-threshold = 1.1` 将参数重置为默认值。 + +### 部分数据需要重新恢复 + +在重试恢复时,部分已恢复的数据可能需要重新恢复,包括正在恢复的数据和还未被断点记录的数据。 + +- 由错误引起的退出,br 工具会在退出前将已恢复的数据元信息持久化到外部存储中,因此只有正在恢复的数据需要在下一次重试中重新恢复。 + +- 如果 br 工具进程被系统中断,那么 br 将无法把已恢复的数据元信息持久化到外部存储中。br 工具持久化已恢复的数据元信息的周期为 30 秒,因此大约最近 30 秒内的已完成恢复的数据无法持久化到外部存储,在下次重试时需要重新恢复。 + +### 不要在恢复期间修改集群数据 + +在恢复失败后,请避免向集群写入或删除数据、删除或创建表。由于备份数据中可能包含重命名表的 DDL 操作,断点恢复无法确认被删除的表或已存在的表是否是外部操作引起的,这会影响下次重试恢复的准确性。 diff --git a/releases/release-6.5.0.md b/releases/release-6.5.0.md index 1a59eef35b22..175e2210380b 100644 --- a/releases/release-6.5.0.md +++ b/releases/release-6.5.0.md @@ -284,7 +284,7 @@ TiDB 6.5.0 为长期支持版本 (Long-Term Support Release, LTS)。 TiDB 快照备份功能支持断点续传。当 BR 遇到可恢复的错误时会进行重试,但是超过固定重试次数之后会备份退出。断点续传功能允许对持续更长时间的可恢复故障进行重试恢复,比如几十分钟的网络故障。 - 需要注意的是,如果你没有在 BR 退出后一个小时内完成故障恢复,那么还未备份的快照数据可能会被 GC 机制回收,从而造成备份失败。更多信息,请参考[用户文档](/br/br-checkpoint.md)。 + 需要注意的是,如果你没有在 BR 退出后一个小时内完成故障恢复,那么还未备份的快照数据可能会被 GC 机制回收,从而造成备份失败。更多信息,请参考[用户文档](/br/br-checkpoint-backup.md#确保在-gc-前重试)。 * PITR 性能大幅提升 [@joccau](https://github.com/joccau) From 728ad25db12a957b7bb82c0c9e8791e941df0626 Mon Sep 17 00:00:00 2001 From: Aolin Date: Mon, 24 Apr 2023 14:44:45 +0800 Subject: [PATCH 043/257] tiup: fix the scale-out yaml example (#13775) Signed-off-by: Aolin --- scale-tidb-using-tiup.md | 48 +++++++++++++--------------- ticdc/deploy-ticdc.md | 10 +++--- tiup/tiup-component-cluster-check.md | 4 +-- 3 files changed, 30 insertions(+), 32 deletions(-) diff --git a/scale-tidb-using-tiup.md b/scale-tidb-using-tiup.md index 4b123768be8b..0add05f27736 100644 --- a/scale-tidb-using-tiup.md +++ b/scale-tidb-using-tiup.md @@ -37,12 +37,10 @@ TiDB 集群可以在不中断线上服务的情况下进行扩容和缩容。 > > - 从 TiUP v1.0.0 开始,扩容配置会继承原集群配置的 global 部分。 -在 scale-out.yaml 文件添加扩容拓扑配置: - -{{< copyable "shell-regular" >}} +在 scale-out.yml 文件添加扩容拓扑配置: ```shell -vi scale-out.yaml +vi scale-out.yml ``` {{< copyable "" >}} @@ -53,8 +51,8 @@ tidb_servers: ssh_port: 22 port: 4000 status_port: 10080 - deploy_dir: /data/deploy/install/deploy/tidb-4000 - log_dir: /data/deploy/install/log/tidb-4000 + deploy_dir: /tidb-deploy/tidb-4000 + log_dir: /tidb-deploy/tidb-4000/log ``` TiKV 配置文件参考: @@ -67,9 +65,9 @@ tikv_servers: ssh_port: 22 port: 20160 status_port: 20180 - deploy_dir: /data/deploy/install/deploy/tikv-20160 - data_dir: /data/deploy/install/data/tikv-20160 - log_dir: /data/deploy/install/log/tikv-20160 + deploy_dir: /tidb-deploy/tikv-20160 + data_dir: /tidb-data/tikv-20160 + log_dir: /tidb-deploy/tikv-20160/log ``` PD 配置文件参考: @@ -83,12 +81,12 @@ pd_servers: name: pd-1 client_port: 2379 peer_port: 2380 - deploy_dir: /data/deploy/install/deploy/pd-2379 - data_dir: /data/deploy/install/data/pd-2379 - log_dir: /data/deploy/install/log/pd-2379 + deploy_dir: /tidb-deploy/pd-2379 + data_dir: /tidb-data/pd-2379 + log_dir: /tidb-deploy/pd-2379/log ``` -可以使用 `tiup cluster edit-config ` 查看当前集群的配置信息,因为其中的 `global` 和 `server_configs` 参数配置默认会被 `scale-out.yaml` 继承,因此也会在 `scale-out.yaml` 中生效。 +可以使用 `tiup cluster edit-config ` 查看当前集群的配置信息,因为其中的 `global` 和 `server_configs` 参数配置默认会被 `scale-out.yml` 继承,因此也会在 `scale-out.yml` 中生效。 ### 2. 执行扩容命令 @@ -103,7 +101,7 @@ pd_servers: {{< copyable "shell-regular" >}} ```shell - tiup cluster check scale-out.yaml --cluster --user root [-p] [-i /home/root/.ssh/gcp_rsa] + tiup cluster check scale-out.yml --cluster --user root [-p] [-i /home/root/.ssh/gcp_rsa] ``` (2)自动修复集群存在的潜在风险: @@ -111,7 +109,7 @@ pd_servers: {{< copyable "shell-regular" >}} ```shell - tiup cluster check scale-out.yaml --cluster --apply --user root [-p] [-i /home/root/.ssh/gcp_rsa] + tiup cluster check scale-out.yml --cluster --apply --user root [-p] [-i /home/root/.ssh/gcp_rsa] ``` (3)执行 scale-out 命令扩容 TiDB 集群: @@ -119,12 +117,12 @@ pd_servers: {{< copyable "shell-regular" >}} ```shell - tiup cluster scale-out scale-out.yaml [-p] [-i /home/root/.ssh/gcp_rsa] + tiup cluster scale-out scale-out.yml [-p] [-i /home/root/.ssh/gcp_rsa] ``` 以上操作示例中: -- 扩容配置文件为 `scale-out.yaml`。 +- 扩容配置文件为 `scale-out.yml`。 - `--user root` 表示通过 root 用户登录到目标主机完成集群部署,该用户需要有 ssh 到目标机器的权限,并且在目标机器有 sudo 权限。也可以用其他有 ssh 和 sudo 权限的用户完成部署。 - [-i] 及 [-p] 为可选项,如果已经配置免密登录目标机,则不需填写。否则选择其一即可,[-i] 为可登录到目标机的 root 用户(或 --user 指定的其他用户)的私钥,也可使用 [-p] 交互式输入该用户的密码。 @@ -161,9 +159,9 @@ tiup cluster display > 1. 首先确认当前 TiDB 的版本支持 TiFlash,否则需要先升级 TiDB 集群至 v5.0 以上版本。 > 2. 执行 `tiup ctl:v pd -u http://: config set enable-placement-rules true` 命令,以开启 PD 的 Placement Rules 功能。或通过 [pd-ctl](/pd-control.md) 执行对应的命令。 -### 1. 添加节点信息到 scale-out.yaml 文件 +### 1. 添加节点信息到 scale-out.yml 文件 -编写 scale-out.yaml 文件,添加该 TiFlash 节点信息(目前只支持 ip,不支持域名): +编写 scale-out.yml 文件,添加该 TiFlash 节点信息(目前只支持 ip,不支持域名): {{< copyable "" >}} @@ -177,7 +175,7 @@ tiflash_servers: {{< copyable "shell-regular" >}} ```shell -tiup cluster scale-out scale-out.yaml +tiup cluster scale-out scale-out.yml ``` > **注意:** @@ -208,9 +206,9 @@ tiup cluster display 如果要添加 TiCDC 节点,IP 地址为 10.0.1.3、10.0.1.4,可以按照如下步骤进行操作。 -### 1. 添加节点信息到 scale-out.yaml 文件 +### 1. 添加节点信息到 scale-out.yml 文件 -编写 scale-out.yaml 文件: +编写 scale-out.yml 文件: {{< copyable "" >}} @@ -218,10 +216,10 @@ tiup cluster display cdc_servers: - host: 10.0.1.3 gc-ttl: 86400 - data_dir: /data/deploy/install/data/cdc-8300 + data_dir: /tidb-data/cdc-8300 - host: 10.0.1.4 gc-ttl: 86400 - data_dir: /data/deploy/install/data/cdc-8300 + data_dir: /tidb-data/cdc-8300 ``` ### 2. 运行扩容命令 @@ -229,7 +227,7 @@ cdc_servers: {{< copyable "shell-regular" >}} ```shell -tiup cluster scale-out scale-out.yaml +tiup cluster scale-out scale-out.yml ``` > **注意:** diff --git a/ticdc/deploy-ticdc.md b/ticdc/deploy-ticdc.md index b8a76e15317a..1d3358cf6a0a 100644 --- a/ticdc/deploy-ticdc.md +++ b/ticdc/deploy-ticdc.md @@ -50,25 +50,25 @@ cdc_servers: 扩容的方式与部署 TiCDC 集群的方式类似,推荐使用 TiUP 工具完成。 -1. 编写一个名为 `scale-out.yaml` 的配置文件,包含需要扩容的节点的配置信息。下面是一个示例: +1. 编写一个名为 `scale-out.yml` 的配置文件,包含需要扩容的节点的配置信息。下面是一个示例: ```shell cdc_servers: - host: 10.1.1.1 gc-ttl: 86400 - data_dir: /data/deploy/install/data/cdc-8300 + data_dir: /tidb-data/cdc-8300 - host: 10.1.1.2 gc-ttl: 86400 - data_dir: /data/deploy/install/data/cdc-8300 + data_dir: /tidb-data/cdc-8300 - host: 10.0.1.4:8300 gc-ttl: 86400 - data_dir: /data/deploy/install/data/cdc-8300 + data_dir: /tidb-data/cdc-8300 ``` 2. 在 TiUP 中控机上执行类似下面的命令进行扩容: ```shell - tiup cluster scale-out scale-out.yaml + tiup cluster scale-out scale-out.yml ``` 更多用例说明,请参考[扩容 TiCDC 节点](/scale-tidb-using-tiup.md#扩容-ticdc-节点)。 diff --git a/tiup/tiup-component-cluster-check.md b/tiup/tiup-component-cluster-check.md index 70e715a078a7..437cce99233f 100644 --- a/tiup/tiup-component-cluster-check.md +++ b/tiup/tiup-component-cluster-check.md @@ -150,7 +150,7 @@ tiup cluster check [flags] > `tiup cluster check` 也支持修复已部署集群的扩容拓扑文件,命令格式: > >```shell -> tiup cluster check scale-out.yaml --cluster --apply --user root [-p] [-i /home/root/.ssh/gcp_rsa] +> tiup cluster check scale-out.yml --cluster --apply --user root [-p] [-i /home/root/.ssh/gcp_rsa] >``` ### --cluster @@ -171,7 +171,7 @@ tiup cluster check [flags] > - `tiup cluster check` 也支持检查已部署集群的扩容拓扑文件,命令格式: > > ```shell -> tiup cluster check scale-out.yaml --cluster --user root [-p] [-i /home/root/.ssh/gcp_rsa] +> tiup cluster check scale-out.yml --cluster --user root [-p] [-i /home/root/.ssh/gcp_rsa] > ``` ### -N, --node From 1090197110f8a5a3f165668e3eed5b42e897bbc0 Mon Sep 17 00:00:00 2001 From: Lilian Lee Date: Mon, 24 Apr 2023 15:10:45 +0800 Subject: [PATCH 044/257] credits: remove outdated contributor link and repos (#13776) * credits: remove an outdated contributor link * credits: remove outdated repos --- credits.md | 8 -------- 1 file changed, 8 deletions(-) diff --git a/credits.md b/credits.md index 7072aed23e60..f2b81115d929 100644 --- a/credits.md +++ b/credits.md @@ -14,26 +14,19 @@ TiDB 开发者为 TiDB 的新功能开发、性能优化、稳定性保障做出 - [pingcap/tidb](https://github.com/pingcap/tidb/graphs/contributors) - [tikv/tikv](https://github.com/tikv/tikv/graphs/contributors) -- [pingcap/parser](https://github.com/pingcap/parser/graphs/contributors) - [tikv/pd](https://github.com/tikv/pd/graphs/contributors) - [pingcap/tiflash](https://github.com/pingcap/tiflash/graphs/contributors) - [pingcap/tidb-operator](https://github.com/pingcap/tidb-operator/graphs/contributors) - [pingcap/tiup](https://github.com/pingcap/tiup/graphs/contributors) -- [pingcap/br](https://github.com/pingcap/br/graphs/contributors) -- [pingcap/dm](https://github.com/pingcap/dm/graphs/contributors) - [pingcap/tidb-binlog](https://github.com/pingcap/tidb-binlog/graphs/contributors) - [pingcap/tidb-dashboard](https://github.com/pingcap/tidb-dashboard/graphs/contributors) - [pingcap/tiflow](https://github.com/pingcap/tiflow/graphs/contributors) - [pingcap/tidb-tools](https://github.com/pingcap/tidb-tools/graphs/contributors) -- [pingcap/tidb-lightning](https://github.com/pingcap/tidb-lightning/graphs/contributors) - [pingcap/tispark](https://github.com/pingcap/tispark/graphs/contributors) -- [pingcap/dumpling](https://github.com/pingcap/dumpling/graphs/contributors) - [tikv/client-java](https://github.com/tikv/client-java/graphs/contributors) - [tidb-incubator/TiBigData](https://github.com/tidb-incubator/TiBigData/graphs/contributors) - [ti-community-infra](https://github.com/orgs/ti-community-infra/people) -完整的贡献者名单,请查阅 [SIG | TiDB DevGroup](https://contributor.tidb.io/sig) - ## TiDB 文档写作者和译员 TiDB 文档写作者和译员为 TiDB 及相关项目撰写文档、提供翻译。以下链接包含了 TiDB 文档相关 repo 的贡献者名单: @@ -41,5 +34,4 @@ TiDB 文档写作者和译员为 TiDB 及相关项目撰写文档、提供翻译 - [pingcap/docs-cn](https://github.com/pingcap/docs-cn/graphs/contributors) - [pingcap/docs](https://github.com/pingcap/docs/graphs/contributors) - [pingcap/docs-tidb-operator](https://github.com/pingcap/docs-tidb-operator/graphs/contributors) -- [pingcap/docs-dm](https://github.com/pingcap/docs-dm/graphs/contributors) - [tikv/website](https://github.com/tikv/website/graphs/contributors) From d18183e9be3a700ff50da285005847093ac1e72a Mon Sep 17 00:00:00 2001 From: Benjamin2037 Date: Tue, 25 Apr 2023 11:17:51 +0800 Subject: [PATCH 045/257] system variable: rename tidb_ddl_distribute_reorg to tidb_enable_dist_task (#13549) --- releases/release-6.6.0.md | 16 ++++++++-------- system-variables.md | 10 +++++----- 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/releases/release-6.6.0.md b/releases/release-6.6.0.md index 4a0481f27d64..17e5f450e814 100644 --- a/releases/release-6.6.0.md +++ b/releases/release-6.6.0.md @@ -75,7 +75,7 @@ TiDB 版本:6.6.0-[DMR](/releases/versioning.md#开发里程碑版本) * 支持 DDL 分布式并行执行框架(实验特性)[#37125](https://github.com/pingcap/tidb/issues/37125) @[zimulala](https://github.com/zimulala) - 在过去的版本中,整个 TiDB 集群中仅允许一个 TiDB 实例作为 DDL Owner 处理 Schema 变更任务。为了进一步提升 DDL 的并发性,TiDB v6.6.0 版本引入了 DDL 分布式并行执行框架,支持集群中所有的 TiDB 实例并发执行同一个任务的 `StateWriteReorganization` 阶段,加速 DDL 的执行。该功能由系统变量 [`tidb_ddl_distribute_reorg`](/system-variables.md#tidb_ddl_distribute_reorg-从-v660-版本开始引入) 控制是否开启,目前只支持 `Add Index` 操作。 + 在过去的版本中,整个 TiDB 集群中仅允许一个 TiDB 实例作为 DDL Owner 处理 Schema 变更任务。为了进一步提升 DDL 的并发性,TiDB v6.6.0 版本引入了 DDL 分布式并行执行框架,支持集群中所有的 TiDB 实例并发执行同一个任务的 `StateWriteReorganization` 阶段,加速 DDL 的执行。该功能由系统变量 [`tidb_ddl_distribute_reorg`](https://docs.pingcap.com/zh/tidb/v6.6/system-variables#tidb_ddl_distribute_reorg-从-v660-版本开始引入) 控制是否开启,目前只支持 `Add Index` 操作。 ### 性能 @@ -147,7 +147,7 @@ TiDB 版本:6.6.0-[DMR](/releases/versioning.md#开发里程碑版本) * 支持 DDL 动态资源管控(实验特性)[#38025](https://github.com/pingcap/tidb/issues/38025) @[hawkingrei](https://github.com/hawkingrei) - TiDB v6.6.0 版本引入了 DDL 动态资源管控,通过自动控制 DDL 的 CPU 使用量,尽量降低 DDL 变更任务对线上业务的影响。该功能仅在开启 [DDL 分布式并行执行框架](/system-variables.md#tidb_ddl_distribute_reorg-从-v660-版本开始引入)后生效。 + TiDB v6.6.0 版本引入了 DDL 动态资源管控,通过自动控制 DDL 的 CPU 使用量,尽量降低 DDL 变更任务对线上业务的影响。该功能仅在开启 [DDL 分布式并行执行框架](https://docs.pingcap.com/zh/tidb/v6.6/system-variables#tidb_ddl_distribute_reorg-从-v660-版本开始引入)后生效。 ### 高可用 @@ -344,16 +344,16 @@ TiDB 版本:6.6.0-[DMR](/releases/versioning.md#开发里程碑版本) | `tidb_ttl_job_run_interval` | 删除 | 这个变量用于控制 TTL 后台清理任务的调度周期。自 v6.6.0 起删除该变量,因为自 v6.6.0 起 TiDB 为每张表提供了属性 `TTL_JOB_INTERVAL` 用于配置 TTL 运行的间隔,允许用户为每张表设置不同的运行间隔,比系统变量更加灵活。 | | [`foreign_key_checks`](/system-variables.md#foreign_key_checks) | 修改 | 用于控制是否开启外键约束检查。默认值由 `OFF` 修改为 `ON`,表示默认开启外键检查。| | [`tidb_enable_foreign_key`](/system-variables.md#tidb_enable_foreign_key-从-v630-版本开始引入) | 修改 | 用于控制是否开启外键功能。默认值由 `OFF` 修改为 `ON`,表示默认开启外键功能。| -| `tidb_enable_general_plan_cache` | 修改 | 这个变量用来控制是否开启 General Plan Cache。自 v6.6.0 起,该变量更名为 [`tidb_enable_non_prepared_plan_cache`](/system-variables.md#tidb_enable_non_prepared_plan_cache)。 | +| `tidb_enable_general_plan_cache` | 修改 | 这个变量用来控制是否开启 General Plan Cache。自 v6.6.0 起,该变量更名为 [`tidb_enable_non_prepared_plan_cache`](/system-variables.md#tidb_enable_non_prepared_plan_cache)。 | | [`tidb_enable_historical_stats`](/system-variables.md#tidb_enable_historical_stats) | 修改 | 这个变量用来控制是否开启历史统计信息。默认值由 `OFF` 修改为 `ON`,表示默认开启历史统计信息。 | -| [`tidb_enable_telemetry`](/system-variables.md#tidb_enable_telemetry-从-v402-版本开始引入) | 修改 | 默认值由 `ON` 修改为 `OFF`,表示默认关闭 TiDB 的遥测功能。 | -| `tidb_general_plan_cache_size` | 修改 | 这个变量用来控制 General Plan Cache 最多能够缓存的计划数量。自 v6.6.0 起,该变量更名为 [`tidb_non_prepared_plan_cache_size`](/system-variables.md#tidb_non_prepared_plan_cache_size)。 | +| [`tidb_enable_telemetry`](/system-variables.md#tidb_enable_telemetry-从-v402-版本开始引入) | 修改 | 默认值由 `ON` 修改为 `OFF`,表示默认关闭 TiDB 的遥测功能。 | +| `tidb_general_plan_cache_size` | 修改 | 这个变量用来控制 General Plan Cache 最多能够缓存的计划数量。自 v6.6.0 起,该变量更名为 [`tidb_non_prepared_plan_cache_size`](/system-variables.md#tidb_non_prepared_plan_cache_size)。 | | [`tidb_replica_read`](/system-variables.md#tidb_replica_read-从-v40-版本开始引入) | 修改 | 新增选项 `learner`,指定 TiDB 从只读节点中读取数据的 learner 副本。 | | [`tidb_replica_read`](/system-variables.md#tidb_replica_read-从-v40-版本开始引入) | 修改 | 新增选项 `prefer-leader`,以提高 TiDB 集群整体的读可用性。该选项被启用时,TiDB 会优先选择 Leader 副本进行读取操作;当 Leader 副本的处理性能显著下降时,TiDB 会自动将读操作转发给 Follower 副本。| | [`tidb_store_batch_size`](/system-variables.md#tidb_store_batch_size) | 修改 | 该变量设置 `IndexLookUp` 算子回表时多个 Coprocessor Task 的 batch 大小。`0` 代表不使用 batch。自 v6.6.0 起,默认值由 `0` 调整为 `4`,即每批请求会有 4 个 Coprocessor Task 被 batch 到一个 task 中。 | -| [`mpp_exchange_compression_mode`](/system-variables.md#mpp_exchange_compression_mode-从-v660-版本开始引入) | 新增 | 该变量用于选择 MPP Exchange 算子的数据压缩模式,当 TiDB 选择版本号为 `1` 的 MPP 执行计划时生效。默认值为 `UNSPECIFIED`,表示 TiDB 自动选择 `FAST` 压缩模式。| -| [`mpp_version`](/system-variables.md#mpp_version-从-v660-版本开始引入) | 新增 | 该变量用于指定不同版本的 MPP 执行计划。指定后,TiDB 会选择指定版本的 MPP 执行计划。默认值为 `UNSPECIFIED`,表示 TiDB 自动选择最新版本 `1`。 | -| [`tidb_ddl_distribute_reorg`](/system-variables.md#tidb_ddl_distribute_reorg-从-v660-版本开始引入) | 新增 | 这个变量用来控制是否开启分布式执行 DDL reorg 阶段,来提升此阶段的速度。默认值为 `OFF`,表示默认不开启分布式执行 DDL reorg 阶段。目前此开关只对 `ADD INDEX` 语句有效。| +| [`mpp_exchange_compression_mode`](/system-variables.md#mpp_exchange_compression_mode-从-v660-版本开始引入) | 新增 | 该变量用于选择 MPP Exchange 算子的数据压缩模式,当 TiDB 选择版本号为 `1` 的 MPP 执行计划时生效。默认值为 `UNSPECIFIED`,表示 TiDB 自动选择 `FAST` 压缩模式。| +| [`mpp_version`](/system-variables.md#mpp_version-从-v660-版本开始引入) | 新增 | 该变量用于指定不同版本的 MPP 执行计划。指定后,TiDB 会选择指定版本的 MPP 执行计划。默认值为 `UNSPECIFIED`,表示 TiDB 自动选择最新版本 `1`。 | +| [`tidb_ddl_distribute_reorg`](https://docs.pingcap.com/zh/tidb/v6.6/system-variables#tidb_ddl_distribute_reorg-从-v660-版本开始引入) | 新增 | 这个变量用来控制是否开启分布式执行 DDL reorg 阶段,来提升此阶段的速度。默认值为 `OFF`,表示默认不开启分布式执行 DDL reorg 阶段。目前此开关只对 `ADD INDEX` 语句有效。| | [`tidb_enable_historical_stats_for_capture`](/system-variables.md#tidb_enable_historical_stats_for_capture) | 新增 | 这个变量用来控制 `PLAN REPLAYER CAPTURE` 抓取的内容是否默认带历史统计信息。默认值为 `OFF`,表示默认不带历史统计信息。 | | [`tidb_enable_plan_cache_for_param_limit`](/system-variables.md#tidb_enable_plan_cache_for_param_limit-从-v660-版本开始引入) | 新增 | 这个变量用来控制 Prepared Plan Cache 是否缓存 `Limit` 后带有 `COUNT` 的执行计划。默认值为 `ON`,表示默认缓存这样的执行计划。目前不支持缓存 `Limit` 后面的 `COUNT` 具体参数值大于 10000 的执行计划。 | | [`tidb_enable_plan_replayer_capture`](/system-variables.md#tidb_enable_plan_replayer_capture) | 新增 | 这个变量用来控制是否开启 [`PLAN REPLAYER CAPTURE`](/sql-plan-replayer.md#使用-plan-replayer-capture-抓取目标计划)。默认值 `OFF`,代表默认关闭 `PLAN REPLAYER CAPTURE`。 | diff --git a/system-variables.md b/system-variables.md index 6141ef39703d..fdce8cdc2e63 100644 --- a/system-variables.md +++ b/system-variables.md @@ -977,18 +977,18 @@ MPP 是 TiFlash 引擎提供的分布式计算框架,允许节点之间的数 > > 目前,PITR 恢复会额外处理日志备份时间段内通过索引加速功能创建的索引,以达到兼容效果。详细内容请参考[索引加速功能为什么与 PITR 功能不兼容](/faq/backup-and-restore-faq.md#索引加速功能为什么与-pitr-功能不兼容)。 -### `tidb_ddl_distribute_reorg` 从 v6.6.0 版本开始引入 +### `tidb_enable_dist_task` 从 v7.1.0 版本开始引入 > **警告:** > -> - 该功能目前为实验特性。不推荐在生产环境中开启该功能。 -> - 当前启用此功能后,在 DDL reorg 阶段遇到某些异常只会做简单重试,还没有兼容 DDL 操作的重试方式,即目前无法依据 [`tidb_ddl_error_count_limit`](#tidb_ddl_error_count_limit) 的大小控制重试次数。 +> 该功能目前为实验特性,不建议在生产环境中使用。 - 作用域:GLOBAL - 是否持久化到集群:是 - 默认值:`OFF` -- 这个变量用于控制是否开启分布式执行 DDL reorg 阶段,来提升此阶段的速度。目前此开关只对 `ADD INDEX` 语句有效。开启该变量对于数据量较大的表有一定的性能提升。分布式 DDL 会通过 DDL 动态资源管控,控制 DDL 的 CPU 使用量,来防止对线上业务产生影响。 -- 要验证已经完成的 `ADD INDEX` 操作是否使用了此功能,可以查看 `mysql.tidb_background_subtask_history` 表是否有对应任务。 +- 这个变量用于控制是否开启分布式执行框架。开启分布式执行后,DDL 和 Import 等后端任务将会由集群中多个 TiDB 节点共同完成。 +- 在 TiDB v7.1.0 中,只支持分布式执行分区表的 `ADD INDEX`。 +- 该变量由 `tidb_ddl_distribute_reorg` 改名而来。 ### `tidb_ddl_error_count_limit` From 2fdfd723ee9ee095f32bd1e19ed57f69ad82fe00 Mon Sep 17 00:00:00 2001 From: xixirangrang Date: Tue, 25 Apr 2023 11:29:51 +0800 Subject: [PATCH 046/257] system-variables: update the default value of datadir (#13791) --- system-variables.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/system-variables.md b/system-variables.md index fdce8cdc2e63..49b71554f689 100644 --- a/system-variables.md +++ b/system-variables.md @@ -176,8 +176,10 @@ mysql> SELECT * FROM t1; ### `datadir` - 作用域:NONE -- 默认值:${ip_address:port} -- 变量值的格式为 `ip_address:port`,表示 TiDB 在启动时连接到的 PD 服务器。 +- 默认值:使用的组件和部署方式不同,默认值也不同。 + - `/tmp/tidb`:如果你将 [`--store`](/command-line-flags-for-tidb-configuration.md#--store) 设置为 `"unistore"` 或没有设置 `--store`,则默认值为 `/tmp/tidb`。 + - `${pd-ip}:${pd-port}`:如果你设置的存储引擎是 TiKV(如果使用 TiUP 和 TiDB Operator 部署,则默认的存储引擎为 TiKV),则默认值为 `${pd-ip}:${pd-port}`。 +- 这个变量表示数据存储的位置,位置可以是本地路径 `/tmp/tidb`。如果数据存储在 TiKV 上,则可以是指向 PD 服务器的路径。变量值的格式为 `${pd-ip}:${pd-port}`,表示 TiDB 在启动时连接到的 PD 服务器。 ### `ddl_slow_threshold` From f741cc9987c2dfc5dd1b5f844fb242dd5c174b77 Mon Sep 17 00:00:00 2001 From: xixirangrang Date: Tue, 25 Apr 2023 11:43:51 +0800 Subject: [PATCH 047/257] lihgtning: add parrallel import method (#13793) --- tidb-lightning/tidb-lightning-physical-import-mode.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/tidb-lightning/tidb-lightning-physical-import-mode.md b/tidb-lightning/tidb-lightning-physical-import-mode.md index f32d6c270742..4b012713785c 100644 --- a/tidb-lightning/tidb-lightning-physical-import-mode.md +++ b/tidb-lightning/tidb-lightning-physical-import-mode.md @@ -5,7 +5,9 @@ summary: 了解 TiDB Lightning 的 Physical Import Mode。 # Physical Import Mode 简介 -Physical Import Mode 是 TiDB Lightning 支持的一种数据导入方式。Physical Import Mode 不经过 SQL 接口,而是直接将数据以键值对的形式插入 TiKV 节点,是一种高效、快速的导入模式。Physical Import Mode 适合导入最高 100 TB 数据量,使用前请务必自行阅读[必要条件及限制](/tidb-lightning/tidb-lightning-physical-import-mode.md#必要条件及限制)。 +Physical Import Mode 是 TiDB Lightning 支持的一种数据导入方式。Physical Import Mode 不经过 SQL 接口,而是直接将数据以键值对的形式插入 TiKV 节点,是一种高效、快速的导入模式。Physical Import Mode 适合导入最高 100 TB 数据量,实现方式是通过[并行导入](/tidb-lightning/tidb-lightning-distributed-import.md) 10 个任务、每个任务导入 10 TB 数据。 + +使用前请务必自行阅读[必要条件及限制](/tidb-lightning/tidb-lightning-physical-import-mode.md#必要条件及限制)。 Physical Import Mode 对应的后端模式为 `local`。 From 6a95b310a73612cddffba8d206395691b85dbcc5 Mon Sep 17 00:00:00 2001 From: dongmen <20351731+asddongmen@users.noreply.github.com> Date: Tue, 25 Apr 2023 13:27:52 +0800 Subject: [PATCH 048/257] Delete binlog recommendation (#13638) --- migration-tools.md | 9 --------- 1 file changed, 9 deletions(-) diff --git a/migration-tools.md b/migration-tools.md index 5bb761ba7224..3cf714643211 100644 --- a/migration-tools.md +++ b/migration-tools.md @@ -45,15 +45,6 @@ TiDB 提供了丰富的数据迁移相关的工具,用于全量迁移、增量 | **主要优势** | 提供开放数据协议 (TiCDC Open Protocol)。| | **使用限制** | TiCDC 只能同步至少存在一个有效索引的表。暂不支持以下场景:

  • 单独使用 RawKV 的 TiKV 集群。
  • 在 TiDB 中创建 SEQUENCE 的 DDL 操作和 SEQUENCE 函数。
| -## [TiDB Binlog](/tidb-binlog/tidb-binlog-overview.md) - -| 使用场景 | 用于 TiDB 集群间的增量数据同步,如将其中一个 TiDB 集群作为另一个 TiDB 集群的从集群 | -|---|---| -| **上游** | TiDB | -| **下游(输出文件)** | TiDB,MySQL,Kafka,增量备份文件 | -| **主要优势** |
  • 支持实时备份和恢复。
  • 备份 TiDB 集群数据,同时可以用于 TiDB 集群故障时恢复。
| -| **使用限制** | 与部分 TiDB 版本不兼容。推荐使用 [TiCDC](/ticdc/ticdc-overview.md) 替代 TiDB Binlog。| - ## [Backup & Restore (BR)](/br/backup-and-restore-overview.md) | 使用场景 | 通过对大数据量的 TiDB 集群进行数据备份和恢复,实现数据迁移 | From 9fc1daf7954ceab620984c72c685d1a75d7ea43b Mon Sep 17 00:00:00 2001 From: dongmen <20351731+asddongmen@users.noreply.github.com> Date: Tue, 25 Apr 2023 13:29:52 +0800 Subject: [PATCH 049/257] add ticdc command line server flag description (#13637) --- ticdc/ticdc-sink-to-cloud-storage.md | 1 + ticdc/ticdc-sink-to-kafka.md | 1 + ticdc/ticdc-sink-to-mysql.md | 1 + 3 files changed, 3 insertions(+) diff --git a/ticdc/ticdc-sink-to-cloud-storage.md b/ticdc/ticdc-sink-to-cloud-storage.md index 75e5bbdd8054..d1085899ec82 100644 --- a/ticdc/ticdc-sink-to-cloud-storage.md +++ b/ticdc/ticdc-sink-to-cloud-storage.md @@ -27,6 +27,7 @@ cdc cli changefeed create \ 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"} ``` +- `--server`:TiCDC 集群中任意一个 TiCDC 服务器的地址。 - `--changefeed-id`:同步任务的 ID。格式需要符合正则表达式 `^[a-zA-Z0-9]+(\-[a-zA-Z0-9]+)*$`。如果不指定该 ID,TiCDC 会自动生成一个 UUID(version 4 格式)作为 ID。 - `--sink-uri`:同步任务下游的地址。具体可参考[配置 Sink URI](#配置-sink-uri)。 - `--start-ts`:指定 changefeed 的开始 TSO。TiCDC 集群将从这个 TSO 开始拉取数据。默认为当前时间。 diff --git a/ticdc/ticdc-sink-to-kafka.md b/ticdc/ticdc-sink-to-kafka.md index 6e44056e4424..7314e738a886 100644 --- a/ticdc/ticdc-sink-to-kafka.md +++ b/ticdc/ticdc-sink-to-kafka.md @@ -24,6 +24,7 @@ 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} ``` +- `--server`:TiCDC 集群中任意一个 TiCDC 服务器的地址。 - `--changefeed-id`:同步任务的 ID,格式需要符合正则表达式 `^[a-zA-Z0-9]+(\-[a-zA-Z0-9]+)*$`。如果不指定该 ID,TiCDC 会自动生成一个 UUID(version 4 格式)作为 ID。 - `--sink-uri`:同步任务下游的地址,详见:[Sink URI 配置 Kafka](/ticdc/ticdc-sink-to-kafka.md#sink-uri-配置-kafka)。 - `--start-ts`:指定 changefeed 的开始 TSO。TiCDC 集群将从这个 TSO 开始拉取数据。默认为当前时间。 diff --git a/ticdc/ticdc-sink-to-mysql.md b/ticdc/ticdc-sink-to-mysql.md index 995f84ec94cf..72ea3742e686 100644 --- a/ticdc/ticdc-sink-to-mysql.md +++ b/ticdc/ticdc-sink-to-mysql.md @@ -24,6 +24,7 @@ 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} ``` +- `--server`:TiCDC 集群中任意一个 TiCDC 服务器的地址。 - `--changefeed-id`:同步任务的 ID,格式需要符合正则表达式 `^[a-zA-Z0-9]+(\-[a-zA-Z0-9]+)*$`。如果不指定该 ID,TiCDC 会自动生成一个 UUID(version 4 格式)作为 ID。 - `--sink-uri`:同步任务下游的地址,详见 [Sink URI 配置 `mysql`/`tidb`](#sink-uri-配置-mysqltidb)。 - `--start-ts`:指定 changefeed 的开始 TSO。TiCDC 集群将从这个 TSO 开始拉取数据。默认为当前时间。 From b4034bfcfc8096ca4e96132401d50c9c902a01f0 Mon Sep 17 00:00:00 2001 From: dhysum <130652266+dhysum@users.noreply.github.com> Date: Tue, 25 Apr 2023 13:49:52 +0800 Subject: [PATCH 050/257] Add description on `admin pause ddl jobs` and `admin resume ddl jobs` (#13731) --- ddl-introduction.md | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/ddl-introduction.md b/ddl-introduction.md index f9b837934517..cc9347b6dad6 100644 --- a/ddl-introduction.md +++ b/ddl-introduction.md @@ -176,7 +176,15 @@ absent -> delete only -> write only -> write reorg -> public - `ADMIN CANCEL DDL JOBS job_id [, job_id]`:用于取消已经提交但未执行完成的 DDL 任务。取消完成后,执行 DDL 任务的 SQL 语句会返回 `ERROR 8214 (HY000): Cancelled DDL job` 错误。 - 取消一个已经执行完成的 DDL 任务会在 RESULT 列看到 `DDL Job:90 not found` 的错误,表示该任务已从 DDL 等待队列中被移除。 + 取消一个已经执行完成的 DDL 任务会在 `RESULT` 列看到 `DDL Job:90 not found` 的错误,表示该任务已从 DDL 等待队列中被移除。 + +- `ADMIN PAUSE DDL JOBS job_id [, job_id]`:用于暂停正在执行的 DDL 任务。执行该命令后,执行 DDL 任务的 SQL 语句体现为正在执行,后台任务暂停执行。(实验特性) + + 只有处于执行中或仍在等待中的 DDL 任务可以暂停,否则会在 `RESULT` 列看到 `Job 3 can't be paused now`。 + +- `ADMIN RESUME DDL JOBS job_id [, job_id]`:用于恢复已被暂停的 DDL 任务。执行该命令后,执行 DDL 任务的 SQL 语句体现为正在执行,后台任务正常执行。(实验特性) + + 你只能对暂停状态的 DDL 任务进行恢复操作,否则会在 `RESULT` 列看到 `Job 3 can't be resumed`。 ## 常见问题 From 42ba625907da52a68b724dfc65441756b6a51184 Mon Sep 17 00:00:00 2001 From: Lloyd-Pottiger <60744015+Lloyd-Pottiger@users.noreply.github.com> Date: Tue, 25 Apr 2023 16:35:54 +0800 Subject: [PATCH 051/257] Remove TiFlash http service (#13579) --- config-templates/complex-tiflash.yaml | 1 - hardware-and-software-requirements.md | 1 - tiflash/tiflash-configuration.md | 2 -- tiup/tiup-cluster-topology-reference.md | 1 - 4 files changed, 5 deletions(-) diff --git a/config-templates/complex-tiflash.yaml b/config-templates/complex-tiflash.yaml index 48c5b85aea31..6d664dcafe8b 100644 --- a/config-templates/complex-tiflash.yaml +++ b/config-templates/complex-tiflash.yaml @@ -103,7 +103,6 @@ tiflash_servers: - host: 10.0.1.11 # ssh_port: 22 # tcp_port: 9000 - # http_port: 8123 # flash_service_port: 3930 # flash_proxy_port: 20170 # flash_proxy_status_port: 20292 diff --git a/hardware-and-software-requirements.md b/hardware-and-software-requirements.md index 0a838baa3bf2..76fb6dde4c7b 100644 --- a/hardware-and-software-requirements.md +++ b/hardware-and-software-requirements.md @@ -146,7 +146,6 @@ TiDB 作为开源一栈式实时 HTAP 数据库,其正常运行需要网络环 | PD | 2379 | 提供 TiDB 和 PD 通信端口 | | PD | 2380 | PD 集群节点间通信端口 | |TiFlash|9000|TiFlash TCP 服务端口| -|TiFlash|8123|TiFlash HTTP 服务端口| |TiFlash|3930|TiFlash RAFT 服务和 Coprocessor 服务端口| |TiFlash|20170|TiFlash Proxy 服务端口| |TiFlash|20292|Prometheus 拉取 TiFlash Proxy metrics 端口| diff --git a/tiflash/tiflash-configuration.md b/tiflash/tiflash-configuration.md index f0af9a9911ca..d162ccfa7dd1 100644 --- a/tiflash/tiflash-configuration.md +++ b/tiflash/tiflash-configuration.md @@ -40,8 +40,6 @@ aliases: ['/docs-cn/dev/tiflash/tiflash-configuration/','/docs-cn/dev/reference/ listen_host = "0.0.0.0" ## TiFlash TCP 服务的端口 tcp_port = 9000 -## TiFlash HTTP 服务的端口 -http_port = 8123 ## 数据块元信息的内存 cache 大小限制,通常不需要修改 mark_cache_size = 5368709120 ## 数据块 min-max 索引的内存 cache 大小限制,通常不需要修改 diff --git a/tiup/tiup-cluster-topology-reference.md b/tiup/tiup-cluster-topology-reference.md index 59dc7a87dc71..165dbf0e7649 100644 --- a/tiup/tiup-cluster-topology-reference.md +++ b/tiup/tiup-cluster-topology-reference.md @@ -251,7 +251,6 @@ tikv_servers: - `host`:指定部署到哪台机器,字段值填 IP 地址,不可省略 - `ssh_port`:指定连接目标机器进行操作的时候使用的 SSH 端口,若不指定,则使用 global 区块中的 `ssh_port` - `tcp_port`:TiFlash TCP 服务的端口,默认 9000 -- `http_port`:TiFlash HTTP 服务的端口,默认 8123 - `flash_service_port`:TiFlash 提供服务的端口,TiDB 通过该端口从 TiFlash 读数据,默认 3930 - `metrics_port`:TiFlash 的状态端口,用于输出 metric 数据,默认 8234 - `flash_proxy_port`:内置 TiKV 的端口,默认 20170 From 6ceec55d26cf7a99c7d574e01ee5cdfc46a39c48 Mon Sep 17 00:00:00 2001 From: Zhigao Tong Date: Tue, 25 Apr 2023 16:37:52 +0800 Subject: [PATCH 052/257] add sys variables `tidb_prefer_broadcast_join_by_exchange_data_size` to docs-cn (#13588) --- system-variables.md | 10 ++++++++++ tiflash/use-tiflash-mpp-mode.md | 5 +++-- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/system-variables.md b/system-variables.md index 49b71554f689..0cddc04ad4b3 100644 --- a/system-variables.md +++ b/system-variables.md @@ -767,6 +767,7 @@ MPP 是 TiFlash 引擎提供的分布式计算框架,允许节点之间的数 - 范围:`[0, 9223372036854775807]` - 单位:行 - 如果 join 的对象为子查询,优化器无法估计子查询结果集大小,在这种情况下通过结果集行数判断。如果子查询的行数估计值小于该变量,则选择 Broadcast Hash Join 算法。否则选择 Shuffled Hash Join 算法。 +- 开启 [`tidb_prefer_broadcast_join_by_exchange_data_size`](/system-variables.md#tidb_prefer_broadcast_join_by_exchange_data_size-从-v710-版本开始引入) 功能后,该变量将不再生效。 ### `tidb_broadcast_join_threshold_size` 从 v5.0 版本开始引入 @@ -776,6 +777,7 @@ MPP 是 TiFlash 引擎提供的分布式计算框架,允许节点之间的数 - 范围:`[0, 9223372036854775807]` - 单位:字节 - 如果表大小(字节数)小于该值,则选择 Broadcast Hash Join 算法。否则选择 Shuffled Hash Join 算法。 +- 开启 [`tidb_prefer_broadcast_join_by_exchange_data_size`](/system-variables.md#tidb_prefer_broadcast_join_by_exchange_data_size-从-v710-版本开始引入) 功能后,该变量将不再生效。 ### `tidb_build_stats_concurrency` @@ -3087,6 +3089,14 @@ EXPLAIN FORMAT='brief' SELECT COUNT(1) FROM t WHERE a = 1 AND b IS NOT NULL; +### `tidb_prefer_broadcast_join_by_exchange_data_size` 从 v7.1.0 版本开始引入 + +- 作用域:SESSION | GLOBAL +- 是否持久化到集群:是 +- 默认值:`OFF` +- 这个变量用于设定 TiDB 选择 [MPP Hash Join 算法](/tiflash/use-tiflash-mpp-mode.md#mpp-模式的算法支持)时,是否使用最小网络交换的数据量策略。开启该变量后,TiDB 会估算 Broadcast Hash Join 和 Shuffled Hash Join 两种算法所需进行网络交换的数据量,并选择网络交换数据量较小的算法。 +- 该功能开启后 [`tidb_broadcast_join_threshold_count`](#tidb_broadcast_join_threshold_count-从-v50-版本开始引入) 和 [`tidb_broadcast_join_threshold_size`](#tidb_broadcast_join_threshold_size-从-v50-版本开始引入) 将不再生效。 + ### `tidb_prepared_plan_cache_memory_guard_ratio` 从 v6.1.0 版本开始引入 - 作用域:GLOBAL diff --git a/tiflash/use-tiflash-mpp-mode.md b/tiflash/use-tiflash-mpp-mode.md index 30a859d9a119..43410ba43489 100644 --- a/tiflash/use-tiflash-mpp-mode.md +++ b/tiflash/use-tiflash-mpp-mode.md @@ -95,10 +95,11 @@ mysql> explain select count(*) from customer c join nation n on c.c_nationkey=n. 在执行计划中,出现了 `ExchangeReceiver` 和 `ExchangeSender` 算子。该执行计划表示 `nation` 表读取完毕后,经过 `ExchangeSender` 算子广播到各个节点中,与 `customer` 表先后进行 `HashJoin` 和 `HashAgg` 操作,再将结果返回至 TiDB 中。 -TiFlash 提供了两个全局/会话变量决定是否选择 Broadcast Hash Join,分别为: +TiFlash 提供了 3 个全局/会话变量决定是否选择 Broadcast Hash Join,分别为: -- [`tidb_broadcast_join_threshold_size`](/system-variables.md#tidb_broadcast_join_threshold_count-从-v50-版本开始引入),单位为 bytes。如果表大小(字节数)小于该值,则选择 Broadcast Hash Join 算法。否则选择 Shuffled Hash Join 算法。 +- [`tidb_broadcast_join_threshold_size`](/system-variables.md#tidb_broadcast_join_threshold_size-从-v50-版本开始引入),单位为 bytes。如果表大小(字节数)小于该值,则选择 Broadcast Hash Join 算法。否则选择 Shuffled Hash Join 算法。 - [`tidb_broadcast_join_threshold_count`](/system-variables.md#tidb_broadcast_join_threshold_count-从-v50-版本开始引入),单位为行数。如果 join 的对象为子查询,优化器无法估计子查询结果集大小,在这种情况下通过结果集行数判断。如果子查询的行数估计值小于该变量,则选择 Broadcast Hash Join 算法。否则选择 Shuffled Hash Join 算法。 +- [`tidb_prefer_broadcast_join_by_exchange_data_size`](/system-variables.md#tidb_prefer_broadcast_join_by_exchange_data_size-从-v710-版本开始引入),控制是否使用最小网络数据交换策略。使用该策略时,TiDB 会估算 Broadcast Hash Join 和 Shuffled Hash Join 两种算法所需进行网络交换的数据量,并选择网络交换数据量较小的算法。该功能开启后, [`tidb_broadcast_join_threshold_size`](/system-variables.md#tidb_broadcast_join_threshold_size-从-v50-版本开始引入) 和 [`tidb_broadcast_join_threshold_count`](/system-variables.md#tidb_broadcast_join_threshold_count-从-v50-版本开始引入) 将不再生效。 ## MPP 模式访问分区表 From 5e5bb6351e282679f5298a5f8f7f1e47d37e4a23 Mon Sep 17 00:00:00 2001 From: Lloyd-Pottiger <60744015+Lloyd-Pottiger@users.noreply.github.com> Date: Tue, 25 Apr 2023 16:39:52 +0800 Subject: [PATCH 053/257] TiFlash Late Materialization GA (#13652) --- system-variables.md | 6 ++-- tiflash/tiflash-late-materialization.md | 39 ++++++++++++------------- 2 files changed, 22 insertions(+), 23 deletions(-) diff --git a/system-variables.md b/system-variables.md index 0cddc04ad4b3..79a5728484d0 100644 --- a/system-variables.md +++ b/system-variables.md @@ -2597,9 +2597,9 @@ mysql> desc select count(distinct a) from test.t; - 作用域:SESSION | GLOBAL - 是否持久化到集群:是 - 类型:布尔型 -- 默认值:`OFF` -- 这个变量用来控制是否启用 [TiFlash 延迟物化](/tiflash/tiflash-late-materialization.md)功能。 -- 默认情况下,如果 `SELECT` 语句中包含过滤条件(`WHERE` 子句),TiFlash 会先扫描查询所需列的全部数据后再进行过滤。当设置该变量为 `ON` 开启 TiFlash 延迟物化功能时,TiFlash 可以先扫描过滤条件相关的列数据,过滤得到符合条件的行后,再扫描这些行的其他列数据,继续后续计算,从而减少 IO 扫描和数据处理的计算量。 +- 默认值:`ON` +- 这个变量用来控制是否启用 [TiFlash 延迟物化](/tiflash/tiflash-late-materialization.md)功能。注意在 TiFlash [Fast Scan 模式](/tiflash/use-fastscan.md)下,延迟物化功能暂不可用。 +- 当设置该变量为 `OFF` 关闭 TiFlash 延迟物化功能时,如果 `SELECT` 语句中包含过滤条件(`WHERE` 子句),TiFlash 会先扫描查询所需列的全部数据后再进行过滤。当设置该变量为 `ON` 开启 TiFlash 延迟物化功能时,TiFlash 会先扫描下推到 TableScan 算子的过滤条件相关的列数据,过滤得到符合条件的行后,再扫描这些行的其他列数据,继续后续计算,从而减少 IO 扫描和数据处理的计算量。 ### `tidb_opt_fix_control` 从 v7.1.0 版本开始引入 diff --git a/tiflash/tiflash-late-materialization.md b/tiflash/tiflash-late-materialization.md index 38a78b173c9f..659e25670c06 100644 --- a/tiflash/tiflash-late-materialization.md +++ b/tiflash/tiflash-late-materialization.md @@ -5,17 +5,16 @@ summary: 介绍通过使用 TiFlash 延迟物化的方式来加速 OLAP 场景 # 延迟物化 -> **警告:** +> **注意:** > -> 该功能目前是实验性功能,其形式和使用方法可能会在未来版本中发生变化。 +> 在 TiFlash [Fast Scan 模式](/tiflash/use-fastscan.md)下,延迟物化功能暂不可用。 -本文档介绍通过使用 TiFlash 延迟物化的方式来加速 Online Analytical Processing (OLAP) 场景的查询。 +TiFlash 延迟物化是加速 Online Analytical Processing (OLAP) 场景查询的一种优化方式。你可以通过修改变量 [`tidb_opt_enable_late_materialization`](/system-variables.md#tidb_opt_enable_late_materialization-从-v700-版本开始引入) 来控制是否启用 TiFlash 延迟物化功能。 -默认情况下,当收到一个查询请求时,TiFlash 会先读取该查询所需列的全部数据,然后再根据查询条件对数据进行过滤、聚合等计算任务。延迟物化是一种优化方式,它支持下推部分过滤条件到 TableScan 算子,即先扫描过滤条件相关的列数据,过滤得到符合条件的行后,再扫描这些行的其他列数据,继续后续计算,从而减少 IO 扫描和数据处理的计算量。 +- 当关闭该功能时,如果 `SELECT` 语句中包含过滤条件(`WHERE` 子句),TiFlash 会先读取该查询所需列的全部数据,然后再根据查询条件对数据进行过滤、聚合等计算任务。 +- 当开启该功能时,TiFlash 支持下推部分过滤条件到 TableScan 算子,即先扫描下推到 TableScan 算子的过滤条件相关的列数据,过滤得到符合条件的行后,再扫描这些行的其他列数据,继续后续计算,从而减少 IO 扫描和数据处理的计算量。 -如果希望提升 OLAP 场景部分查询的性能,可以在 session 级别或 global 级别开启 TiFlash 延迟物化功能。你可以通过修改变量 [`tidb_opt_enable_late_materialization`](/system-variables.md#tidb_opt_enable_late_materialization-从-v700-版本开始引入) 的值来选择是否启用 TiFlash 延迟物化功能。 - -启用 TiFlash 延迟物化功能后,TiDB 优化器会根据统计信息和查询的过滤条件,决定哪些过滤条件会被下推。优化器会优先考虑下推过滤率高的过滤条件,详细算法可以参考 [RFC 文档](https://github.com/pingcap/tidb/tree/master/docs/design/2022-12-06-support-late-materialization.md)。 +为了提升 OLAP 场景部分查询的性能,从 v7.1.0 起,TiFlash 延迟物化功能默认开启,TiDB 优化器会根据统计信息和查询的过滤条件,决定哪些过滤条件会被下推。优化器会优先考虑下推过滤率高的过滤条件,详细算法可以参考 [RFC 文档](https://github.com/pingcap/tidb/tree/master/docs/design/2022-12-06-support-late-materialization.md)。 例如: @@ -37,7 +36,7 @@ EXPLAIN SELECT a, b, c FROM t1 WHERE a < 1; ## 启用和禁用 TiFlash 延迟物化 -默认情况下,session 和 global 级别的变量 `tidb_opt_enable_late_materialization=OFF`,即未开启 TiFlash 延迟物化功能。你可以通过以下语句来查看对应的变量信息。 +默认情况下,session 和 global 级别的变量 `tidb_opt_enable_late_materialization=ON`,即开启 TiFlash 延迟物化功能。你可以通过以下语句来查看对应的变量信息。 ```sql SHOW VARIABLES LIKE 'tidb_opt_enable_late_materialization'; @@ -47,7 +46,7 @@ SHOW VARIABLES LIKE 'tidb_opt_enable_late_materialization'; +--------------------------------------+-------+ | Variable_name | Value | +--------------------------------------+-------+ -| tidb_opt_enable_late_materialization | OFF | +| tidb_opt_enable_late_materialization | ON | +--------------------------------------+-------+ ``` @@ -59,34 +58,34 @@ SHOW GLOBAL VARIABLES LIKE 'tidb_opt_enable_late_materialization'; +--------------------------------------+-------+ | Variable_name | Value | +--------------------------------------+-------+ -| tidb_opt_enable_late_materialization | OFF | +| tidb_opt_enable_late_materialization | ON | +--------------------------------------+-------+ ``` 变量 `tidb_opt_enable_late_materialization` 支持 session 级别和 global 级别的修改。 -- 如果需要在当前 session 中启用 TiFlash 延迟物化功能,可以通过以下语句设置: - +- 如果需要在当前 session 中关闭 TiFlash 延迟物化功能,可以通过以下语句设置: + ```sql - SET SESSION tidb_opt_enable_late_materialization=ON; + SET SESSION tidb_opt_enable_late_materialization=OFF; ``` -- 如果需要在 global 级别启用 TiFlash 延迟物化功能,可以通过以下语句设置: - +- 如果需要在 global 级别关闭 TiFlash 延迟物化功能,可以通过以下语句设置: + ```sql - SET GLOBAL tidb_opt_enable_late_materialization=ON; + SET GLOBAL tidb_opt_enable_late_materialization=OFF; ``` - + 设置后,新建的会话中 session 和 global 级别 `tidb_opt_enable_late_materialization` 都将默认启用新值。 -如需禁用 TiFlash 延迟物化功能,可以通过以下语句设置: +如需启用 TiFlash 延迟物化功能,可以通过以下语句设置: ```sql -SET SESSION tidb_opt_enable_late_materialization=OFF; +SET SESSION tidb_opt_enable_late_materialization=ON; ``` ```sql -SET GLOBAL tidb_opt_enable_late_materialization=OFF; +SET GLOBAL tidb_opt_enable_late_materialization=ON; ``` ## 实现机制 From f2b3948fa3d0fca41fa18bfdd9bc79f197264062 Mon Sep 17 00:00:00 2001 From: Flowyi Date: Tue, 25 Apr 2023 16:41:52 +0800 Subject: [PATCH 054/257] Update S3 TiFlash doc (#13678) --- tiflash/tiflash-disaggregated-and-s3.md | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/tiflash/tiflash-disaggregated-and-s3.md b/tiflash/tiflash-disaggregated-and-s3.md index 3c32149b3508..183f1e81c58d 100644 --- a/tiflash/tiflash-disaggregated-and-s3.md +++ b/tiflash/tiflash-disaggregated-and-s3.md @@ -23,8 +23,6 @@ TiFlash 默认使用存算一体的架构进行部署,即 TiFlash 节点既是 Write Node 利用本地磁盘(通常是 NVMe SSD)来缓存最新写入的数据,从而避免过多使用内存。 - Write Node 比原来存算一体的 TiFlash 节点有更快的扩容和缩容速度,即增加或者删除 Write Node 后,数据能更快地在 Write Node 之间达到平衡。原理是 Write Node 把所有数据存储到了 S3,运行时只需要在本地存储很少的数据。扩容和缩容本质上是 Region Peer 在节点间的迁移。当某个 Write Node 要将某个 Region Peer 移动到自己之上管理时,它只需要从 Region Peer 所在的 Write Node 上传到 S3 的最新文件中下载少量关于此 Region 的元数据,再从 TiKV 同步最近的 Region 更新,就可以追上 Region Leader 的进度,从而完成 Region Peer 的迁移。 - - TiFlash Compute Node 负责执行从 TiDB 节点发过来的查询请求。它首先访问 Write Node 以获取数据的快照 (data snapshots),然后分别从 Write Node 读取最新的数据(即尚未上传到 S3 的数据),从 S3 读取剩下的大部分数据。 @@ -81,11 +79,7 @@ TiFlash 存算分离架构适用于高性价比的数据分析服务的场景。 } ``` -## 使用方式 - -默认情况下,TiUP 会将 TiFlash 部署为存算一体架构。如需将 TiFlash 部署为存算分离架构,请参考以下步骤手动进行配置: - -1. 确保 TiDB 集群中没有任何 TiFlash 节点。如果有,则需要将所有表的 TiFlash 副本数设置为 0,然后缩容掉所有 TiFlash 节点。比如: +3. 确保 TiDB 集群中没有任何 TiFlash 节点。如果有,则需要将所有表的 TiFlash 副本数设置为 0,然后缩容掉所有 TiFlash 节点。比如: ```sql SELECT * FROM INFORMATION_SCHEMA.TIFLASH_REPLICA; # 查询所有带有 TiFlash 副本的表 @@ -98,7 +92,11 @@ TiFlash 存算分离架构适用于高性价比的数据分析服务的场景。 tiup cluster prune mycluster # 移除所有处于 Tombstone 状态的 TiFlash 节点 ``` -2. 准备 TiFlash 的拓扑配置文件,比如 scale-out.topo.yaml,配置内容如下: +## 使用方式 + +默认情况下,TiUP 会将 TiFlash 部署为存算一体架构。如需将 TiFlash 部署为存算分离架构,请参考以下步骤手动进行配置: + +1. 准备 TiFlash 的拓扑配置文件,比如 scale-out.topo.yaml,配置内容如下: ```yaml tiflash_servers: @@ -162,7 +160,7 @@ TiFlash 存算分离架构适用于高性价比的数据分析服务的场景。 * `storage.s3.endpoint` 支持使用 `http` 模式和 `https` 模式连接 S3,可以直接通过修改 URL 来选择。比如 `https://s3.{region}.amazonaws.com`。 -3. 执行扩容 TiFlash 节点,并重新设置 TiFlash 副本数: +2. 执行扩容 TiFlash 节点,并重新设置 TiFlash 副本数: ```shell tiup cluster scale-out mycluster ./scale-out.topo.yaml @@ -172,7 +170,7 @@ TiFlash 存算分离架构适用于高性价比的数据分析服务的场景。 ALTER TABLE table_name SET TIFLASH REPLICA 1; ``` -4. 修改 TiDB 配置,用存算分离的方式查询 TiFlash。 +3. 修改 TiDB 配置,用存算分离的方式查询 TiFlash。 1. 以编辑模式打开 TiDB 配置文件: From 7d56919a77a6dfd4b2c7cac5252c8291a2a3b72a Mon Sep 17 00:00:00 2001 From: Liqi Geng Date: Tue, 25 Apr 2023 16:43:52 +0800 Subject: [PATCH 055/257] update doc for insert select pushdown to tiflash (#13687) --- system-variables.md | 7 ++----- tiflash/tiflash-results-materialization.md | 10 ++++------ 2 files changed, 6 insertions(+), 11 deletions(-) diff --git a/system-variables.md b/system-variables.md index 79a5728484d0..3804f162bb68 100644 --- a/system-variables.md +++ b/system-variables.md @@ -1683,18 +1683,15 @@ Query OK, 0 rows affected (0.09 sec) ### `tidb_enable_tiflash_read_for_write_stmt` 从 v6.3.0 版本开始引入 -> **警告:** -> -> 当前版本中该变量控制的功能是实验性功能,暂不建议在生产环境中使用。 - - 作用域:SESSION | GLOBAL - 是否持久化到集群:是 - 类型:布尔型 -- 默认值:`OFF` +- 默认值:`ON` - 这个变量用于控制包含增删改的 SQL 语句中的读取操作能否下推到 TiFlash,比如: - `INSERT INTO SELECT` 语句中的 `SELECT` 查询(典型应用场景为 [TiFlash 查询结果物化](/tiflash/tiflash-results-materialization.md)) - `UPDATE` 和 `DELETE` 语句中的 `WHERE` 条件过滤 +- 从 v7.1.0 开始,该变量废弃。当 [`tidb_allow_mpp = ON`](/system-variables.md#tidb_allow_mpp-从-v50-版本开始引入) 时,优化器将根据 [SQL 模式](/sql-mode.md)及 TiFlash 副本的代价估算自行决定是否将查询下推至 TiFlash。需要注意的是,只有当前会话的 [SQL 模式](/sql-mode.md)为非严格模式(即 `sql_mode` 值不包含 `STRICT_TRANS_TABLES` 和 `STRICT_ALL_TABLES`)时,TiDB 才允许将包含增删改的 SQL 语句(如 `INSERT INTO SELECT`)中的读取操作下推至 TiFlash。 ### `tidb_enable_tmp_storage_on_oom` diff --git a/tiflash/tiflash-results-materialization.md b/tiflash/tiflash-results-materialization.md index 924f516c2d40..ff4bae4124a9 100644 --- a/tiflash/tiflash-results-materialization.md +++ b/tiflash/tiflash-results-materialization.md @@ -5,18 +5,16 @@ summary: 介绍如何在同一个事务中保存 TiFlash 的查询结果。 # TiFlash 查询结果物化 -> **警告:** -> -> 该功能目前是实验性功能,请注意使用场景限制。该功能会在未事先通知的情况下发生变化或删除。语法和实现可能会在 GA 前发生变化。如果发现 bug,请在 GitHub 上提交 [issue](https://github.com/pingcap/tidb/issues) 反馈。 - 本文介绍如何在同一个事务 (`INSERT INTO SELECT`) 中实现将 TiFlash 查询结果保存至某一指定的 TiDB 表中。 从 v6.5.0 起,TiDB 支持将 TiFlash 查询结果保存到数据表中,即物化了 TiFlash 的查询结果。执行 `INSERT INTO SELECT` 语句时,如果 TiDB 将 `SELECT` 子查询下推到了 TiFlash,TiFlash 的查询结果可以保存到 `INSERT INTO` 指定的 TiDB 表中。v6.5.0 之前的 TiDB 版本不允许此类行为,即通过 TiFlash 执行的查询必须是只读的,你需要从应用程序层面接收 TiFlash 返回的结果,然后另行在其它事务或处理中保存结果。 > **注意:** > -> - 默认情况下 ([`tidb_allow_mpp = ON`](/system-variables.md#tidb_allow_mpp-从-v50-版本开始引入)),TiDB 优化器将依据查询代价智能选择下推查询到 TiKV 或 TiFlash。如需强制使用 TiFlash 查询,你可以设置系统变量 [`tidb_enforce_mpp`](/system-variables.md#tidb_enforce_mpp-从-v51-版本开始引入) 为 `ON`。 -> - 在实验特性阶段,该功能默认关闭。要开启此功能,请设置系统变量 [`tidb_enable_tiflash_read_for_write_stmt`](/system-variables.md#tidb_enable_tiflash_read_for_write_stmt-从-v630-版本开始引入) 为 `ON`。 +> 默认情况下 ([`tidb_allow_mpp = ON`](/system-variables.md#tidb_allow_mpp-从-v50-版本开始引入)),优化器将根据 [SQL 模式](/sql-mode.md) 及 TiFlash 副本的代价估算自行决定是否将查询下推到 TiFlash。 + +> - 如果当前会话的 [SQL 模式](/sql-mode.md)为非严格模式(即 `sql_mode` 值不包含 `STRICT_TRANS_TABLES` 和 `STRICT_ALL_TABLES`),优化器会根据 TiFlash 副本的代价估算自行决定是否将 `INSERT INTO SELECT` 中的 `SELECT` 子查询将下推到 TiFlash。在此模式下,如需忽略优化器代价估算强制使用 TiFlash 查询,你可以设置[`tidb_enforce_mpp`](/system-variables.md#tidb_enforce_mpp-从-v51-版本开始引入) 为 `ON`。 +> - 如果当前会话的 [SQL 模式](/sql-mode.md)为严格模式(即 `sql_mode` 值包含 `STRICT_TRANS_TABLES` 或 `STRICT_ALL_TABLES`),`INSERT INTO SELECT` 中的 `SELECT` 子查询将无法下推到 TiFlash。 `INSERT INTO SELECT` 语法如下: From 5864d915dfedfe4da174d2153cff663381f22cc1 Mon Sep 17 00:00:00 2001 From: Grace Cai Date: Tue, 25 Apr 2023 16:47:52 +0800 Subject: [PATCH 056/257] Make INTERVAL Partitioning GA (#13692) --- partitioned-table.md | 4 ---- 1 file changed, 4 deletions(-) diff --git a/partitioned-table.md b/partitioned-table.md index 91ca9687d1d8..f08bf406f0e0 100644 --- a/partitioned-table.md +++ b/partitioned-table.md @@ -187,10 +187,6 @@ PARTITION BY RANGE COLUMNS(name,valid_until) TiDB v6.3.0 新增了 Range INTERVAL 分区特性,作为语法糖(syntactic sugar)引入。Range INTERVAL 分区是对 Range 分区的扩展。你可以使用特定的间隔(interval)轻松创建分区。 -> **警告:** -> -> 该功能目前是实验性功能,请注意使用场景限制。该功能会在未事先通知的情况下发生变化或删除。语法和实现可能会在 GA 前发生变化。如果发现 bug,请提 [Issues · pingcap/tidb](https://github.com/pingcap/tidb/issues) 反馈。 - 其语法如下: ```sql From 88c316275d5ade7de099c553f09ddd79c9a6d8fa Mon Sep 17 00:00:00 2001 From: Grace Cai Date: Tue, 25 Apr 2023 20:51:52 +0800 Subject: [PATCH 057/257] Added COALESCE PARTITION (#13729) --- glossary.md | 8 ++++ mysql-compatibility.md | 7 +++- partitioned-table.md | 93 +++++++++++++++++++++++++++++++++++------- 3 files changed, 92 insertions(+), 16 deletions(-) diff --git a/glossary.md b/glossary.md index 2d949f9c453d..0503dbb62eee 100644 --- a/glossary.md +++ b/glossary.md @@ -46,6 +46,10 @@ ACID 是指数据库管理系统在写入或更新资料的过程中,为保证 缓存表 (Cached Table) 是指 TiDB 把整张表的数据加载到服务器的内存中,直接从内存中获取表数据,避免从 TiKV 获取表数据,从而提升读性能。详情参见[缓存表](/cached-tables.md)。 +### Coalesce Partition + +Coalesce Partition 是一种减少 Hash 分区表或 Key 分区表中分区数量的方法。详情参见[管理 Hash 分区和 Key 分区](/partitioned-table.md#管理-hash-分区和-key-分区)。 + ### Continuous Profiling 持续性能分析 (Continuous Profiling) 是从 TiDB v5.3 起引入的一种从系统调用层面解读资源开销的方法。引入该方法后,TiDB 可提供数据库源码级性能观测,通过火焰图的形式帮助研发、运维人员定位性能问题的根因。详情参见 [TiDB Dashboard 实例性能分析 - 持续分析页面](/dashboard/continuous-profiling.md)。 @@ -99,6 +103,10 @@ Operator Step 是 Operator 执行过程的一个步骤,一个 Operator 常常 ## P +### Partitioning + +[Partitioning](/partitioned-table.md)(分区)指通过 `RANGE`、`LIST`、`HASH` 和 `KEY` 等分区方法在物理上将一张表划分为较小的分区。 + ### Pending/Down Pending 和 Down 是 Peer 可能出现的两种特殊状态。其中 Pending 表示 Follower 或 Learner 的 raft log 与 Leader 有较大差距,Pending 状态的 Follower 无法被选举成 Leader。Down 是指 Leader 长时间没有收到对应 Peer 的消息,通常意味着对应节点发生了宕机或者网络隔离。 diff --git a/mysql-compatibility.md b/mysql-compatibility.md index dc257606101b..08c09fb301c8 100644 --- a/mysql-compatibility.md +++ b/mysql-compatibility.md @@ -122,9 +122,12 @@ TiDB 中,所有支持的 DDL 变更操作都是在线执行的。与 MySQL 相 * 不支持添加或删除 `CLUSTERED` 类型的主键。要了解关于 `CLUSTERED` 主键的详细信息,请参考[聚簇索引](/clustered-indexes.md)。 * 不支持指定不同类型的索引 (`HASH|BTREE|RTREE|FULLTEXT`)。若指定了不同类型的索引,TiDB 会解析并忽略这些索引。 * 分区表支持 `HASH`、`RANGE`、`LIST` 和 `KEY` 分区类型。`KEY` 分区类型暂不支持分区字段列表为空的语句。对于不支持的分区类型,TiDB 会报 `Warning: Unsupported partition type %s, treat as normal table` 错误,其中 `%s` 为不支持的具体分区类型。 -* 分区表还支持 `ADD`、`DROP`、`TRUNCATE`、`REORGANIZE` 操作,其他分区操作会被忽略。TiDB 不支持以下分区表语法: +* Range、Range COLUMNS、List、List COLUMNS 分区表支持 `ADD`、`DROP`、`TRUNCATE`、`REORGANIZE` 操作,其他分区操作会被忽略。 +* Hash 和 Key 分区表支持 `ADD`、`COALESCE`、`TRUNCATE` 操作,其他分区操作会被忽略。 +* TiDB 不支持以下分区表语法: + + `SUBPARTITION` - + `{CHECK|TRUNCATE|OPTIMIZE|REPAIR|IMPORT|DISCARD|REBUILD|COALESCE} PARTITION` + + `{CHECK|OPTIMIZE|REPAIR|IMPORT|DISCARD|REBUILD} PARTITION` 更多详情,请参考[分区表文档](/partitioned-table.md)。 diff --git a/partitioned-table.md b/partitioned-table.md index f08bf406f0e0..7bcb9ed54197 100644 --- a/partitioned-table.md +++ b/partitioned-table.md @@ -799,7 +799,11 @@ Empty set (0.00 sec) - 使用 `ALTER TABLE <表名> TRUNCATE PARTITION <分区列表>` 语句清空分区里的数据。`TRUNCATE PARTITION` 的逻辑与 [`TRUNCATE TABLE`](/sql-statements/sql-statement-truncate.md) 相似,但它的操作对象为分区。 - 使用 `ALTER TABLE <表名> REORGANIZE PARTITION <分区列表> INTO (<新的分区说明>)`语句对分区进行合并、拆分、或者其他修改。 -对于 `HASH` 和 `KEY` 分区表,目前只支持 `ALTER TABLE ... TRUNCATE PARTITION` 分区管理语句,不支持 `COALESCE PARTITION` 和 `ADD PARTITION` 语句。 +对于 `HASH` 和 `KEY` 分区表,你可以进行以下分区管理操作: + +- 使用 `ALTER TABLE COALESCE PARTITION <要减少的分区数量>` 语句减少分区数量。此操作会重组分区,将所有数据按照新的分区个数复制到对应的分区。 +- 使用 `ALTER TABLE
ADD PARTITION <要增加的分区数量 | (新的分区说明)>` 语句增加分区的数量。此操作会重组分区,将所有数据按照新的分区个数复制到对应的分区。 +- 使用 `ALTER TABLE
TRUNCATE PARTITION <分区列表>` 语句清空分区里的数据。`TRUNCATE PARTITION` 的逻辑与 [`TRUNCATE TABLE`](/sql-statements/sql-statement-truncate.md) 相似,但它的操作对象为分区。 `EXCHANGE PARTITION` 语句用来交换分区和非分区表,类似于重命名表如 `RENAME TABLE t1 TO t1_tmp, t2 TO t1, t1_tmp TO t2` 的操作。 @@ -961,40 +965,101 @@ ALTER TABLE member_level REORGANIZE PARTITION l1_2,l3,l4,l5,l6 INTO ERROR 1526 (HY000): Table has no partition for value 6 ``` -### 管理 Hash 分区 +- 分区重组后,相应分区的统计信息将会过期,并返回以下警告。此时,你可以通过 [`ANALYZE TABLE`](/sql-statements/sql-statement-analyze-table.md)语句更新统计信息。 + + ```sql + +---------+------+--------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Level | Code | Message | + +---------+------+--------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Warning | 1105 | The statistics of related partitions will be outdated after reorganizing partitions. Please use 'ANALYZE TABLE' statement if you want to update it now | + +---------+------+--------------------------------------------------------------------------------------------------------------------------------------------------------+ + 1 row in set (0.00 sec) + ``` + +### 管理 Hash 分区和 Key 分区 + +本小节将以如下 SQL 语句创建的分区表为例,介绍如何管理 Hash 分区。对于 Key 分区,你也可以使用与 Hash 分区相同的分区管理语句。 + +```sql +CREATE TABLE example ( + id INT PRIMARY KEY, + data VARCHAR(1024) +) +PARTITION BY HASH(id) +PARTITIONS 2; +``` -跟 Range 分区不同,Hash 分区不支持 `DROP PARTITION`。 +#### 增加分区数量 + +将 `example` 表的分区个数增加 1 个(从 2 增加到 3): + +```sql +ALTER TABLE example ADD PARTITION PARTITIONS 1; +``` -目前 TiDB 的实现暂时不支持 `ALTER TABLE ... COALESCE PARTITION`。对于暂不支持的分区管理语句,TiDB 会返回错误。 +你也可以通过添加分区定义来指定分区选项。例如,你可以通过以下语句将分区数量从 3 增加到 5,并指定新增的分区名为 `pExample4` 和 `pExample5`: ```sql -ALTER TABLE MEMBERS OPTIMIZE PARTITION p0; +ALTER TABLE example ADD PARTITION +(PARTITION pExample4 COMMENT = 'not p3, but pExample4 instead', + PARTITION pExample5 COMMENT = 'not p4, but pExample5 instead'); ``` +#### 减少分区数量 + +与 Range 和 List 分区不同,Hash 和 Key 分区不支持 `DROP PARTITION`,但可以使用 `COALESCE PARTITION` 来减少分区数量,或使用 `TRUNCATE PARTITION` 清空指定分区的所有数据。 + +将 `example` 表的分区个数减少 1 个(从 5 减少到 4): + ```sql -ERROR 8200 (HY000): Unsupported optimize partition +ALTER TABLE example COALESCE PARTITION 1; ``` -### Key 分区管理 +> **注意:** +> +> 更改 Hash 和 Key 分区表的分区个数的过程会重组分区,将所有数据按照新的分区个数复制到对应的分区。因此,更改 Hash 和 Key 分区表的分区个数后,会遇到以下关于过时统计信息的警告。此时,你可以通过 [`ANALYZE TABLE`](/sql-statements/sql-statement-analyze-table.md) 语句更新统计信息。 +> +> ```sql +> +---------+------+--------------------------------------------------------------------------------------------------------------------------------------------------------+ +> | Level | Code | Message | +> +---------+------+--------------------------------------------------------------------------------------------------------------------------------------------------------+ +> | Warning | 1105 | The statistics of related partitions will be outdated after reorganizing partitions. Please use 'ANALYZE TABLE' statement if you want to update it now | +> +---------+------+--------------------------------------------------------------------------------------------------------------------------------------------------------+ +> 1 row in set (0.00 sec) +> ``` -目前 TiDB 中 Key 分区支持的分区管理语句只有 `ALTER TABLE ... TRUNCATE PARTITION`。 +为了更好地理解 `example` 表重组后的结构,你可以查看重新创建 `example` 表所使用的 SQL 语句,如下所示: ```sql -ALTER TABLE members TRUNCATE PARTITION p0; +SHOW CREATE TABLE\G ``` ``` -Query OK, 0 rows affected (0.03 sec) +*************************** 1. row *************************** + Table: example +Create Table: CREATE TABLE `example` ( + `id` int(11) NOT NULL, + `data` varchar(1024) DEFAULT NULL, + PRIMARY KEY (`id`) /*T![clustered_index] CLUSTERED */ +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin +PARTITION BY HASH (`id`) +(PARTITION `p0`, + PARTITION `p1`, + PARTITION `p2`, + PARTITION `pExample4` COMMENT 'not p3, but pExample4 instead') +1 row in set (0.01 sec) ``` -对于暂不支持的分区管理语句,TiDB 会返回错误。 +#### 清空分区 + +清空指定分区的所有数据: ```sql -ALTER TABLE members OPTIMIZE PARTITION p0; +ALTER TABLE example TRUNCATE PARTITION p0; ``` -```sql -ERROR 8200 (HY000): Unsupported optimize partition +``` +Query OK, 0 rows affected (0.03 sec) ``` ## 分区裁剪 From f7d4862e9b9f87bb68f59f55a1c1b2875f250583 Mon Sep 17 00:00:00 2001 From: Grace Cai Date: Tue, 25 Apr 2023 21:49:52 +0800 Subject: [PATCH 058/257] v7.1: modify default value descriptions for enable-partition-separator (#13763) --- ticdc/ticdc-changefeed-config.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ticdc/ticdc-changefeed-config.md b/ticdc/ticdc-changefeed-config.md index e92c0a706e0c..d33347f998e8 100644 --- a/ticdc/ticdc-changefeed-config.md +++ b/ticdc/ticdc-changefeed-config.md @@ -118,7 +118,7 @@ protocol = "canal-json" terminator = '' # 文件路径的日期分隔类型。可选类型有 `none`、`year`、`month` 和 `day`。默认值为 `none`,即不使用日期分隔。详见 。 date-separator = 'none' -# 是否使用 partition 作为分隔字符串。默认值为 true,即一张表中各个 partition 的数据会分不同的目录来存储。详见 。 +# 是否使用 partition 作为分隔字符串。默认值为 true,即一张表中各个 partition 的数据会分不同的目录来存储。建议保持该配置项为 true 以避免下游分区表可能丢数据的问题 。使用示例详见 。 enable-partition-separator = true # 从 v6.5.0 开始,TiCDC 支持以 CSV 格式将数据变更记录保存至存储服务中,在 MQ 和 MySQL 类 sink 中无需设置。 From 320447af0583e89e46ce69bc140d6a8d897222a5 Mon Sep 17 00:00:00 2001 From: Aolin Date: Wed, 26 Apr 2023 11:05:51 +0800 Subject: [PATCH 059/257] ticdc: fix the description of safe-mode (#13792) --- ticdc/ticdc-faq.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ticdc/ticdc-faq.md b/ticdc/ticdc-faq.md index 65db3e355254..6c347d524ddf 100644 --- a/ticdc/ticdc-faq.md +++ b/ticdc/ticdc-faq.md @@ -222,7 +222,7 @@ mysql root@127.0.0.1:test> show create table test; 产生表结构不一致的原因是 `explicit_defaults_for_timestamp` 的[默认值在 TiDB 和 MySQL 5.7 不同](/mysql-compatibility.md#默认设置)。从 TiCDC v5.0.1/v4.0.13 版本开始,同步到 MySQL 会自动设置 session 变量 `explicit_defaults_for_timestamp = ON`,保证同步时间类型时上下游行为一致。对于 v5.0.1/v4.0.13 以前的版本,同步时间类型时需要注意 `explicit_defaults_for_timestamp` 默认值不同带来的兼容性问题。 -## 使用 TiCDC 创建同步任务时将 `enable-old-value` 设置为 `true` 后,为什么上游的 `INSERT`/`UPDATE` 语句经 TiCDC 同步到下游后变为了 `REPLACE INTO`? +## 使用 TiCDC 创建同步任务时将 `safe-mode` 设置为 `true` 后,为什么上游的 `INSERT`/`UPDATE` 语句经 TiCDC 同步到下游后变为了 `REPLACE INTO`? TiCDC 提供至少一次的数据同步保证,当下游有重复数据时,会引起写冲突。为了避免该问题,TiCDC 会将 `INSERT` 和 `UPDATE` 语句转成 `REPLACE INTO` 语句。该行为由 `safe-mode` 参数来控制。 From f8f9b51561034e5952b2061eaf2bad7641913911 Mon Sep 17 00:00:00 2001 From: Aolin Date: Wed, 26 Apr 2023 11:35:51 +0800 Subject: [PATCH 060/257] tiup: update the default value of transfer-timeout from 300 to 600 (#13808) --- dm/maintain-dm-using-tiup.md | 2 +- tiup/tiup-component-cluster-patch.md | 2 +- tiup/tiup-component-cluster-reload.md | 2 +- tiup/tiup-component-cluster-scale-in.md | 2 +- tiup/tiup-component-cluster-upgrade.md | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/dm/maintain-dm-using-tiup.md b/dm/maintain-dm-using-tiup.md index 2bae43045072..e69fe3e8a2d4 100644 --- a/dm/maintain-dm-using-tiup.md +++ b/dm/maintain-dm-using-tiup.md @@ -242,7 +242,7 @@ Flags: -N, --node strings Specify the nodes --overwrite Use this package in the future scale-out operations -R, --role strings Specify the role - --transfer-timeout int Timeout in seconds when transferring dm-master leaders (default 300) + --transfer-timeout int Timeout in seconds when transferring dm-master leaders (default 600) Global Flags: --native-ssh Use the native SSH client installed on local system instead of the build-in one. diff --git a/tiup/tiup-component-cluster-patch.md b/tiup/tiup-component-cluster-patch.md index 4e562dd9657f..02d0f08e9cdd 100644 --- a/tiup/tiup-component-cluster-patch.md +++ b/tiup/tiup-component-cluster-patch.md @@ -37,7 +37,7 @@ tiup cluster patch [flags] - 数据类型:`BOOLEAN` - 该选项默认关闭,默认值为 `false`。在命令中添加该选项,并传入 `true` 值或不传值,均可开启此功能。 -### --transfer-timeout(uint,默认 300) +### --transfer-timeout(uint,默认 600) 在重启 PD 或 TiKV 时,会先将被重启节点的 leader 迁移到其他节点,迁移过程会需要一定时间,可以通过设置 `--transfer-timeout` 设置最长等待时间(单位为秒),超时之后会跳过等待直接重启服务。 diff --git a/tiup/tiup-component-cluster-reload.md b/tiup/tiup-component-cluster-reload.md index 5a15b087b174..7b8652eaa3ae 100644 --- a/tiup/tiup-component-cluster-reload.md +++ b/tiup/tiup-component-cluster-reload.md @@ -22,7 +22,7 @@ tiup cluster reload [flags] - 数据类型:`BOOLEAN` - 该选项默认关闭,默认值为 `false`。在命令中添加该选项,并传入 `true` 值或不传值,均可开启此功能。 -### --transfer-timeout(uint,默认 300) +### --transfer-timeout(uint,默认 600) 在重启 PD 或 TiKV 时,会先将被重启节点的 leader 迁移到其他节点,迁移过程会需要一定时间,可以通过设置 `--transfer-timeout` 设置最长等待时间(单位为秒),超时之后会跳过等待直接重启服务。 diff --git a/tiup/tiup-component-cluster-scale-in.md b/tiup/tiup-component-cluster-scale-in.md index 1e327e238de8..2ddf4fa65220 100644 --- a/tiup/tiup-component-cluster-scale-in.md +++ b/tiup/tiup-component-cluster-scale-in.md @@ -45,7 +45,7 @@ tiup cluster scale-in [flags] > > 使用该选项强制移除正在服务和下线中的 TiKV / TiFlash 节点时,这些节点会被直接删除,不等待数据调度完成,因此这个场景下,数据丢失风险非常大。不建议对未宕机的节点使用该选项。如果元数据所在的 Region 发生数据丢失,整个集群将不可用且无法恢复。 -### --transfer-timeout(uint,默认 300) +### --transfer-timeout(uint,默认 600) 在缩容 PD 或 TiKV 时,会先将被缩容节点的 leader 迁移到其他节点,迁移过程会需要一定时间,可以通过设置 `--transfer-timeout` 设置最长等待时间(单位为秒),超时之后会跳过等待直接缩容服务。 diff --git a/tiup/tiup-component-cluster-upgrade.md b/tiup/tiup-component-cluster-upgrade.md index 22f3d2d8e0ad..4a9ece1b79a6 100644 --- a/tiup/tiup-component-cluster-upgrade.md +++ b/tiup/tiup-component-cluster-upgrade.md @@ -27,7 +27,7 @@ tiup cluster upgrade [flags] > > 对正在提供服务的集群强制升级可能导致集群服务不可用。对于未启动的集群,升级成功后会自动启动集群。 -### --transfer-timeout(uint,默认 300) +### --transfer-timeout(uint,默认 600) 在升级 PD 或 TiKV 时,会先将被升级节点的 leader 迁移到其他节点,迁移过程会需要一定时间,可以通过设置 `--transfer-timeout` 设置最长等待时间(单位为秒),超时之后会跳过等待直接升级服务。 From 677b378a3415ed2f9bf17b9b315492cb757c84f7 Mon Sep 17 00:00:00 2001 From: buffer Date: Wed, 26 Apr 2023 11:47:52 +0800 Subject: [PATCH 061/257] pd: add configuration for store_limit_v2 (#13768) --- configure-store-limit.md | 6 ++++++ pd-configuration-file.md | 12 ++++++++++++ pd-control.md | 8 +++++++- 3 files changed, 25 insertions(+), 1 deletion(-) diff --git a/configure-store-limit.md b/configure-store-limit.md index a9ba538ba650..db1f59136d11 100644 --- a/configure-store-limit.md +++ b/configure-store-limit.md @@ -67,3 +67,9 @@ store limit 1 5 // 设置 store 1 添加和删除 peer 的 store limit 1 5 add-peer // 设置 store 1 添加 peer 的速度上限为每分钟 5 个。 store limit 1 5 remove-peer // 设置 store 1 删除 peer 的速度上限为每分钟 5 个。 ``` + +## Store Limit v2 原理 + +当 [`store-limit-version`](/pd-configuration-file.md#store-limit-version-从-v710-版本开始引入) 设置为 `v2` 时,Store Limit v2 生效。在此模式下,Operator 调度限制将根据 TiKV Snapshot 执行情况进行动态调整。当 TiKV 积压的任务较少时,PD 会增加其调度任务。相反,PD 会减少对该节点的调度任务。此时,你无需关注如何设置 `store limit` 以加快调度进度。 + +在该模式下,TiKV 执行速度成为迁移进度的主要瓶颈。你可以通过 **TiKV Details** > **Snapshot** > **Snapshot Speed** 面板判断当前调度速度是否达到 TiKV 限流设置。通过调整 TiKV Snapshot Limit ([`snap-io-max-bytes-per-sec`](/tikv-configuration-file.md#snap-io-max-bytes-per-sec)) 来增加或减少该节点的调度速度。 \ No newline at end of file diff --git a/pd-configuration-file.md b/pd-configuration-file.md index 060deaeddf05..e94f366a89b8 100644 --- a/pd-configuration-file.md +++ b/pd-configuration-file.md @@ -403,6 +403,18 @@ pd-server 相关配置项。 + 默认值:true + 参考 [Placement Rules 使用文档](/configure-placement-rules.md) +### `store-limit-version` 从 v7.1.0 版本开始引入 + +> **警告:** +> +> 在当前版本中,将该配置项设置为 `"v2"` 为实验特性,不建议在生产环境中使用。 + ++ 设置 `store limit` 工作模式 ++ 默认值:v1 ++ 可选值: + + v1:在 v1 模式下,你可以手动修改 `store limit` 以限制单个 TiKV 调度速度。 + + v2:(实验特性)在 v2 模式下,你无需关注 `store limit` 值,PD 将根据 TiKV Snapshot 执行情况动态调整 TiKV 调度速度。详情请参考 [Store Limit v2 原理](/configure-store-limit.md#store-limit-v2-原理)。 + ## label-property 标签相关的配置项。 diff --git a/pd-control.md b/pd-control.md index babab2a42955..a5614436bf97 100644 --- a/pd-control.md +++ b/pd-control.md @@ -451,7 +451,13 @@ config show cluster-version - `enable-placement-rules` 用于开启 placement rules,在 v5.0 及以上的版本默认开启。 -- `store-limit-mode` 用于控制 store 限速机制的模式。主要有两种模式:`auto` 和 `manual`。`auto` 模式下会根据 load 自动进行平衡调整(实验性功能)。 +- `store-limit-mode` 用于控制 store 限速机制的模式。主要有两种模式:`auto` 和 `manual`。`auto` 模式下会根据 load 自动进行平衡调整(弃用)。 + +- `store-limit-version` 用于设置 `store limit` 限制模式,目前提供两种方式:`v1` 和 `v2`。默认值为 `v1`。在 `v1` 模式下,你可以手动修改 `store limit` 以限制单个 TiKV 调度速度。`v2` 模式为实验特性,在 `v2` 模式下,你无需关注 `store limit` 值,PD 将根据 TiKV Snapshot 执行情况动态调整 TiKV 调度速度。详情请参考 [Store Limit v2 原理](/configure-store-limit.md#store-limit-v2-原理)。 + + ```bash + config set store-limit-version v2 // 使用 Store Limit v2 + ``` - PD 会对流量信息的末尾数字进行四舍五入处理,减少 Region 流量信息变化引起的统计信息更新。该配置项用于指定对 Region 流量信息的末尾进行四舍五入的位数。例如流量 `100512` 会归约到 `101000`。默认值为 `3`。该配置替换了 `trace-region-flow`。 From f18b6d8be0701322689d982a7dae4592b19c136b Mon Sep 17 00:00:00 2001 From: tangenta Date: Wed, 26 Apr 2023 14:33:53 +0800 Subject: [PATCH 062/257] system-variables: update `tidb_ddl_enable_fast_reorg` (#13756) --- system-variables.md | 1 + 1 file changed, 1 insertion(+) diff --git a/system-variables.md b/system-variables.md index 3804f162bb68..24bbf983e84d 100644 --- a/system-variables.md +++ b/system-variables.md @@ -975,6 +975,7 @@ MPP 是 TiFlash 引擎提供的分布式计算框架,允许节点之间的数 - 是否持久化到集群:是 - 默认值:`ON` - 这个变量用来控制是否开启添加索引加速功能,来提升创建索引回填过程的速度。开启该变量对于数据量较大的表有一定的性能提升。 +- TiDB v7.1.0 引入了快速加索引功能的检查点机制,即使 TiDB owner 因故障重启或者切换,也能够通过自动定期保存的检查点恢复部分进度。 - 要验证已经完成的 `ADD INDEX` 操作是否使用了添加索引加速功能,可以执行 [`ADMIN SHOW DDL JOBS`](/sql-statements/sql-statement-admin-show-ddl.md#admin-show-ddl-jobs) 语句查看 `JOB_TYPE` 一列中是否含有 `ingest` 字样。 > **警告:** From 5089f00873262fcbe4c453c0632eb66f434b11f7 Mon Sep 17 00:00:00 2001 From: Yuanjia Zhang Date: Wed, 26 Apr 2023 14:45:53 +0800 Subject: [PATCH 063/257] planner: add doc for the new variable `tidb_plan_cache_max_plan_size` (#13807) --- sql-non-prepared-plan-cache.md | 2 ++ sql-prepared-plan-cache.md | 2 ++ system-variables.md | 20 ++++++++++++++++++++ 3 files changed, 24 insertions(+) diff --git a/sql-non-prepared-plan-cache.md b/sql-non-prepared-plan-cache.md index 5dd326f0de7f..43dadadb2e8d 100644 --- a/sql-non-prepared-plan-cache.md +++ b/sql-non-prepared-plan-cache.md @@ -22,6 +22,8 @@ Non-Prepared Plan Cache 为会话级别,并且与 [Prepared Plan Cache](/sql-p `tidb_enable_non_prepared_plan_cache` 在 v7.1.0 之前版本中默认值为 `OFF`,即默认关闭。在 v7.1.0 及之后的版本中默认值为 `ON`,即默认开启。 +从 v7.1.0 开始,你可以通过变量 [`tidb_plan_cache_max_plan_size`](/system-variables.md#tidb_plan_cache_max_plan_size-从-v710-版本开始引入) 来设置可以缓存的计划的最大大小,默认为 2 MB。超过该值的执行计划将不会被缓存到 Plan Cache 中。 + > **注意:** > > `tidb_session_plan_cache_size` 定义的内存会被 Prepared 和 Non-Prepared Plan Cache 共享。如果集群已经开启 Prepared Plan Cache,那么开启 Non-Prepared Plan Cache 可能降低原先 Prepared Plan Cache 的命中率。 diff --git a/sql-prepared-plan-cache.md b/sql-prepared-plan-cache.md index 206014ff9bef..e7f3bbc24076 100644 --- a/sql-prepared-plan-cache.md +++ b/sql-prepared-plan-cache.md @@ -188,6 +188,8 @@ Grafana 中 `Plan Cache Memory Usage` 和 `Plan Cache Plan Num` 监控如下图 - TiDB Server 实例内存阈值 <= 64 GiB 时,`tidb_session_plan_cache_size = 50` - TiDB Server 实例内存阈值 > 64 GiB 时,`tidb_session_plan_cache_size = 100` +从 v7.1.0 开始,你可以通过变量 [`tidb_plan_cache_max_plan_size`](/system-variables.md#tidb_plan_cache_max_plan_size-从-v710-版本开始引入) 来设置可以缓存的计划的最大大小,默认为 2 MB。超过该值的执行计划将不会被缓存到 Plan Cache 中。 + 当 TiDB Server 的内存余量小于一定阈值时,会触发 Plan Cache 的内存保护机制,此时会对一些缓存的计划进行逐出。 目前该阈值由变量 `tidb_prepared_plan_cache_memory_guard_ratio` 控制,默认为 0.1,即 10%,也就是当剩余内存不足 10%(使用内存超过 90%)时,会触发此机制。 diff --git a/system-variables.md b/system-variables.md index 24bbf983e84d..bff888d333c5 100644 --- a/system-variables.md +++ b/system-variables.md @@ -3016,6 +3016,26 @@ SHOW WARNINGS; - 该变量用于控制 DDL 语句是否忽略 [Placement Rules in SQL](/placement-rules-in-sql.md) 指定的放置规则。变量值为 `IGNORE` 时将忽略所有放置规则选项。 - 该变量可由逻辑转储或逻辑恢复工具使用,确保即使绑定了不合适的放置规则,也始终可以成功创建表。这类似于 mysqldump 将 `SET FOREIGN_KEY_CHECKS=0;` 写入每个转储文件的开头部分。 +### `tidb_plan_cache_invalidation_on_fresh_stats` 从 v7.1.0 版本开始引入 + +- 作用域:SESSION | GLOBAL +- 是否持久化到集群:是 +- 类型:布尔型 +- 默认值:`ON` +- 该变量用于控制当某张表上的统计信息更新后,与该表相关的 Plan Cache 是否自动失效。 +- 开启此变量有助于 Plan Cache 更有效地利用可用的统计信息生成执行计划,例如: + - 有时 Plan Cache 会在统计信息尚不可用时生成执行计划。开启此变量后,Plan Cache 会在统计信息可用时重新生成执行计划。 + - 当表上数据分布发生变化时,之前的最优执行计划可能对于现在不再是最优的。开启此变量后,Plan Cache 会在重新收集统计信息后重新生成执行计划。 +- 对于从 v7.1.0 以前的版本升级到 v7.1.0 及以上版本的 TiDB 集群,该选项默认关闭 (`OFF`)。 + +### `tidb_plan_cache_max_plan_size` 从 v7.1.0 版本开始引入 + +- 作用域:SESSION | GLOBAL +- 是否持久化到集群:是 +- 默认值:`2097152`(即 2 MB) +- 取值范围:`[0, 9223372036854775807]`,单位为 Byte。支持带单位的内存格式“KB|MB|GB|TB”。`0` 表示表示不设限制。 +- 这个变量用来控制可以缓存的 Prepare 或非 Prepare 语句执行计划的最大大小。超过该值的执行计划将不会被缓存到 Plan Cache 中。详情请参考 [Prepare 语句执行计划缓存](/sql-prepared-plan-cache.md#prepared-plan-cache-的内存管理)和[非 Prepare 语句执行计划缓存](/sql-non-prepared-plan-cache.md#使用方法)。 + ### `tidb_pprof_sql_cpu` 从 v4.0 版本开始引入 - 作用域:GLOBAL From 12e4413bfa793d111077be2ad50075ef0d25ef9c Mon Sep 17 00:00:00 2001 From: Ran Date: Thu, 27 Apr 2023 11:23:53 +0800 Subject: [PATCH 064/257] add a note on max_prepared_stmt_count for 6.5.2 (#13819) --- releases/release-6.5.2.md | 1 + 1 file changed, 1 insertion(+) diff --git a/releases/release-6.5.2.md b/releases/release-6.5.2.md index 48f4155f9c07..b8705c47ed68 100644 --- a/releases/release-6.5.2.md +++ b/releases/release-6.5.2.md @@ -63,6 +63,7 @@ TiDB 版本:6.5.2 - 修复当同一个 SQL 中出现多个不同的分区表时,TiDB 可能执行得到错误结果的问题 [#42135](https://github.com/pingcap/tidb/issues/42135) @[mjonss](https://github.com/mjonss) - 修复在开启 Prepared Plan Cache 的情况下,索引全表扫可能会报错的问题 [#42150](https://github.com/pingcap/tidb/issues/42150) @[fzzf678](https://github.com/fzzf678) - 修复在开启 Prepared Plan Cache 时 Index Merge 可能得到错误结果的问题 [#41828](https://github.com/pingcap/tidb/issues/41828) @[qw4990](https://github.com/qw4990) + - 修复了设置 `max_prepared_stmt_count` 不生效的问题 [#39735](https://github.com/pingcap/tidb/issues/39735) @[xuyifangreeneyes](https://github.com/xuyifangreeneyes) - 修复全局内存控制可能错误地 Kill 内存使用量小于 `tidb_server_memory_limit_sess_min_size` 的 SQL 的问题 [#42662](https://github.com/pingcap/tidb/issues/41828) @[XuHuaiyu](https://github.com/XuHuaiyu) - 修复分区表动态裁剪模式下 Index Join 可能导致 panic 的问题 [#40596](https://github.com/pingcap/tidb/issues/40596) @[tiancaiamao](https://github.com/tiancaiamao) From ad80261102975592f0d8129ac504757d93683865 Mon Sep 17 00:00:00 2001 From: glkappe Date: Thu, 27 Apr 2023 14:33:52 +0700 Subject: [PATCH 065/257] dumpling: update some desc for migrating from aurora (#10477) --- migrate-aurora-to-tidb.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/migrate-aurora-to-tidb.md b/migrate-aurora-to-tidb.md index ca9bb0088f2b..4b6c428b4ff8 100644 --- a/migrate-aurora-to-tidb.md +++ b/migrate-aurora-to-tidb.md @@ -56,7 +56,7 @@ aliases: ['/zh/tidb/dev/migrate-from-aurora-using-lightning/','/docs-cn/dev/migr {{< copyable "shell-regular" >}} ```shell -tiup dumpling --host ${host} --port 3306 --user root --password ${password} --filter 'my_db1.table[12]' --no-data --output 's3://my-bucket/schema-backup' --filter "mydb.*" +tiup dumpling --host ${host} --port 3306 --user root --password ${password} --filter 'my_db1.table[12],mydb.*' --consistency none --no-data --output 's3://my-bucket/schema-backup' ``` 命令中所用参数描述如下。如需更多信息可参考 [Dumpling overview](/dumpling-overview.md)。 @@ -74,7 +74,8 @@ tiup dumpling --host ${host} --port 3306 --user root --password ${password} --fi |-B 或 --database |导出指定数据库| |-T 或 --tables-list |导出指定数据表| |-d 或 --no-data |不导出数据,仅导出 schema| -|-f 或 --filter |导出能匹配模式的表,不可用 -T 一起使用,语法可参考[table filter](/table-filter.md)| +|-f 或 --filter |导出能匹配模式的表,不可与 -T 一起使用,语法可参考[table filter](/table-filter.md)| +|--consistency |导出期间的一致性模式,Aurora 只能使用 `none`,即不加锁 dump,不保证一致性| ### 第 3 步:编写 Lightning 配置文件 From c98197df0310d7f5dc2cd6668c2e6d21172fe6f6 Mon Sep 17 00:00:00 2001 From: Aolin Date: Thu, 27 Apr 2023 16:07:52 +0800 Subject: [PATCH 066/257] releases: add TiDB 7.1.0 release notes (preview version) (#13596) --- TOC.md | 4 +- releases/release-7.1.0.md | 276 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 279 insertions(+), 1 deletion(-) create mode 100644 releases/release-7.1.0.md diff --git a/TOC.md b/TOC.md index 50f0254a99be..e57bcf917b8f 100644 --- a/TOC.md +++ b/TOC.md @@ -4,7 +4,7 @@ - [文档中心](https://docs.pingcap.com/zh) - 关于 TiDB - [TiDB 简介](/overview.md) - - [TiDB 7.0 Release Notes](/releases/release-7.0.0.md) + - [TiDB 7.1 (upcoming) Release Notes](/releases/release-7.1.0.md) - [功能概览](/basic-features.md) - [与 MySQL 的兼容性](/mysql-compatibility.md) - [使用限制](/tidb-limitations.md) @@ -986,6 +986,8 @@ - [版本发布时间线](/releases/release-timeline.md) - [TiDB 版本规则](/releases/versioning.md) - [TiDB 离线包](/binary-package.md) + - v7.1 (upcoming) + - [7.1.0](/releases/release-7.1.0.md) - v7.0 - [7.0.0-DMR](/releases/release-7.0.0.md) - v6.6 diff --git a/releases/release-7.1.0.md b/releases/release-7.1.0.md new file mode 100644 index 000000000000..0c7780944e5e --- /dev/null +++ b/releases/release-7.1.0.md @@ -0,0 +1,276 @@ +--- +title: TiDB 7.1.0 Release Notes +summary: 了解 TiDB 7.1.0 版本的新功能、兼容性变更、改进提升,以及错误修复。 +--- + +# TiDB 7.1.0 Release Notes + +TiDB 版本:7.1.0 (upcoming) + +> **注意:** +> +> TiDB v7.1.0 尚未正式发布。此 Release Notes 旨在帮助你提前了解即将发布的版本,但其中内容可能会有所调整。本文列出的功能并不保证会包含在最终发布的版本中。 + +在 7.1.0 版本中,你可以获得以下关键特性: + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
分类功能描述
可扩展性与性能会话级别非 Prepare 语句执行计划缓存 (GA)支持在会话级别自动重用执行计划缓存,减少查询计划时间,缩短相同 SQL 查询的时间,而无需事先手动准备 Prepare Statement 语句。
基于负载的副本读取在读热点场景中,TiDB 可以将热点 TiKV 节点的读请求转发到副本。该功能有效地打散了读热点并优化了集群资源的利用。你可以通过调整系统变量 tidb_load_based_replica_read_threshold 控制基于负载的副本读取的触发阈值。
稳定性与高可用资源管控 (GA)支持基于资源组的资源管控,将数据库用户映射到对应的资源组中,并根据实际需求设置每个资源组的配额。
SQL多值索引 (GA)引入 MySQL 兼容的多值索引,增强 JSON 类型,提升 TiDB 对 MySQL 8.0 的兼容性。该功能提升了对多值列进行成员检查的效率。
生成列 (GA)生成列 (Generated Columns) 的值是通过实时计算列定义中的 SQL 表达式得到的。该功能将一些应用逻辑推向数据库层,从而提升查询效率。
+ +## 功能详情 + +### 性能 + +* TiFlash 查询支持延迟物化功能 (GA) [#5829](https://github.com/pingcap/tiflash/issues/5829) @[Lloyd-Pottiger](https://github.com/Lloyd-Pottiger) + + 在 v7.0.0 中,TiFlash 引入了延迟物化实验特性,用于优化查询性能。该特性默认关闭(系统变量 [`tidb_opt_enable_late_materialization`](/system-variables.md#tidb_opt_enable_late_materialization-从-v700-版本开始引入) 默认为 `OFF`)。当 `SELECT` 语句中包含过滤条件(`WHERE` 子句)时,TiFlash 默认会先读取该查询所需列的全部数据,然后再根据查询条件对数据进行过滤、聚合等计算任务。开启该特性后,TiFlash 支持下推部分过滤条件到 TableScan 算子,即先扫描过滤条件相关的列数据,过滤得到符合条件的行后,再扫描这些行的其他列数据,继续后续计算,从而减少 IO 扫描和数据处理的计算量。 + + 从 v7.1.0 开始,TiFlash 延迟物化功能正式 GA,默认开启(系统变量 [`tidb_opt_enable_late_materialization`](/system-variables.md#tidb_opt_enable_late_materialization-从-v700-版本开始引入) 默认为 `ON`),TiDB 优化器会根据统计信息和查询的过滤条件,决定哪些过滤条件会被下推到 TableScan 算子。 + + 更多信息,请参考[用户文档](/tiflash/tiflash-late-materialization.md)。 + +* TiFlash 支持根据网络交换数据量自动选择 MPP 模式的 Join 算法 [#7084](https://github.com/pingcap/tiflash/issues/7084) @[solotzg](https://github.com/solotzg) + + TiFlash MPP 模式有多种 Join 算法。在 v7.1.0 之前的版本中,TiDB 根据变量 [`tidb_broadcast_join_threshold_count`](/system-variables.md#tidb_broadcast_join_threshold_count-从-v50-版本开始引入) 和 [`tidb_broadcast_join_threshold_size`](/system-variables.md#tidb_broadcast_join_threshold_count-从-v50-版本开始引入) 以及实际数据量决定 TiFlash MPP 模式是否使用 Broadcast Hash Join 算法。 + + 在 v7.1.0 中,TiDB 引入变量 [`tidb_prefer_broadcast_join_by_exchange_data_size`](/system-variables.md#tidb_prefer_broadcast_join_by_exchange_data_size-从-v710-版本开始引入),控制是否基于最小网络数据交换策略选择 MPP Join 算法。该变量默认关闭,表示默认保持 v7.1.0 之前的算法选择策略。如需开启,请设置该变量为 `ON`。开启后,你无需再手动调整 [`tidb_broadcast_join_threshold_count`](/system-variables.md#tidb_broadcast_join_threshold_count-从-v50-版本开始引入) 和 [`tidb_broadcast_join_threshold_size`](/system-variables.md#tidb_broadcast_join_threshold_count-从-v50-版本开始引入) 的阈值(此时这两个变量将不再生效),TiDB 会自动估算不同 Join 算法所需进行网络交换的数据量,然后选择综合开销较小的算法,从而减少网络流量,提升 MPP 查询性能。 + + 更多信息,请参考[用户文档](/tiflash/use-tiflash-mpp-mode.md#mpp-模式的算法支持)。 + +* 支持自适应副本读取缓解读热点 [#14151](https://github.com/tikv/tikv/issues/14151) @[sticnarf](https://github.com/sticnarf) @[you06](https://github.com/you06) + + 在读热点场景中,热点 TiKV 无法及时处理读请求,导致读请求排队。但是,此时并非所有 TiKV 资源都已耗尽。为了降低延迟,TiDB v7.1.0 引入了负载自适应副本读取功能,允许从其他有可用资源的 TiKV 节点读取副本,而无需在热点 TiKV 节点排队等待。你可以通过 [`tidb_load_based_replica_read_threshold`](/system-variables.md#tidb_load_based_replica_read_threshold-从-v700-版本开始引入) 系统变量控制读请求的排队长度。当 leader 节点的预估排队时间超过该阈值时,TiDB 会优先从 follower 节点读取数据。在读热点的情况下,与不打散读热点相比,该功能可提高读取吞吐量 70%~200%。 + + 更多信息,请参考[用户文档](/troubleshoot-hot-spot-issues.md#打散读热点)。 + +* 支持缓存非 Prepare 语句的执行计划 (GA) [#36598](https://github.com/pingcap/tidb/issues/36598) @[qw4990](https://github.com/qw4990) + + TiDB v7.0.0 引入了非 Prepare 语句的执行计划缓存作为实验特性,以提升在线交易场景的并发处理能力。该功能在 v7.1.0 正式 GA 并默认打开,支持缓存更多模式的 SQL。 + + 为了提升内存利用率,TiDB v7.1.0 将非 Prepare 与 Prepare 语句的缓存池合并。你可以通过系统变量 [`tidb_session_plan_cache_size`](/system-variables.md#tidb_session_plan_cache_size-从-v710-版本开始引入) 设置缓存大小。原有的系统变量 [`tidb_prepared_plan_cache_size`](/system-variables.md#tidb_prepared_plan_cache_size-从-v610-版本开始引入) 和 [`tidb_non_prepared_plan_cache_size`](/system-variables.md#tidb_non_prepared_plan_cache_size) 被废弃。 + + 为保持向前兼容,从旧版本升级到 v7.1.0 时,缓存池大小 `tidb_session_plan_cache_size` 的值与 `tidb_prepared_plan_cache_size` 保持一致,[`tidb_enable_non_prepared_plan_cache`](/system-variables.md#tidb_enable_non_prepared_plan_cache) 保持升级前的设置。经过性能测试后,你可通过 `tidb_enable_non_prepared_plan_cache` 开启非 Parepare 语句的执行计划缓存功能。对于新创建的 v7.1.0 集群,非 Parepare 语句的缓存功能默认打开。 + + 更多信息,请参考[用户文档](/sql-non-prepared-plan-cache.md)。 + +### 稳定性 + +* 资源管控成为正式功能 (GA) [#38825](https://github.com/pingcap/tidb/issues/38825) @[nolouch](https://github.com/nolouch) @[BornChanger](https://github.com/BornChanger) @[glorv](https://github.com/glorv) @[tiancaiamao](https://github.com/tiancaiamao) @[Connor1996](https://github.com/Connor1996) @[JmPotato](https://github.com/JmPotato) @[hnes](https://github.com/hnes) @[CabinfeverB](https://github.com/CabinfeverB) @[HuSharp](https://github.com/HuSharp) + + TiDB 持续增强资源管控能力,在 v7.1.0 该功能正式 GA。该特性将极大地提升 TiDB 集群的资源利用率和性能表现。资源管控特性的引入对 TiDB 具有里程碑的意义,你可以将一个分布式数据库集群划分成多个逻辑单元,将不同的数据库用户映射到对应的资源组中,并根据实际需求设置每个资源组的配额。当集群资源紧张时,同一资源组内的会话所使用的全部资源将受到配额限制,防止某一资源组的过度消耗对其他资源组的会话造成影响。 + + 该特性也可以将多个来自不同系统的中小型应用整合到同一个 TiDB 集群中。即使某个应用的负载增加,也不会影响其他应用的正常运行。而在系统负载较低的时候,繁忙的应用即使超出设定的读写配额,仍可获得所需系统资源,实现资源的最大化利用。此外,合理利用资源管控特性可以减少集群数量,降低运维难度及管理成本。 + + 在 TiDB v7.1.0 中,该特性增加了基于实际负载和硬件部署来估算系统容量上限的能力,为你进行容量规划提供更准确的参考。这有助于你更好地管理 TiDB 的资源分配,从而满足企业级场景的稳定性需求。 + + 更多信息,请参考[用户文档](/tidb-resource-control.md)。 + +* 支持 [Fast Online DDL](/system-variables.md#tidb_ddl_enable_fast_reorg-从-v630-版本开始引入) 的检查点机制,提升容错性和自动恢复能力 [#42164](https://github.com/pingcap/tidb/issues/42164) @[tangenta](https://github.com/tangenta) + + TiDB v7.1.0 引入 [Fast Online DDL](/ddl-introduction.md) 的检查点机制,可以大幅提升 Fast Online DDL 的容错性和自动恢复能力。即使 TiDB owner 因故障重启或者切换,TiDB 也能够通过自动定期保存的检查点恢复部分进度,从而让 DDL 执行更加稳定高效。 + + 更多信息,请参考[用户文档](/system-variables.md#tidb_ddl_enable_fast_reorg-从-v630-版本开始引入)。 + +* BR 备份恢复工具支持断点恢复 [#42339](https://github.com/pingcap/tidb/issues/42339) @[Leavrth](https://github.com/Leavrth) + + 快照恢复或日志恢复会因为一些可恢复性错误导致提前结束,例如硬盘空间占满、节点宕机等突发情况。在 TiDB v7.1.0 之前,即使错误被及时处理,之前恢复的进度也会作废,你需要重新进行恢复。对大规模集群来说,会造成大量额外成本。 + + 为了尽可能继续上一次的恢复,从 TiDB v7.1.0 起,备份恢复特性引入了断点恢复的功能。该功能可以在意外中断后保留上一次恢复的大部分进度。 + + 更多信息,请参考[用户文档](/br/br-checkpoint-restore.md)。 + +* 优化统计信息缓存加载策略 [#42160](https://github.com/pingcap/tidb/issues/42160) @[xuyifangreeneyes](https://github.com/xuyifangreeneyes) + + 开启统计信息同步加载后,TiDB 可以大幅减少启动时必须载入的统计信息的数量,从而提升启动过程中统计信息的加载速度。该特性提升了 TiDB 在复杂运行环境下的稳定性,并降低了部分 TiDB 节点重启对整体服务的影响。 + + 更多信息,请参考[用户文档](/statistics.md#统计信息的加载)。 + +### SQL 功能 + +* 支持通过 `INSERT INTO SELECT` 语句保存 TiFlash 查询结果 (GA) [#37515](https://github.com/pingcap/tidb/issues/37515) @[gengliqi](https://github.com/gengliqi) + + 从 v6.5.0 起,TiDB 支持下推 `INSERT INTO SELECT` 语句中的 `SELECT` 子句(分析查询)到 TiFlash,你可以将 TiFlash 的查询结果方便地保存到 `INSERT INTO` 指定的 TiDB 表中供后续分析使用,起到了结果缓存(即结果物化)的效果。 + + 在 v7.1.0 版本中,该功能正式 GA。当 TiDB 执行 `INSERT INTO SELECT` 语句中的 `SELECT` 子句时,优化器将根据 [SQL 模式](/sql-mode.md)及 TiFlash 副本的代价估算自行决定是否将查询下推至 TiFlash。因此,在实验特性阶段引入的系统变量 `tidb_enable_tiflash_read_for_write_stmt` 将被废弃。需要注意的是,TiFlash 对于 `INSERT INTO SELECT` 语句的计算规则不满足 `STRICT SQL Mode` 要求,因此只有当前会话的 [SQL 模式](/sql-mode.md)为非严格模式(即 `sql_mode` 值不包含 `STRICT_TRANS_TABLES` 和 `STRICT_ALL_TABLES`),TiDB 才允许将 `INSERT INTO SELECT` 语句中的 `SELECT` 子句下推至 TiFlash。 + + 更多信息,请参考[用户文档](/tiflash/tiflash-results-materialization.md)。 + +* MySQL 兼容的多值索引 (Multi-Valued Index) 成为正式功能 (GA) [#39592](https://github.com/pingcap/tidb/issues/39592) @[xiongjiwei](https://github.com/xiongjiwei) @[qw4990](https://github.com/qw4990) @[YangKeao](https://github.com/YangKeao) + + 过滤 JSON 列中某个数组的值是一种常见操作,但使用普通索引无法加速此过程。在数组上创建多值索引可以大幅提升过滤性能。如果 JSON 列中的某个数组上存在多值索引,则函数 `MEMBER OF()`、`JSON_CONTAINS()` 和 `JSON_OVERLAPS()` 的检索条件可以利用该多值索引进行过滤,从而减少大量的 I/O 消耗,提升执行速度。 + + 在 v7.1.0 中,TiDB 多值索引成为正式功能 (GA),支持更完整的数据类型,并与 TiDB 的工具链兼容。你可以在生产环境利用多值索引来加速对 JSON 数组的检索操作。 + + 更多信息,请参考[用户文档](/sql-statements/sql-statement-create-index.md#多值索引)。 + +* 完善 Hash 分区表和 Key 分区表的分区管理功能 [#42728](https://github.com/pingcap/tidb/issues/42728) @[mjonss](https://github.com/mjonss) + + 在 v7.1.0 之前,TiDB 中的 Hash 分区表和 Key 分区表只支持 `TRUNCATE PARTITION` 分区管理。从 v7.1.0 开始,Hash 分区表和 Key 分区表新增支持 `ADD PARTITION` 和 `COALESCE PARTITION` 分区管理。你可以根据需要灵活调整 Hash 分区表和 Key 分区表的分区数量。例如,通过 `ADD PARTITION` 语句增加分区数量,或通过 `COALESCE PARTITION` 语句减少分区数量。 + + 更多信息,请参考[用户文档](/partitioned-table.md#管理-hash-分区和-key-分区)。 + +* Range INTERVAL 分区定义语法成为正式功能 (GA) [#35683](https://github.com/pingcap/tidb/issues/35683) @[mjonss](https://github.com/mjonss) + + 在 v6.3.0 中引入的 Range INTERVAL 的分区定义语法成为正式功能 (GA)。通过该语法,你可以根据所需的间隔 (interval) 定义 Range 分区,不需要枚举所有分区,可大幅度缩短 Range 分区表的定义语句长度。语义与原有 Range 分区等价。 + + 更多信息,请参考[用户文档](/partitioned-table.md#range-interval-分区)。 + +* `LOAD DATA` 部分功能 GA [#40499](https://github.com/pingcap/tidb/issues/40499) @[lance6716](https://github.com/lance6716) + + 在 TiDB v7.1.0 中,以下 `LOAD DATA` 功能 GA: + + - 支持从 S3、GCS 导入数据。 + - 支持导入 Parquet 格式的数据。 + - 支持解析源文件中的下列字符集:`ascii`、`latin1`、`binary`、`gbk` 和 `utf8mbd` + - 支持设置 `FIELDS DEFINED NULL BY` 将源文件中的指定值转换为 `NULL` 并写入目标表。 + - 支持设置 `batch_size` 指定批量写入目标表的行数,从而提升写入性能。 + - 支持设置 `detached`,允许指定任务在后台运行。 + - 支持使用 `SHOW LOAD DATA` 和 `DROP LOAD DATA` 管理任务。 + + 更多信息,请参考[用户文档](/sql-statements/sql-statement-load-data.md)。 + +* `LOAD DATA` 集成 TiDB Lightning Physical Import Mode 的导入功能,提升导入性能(实验特性)[#42930](https://github.com/pingcap/tidb/issues/42930) @[D3Hunter](https://github.com/D3Hunter) + + `LOAD DATA` 集成 TiDB Lightning 的物理导入模式 (Physical Import Mode),你可以通过设置 `WITH import_mode = 'PHYSICAL'` 开启。相比逻辑导入模式 (Logical Import Mode),可成倍提升数据导入的性能。 + + 更多信息,请参考[用户文档](/sql-statements/sql-statement-load-data.md)。 + +* `LOAD DATA` 支持并发导入,提升导入性能(实验特性)[#40499](https://github.com/pingcap/tidb/issues/40499) @[lance6716](https://github.com/lance6716) + + 在 v7.1.0 之前版本中,`LOAD DATA` 不支持并发导入数据,导致性能未达到预期。从 v7.1.0 开始,`LOAD DATA` 支持并发导入数据,你可以通过 `WITH thread=` 提高并发度以提升导入的性能。在内部测试中,相较于 v7.0.0,测试负载下的逻辑导入性能提升了近 4 倍。 + + 更多信息,请参考[用户文档](/sql-statements/sql-statement-load-data.md)。 + +* 生成列 (Generated Columns) 成为正式功能 (GA) @[bb7133](https://github.com/bb7133) + + 生成列是数据库中非常有价值的一个功能。在创建表时,可以定义一列的值由表中其他列的值计算而来,而不是由用户显式插入或更新。这个生成列可以是虚拟列 (Virtual Column) 或存储列 (Stored Column)。TiDB 在早期版本就提供了与 MySQL 兼容的生成列功能,在 v7.1.0 中这个功能正式 GA。 + + 使用生成列可以提升 TiDB 对 MySQL 的兼容性,方便从 MySQL 平滑迁移到 TiDB,同时也能简化数据维护复杂度,增强数据一致性并提高查询效率。 + + 更多信息,请参考[用户文档](/generated-columns.md)。 + +### 数据库管理 + +* DDL 任务支持暂停和恢复操作(实验特性)[#18015](https://github.com/pingcap/tidb/issues/18015) @[godouxm](https://github.com/godouxm) + + TiDB v7.1.0 之前的版本中,当 DDL 任务执行期间遇到业务高峰时间点时,为了减少对业务的影响,只能手动取消 DDL 任务。TiDB v7.1.0 引入了 DDL 任务的暂停和恢复功能,你可以在高峰时间点暂停 DDL 任务,等到业务高峰时间结束后再恢复 DDL 任务,从而避免了 DDL 操作对业务负载的影响。 + + 例如,可以通过如下 `ADMIN PAUSE DDL JOBS` 或 `ADMIN RESUME DDL JOBS` 语句暂停或者恢复多个 DDL 任务: + + ```sql + ADMIN PAUSE DDL JOBS 1,2; + ADMIN RESUME DDL JOBS 1,2; + ``` + + 更多信息,请参考[用户文档](/ddl-introduction.md#ddl-相关的命令介绍)。 + +### 可观测性 + +* 增加优化器诊断信息 [#43122](https://github.com/pingcap/tidb/issues/43122) @[time-and-fate](https://github.com/time-and-fate) + + 获取充足的信息是 SQL 性能诊断的关键。在 v7.1.0 中,TiDB 持续为各种诊断工具增加优化器运行信息,以便更好地解释执行计划如何被选择,从而协助定位 SQL 性能问题。这些信息包括: + + * 在 [`PLAN REPLAYER`](/sql-plan-replayer.md) 的输出中增加 `debug_trace.json` 文件。 + * 在 [`EXPLAIN`](/explain-walkthrough.md) 的输出中为 `operator info` 添加部分统计信息详情。 + * 为[慢日志](/identify-slow-queries.md)的 `Stats` 字段添加部分统计信息详情。 + + 更多信息,请参考[使用 `PLAN REPLAYER` 保存和恢复集群线程信息](/sql-plan-replayer.md)、[使用 `EXPLAIN` 解读执行计划](/explain-walkthrough.md)和[慢日志查询](/identify-slow-queries.md)。 + +### 安全 + +* 更换 TiFlash 系统表信息的查询接口 [#6941](https://github.com/pingcap/tiflash/issues/6941) @[flowbehappy](https://github.com/flowbehappy) + + 从 v7.1.0 起,TiFlash 在向 TiDB 提供 [`INFORMATION_SCHEMA.TIFLASH_TABLES`](/information-schema/information-schema-tiflash-tables.md) 和 [`INFORMATION_SCHEMA.TIFLASH_SEGMENTS`](/information-schema/information-schema-tiflash-segments.md) 系统表的查询服务时,不再使用 HTTP 端口,而是使用 gRPC 端口,从而避免 HTTP 服务的安全风险。 + +## 兼容性变更 + +> **注意:** +> +> 以下为从 v7.0.0 升级至当前版本 (v7.1.0) 所需兼容性变更信息。如果从 v6.6.0 或之前版本升级到当前版本,可能也需要考虑和查看中间版本 Release Notes 中提到的兼容性变更信息。 + +### 行为变更 + +* 为了提高安全性,TiFlash 废弃了 HTTP 服务端口(默认 `8123`),采用 gRPC 端口作为替代 + + 如果你已经将 TiFlash 升级到 v7.1.0,那么在升级 TiDB 到 v7.1.0 的过程中,TiDB 无法读取 TiFlash 系统表([`INFORMATION_SCHEMA.TIFLASH_TABLES`](/information-schema/information-schema-tiflash-tables.md) 和 [`INFORMATION_SCHEMA.TIFLASH_SEGMENTS`](/information-schema/information-schema-tiflash-segments.md))。 + +* [`SHOW LOAD DATA`](/sql-statements/sql-statement-show-load-data.md) 的返回值中废弃了参数 `Loaded_File_Size`,修改为参数 `Imported_Rows` + +### 系统变量 + +| 变量名 | 修改类型 | 描述 | +|--------|------------------------------|------| +| [`tidb_enable_tiflash_read_for_write_stmt`](/system-variables.md#tidb_enable_tiflash_read_for_write_stmt-从-v630-版本开始引入) | 废弃 | 从 v7.1.0 开始,该变量废弃并且默认值从 `OFF` 修改为 `ON`。当 [`tidb_allow_mpp = ON`](/system-variables.md#tidb_allow_mpp-从-v50-版本开始引入) 时,优化器将根据 [SQL 模式](/sql-mode.md)及 TiFlash 副本的代价估算自行决定是否将查询下推至 TiFlash。 | +| [`tidb_non_prepared_plan_cache_size`](/system-variables.md#tidb_non_prepared_plan_cache_size) | 废弃 | 从 v7.1.0 起,该变量被废弃,你可以使用 [`tidb_session_plan_cache_size`](/system-variables.md#tidb_session_plan_cache_size-从-v710-版本开始引入) 控制 Plan Cache 最多能够缓存的计划数量。 | +| [`tidb_prepared_plan_cache_size`](/system-variables.md#tidb_prepared_plan_cache_size-从-v610-版本开始引入) | 废弃 | 从 v7.1.0 起,该变量被废弃,你可以使用 [`tidb_session_plan_cache_size`](/system-variables.md#tidb_session_plan_cache_size-从-v710-版本开始引入) 控制 Plan Cache 最多能够缓存的计划数量。 | +| `tidb_ddl_distribute_reorg` | 删除 | 重命名为 [`tidb_enable_dist_task`](/system-variables.md#tidb_enable_dist_task-从-v710-版本开始引入)。 | +| [`tidb_enable_non_prepared_plan_cache`](/system-variables.md#tidb_enable_non_prepared_plan_cache) | 修改 | 经进一步的测试后,该变量默认值从 `OFF` 修改为 `ON`,表示默认开启非 Prepare 语句执行计划缓存。 | +| [`tidb_load_based_replica_read_threshold`](/system-variables.md#tidb_load_based_replica_read_threshold-从-v700-版本开始引入) | 修改 | 该变量从 v7.1.0 开始生效,用于设置基于负载的 replica read 的触发阈值。经进一步的测试后,该变量默认值从 `"0s"` 修改为 `"1s"`。 | +| [`tidb_opt_enable_late_materialization`](/system-variables.md#tidb_opt_enable_late_materialization-从-v700-版本开始引入) | 修改 | 默认值从 `OFF` 修改为 `ON`,代表 [TiFlash 延迟物化](/tiflash/tiflash-late-materialization.md)功能默认开启。 | +| [`tidb_enable_dist_task`](/system-variables.md#tidb_enable_dist_task-从-v710-版本开始引入) | 新增 | 控制是否开启分布式执行框架。开启分布式执行后,DDL、Import 等支持的后端任务将会由集群中多个 TiDB 节点共同完成。该变量由 `tidb_ddl_distribute_reorg` 改名而来。| +| [`tidb_enable_non_prepared_plan_cache_for_dml`](/system-variables.md#tidb_enable_non_prepared_plan_cache_for_dml-从-v710-版本开始引入) | 新增 | 控制非 Prepare 语句执行计划缓存是否支持 DML 语句。 | +| [`tidb_opt_fix_control`](/system-variables.md#tidb_opt_fix_control-从-v710-版本开始引入) | 新增 | 通过设置该变量,你可以更细粒度地控制优化器的行为,并且避免集群升级后优化器行为变化导致的性能回退。 | +| [`tidb_plan_cache_invalidation_on_fresh_stats`](/system-variables.md#tidb_plan_cache_invalidation_on_fresh_stats-从-v710-版本开始引入) | 新增 | 控制当某张表上的统计信息更新后,与该表相关的 Plan Cache 是否自动失效。 | +| [`tidb_plan_cache_max_plan_size`](/system-variables.md#tidb_plan_cache_max_plan_size-从-v710-版本开始引入) | 新增 | 控制可以缓存的 Prepare 或非 Prepare 语句执行计划的最大大小。 | +| [`tidb_prefer_broadcast_join_by_exchange_data_size`](/system-variables.md#tidb_prefer_broadcast_join_by_exchange_data_size-从-v710-版本开始引入) | 新增 | 控制是否使用最小网络数据交换策略。使用该策略时,TiDB 会估算 Broadcast Hash Join 和 Shuffled Hash Join 两种算法所需进行网络交换的数据量,并选择网络交换数据量较小的算法。该功能开启后,[`tidb_broadcast_join_threshold_size`](/system-variables.md#tidb_broadcast_join_threshold_size-从-v50-版本开始引入) 和 [`tidb_broadcast_join_threshold_count`](/system-variables.md#tidb_broadcast_join_threshold_count-从-v50-版本开始引入) 将不再生效。 | +| [`tidb_session_plan_cache_size`](/system-variables.md#tidb_session_plan_cache_size-从-v710-版本开始引入) | 新增 | 控制 Plan Cache 最多能够缓存的计划数量。其中,Prepare 语句执行计划缓存和非 Prepare 语句执行计划缓存共用一个缓存。 | + +### 配置文件参数 + +| 配置文件 | 配置项 | 修改类型 | 描述 | +| -------- | -------- | -------- | -------- | +| TiDB | [`lite-init-stats`](/tidb-configuration-file.md#lite-init-stats-从-v710-版本开始引入) | 新增 | 用于控制 TiDB 启动时是否采用轻量级的统计信息初始化。 | +| PD | [`store-limit-version`](/pd-configuration-file.md#store-limit-version-从-v710-版本开始引入) | 新增 | 用于设置 store limit 工作模式。可选值为 `"v1"` 和 `"v2"`。 | +| TiFlash | `http_port` | 删除 | 废弃 TiFlash HTTP 服务端口(默认 `8123`)。 | +| TiCDC | [`sink.enable-partition-separator`](/ticdc/ticdc-changefeed-config.md#ticdc-changefeed-配置文件说明) | 修改 | 默认值从 `false` 修改为 `true`,代表默认会将表中各个分区的数据分不同的目录来存储。建议保持该配置项为 `true` 以避免同步分区表到存储服务时可能丢数据的问题。 | + +## 改进提升 + ++ TiFlash + + - 提升 TiFlash 在存算分离架构下的性能和稳定性 [#6882](https://github.com/pingcap/tiflash/issues/6882) @[JaySon-Huang](https://github.com/JaySon-Huang) @[breezewish](https://github.com/breezewish) @[JinheLin](https://github.com/JinheLin) + - 支持在 Semi Join 或 Anti Semi Join 中,通过选择较小的表作为 Build 端来优化查询性能 [#7280](https://github.com/pingcap/tiflash/issues/7280) @[yibin87](https://github.com/yibin87) + +## 贡献者 + +感谢来自 TiDB 社区的贡献者们: + +- [ethercflow](https://github.com/ethercflow) +- [hihihuhu](https://github.com/hihihuhu) +- [jiyfhust](https://github.com/jiyfhust) +- [L-maple](https://github.com/L-maple) +- [lqs](https://github.com/lqs) +- [pingandb](https://github.com/pingandb) +- [yorkhellen](https://github.com/yorkhellen) +- [yujiarista](https://github.com/yujiarista) From ddfa959d3a5cefc67173da6eef6391a32416f924 Mon Sep 17 00:00:00 2001 From: Aolin Date: Thu, 27 Apr 2023 16:15:52 +0800 Subject: [PATCH 067/257] update basic features for 7.1 (#13740) --- basic-features.md | 368 +++++++++++++++++++++++----------------------- 1 file changed, 185 insertions(+), 183 deletions(-) diff --git a/basic-features.md b/basic-features.md index 0d85bdf23054..25d0886da23b 100644 --- a/basic-features.md +++ b/basic-features.md @@ -20,218 +20,220 @@ aliases: ['/docs-cn/dev/basic-features/','/docs-cn/dev/experimental-features-4.0 ## 数据类型,函数和操作符 -| 数据类型,函数,操作符 | 7.0 | 6.6 | 6.5 | 6.1 | 5.4 | 5.3 | 5.2 | 5.1 | 5.0 | 4.0 | -|---|---|:---:|---|:---:|:---:|:---:|:---:|:---:|:---:|:---:| -| [数值类型](/data-type-numeric.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| [日期和时间类型](/data-type-date-and-time.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| [字符串类型](/data-type-string.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| [JSON 类型](/data-type-json.md) | Y | Y | Y | E | E | E | E | E | E | E | -| [控制流程函数](/functions-and-operators/control-flow-functions.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| [字符串函数](/functions-and-operators/string-functions.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| [数值函数与操作符](/functions-and-operators/numeric-functions-and-operators.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| [日期和时间函数](/functions-and-operators/date-and-time-functions.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| [位函数和操作符](/functions-and-operators/bit-functions-and-operators.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| [Cast 函数和操作符](/functions-and-operators/cast-functions-and-operators.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| [加密和压缩函数](/functions-and-operators/encryption-and-compression-functions.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| [信息函数](/functions-and-operators/information-functions.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| [JSON 函数](/functions-and-operators/json-functions.md) | Y | Y | Y | E | E | E | E | E | E | E | -| [聚合函数](/functions-and-operators/aggregate-group-by-functions.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| [窗口函数](/functions-and-operators/window-functions.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| [其他函数](/functions-and-operators/miscellaneous-functions.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| [操作符](/functions-and-operators/operators.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| [字符集和排序规则](/character-set-and-collation.md) [^1] | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| [用户级别锁](/functions-and-operators/locking-functions.md) | Y | Y | Y | Y | N | N | N | N | N | N | +| 数据类型,函数,操作符 | 7.1 (upcoming) | 6.5 | 6.1 | 5.4 | 5.3 | 5.2 | 5.1 | 5.0 | 4.0 | +|---|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:| +| [数值类型](/data-type-numeric.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| [日期和时间类型](/data-type-date-and-time.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| [字符串类型](/data-type-string.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| [JSON 类型](/data-type-json.md) | Y | Y | E | E | E | E | E | E | E | +| [控制流程函数](/functions-and-operators/control-flow-functions.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| [字符串函数](/functions-and-operators/string-functions.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| [数值函数与操作符](/functions-and-operators/numeric-functions-and-operators.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| [日期和时间函数](/functions-and-operators/date-and-time-functions.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| [位函数和操作符](/functions-and-operators/bit-functions-and-operators.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| [Cast 函数和操作符](/functions-and-operators/cast-functions-and-operators.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| [加密和压缩函数](/functions-and-operators/encryption-and-compression-functions.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| [信息函数](/functions-and-operators/information-functions.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| [JSON 函数](/functions-and-operators/json-functions.md) | Y | Y | E | E | E | E | E | E | E | +| [聚合函数](/functions-and-operators/aggregate-group-by-functions.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| [窗口函数](/functions-and-operators/window-functions.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| [其他函数](/functions-and-operators/miscellaneous-functions.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| [操作符](/functions-and-operators/operators.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| [字符集和排序规则](/character-set-and-collation.md) [^1] | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| [用户级别锁](/functions-and-operators/locking-functions.md) | Y | Y | Y | N | N | N | N | N | N | ## 索引和约束 -| 索引和约束 | 7.0 | 6.6 | 6.5 | 6.1 | 5.4 | 5.3 | 5.2 | 5.1 | 5.0 | 4.0 | -|---|---|---|---|:---:|:---:|:---:|:---:|:---:|:---:|:---:| -| [表达式索引](/sql-statements/sql-statement-create-index.md#表达式索引) [^2] | Y | Y | Y | E | E | E | E | E | E | E | -| [列式存储 (TiFlash)](/tiflash/tiflash-overview.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| [使用 FastScan 加速 OLAP 场景下的查询](/tiflash/use-fastscan.md) | Y | E | E | N | N | N | N | N | N | N | -| [RocksDB 引擎](/storage-engine/rocksdb-overview.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| [Titan 插件](/storage-engine/titan-overview.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| [Titan Level Merge](/storage-engine/titan-configuration.md#level-merge实验功能) | E | E | E | E | E | E | E | E | E | E | -| [使用 bucket 提高数据扫描并发度](/tune-region-performance.md#使用-bucket-增加并发) | E | E | E | E | N | N | N | N | N | N | -| [不可见索引](/sql-statements/sql-statement-add-index.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | N | -| [复合主键](/constraints.md#主键约束) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| [唯一约束](/constraints.md#唯一约束) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| [整型主键上的聚簇索引](/constraints.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| [复合或非整型主键上的聚簇索引](/constraints.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | N | -| [多值索引](/sql-statements/sql-statement-create-index.md#多值索引) | E | E | N | N | N | N | N | N | N | N | -| [外键约束](/constraints.md#外键约束) | Y | Y | N | N | N | N | N | N | N | N | -| [TiFlash 延迟物化](/tiflash/tiflash-late-materialization.md) | E | N | N | N | N | N | N | N | N | N | +| 索引和约束 | 7.1 (upcoming) | 6.5 | 6.1 | 5.4 | 5.3 | 5.2 | 5.1 | 5.0 | 4.0 | +|---|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:| +| [表达式索引](/sql-statements/sql-statement-create-index.md#表达式索引) [^2] | Y | Y | E | E | E | E | E | E | E | +| [列式存储 (TiFlash)](/tiflash/tiflash-overview.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| [使用 FastScan 加速 OLAP 场景下的查询](/tiflash/use-fastscan.md) | Y | E | N | N | N | N | N | N | N | +| [RocksDB 引擎](/storage-engine/rocksdb-overview.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| [Titan 插件](/storage-engine/titan-overview.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| [Titan Level Merge](/storage-engine/titan-configuration.md#level-merge实验功能) | E | E | E | E | E | E | E | E | E | +| [使用 bucket 提高数据扫描并发度](/tune-region-performance.md#使用-bucket-增加并发) | E | E | E | N | N | N | N | N | N | +| [不可见索引](/sql-statements/sql-statement-add-index.md) | Y | Y | Y | Y | Y | Y | Y | Y | N | +| [复合主键](/constraints.md#主键约束) | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| [唯一约束](/constraints.md#唯一约束) | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| [整型主键上的聚簇索引](/constraints.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| [复合或非整型主键上的聚簇索引](/constraints.md) | Y | Y | Y | Y | Y | Y | Y | Y | N | +| [多值索引](/sql-statements/sql-statement-create-index.md#多值索引) | Y | N | N | N | N | N | N | N | N | +| [外键约束](/constraints.md#外键约束) | Y | N | N | N | N | N | N | N | N | +| [TiFlash 延迟物化](/tiflash/tiflash-late-materialization.md) | Y | N | N | N | N | N | N | N | N | ## SQL 语句 -| SQL 语句 [^3] | 7.0 | 6.6 | 6.5 | 6.1 | 5.4 | 5.3 | 5.2 | 5.1 | 5.0 | 4.0 | -|---|---|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:| -| `SELECT`,`INSERT`,`UPDATE`,`DELETE`,`REPLACE` | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| `INSERT ON DUPLICATE KEY UPDATE` | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| `LOAD DATA INFILE` | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| `SELECT INTO OUTFILE` | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| `INNER JOIN`, LEFT\|RIGHT [OUTER] JOIN | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| `UNION`,`UNION ALL` | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| [`EXCEPT` 和 `INTERSECT` 运算符](/functions-and-operators/set-operators.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | N | -| `GROUP BY`,`ORDER BY` | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| [窗口函数](/functions-and-operators/window-functions.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| [公共表表达式 (CTE)](/sql-statements/sql-statement-with.md) | Y | Y | Y | Y | Y | Y | Y | Y | N | N | -| `START TRANSACTION`,`COMMIT`,`ROLLBACK` | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| [`EXPLAIN`](/sql-statements/sql-statement-explain.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| [`EXPLAIN ANALYZE`](/sql-statements/sql-statement-explain-analyze.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| [用户自定义变量](/user-defined-variables.md) | E | E | E | E | E | E | E | E | E | E | -| [`BATCH [ON COLUMN] LIMIT INTEGER DELETE`](/sql-statements/sql-statement-batch.md) | Y | Y | Y | Y | N | N | N | N | N | N | -| [`BATCH [ON COLUMN] LIMIT INTEGER INSERT/UPDATE/REPLACE`](/sql-statements/sql-statement-batch.md) | Y | Y | Y | N | N | N | N | N | N | N | -| [`ALTER TABLE ... COMPACT`](/sql-statements/sql-statement-alter-table-compact.md) | Y | Y | Y | E | N | N | N | N | N | N | -| [表级锁 (Table Lock)](/sql-statements/sql-statement-lock-tables-and-unlock-tables.md) | E | E | E | E | E | E | E | E | E | E | -| [物化列式存储的查询结果](/tiflash/tiflash-results-materialization.md) | E | E | E | N | N | N | N | N | N | N | +| SQL 语句 [^3] | 7.1 (upcoming) | 6.5 | 6.1 | 5.4 | 5.3 | 5.2 | 5.1 | 5.0 | 4.0 | +|---|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:| +| `SELECT`,`INSERT`,`UPDATE`,`DELETE`,`REPLACE` | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| `INSERT ON DUPLICATE KEY UPDATE` | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| `LOAD DATA INFILE` | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| `SELECT INTO OUTFILE` | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| `INNER JOIN`, LEFT\|RIGHT [OUTER] JOIN | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| `UNION`,`UNION ALL` | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| [`EXCEPT` 和 `INTERSECT` 运算符](/functions-and-operators/set-operators.md) | Y | Y | Y | Y | Y | Y | Y | Y | N | +| `GROUP BY`,`ORDER BY` | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| [窗口函数](/functions-and-operators/window-functions.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| [公共表表达式 (CTE)](/sql-statements/sql-statement-with.md) | Y | Y | Y | Y | Y | Y | Y | N | N | +| `START TRANSACTION`,`COMMIT`,`ROLLBACK` | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| [`EXPLAIN`](/sql-statements/sql-statement-explain.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| [`EXPLAIN ANALYZE`](/sql-statements/sql-statement-explain-analyze.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| [用户自定义变量](/user-defined-variables.md) | E | E | E | E | E | E | E | E | E | +| [`BATCH [ON COLUMN] LIMIT INTEGER DELETE`](/sql-statements/sql-statement-batch.md) | Y | Y | Y | N | N | N | N | N | N | +| [`BATCH [ON COLUMN] LIMIT INTEGER INSERT/UPDATE/REPLACE`](/sql-statements/sql-statement-batch.md) | Y | Y | N | N | N | N | N | N | N | +| [`ALTER TABLE ... COMPACT`](/sql-statements/sql-statement-alter-table-compact.md) | Y | Y | E | N | N | N | N | N | N | +| [表级锁 (Table Lock)](/sql-statements/sql-statement-lock-tables-and-unlock-tables.md) | E | E | E | E | E | E | E | E | E | +| [物化列式存储的查询结果](/tiflash/tiflash-results-materialization.md) | Y | E | N | N | N | N | N | N | N | ## 高级 SQL 功能 -| 高级 SQL 功能 | 7.0 | 6.6 | 6.5 | 6.1 | 5.4 | 5.3 | 5.2 | 5.1 | 5.0 | 4.0 | -|---|---|:---:|:---:|:---:|:---:|:---:|:---:|:---:|---|:---:| -| [Prepare 语句执行计划缓存](/sql-prepared-plan-cache.md) | Y | Y | Y | Y | Y | Y | E | E | E | E | -| [非 Prepare 语句执行计划缓存](/sql-non-prepared-plan-cache.md) | E | N | N | N | N | N | N | N | N | N | -| [执行计划管理 (SPM)](/sql-plan-management.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| [根据历史执行计划创建绑定](/sql-plan-management.md#根据历史执行计划创建绑定) | Y | Y | E | N | N | N | N | N | N | N | -| [下推计算结果缓存 (Coprocessor Cache)](/coprocessor-cache.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | E | -| [Stale Read](/stale-read.md) | Y | Y | Y | Y | Y | Y | Y | Y | N | N | -| [Follower Read](/follower-read.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| [通过系统变量 `tidb_snapshot` 读取历史数据](/read-historical-data.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| [Optimizer hints](/optimizer-hints.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| [MPP 执行引擎](/explain-mpp.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | N | -| [MPP 执行引擎 - compression exchange](/explain-mpp.md#mpp-version-和-exchange-数据压缩) | Y | Y | N | N | N | N | N | N | N | N | -| [索引合并](/explain-index-merge.md) | Y | Y | Y | Y | Y | E | E | E | E | E | -| [基于 SQL 的数据放置规则](/placement-rules-in-sql.md) | Y | Y | Y | Y | E | E | N | N | N | N | -| [Cascades Planner](/system-variables.md#tidb_enable_cascades_planner) | E | E | E | E | E | E | E | E | E | E | +| 高级 SQL 功能 | 7.1 (upcoming) | 6.5 | 6.1 | 5.4 | 5.3 | 5.2 | 5.1 | 5.0 | 4.0 | +|---|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:| +| [Prepare 语句执行计划缓存](/sql-prepared-plan-cache.md) | Y | Y | Y | Y | Y | E | E | E | E | +| [非 Prepare 语句执行计划缓存](/sql-non-prepared-plan-cache.md) | Y | N | N | N | N | N | N | N | N | +| [执行计划管理 (SPM)](/sql-plan-management.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| [根据历史执行计划创建绑定](/sql-plan-management.md#根据历史执行计划创建绑定) | Y | E | N | N | N | N | N | N | N | +| [下推计算结果缓存 (Coprocessor Cache)](/coprocessor-cache.md) | Y | Y | Y | Y | Y | Y | Y | Y | E | +| [Stale Read](/stale-read.md) | Y | Y | Y | Y | Y | Y | Y | N | N | +| [Follower Read](/follower-read.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| [通过系统变量 `tidb_snapshot` 读取历史数据](/read-historical-data.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| [Optimizer hints](/optimizer-hints.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| [MPP 执行引擎](/explain-mpp.md) | Y | Y | Y | Y | Y | Y | Y | Y | N | +| [MPP 执行引擎 - compression exchange](/explain-mpp.md#mpp-version-和-exchange-数据压缩) | Y | N | N | N | N | N | N | N | N | +| [索引合并](/explain-index-merge.md) | Y | Y | Y | Y | E | E | E | E | E | +| [基于 SQL 的数据放置规则](/placement-rules-in-sql.md) | Y | Y | Y | E | E | N | N | N | N | +| [Cascades Planner](/system-variables.md#tidb_enable_cascades_planner) | E | E | E | E | E | E | E | E | E | ## 数据定义语言 (DDL) -| 数据定义语言 (DDL) | 7.0 | 6.6 | 6.5 | 6.1 | 5.4 | 5.3 | 5.2 | 5.1 | 5.0 | 4.0 | -|---|---|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:| -| `CREATE`,`DROP`,`ALTER`,`RENAME`,`TRUNCATE` | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| [生成列](/generated-columns.md) | E | E | E | E | E | E | E | E | E | E | -| [视图](/views.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| [序列](/sql-statements/sql-statement-create-sequence.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| [`AUTO_INCREMENT` 列](/auto-increment.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| [`AUTO_RANDOM` 列](/auto-random.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| [TTL (Time to Live)](/time-to-live.md) | Y | E | E | N | N | N | N | N | N | N | -| [DDL 算法断言](/sql-statements/sql-statement-alter-table.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| 在单条语句中添加多列 | Y | Y | Y | E | E | E | E | E | E | E | -| [更改列类型](/sql-statements/sql-statement-modify-column.md) | Y | Y | Y | Y | Y | Y | Y | Y | N | N | -| [临时表](/temporary-tables.md) | Y | Y | Y | Y | Y | Y | N | N | N | N | -| 并行 DDL | Y | Y | Y | N | N | N | N | N | N | N | -| [添加索引加速](/system-variables.md#tidb_ddl_enable_fast_reorg-从-v630-版本开始引入) | Y | Y | Y | N | N | N | N | N | N | N | -| [元数据锁](/metadata-lock.md) | Y | Y | Y | N | N | N | N | N | N | N | -| [`FLASHBACK CLUSTER TO TIMESTAMP`](/sql-statements/sql-statement-flashback-to-timestamp.md) | Y | Y | Y | N | N | N | N | N | N | N | +| 数据定义语言 (DDL) | 7.1 (upcoming) | 6.5 | 6.1 | 5.4 | 5.3 | 5.2 | 5.1 | 5.0 | 4.0 | +|---|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:| +| `CREATE`,`DROP`,`ALTER`,`RENAME`,`TRUNCATE` | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| [生成列](/generated-columns.md) | Y | E | E | E | E | E | E | E | E | +| [视图](/views.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| [序列](/sql-statements/sql-statement-create-sequence.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| [`AUTO_INCREMENT` 列](/auto-increment.md) | Y | Y[^4] | Y | Y | Y | Y | Y | Y | Y | +| [`AUTO_RANDOM` 列](/auto-random.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| [TTL (Time to Live)](/time-to-live.md) | Y | E | N | N | N | N | N | N | N | +| [DDL 算法断言](/sql-statements/sql-statement-alter-table.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| 在单条语句中添加多列 | Y | Y | E | E | E | E | E | E | E | +| [更改列类型](/sql-statements/sql-statement-modify-column.md) | Y | Y | Y | Y | Y | Y | Y | N | N | +| [临时表](/temporary-tables.md) | Y | Y | Y | Y | Y | N | N | N | N | +| 并行 DDL | Y | Y | N | N | N | N | N | N | N | +| [添加索引加速](/system-variables.md#tidb_ddl_enable_fast_reorg-从-v630-版本开始引入) | Y | Y | N | N | N | N | N | N | N | +| [元数据锁](/metadata-lock.md) | Y | Y | N | N | N | N | N | N | N | +| [`FLASHBACK CLUSTER TO TIMESTAMP`](/sql-statements/sql-statement-flashback-to-timestamp.md) | Y | Y | N | N | N | N | N | N | N | +| [暂停/恢复 DDL](/ddl-introduction.md#ddl-相关的命令介绍) | E | N | N | N | N | N | N | N | N | ## 事务 -| 事务 | 7.0 | 6.6 | 6.5 | 6.1 | 5.4 | 5.3 | 5.2 | 5.1 | 5.0 | 4.0 | -|---|---|---|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:| -| [Async commit](/system-variables.md#tidb_enable_async_commit-从-v50-版本开始引入) | Y | Y | Y | Y | Y | Y | Y | Y | Y | N | -| [1PC](/system-variables.md#tidb_enable_1pc-从-v50-版本开始引入) | Y | Y | Y | Y | Y | Y | Y | Y | Y | N | -| [大事务 (10 GB)](/transaction-overview.md#事务限制) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| [悲观事务](/pessimistic-transaction.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| [乐观事务](/optimistic-transaction.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| [可重复读隔离(快照隔离)](/transaction-isolation-levels.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| [读已提交隔离](/transaction-isolation-levels.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| 事务 | 7.1 (upcoming) | 6.5 | 6.1 | 5.4 | 5.3 | 5.2 | 5.1 | 5.0 | 4.0 | +|---|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:| +| [Async commit](/system-variables.md#tidb_enable_async_commit-从-v50-版本开始引入) | Y | Y | Y | Y | Y | Y | Y | Y | N | +| [1PC](/system-variables.md#tidb_enable_1pc-从-v50-版本开始引入) | Y | Y | Y | Y | Y | Y | Y | Y | N | +| [大事务 (10 GB)](/transaction-overview.md#事务限制) | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| [悲观事务](/pessimistic-transaction.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| [乐观事务](/optimistic-transaction.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| [可重复读隔离(快照隔离)](/transaction-isolation-levels.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| [读已提交隔离](/transaction-isolation-levels.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | ## 分区 -| 分区 | 7.0 | 6.6 | 6.5 | 6.1 | 5.4 | 5.3 | 5.2 | 5.1 | 5.0 | 4.0 | -|---|---|:---:|:---:|---|:---:|:---:|:---:|:---:|:---:|:---:| -| [Range 分区](/partitioned-table.md#range-分区) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| [Hash 分区](/partitioned-table.md#hash-分区) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| [Key 分区](/partitioned-table.md#key-分区) | Y | N | N | N | N | N | N | N | N | N | -| [List 分区](/partitioned-table.md#list-分区) | Y | Y | Y | Y | E | E | E | E | E | N | -| [List COLUMNS 分区](/partitioned-table.md#list-columns-分区) | Y | Y | Y | Y | E | E | E | E | E | N | -| [`EXCHANGE PARTITION`](/partitioned-table.md) | Y | Y | Y | E | E | E | E | E | E | N | -| [`REORGANIZE PARTITION`](/partitioned-table.md#重组分区) | Y | N | N | N | N | N | N | N | N | N | -| [动态裁剪](/partitioned-table.md#动态裁剪模式) | Y | Y | Y | Y | E | E | E | E | N | N | -| [Range COLUMNS 分区](/partitioned-table.md#range-columns-分区) | Y | Y | Y | N | N | N | N | N | N | N | -| [Range INTERVAL 分区](/partitioned-table.md#range-interval-分区) | E | E | E | N | N | N | N | N | N | N | +| 分区 | 7.1 (upcoming) | 6.5 | 6.1 | 5.4 | 5.3 | 5.2 | 5.1 | 5.0 | 4.0 | +|---|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:| +| [Range 分区](/partitioned-table.md#range-分区) | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| [Hash 分区](/partitioned-table.md#hash-分区) | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| [Key 分区](/partitioned-table.md#key-分区) | Y | N | N | N | N | N | N | N | N | +| [List 分区](/partitioned-table.md#list-分区) | Y | Y | Y | E | E | E | E | E | N | +| [List COLUMNS 分区](/partitioned-table.md#list-columns-分区) | Y | Y | Y | E | E | E | E | E | N | +| [`EXCHANGE PARTITION`](/partitioned-table.md) | Y | Y | E | E | E | E | E | E | N | +| [`REORGANIZE PARTITION`](/partitioned-table.md#重组分区) | Y | N | N | N | N | N | N | N | N | +| [`COALESCE PARTITION`](/partitioned-table.md#减少分区数量) | Y | N | N | N | N | N | N | N | N | +| [动态裁剪](/partitioned-table.md#动态裁剪模式) | Y | Y | Y | E | E | E | E | N | N | +| [Range COLUMNS 分区](/partitioned-table.md#range-columns-分区) | Y | Y | N | N | N | N | N | N | N | +| [Range INTERVAL 分区](/partitioned-table.md#range-interval-分区) | Y | E | N | N | N | N | N | N | N | ## 统计信息 -| 统计信息 | 7.0 | 6.6 | 6.5 | 6.1 | 5.4 | 5.3 | 5.2 | 5.1 | 5.0 | 4.0 | -|---|---|:---:|:---:|:---:|:---:|:---:|:---:|:---:|---|:---:| -| [CM-Sketch](/statistics.md) | 默认关闭 | 默认关闭 | 默认关闭 | 默认关闭 | 默认关闭 | 默认关闭 | Y | Y | Y | Y | -| [直方图](/statistics.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| 扩展统计信息(多列) | E | E | E | E | E | E | E | E | E | N | -| 统计反馈 | N | N | N | 已废弃 | 已废弃 | E | E | E | E | E | -| [统计信息自动更新](/statistics.md#自动更新) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| [快速分析](/system-variables.md#tidb_enable_fast_analyze) | E | E | E | E | E | E | E | E | E | E | -| [动态裁剪](/partitioned-table.md#动态裁剪模式) | Y | Y | Y | Y | E | E | E | E | N | N | -| [收集部分列的统计信息](/statistics.md#收集部分列的统计信息) | E | E | E | E | E | N | N | N | N | N | -| [限制统计信息的内存使用量](/statistics.md#统计信息收集的内存限制) | E | E | E | E | N | N | N | N | N | N | -| [随机采样约 10000 行数据来快速构建统计信息](/system-variables.md#tidb_enable_fast_analyze) | E | E | E | E | E | E | E | E | E | E | -| [锁定统计信息](/statistics.md#锁定统计信息) | E | E | E | N | N | N | N | N | N | N | +| 统计信息 | 7.1 (upcoming) | 6.5 | 6.1 | 5.4 | 5.3 | 5.2 | 5.1 | 5.0 | 4.0 | +|---|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:| +| [CM-Sketch](/statistics.md) | 默认关闭 | 默认关闭 | 默认关闭 | 默认关闭 | 默认关闭 | Y | Y | Y | Y | +| [直方图](/statistics.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| 扩展统计信息(多列) | E | E | E | E | E | E | E | E | N | +| 统计反馈 | N | N | 已废弃 | 已废弃 | E | E | E | E | E | +| [统计信息自动更新](/statistics.md#自动更新) | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| [快速分析](/system-variables.md#tidb_enable_fast_analyze) | E | E | E | E | E | E | E | E | E | +| [动态裁剪](/partitioned-table.md#动态裁剪模式) | Y | Y | Y | E | E | E | E | N | N | +| [收集部分列的统计信息](/statistics.md#收集部分列的统计信息) | E | E | E | E | N | N | N | N | N | +| [限制统计信息的内存使用量](/statistics.md#统计信息收集的内存限制) | E | E | E | N | N | N | N | N | N | +| [随机采样约 10000 行数据来快速构建统计信息](/system-variables.md#tidb_enable_fast_analyze) | E | E | E | E | E | E | E | E | E | +| [锁定统计信息](/statistics.md#锁定统计信息) | E | E | N | N | N | N | N | N | N | ## 安全 -| 安全 | 7.0 | 6.6 | 6.5 | 6.1 | 5.4 | 5.3 | 5.2 | 5.1 | 5.0 | 4.0 | -|---|---|---|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:| -| [传输层加密 (TLS)](/enable-tls-between-clients-and-servers.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| [静态加密 (TDE)](/encryption-at-rest.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| [基于角色的访问控制 (RBAC)](/role-based-access-control.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| [证书鉴权](/certificate-authentication.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| [`caching_sha2_password` 认证](/system-variables.md#default_authentication_plugin) | Y | Y | Y | Y | Y | Y | Y | N | N | N | -| [`tidb_sm3_password` 认证](/system-variables.md#default_authentication_plugin) | Y | Y | Y | N | N | N | N | N | N | N | -| [`tidb_auth_token` 认证](/system-variables.md#default_authentication_plugin) | Y | Y | Y | N | N | N | N | N | N | N | -| [密码管理](/password-management.md) | Y | Y | Y | N | N | N | N | N | N | N | -| [与 MySQL 兼容的 `GRANT` 权限管理](/privilege-management.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| [动态权限](/privilege-management.md#动态权限) | Y | Y | Y | Y | Y | Y | Y | Y | N | N | -| [安全增强模式](/system-variables.md#tidb_enable_enhanced_security) | Y | Y | Y | Y | Y | Y | Y | Y | N | N | -| [日志脱敏](/log-redaction.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | N | +| 安全 | 7.1 (upcoming) | 6.5 | 6.1 | 5.4 | 5.3 | 5.2 | 5.1 | 5.0 | 4.0 | +|---|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:| +| [传输层加密 (TLS)](/enable-tls-between-clients-and-servers.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| [静态加密 (TDE)](/encryption-at-rest.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| [基于角色的访问控制 (RBAC)](/role-based-access-control.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| [证书鉴权](/certificate-authentication.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| [`caching_sha2_password` 认证](/system-variables.md#default_authentication_plugin) | Y | Y | Y | Y | Y | Y | N | N | N | +| [`tidb_sm3_password` 认证](/system-variables.md#default_authentication_plugin) | Y | Y | N | N | N | N | N | N | N | +| [`tidb_auth_token` 认证](/system-variables.md#default_authentication_plugin) | Y | Y | N | N | N | N | N | N | N | +| [密码管理](/password-management.md) | Y | Y | N | N | N | N | N | N | N | +| [与 MySQL 兼容的 `GRANT` 权限管理](/privilege-management.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| [动态权限](/privilege-management.md#动态权限) | Y | Y | Y | Y | Y | Y | Y | N | N | +| [安全增强模式](/system-variables.md#tidb_enable_enhanced_security) | Y | Y | Y | Y | Y | Y | Y | N | N | +| [日志脱敏](/log-redaction.md) | Y | Y | Y | Y | Y | Y | Y | Y | N | ## 数据导入和导出 -| 数据导入和导出 | 7.0 | 6.6 | 6.5 | 6.1 | 5.4 | 5.3 | 5.2 | 5.1 | 5.0 | 4.0 | -|---|---|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:| -| [快速导入 (TiDB Lightning)](/tidb-lightning/tidb-lightning-overview.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| mydumper 逻辑导出 | 已废弃 | 已废弃 | 已废弃 | 已废弃 | 已废弃 | 已废弃 | 已废弃 | 已废弃 | 已废弃 | 已废弃 | -| [Dumpling 逻辑导出](/dumpling-overview.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| [事务 `LOAD DATA`](/sql-statements/sql-statement-load-data.md) | E [^5] | Y | Y | Y | Y | Y | Y | Y | Y | N [^6] | -| [数据迁移工具](/migration-overview.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| [TiDB Binlog](/tidb-binlog/tidb-binlog-overview.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| [Change data capture (CDC)](/ticdc/ticdc-overview.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| [TiCDC 支持保存数据到存储服务 (S3/NFS/Azure Blob Storage/GCP)](/ticdc/ticdc-sink-to-cloud-storage.md) | Y | E | E | N | N | N | N | N | N | N | -| [TiCDC 支持在两个 TiDB 集群之间进行双向复制](/ticdc/ticdc-bidirectional-replication.md) | Y | Y | Y | N | N | N | N | N | N | N | -| [TiCDC OpenAPI v2](/ticdc/ticdc-open-api-v2.md) | Y | N | N | N | N | N | N | N | N | N | +| 数据导入和导出 | 7.1 (upcoming) | 6.5 | 6.1 | 5.4 | 5.3 | 5.2 | 5.1 | 5.0 | 4.0 | +|---|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:| +| [快速导入 (TiDB Lightning)](/tidb-lightning/tidb-lightning-overview.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| mydumper 逻辑导出 | 已废弃 | 已废弃 | 已废弃 | 已废弃 | 已废弃 | 已废弃 | 已废弃 | 已废弃 | 已废弃 | +| [Dumpling 逻辑导出](/dumpling-overview.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| [事务 `LOAD DATA`](/sql-statements/sql-statement-load-data.md) | Y [^5] | Y | Y | Y | Y | Y | Y | Y | N [^6] | +| [数据迁移工具](/migration-overview.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| [TiDB Binlog](/tidb-binlog/tidb-binlog-overview.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| [Change data capture (CDC)](/ticdc/ticdc-overview.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| [TiCDC 支持保存数据到存储服务 (S3/NFS/Azure Blob Storage/GCP)](/ticdc/ticdc-sink-to-cloud-storage.md) | Y | E | N | N | N | N | N | N | N | +| [TiCDC 支持在两个 TiDB 集群之间进行双向复制](/ticdc/ticdc-bidirectional-replication.md) | Y | Y | N | N | N | N | N | N | N | +| [TiCDC OpenAPI v2](/ticdc/ticdc-open-api-v2.md) | Y | N | N | N | N | N | N | N | N | ## 管理,可视化和工具 -| 管理,可视化和工具 | 7.0 | 6.6 | 6.5 | 6.1 | 5.4 | 5.3 | 5.2 | 5.1 | 5.0 | 4.0 | -|---|---|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:| -| [TiDB Dashboard 图形化展示](/dashboard/dashboard-intro.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| [TiDB Dashboard 持续性能分析功能](/dashboard/continuous-profiling.md) | Y | Y | Y | Y | E | E | N | N | N | N | -| [TiDB Dashboard Top SQL 功能](/dashboard/top-sql.md) | Y | Y | Y | Y | E | N | N | N | N | N | -| [TiDB Dashboard SQL 诊断功能](/information-schema/information-schema-sql-diagnostics.md) | Y | Y | Y | E | E | E | E | E | E | E | -| [TiDB Dashboard 集群诊断功能](/dashboard/dashboard-diagnostics-access.md) | Y | Y | Y | E | E | E | E | E | E | E | -| [Grafana 中的 TiKV-FastTune 面板](/grafana-tikv-dashboard.md#tikv-fasttune-面板) | E | E | E | E | E | E | E | E | E | E | -| [Information schema](/information-schema/information-schema.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| [Metrics schema](/metrics-schema.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| [Statements summary tables](/statement-summary-tables.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| [Statements summary tables - 持久化 statements summary](/statement-summary-tables.md#持久化-statements-summary) | E | E | N | N | N | N | N | N | N | N | -| [慢查询日志](/identify-slow-queries.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| [TiUP 部署](/tiup/tiup-overview.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| [Kubernetes operator](https://docs.pingcap.com/tidb-in-kubernetes/stable) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| [内置物理备份](/br/backup-and-restore-use-cases.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| [Global Kill](/sql-statements/sql-statement-kill.md) | Y | Y | Y | Y | E | E | E | E | E | E | -| [Lock View](/information-schema/information-schema-data-lock-waits.md) | Y | Y | Y | Y | Y | Y | Y | E | E | E | -| [`SHOW CONFIG`](/sql-statements/sql-statement-show-config.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| [`SET CONFIG`](/dynamic-config.md) | Y | Y | Y | Y | E | E | E | E | E | E | -| [DM WebUI](/dm/dm-webui-guide.md) | E | E | E | E | N | N | N | N | N | N | -| [前台限流](/tikv-configuration-file.md#前台限流) | Y | Y | Y | E | N | N | N | N | N | N | -| [后台限流](/tikv-configuration-file.md#后台限流) | E | E | E | N | N | N | N | N | N | N | -| [基于 EBS 的备份和恢复](https://docs.pingcap.com/zh/tidb-in-kubernetes/v1.4/volume-snapshot-backup-restore) | Y | Y | Y | N | N | N | N | N | N | N | -| [PITR](/br/br-pitr-guide.md) | Y | Y | Y | N | N | N | N | N | N | N | -| [全局内存控制](/configure-memory-usage.md#如何配置-tidb-server-实例使用内存的阈值) | Y | Y | Y | N | N | N | N | N | N | N | -| [RawKV 跨集群复制](/tikv-configuration-file.md#api-version-从-v610-版本开始引入) | E | E | E | N | N | N | N | N | N | N | -| [Green GC](/system-variables.md#tidb_gc_scan_lock_mode-从-v50-版本开始引入) | E | E | E | E | E | E | E | E | E | N | -| [资源管控 (Resource Control)](/tidb-resource-control.md) | E | E | N | N | N | N | N | N | N | N | -| [TiFlash 存算分离架构与 S3 支持](/tiflash/tiflash-disaggregated-and-s3.md) | E | N | N | N | N | N | N | N | N | N | +| 管理,可视化和工具 | 7.1 (upcoming) | 6.5 | 6.1 | 5.4 | 5.3 | 5.2 | 5.1 | 5.0 | 4.0 | +|---|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:| +| [TiDB Dashboard 图形化展示](/dashboard/dashboard-intro.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| [TiDB Dashboard 持续性能分析功能](/dashboard/continuous-profiling.md) | Y | Y | Y | E | E | N | N | N | N | +| [TiDB Dashboard Top SQL 功能](/dashboard/top-sql.md) | Y | Y | Y | E | N | N | N | N | N | +| [TiDB Dashboard SQL 诊断功能](/information-schema/information-schema-sql-diagnostics.md) | Y | Y | E | E | E | E | E | E | E | +| [TiDB Dashboard 集群诊断功能](/dashboard/dashboard-diagnostics-access.md) | Y | Y | E | E | E | E | E | E | E | +| [Grafana 中的 TiKV-FastTune 面板](/grafana-tikv-dashboard.md#tikv-fasttune-面板) | E | E | E | E | E | E | E | E | E | +| [Information schema](/information-schema/information-schema.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| [Metrics schema](/metrics-schema.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| [Statements summary tables](/statement-summary-tables.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| [Statements summary tables - 持久化 statements summary](/statement-summary-tables.md#持久化-statements-summary) | E | N | N | N | N | N | N | N | N | +| [慢查询日志](/identify-slow-queries.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| [TiUP 部署](/tiup/tiup-overview.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| [Kubernetes operator](https://docs.pingcap.com/tidb-in-kubernetes/stable) | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| [内置物理备份](/br/backup-and-restore-use-cases.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| [Global Kill](/sql-statements/sql-statement-kill.md) | Y | Y | Y | E | E | E | E | E | E | +| [Lock View](/information-schema/information-schema-data-lock-waits.md) | Y | Y | Y | Y | Y | Y | E | E | E | +| [`SHOW CONFIG`](/sql-statements/sql-statement-show-config.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| [`SET CONFIG`](/dynamic-config.md) | Y | Y | Y | E | E | E | E | E | E | +| [DM WebUI](/dm/dm-webui-guide.md) | E | E | E | N | N | N | N | N | N | +| [前台限流](/tikv-configuration-file.md#前台限流) | Y | Y | E | N | N | N | N | N | N | +| [后台限流](/tikv-configuration-file.md#后台限流) | E | E | N | N | N | N | N | N | N | +| [基于 EBS 的备份和恢复](https://docs.pingcap.com/zh/tidb-in-kubernetes/v1.4/volume-snapshot-backup-restore) | Y | Y | N | N | N | N | N | N | N | +| [PITR](/br/br-pitr-guide.md) | Y | Y | N | N | N | N | N | N | N | +| [全局内存控制](/configure-memory-usage.md#如何配置-tidb-server-实例使用内存的阈值) | Y | Y | N | N | N | N | N | N | N | +| [RawKV 跨集群复制](/tikv-configuration-file.md#api-version-从-v610-版本开始引入) | E | E | N | N | N | N | N | N | N | +| [Green GC](/system-variables.md#tidb_gc_scan_lock_mode-从-v50-版本开始引入) | E | E | E | E | E | E | E | E | N | +| [资源管控 (Resource Control)](/tidb-resource-control.md) | Y | N | N | N | N | N | N | N | N | +| [TiFlash 存算分离架构与 S3 支持](/tiflash/tiflash-disaggregated-and-s3.md) | E | N | N | N | N | N | N | N | N | [^1]: TiDB 误将 latin1 处理为 utf8 的子集。见 [TiDB #18955](https://github.com/pingcap/tidb/issues/18955)。 @@ -241,6 +243,6 @@ aliases: ['/docs-cn/dev/basic-features/','/docs-cn/dev/experimental-features-4.0 [^4]: 从 [TiDB v6.4.0](/releases/release-6.4.0.md) 开始,支持[高性能、全局单调递增的 `AUTO_INCREMENT` 列](/auto-increment.md#mysql-兼容模式) -[^5]: 对于 [TiDB v7.0.0](/releases/release-7.0.0.md),新增参数 `FORMAT`、`FIELDS DEFINED NULL BY`、`With batch_size=,detached`,以及新增支持从 S3 和 GCS 导入数据,均为实验特性。 +[^5]: 对于 [TiDB v7.1.0](/releases/release-7.1.0.md),新增的并发导入和集成 Physical Import Mode 功能,均为实验特性。 [^6]: 对于 TiDB v4.0,事务 `LOAD DATA` 不保证原子性。 From cda942fa249a8aea26d8d4c13002b23322da308d Mon Sep 17 00:00:00 2001 From: Ti Chi Robot Date: Thu, 27 Apr 2023 17:19:52 +0800 Subject: [PATCH 068/257] v6.5: modify default value descriptions for enable-partition-separator (#13761) (#13828) --- releases/release-6.5.2.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/releases/release-6.5.2.md b/releases/release-6.5.2.md index b8705c47ed68..ee778ba92d41 100644 --- a/releases/release-6.5.2.md +++ b/releases/release-6.5.2.md @@ -17,6 +17,8 @@ TiDB 版本:6.5.2 在升级 TiCDC 集群到 v6.5.2 或更高的 v6.5.x 版本时,如果使用 Avro 同步的表包含 `FLOAT` 类型数据,请在升级前手动调整 Confluent Schema Registry 的兼容性策略为 `None`,使 changefeed 能够成功更新 schema。否则,在升级之后 changefeed 将无法更新 schema 并进入错误状态。 +- 为了解决同步分区表到存储服务时可能丢数据的问题,TiCDC 配置项 [`sink.enable-partition-separator`](/ticdc/ticdc-changefeed-config.md#ticdc-changefeed-配置文件说明) 默认值从 `false` 修改为 `true`,代表默认会将表中各个分区的数据分不同的目录来存储。建议保持该配置项为 `true` 以避免该问题。[#8724](https://github.com/pingcap/tiflow/issues/8724) @[CharlesCheung96](https://github.com/CharlesCheung96) + ## 改进提升 + TiDB From a85715771b1969619a4256f402d751e9222bbe4c Mon Sep 17 00:00:00 2001 From: Aolin Date: Thu, 27 Apr 2023 17:29:52 +0800 Subject: [PATCH 069/257] v7.1: update the description of fast online ddl (#13831) --- releases/release-7.1.0.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/releases/release-7.1.0.md b/releases/release-7.1.0.md index 0c7780944e5e..ba9308715666 100644 --- a/releases/release-7.1.0.md +++ b/releases/release-7.1.0.md @@ -96,7 +96,7 @@ TiDB 版本:7.1.0 (upcoming) 更多信息,请参考[用户文档](/tidb-resource-control.md)。 -* 支持 [Fast Online DDL](/system-variables.md#tidb_ddl_enable_fast_reorg-从-v630-版本开始引入) 的检查点机制,提升容错性和自动恢复能力 [#42164](https://github.com/pingcap/tidb/issues/42164) @[tangenta](https://github.com/tangenta) +* 支持 Fast Online DDL 的检查点机制,提升容错性和自动恢复能力 [#42164](https://github.com/pingcap/tidb/issues/42164) @[tangenta](https://github.com/tangenta) TiDB v7.1.0 引入 [Fast Online DDL](/ddl-introduction.md) 的检查点机制,可以大幅提升 Fast Online DDL 的容错性和自动恢复能力。即使 TiDB owner 因故障重启或者切换,TiDB 也能够通过自动定期保存的检查点恢复部分进度,从而让 DDL 执行更加稳定高效。 From 4384e2e6f4f130ce7b78782082caeb17ba995712 Mon Sep 17 00:00:00 2001 From: Lilian Lee Date: Fri, 28 Apr 2023 11:19:52 +0800 Subject: [PATCH 070/257] Update Lightning import error handling (#13823) --- .../tidb-lightning-distributed-import.md | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/tidb-lightning/tidb-lightning-distributed-import.md b/tidb-lightning/tidb-lightning-distributed-import.md index c9370eccc5d1..f5ad0ac52c7b 100644 --- a/tidb-lightning/tidb-lightning-distributed-import.md +++ b/tidb-lightning/tidb-lightning-distributed-import.md @@ -188,11 +188,19 @@ incremental-import = true 在并行导入过程中,如果一个或多个 TiDB Lightning 节点异常终止,需要首先根据日志中的报错明确异常退出的原因,然后根据错误类型做不同处理: -1. 如果是正常退出(如手动 Kill 等),或内存溢出被操作系统终止等,可以在适当调整配置后直接重启 TiDB Lightning,无须任何其他操作。 +- 如果是正常退出,例如手动 Kill 或内存溢出被操作系统终止等,可以在适当调整配置后直接重启 TiDB Lightning,无须任何其他操作。 -2. 如果是不影响数据正确性的报错,如网络超时,可以在每一个失败的节点上使用 tidb-lightning-ctl 工具清除断点续传源数据中记录的错误,然后重启这些异常的节点,从断点位置继续导入,详见 [checkpoint-error-ignore](/tidb-lightning/tidb-lightning-checkpoints.md#--checkpoint-error-ignore)。 +- 如果是不影响数据正确性的报错,例如网络超时,请按以下步骤解决: -3. 如果是影响数据正确性的报错,如 checksum mismatched,表示源文件中有非法的数据,则需要在每一个失败的节点上使用 tidb-lightning-ctl 工具,清除失败的表中已导入的数据及断点续传相关的源数据,详见 [checkpoint-error-destroy](/tidb-lightning/tidb-lightning-checkpoints.md#--checkpoint-error-destroy)。此命令会删除下游导入失败表中已导入的数据,因此,应在所有 TiDB Lightning 节点(包括任务正常结束的)重新配置和导入失败的表的数据,可以配置 filters 参数只导入报错失败的表。 + 1. 在每一个失败的节点上,执行 [checkpoint-error-ignore](/tidb-lightning/tidb-lightning-checkpoints.md#--checkpoint-error-ignore) 命令,值设置为 `all`,以清除断点续传源数据中记录的错误。 + + 2. 重启这些异常的节点,从断点位置继续导入。 + +- 如果在日志中看到影响数据正确性的报错,如 checksum mismatched,表示源文件中有非法的数据,请按以下步骤解决: + + 1. 在每一个 Lightning 节点(包括成功导入数据的节点)上执行 [checkpoint-error-destroy](/tidb-lightning/tidb-lightning-checkpoints.md#--checkpoint-error-destroy) 命令,以清除失败的表中已导入的数据,并将这些表的 checkpoint 状态重置为 "not yet started"。 + + 2. 使用 [`filter`](/table-filter.md) 参数在所有 TiDB Lightning 节点(包括任务正常结束的节点)上重新配置和导入失败表的数据。重新配置任务时,不要将 checkpoint-error-destroy 命令放在每一个 Lightning 节点的启动脚本中,否则会删除多个并行导入任务使用的共享元数据,可能会导致数据导入过程出现问题。例如,如果启动了第二个 Lightning 导入任务,它将删除第一个数据导入任务写入的元数据,导致数据导入异常。 ### 导入过程中报错 "Target table is calculating checksum. Please wait until the checksum is finished and try again" From 8d1cc1934987f6e9a923a11958edc6575bf95c2d Mon Sep 17 00:00:00 2001 From: tangenta Date: Thu, 4 May 2023 18:17:55 +0800 Subject: [PATCH 071/257] system-variables.md: add version tag for tidb_enable_ddl (#13509) --- system-variables.md | 2 +- tidb-configuration-file.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/system-variables.md b/system-variables.md index bff888d333c5..a086a07efcd3 100644 --- a/system-variables.md +++ b/system-variables.md @@ -1210,7 +1210,7 @@ MPP 是 TiFlash 引擎提供的分布式计算框架,允许节点之间的数 - 默认值:`OFF` - 这个变量用于控制是否开启 TiDB 对 `PREDICATE COLUMNS` 的收集。关闭该变量后,之前收集的 `PREDICATE COLUMNS` 会被清除。详情见[收集部分列的统计信息](/statistics.md#收集部分列的统计信息)。 -### `tidb_enable_ddl` +### `tidb_enable_ddl` 从 v6.3.0 版本开始引入 - 作用域:GLOBAL - 是否持久化到集群:否,仅作用于当前连接的 TiDB 实例 diff --git a/tidb-configuration-file.md b/tidb-configuration-file.md index 3bb78f99a22c..82184ebc80a1 100644 --- a/tidb-configuration-file.md +++ b/tidb-configuration-file.md @@ -839,7 +839,7 @@ TiDB 服务状态相关配置。 + 用于表示该 tidb-server 是否可以成为 DDL owner。 + 默认值:true -+ 该值作为系统变量 [`tidb_enable_ddl`](/system-variables.md#tidb_enable_ddl) 的初始值。 ++ 该值作为系统变量 [`tidb_enable_ddl`](/system-variables.md#tidb_enable_ddl-从-v630-版本开始引入) 的初始值。 + 在 v6.3.0 之前,该功能由配置项 `run-ddl` 进行设置。 ### `tidb_stmt_summary_enable_persistent` 从 v6.6.0 版本开始引入 From 9a65011cc60e0689e34963d9faf20a6332d9cab2 Mon Sep 17 00:00:00 2001 From: Grace Cai Date: Thu, 4 May 2023 18:51:55 +0800 Subject: [PATCH 072/257] system-variables: Link various resources related to MAX_EXECUTION_TIME (#13468) --- system-variables.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/system-variables.md b/system-variables.md index a086a07efcd3..7905e050d345 100644 --- a/system-variables.md +++ b/system-variables.md @@ -360,7 +360,8 @@ mysql> SELECT * FROM t1; > **注意:** > -> `max_execution_time` 目前对所有类型的语句生效,并非只对 `SELECT` 语句生效,与 MySQL 不同(只对`SELECT` 语句生效)。实际精度在 100ms 级别,而非更准确的毫秒级别。 +> - `max_execution_time` 目前对所有类型的语句生效,并非只对 `SELECT` 语句生效,与 MySQL 不同(只对`SELECT` 语句生效)。实际精度在 100ms 级别,而非更准确的毫秒级别。 +> - 对于使用了 [`MAX_EXECUTION_TIME`](/optimizer-hints.md#max_execution_timen) Hint 的 SQL 语句,这些语句的最长执行时间将不受该变量限制,而是由该 Hint 进行限制。你也可以使用该 Hint 来创建 SQL 绑定,详情请参考 [SQL 操作常见问题](/faq/sql-faq.md#如何阻止特定的-sql-语句执行或者将某个-sql-语句加入黑名单)。 ### `max_prepared_stmt_count` From 8cace735e591230ef5c2bc0861aacfabbcec5201 Mon Sep 17 00:00:00 2001 From: Ran Date: Fri, 5 May 2023 09:41:55 +0800 Subject: [PATCH 073/257] lightning: update the import capability spec (#13839) --- tidb-lightning/tidb-lightning-physical-import-mode.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tidb-lightning/tidb-lightning-physical-import-mode.md b/tidb-lightning/tidb-lightning-physical-import-mode.md index 4b012713785c..886a684ed10f 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。 # Physical Import Mode 简介 -Physical Import Mode 是 TiDB Lightning 支持的一种数据导入方式。Physical Import Mode 不经过 SQL 接口,而是直接将数据以键值对的形式插入 TiKV 节点,是一种高效、快速的导入模式。Physical Import Mode 适合导入最高 100 TB 数据量,实现方式是通过[并行导入](/tidb-lightning/tidb-lightning-distributed-import.md) 10 个任务、每个任务导入 10 TB 数据。 +Physical Import Mode 是 TiDB Lightning 支持的一种数据导入方式。Physical Import Mode 不经过 SQL 接口,而是直接将数据以键值对的形式插入 TiKV 节点,是一种高效、快速的导入模式。使用 Physical Import Mode 时,单个 Lightning 实例可导入的数据量为 10 TiB,理论上导入的数据量可以随着 Lightning 实例数量的增加而增加,目前已经有多个用户验证基于[并行导入](/tidb-lightning/tidb-lightning-distributed-import.md)功能可以导入的数据量达 20 TiB。 使用前请务必自行阅读[必要条件及限制](/tidb-lightning/tidb-lightning-physical-import-mode.md#必要条件及限制)。 @@ -28,7 +28,7 @@ Physical Import Mode 对应的后端模式为 `local`。 5. 当一个引擎文件数据写入完毕时,`tidb-lightning` 便开始对目标 TiKV 集群数据进行分裂和调度,然后导入数据到 TiKV 集群。 - 引擎文件包含两种:**数据引擎**与**索引引擎**,各自又对应两种键值对:行数据和次级索引。通常行数据在数据源里是完全有序的,而次级索引是无序的。因此,数据引擎文件在对应区块写入完成后会被立即上传,而所有的索引引擎文件只有在整张表所有区块编码完成后才会执行导入。 + 引擎文件包含两种:**数据引擎**与**索引引擎**,各自又对应两种键值对:行数据和次级索引。通常行数据在数据源里是完全有序的,而次级索引是无序的。因此,数据引擎文件在对应区块写入完成后会被立即上传,而所有的索引引擎文件只有在整张表所有区块编码完成后才会执行导入。 注意当 `tidb-lightning` 使用 SQL 接口添加索引时(即 `add-index-by-sql` 设置为 `true`),索引引擎将不会写入数据,因为此时目标表的次级索引已经在第 2 步中被移除。 From decbd73e9488aa7be488778ade1e4356d4cd5f5d Mon Sep 17 00:00:00 2001 From: glorv Date: Fri, 5 May 2023 10:55:56 +0800 Subject: [PATCH 074/257] add config unit for tidb_adaptive_closest_read_threshold (#13697) --- system-variables.md | 1 + 1 file changed, 1 insertion(+) diff --git a/system-variables.md b/system-variables.md index 7905e050d345..c59a873168ba 100644 --- a/system-variables.md +++ b/system-variables.md @@ -584,6 +584,7 @@ mysql> SHOW GLOBAL VARIABLES LIKE 'max_prepared_stmt_count'; - 是否持久化到集群:是 - 默认值:`4096` - 取值范围:`[0, 9223372036854775807]` +- 单位:字节 - 这个变量用于控制当 [`replica-read`](#tidb_replica_read-从-v40-版本开始引入) 设置为 `closest-adaptive` 时,优先将读请求发送至 TiDB server 所在区域副本的阈值。当读请求预估的返回结果的大小超过此阈值时,TiDB 会将读请求优先发送至同一可用区的副本,否则会发送至 leader 副本。 ### `tidb_allow_batch_cop` 从 v4.0 版本开始引入 From 2f1fc774235f1a09a4146a1759b5a7b2724fdb2f Mon Sep 17 00:00:00 2001 From: Grace Cai Date: Fri, 5 May 2023 11:13:55 +0800 Subject: [PATCH 075/257] chore: add v7.2 to the PR template (#13841) --- .github/pull_request_template.md | 1 + tiflash/tiflash-results-materialization.md | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index 5cf166b04d6a..0514b4914365 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.2 (TiDB 7.2 versions) - [ ] v7.1 (TiDB 7.1 versions) - [ ] v7.0 (TiDB 7.0 versions) - [ ] v6.6 (TiDB 6.6 versions) diff --git a/tiflash/tiflash-results-materialization.md b/tiflash/tiflash-results-materialization.md index ff4bae4124a9..bb7dcabd2a0e 100644 --- a/tiflash/tiflash-results-materialization.md +++ b/tiflash/tiflash-results-materialization.md @@ -12,7 +12,7 @@ summary: 介绍如何在同一个事务中保存 TiFlash 的查询结果。 > **注意:** > > 默认情况下 ([`tidb_allow_mpp = ON`](/system-variables.md#tidb_allow_mpp-从-v50-版本开始引入)),优化器将根据 [SQL 模式](/sql-mode.md) 及 TiFlash 副本的代价估算自行决定是否将查询下推到 TiFlash。 - +> > - 如果当前会话的 [SQL 模式](/sql-mode.md)为非严格模式(即 `sql_mode` 值不包含 `STRICT_TRANS_TABLES` 和 `STRICT_ALL_TABLES`),优化器会根据 TiFlash 副本的代价估算自行决定是否将 `INSERT INTO SELECT` 中的 `SELECT` 子查询将下推到 TiFlash。在此模式下,如需忽略优化器代价估算强制使用 TiFlash 查询,你可以设置[`tidb_enforce_mpp`](/system-variables.md#tidb_enforce_mpp-从-v51-版本开始引入) 为 `ON`。 > - 如果当前会话的 [SQL 模式](/sql-mode.md)为严格模式(即 `sql_mode` 值包含 `STRICT_TRANS_TABLES` 或 `STRICT_ALL_TABLES`),`INSERT INTO SELECT` 中的 `SELECT` 子查询将无法下推到 TiFlash。 From 5629a89a7d1edd6e63c611159c178abab151845a Mon Sep 17 00:00:00 2001 From: Aolin Date: Fri, 5 May 2023 11:15:55 +0800 Subject: [PATCH 076/257] system variable: clarify timezone for tidb_auto_analyze_time (#13855) --- system-variables.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/system-variables.md b/system-variables.md index c59a873168ba..b817ae017f83 100644 --- a/system-variables.md +++ b/system-variables.md @@ -654,7 +654,7 @@ MPP 是 TiFlash 引擎提供的分布式计算框架,允许节点之间的数 - 作用域:GLOBAL - 是否持久化到集群:是 - 默认值:`23:59 +0000` -- 这个变量用来设置一天中允许自动 ANALYZE 更新统计信息的结束时间。例如,只允许在凌晨 1:00 至 3:00 之间自动更新统计信息,可以设置如下: +- 这个变量用来设置一天中允许自动 ANALYZE 更新统计信息的结束时间。例如,只允许在 UTC 时间的凌晨 1:00 至 3:00 之间自动更新统计信息,可以设置如下: - `tidb_auto_analyze_start_time='01:00 +0000'` - `tidb_auto_analyze_end_time='03:00 +0000'` @@ -685,7 +685,7 @@ MPP 是 TiFlash 引擎提供的分布式计算框架,允许节点之间的数 - 作用域:GLOBAL - 是否持久化到集群:是 - 默认值:`00:00 +0000` -- 这个变量用来设置一天中允许自动 ANALYZE 更新统计信息的开始时间。例如,只允许在凌晨 1:00 至 3:00 之间自动更新统计信息,可以设置如下: +- 这个变量用来设置一天中允许自动 ANALYZE 更新统计信息的开始时间。例如,只允许在 UTC 时间的凌晨 1:00 至 3:00 之间自动更新统计信息,可以设置如下: - `tidb_auto_analyze_start_time='01:00 +0000'` - `tidb_auto_analyze_end_time='03:00 +0000'` From eec5a6eef48f34e349187e39fe21682258db048e Mon Sep 17 00:00:00 2001 From: Grace Cai Date: Fri, 5 May 2023 11:19:55 +0800 Subject: [PATCH 077/257] foreign-key: add a note about the usage (#13838) --- foreign-key.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/foreign-key.md b/foreign-key.md index 72214cce2623..dd50c71029bc 100644 --- a/foreign-key.md +++ b/foreign-key.md @@ -7,6 +7,10 @@ summary: TiDB 数据库中外键约束的使用概况。 从 v6.6.0 开始,TiDB 支持外键以及外键约束功能,外键允许跨表交叉引用相关数据,外键约束则可以保证相关数据的一致性。 +> **注意:** +> +> 外键功能通常适用于为中小规模的数据提供完整性和一致性约束校验,但是在大数据量和分布式数据库系统下,使用外键可能会导致严重的性能问题,并对系统产生不可预知的影响。如果计划使用外键,请进行充分验证后谨慎使用。 + 外键是在子表中定义的,语法如下: ```ebnf+diagram From a8968518e1531dd669928fb86de295a4e163d7c1 Mon Sep 17 00:00:00 2001 From: Ran Date: Fri, 5 May 2023 14:25:56 +0800 Subject: [PATCH 078/257] fix range columns examples (#13465) --- partitioned-table.md | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/partitioned-table.md b/partitioned-table.md index 7bcb9ed54197..e1b8289b05b6 100644 --- a/partitioned-table.md +++ b/partitioned-table.md @@ -166,22 +166,16 @@ CREATE TABLE t ( name varchar(255) CHARACTER SET ascii, notes text ) -PARTITION BY RANGE COLUMNS(name,valid_until) +PARTITION BY RANGE COLUMNS(name, valid_until) (PARTITION `p2022-g` VALUES LESS THAN ('G','2023-01-01 00:00:00'), PARTITION `p2023-g` VALUES LESS THAN ('G','2024-01-01 00:00:00'), - PARTITION `p2024-g` VALUES LESS THAN ('G','2025-01-01 00:00:00'), PARTITION `p2022-m` VALUES LESS THAN ('M','2023-01-01 00:00:00'), PARTITION `p2023-m` VALUES LESS THAN ('M','2024-01-01 00:00:00'), - PARTITION `p2024-m` VALUES LESS THAN ('M','2025-01-01 00:00:00'), PARTITION `p2022-s` VALUES LESS THAN ('S','2023-01-01 00:00:00'), - PARTITION `p2023-s` VALUES LESS THAN ('S','2024-01-01 00:00:00'), - PARTITION `p2024-s` VALUES LESS THAN ('S','2025-01-01 00:00:00'), - PARTITION `p2022-` VALUES LESS THAN (0x7f,'2023-01-01 00:00:00'), - PARTITION `p2023-` VALUES LESS THAN (0x7f,'2024-01-01 00:00:00'), - PARTITION `p2024-` VALUES LESS THAN (0x7f,'2025-01-01 00:00:00')) + PARTITION `p2023-s` VALUES LESS THAN ('S','2024-01-01 00:00:00')) ``` -该语句将按年份和名字的范围 ['', 'G')、['G', 'M')、['M', 'S')、['S',) 进行分区,删除无效数据,同时仍然可以在 `name` 和 `valid_until` 列上进行分区裁剪。其中,`[,)` 是一个半开半闭区间,比如 ['G', 'M'),表示包含 `G`、大于 `G` 并小于 `M` 的数据,但不包含 `M`。 +该语句将按名字和年份的范围 `[ ('', ''), ('G', '2023-01-01 00:00:00') )`,`[ ('G', '2023-01-01 00:00:00'), ('G', '2024-01-01 00:00:00') )`,`[ ('G', '2024-01-01 00:00:00'), ('M', '2023-01-01 00:00:00') )`,`[ ('M', '2023-01-01 00:00:00'), ('M', '2024-01-01 00:00:00') )`,`[ ('M', '2024-01-01 00:00:00'), ('S', '2023-01-01 00:00:00') )`,`[ ('S', '2023-01-01 00:00:00'), ('S', '2024-01-01 00:00:00') )` 进行分区,删除无效数据,同时仍然可以在 name 和 valid_until 列上进行分区裁剪。其中,`[,)` 是一个左闭右开区间,比如 `[ ('G', '2023-01-01 00:00:00'), ('G', '2024-01-01 00:00:00') )`,表示 name 为 `'G'` ,年份包含 2023-01-01 00:00:00 并大于 2023-01-01 00:00:00 但小于 2024-01-01 00:00:00 的数据,其中不包含 `(G, 2024-01-01 00:00:00)`。 ### Range INTERVAL 分区 From 87cc07d1c50d02a472fdd619f279caa7250e713d Mon Sep 17 00:00:00 2001 From: crazycs Date: Fri, 5 May 2023 16:41:56 +0800 Subject: [PATCH 079/257] update slow query doc (#11390) --- identify-slow-queries.md | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/identify-slow-queries.md b/identify-slow-queries.md index d21659723a18..b7f51d9a9397 100644 --- a/identify-slow-queries.md +++ b/identify-slow-queries.md @@ -100,6 +100,8 @@ Slow Query 基础信息: * `Write_keys`:表示该事务向 TiKV 的 Write CF 写入 Key 的数量。 * `Write_size`:表示事务提交时写 key 或 value 的总大小。 * `Prewrite_region`:表示事务两阶段提交中第一阶段(prewrite 阶段)涉及的 TiKV Region 数量。每个 Region 会触发一次远程过程调用。 +* `Wait_prewrite_binlog_time`:表示事务提交时用于写 binlog 的时间。 +* `Resolve_lock_time`:表示事务提交时遇到锁后,清理锁或者等待锁过期的时间。 和内存使用相关的字段: @@ -132,6 +134,12 @@ Slow Query 基础信息: * `Cop_wait_p90`:cop-task 的 P90 分位等待时间。 * `Cop_wait_max`:cop-task 的最大等待时间。 * `Cop_wait_addr`:等待时间最长的 cop-task 所在地址。 +* `Rocksdb_delete_skipped_count`:RocksDB 读数据过程中已删除 Key 的扫描数。 +* `Rocksdb_key_skipped_count`:RocksDB 扫数据时遇到的已删除 (tombstone) Key 数量。 +* `Rocksdb_block_cache_hit_count`:RocksDB 从 Block Cache 缓存中读数据的次数。 +* `Rocksdb_block_read_count`:RocksDB 从文件系统中读数据的次数。 +* `Rocksdb_block_read_byte`:RocksDB 从文件系统中读数据的数据量。 +* `Rocksdb_block_read_time`:RocksDB 从文件系统中读数据的时间。 * `Cop_backoff_{backoff-type}_total_times`:因某种错误造成的 backoff 总次数。 * `Cop_backoff_{backoff-type}_total_time`:因某种错误造成的 backoff 总时间。 * `Cop_backoff_{backoff-type}_max_time`:因某种错误造成的最大 backoff 时间。 @@ -139,6 +147,19 @@ Slow Query 基础信息: * `Cop_backoff_{backoff-type}_avg_time`:因某种错误造成的平均 backoff 时间。 * `Cop_backoff_{backoff-type}_p90_time`:因某种错误造成的 P90 分位 backoff 时间。 +`backoff-type` 一般有以下几种: + +* `tikvRPC`:给 TiKV 发送 RPC 请求失败而产生的 backoff。 +* `tiflashRPC`:给 TiFlash 发送 RPC 请求失败而产生的 backoff。 +* `pdRPC`:给 PD 发送 RPC 请求失败而产生的 backoff。 +* `txnLock`:遇到锁冲突后产生的 backoff。 +* `regionMiss`:Region 发生分裂或者合并后,TiDB 的 Region 缓存信息过期导致请求失败而产生的 backoff。 +* `regionScheduling`:Region 还在调度中,尚未选出 Leader 导致无法处理请求而产生的 backoff。 +* `tikvServerBusy`:因为 TiKV 负载太高无法处理新请求而产生的 backoff。 +* `tiflashServerBusy`:因为 TiFlash 负载太高无法处理新请求而产生的 backoff。 +* `tikvDiskFull`:因为 TiKV 的磁盘满了而产生的 backoff。 +* `txnLockFast`:因为读数据时遇到了锁而产生的 backoff。 + ## 相关系统变量 * [tidb_slow_log_threshold](/system-variables.md#tidb_slow_log_threshold):设置慢日志的阈值,执行时间超过阈值的 SQL 语句将被记录到慢日志中。默认值是 300 ms。 From 30c423a8900752bd108d2e8d9d4bfa758baa69ae Mon Sep 17 00:00:00 2001 From: Yifan Xu <30385241+xuyifangreeneyes@users.noreply.github.com> Date: Sat, 6 May 2023 13:54:56 +0800 Subject: [PATCH 080/257] add configuration performance.force-init-stats (#13840) --- releases/release-7.1.0.md | 1 + tidb-configuration-file.md | 7 +++++++ 2 files changed, 8 insertions(+) diff --git a/releases/release-7.1.0.md b/releases/release-7.1.0.md index ba9308715666..66ec2a903ee0 100644 --- a/releases/release-7.1.0.md +++ b/releases/release-7.1.0.md @@ -250,6 +250,7 @@ TiDB 版本:7.1.0 (upcoming) | 配置文件 | 配置项 | 修改类型 | 描述 | | -------- | -------- | -------- | -------- | +| TiDB | [`force-init-stats`](/tidb-configuration-file.md#force-init-stats-从-v710-版本开始引入) | 新增 | 用于控制 TiDB 启动时是否在统计信息初始化完成后再对外提供服务。 | | TiDB | [`lite-init-stats`](/tidb-configuration-file.md#lite-init-stats-从-v710-版本开始引入) | 新增 | 用于控制 TiDB 启动时是否采用轻量级的统计信息初始化。 | | PD | [`store-limit-version`](/pd-configuration-file.md#store-limit-version-从-v710-版本开始引入) | 新增 | 用于设置 store limit 工作模式。可选值为 `"v1"` 和 `"v2"`。 | | TiFlash | `http_port` | 删除 | 废弃 TiFlash HTTP 服务端口(默认 `8123`)。 | diff --git a/tidb-configuration-file.md b/tidb-configuration-file.md index 82184ebc80a1..1f36a5df908e 100644 --- a/tidb-configuration-file.md +++ b/tidb-configuration-file.md @@ -563,6 +563,13 @@ TiDB 配置文件比命令行参数支持更多的选项。你可以在 [config/ + 当 `lite-init-stats` 为 `true` 时,统计信息初始化时列和索引的直方图、TopN、Count-Min Sketch 均不会加载到内存中。当 `lite-init-stats` 为 `false` 时,统计信息初始化时索引和主键的直方图、TopN、Count-Min Sketch 会被加载到内存中,非主键列的直方图、TopN、Count-Min Sketch 不会加载到内存中。当优化器需要某一索引或者列的直方图、TopN、Count-Min Sketch 时,这些统计信息会被同步或异步加载到内存中(由 [`tidb_stats_load_sync_wait`](/system-variables.md#tidb_stats_load_sync_wait-从-v540-版本开始引入) 控制)。 + 将 `lite-init-stats` 设置为 true,可以加速统计信息初始化,避免加载不必要的统计信息,从而降低 TiDB 的内存使用。详情请参考[统计信息的加载](/statistics.md#统计信息的加载)。 +### `force-init-stats` 从 v7.1.0 版本开始引入 + ++ 用于控制 TiDB 启动时是否在统计信息初始化完成后再对外提供服务。 ++ 默认值:false ++ 当 `force-init-stats` 为 `true` 时,TiDB 启动时会等到统计信息初始化完成后再对外提供服务。在表和分区数量较多的情况下,将 `force-init-stats` 设置为 `true` 可能会导致 TiDB 从启动到开始对外提供服务的时间变长。 ++ 当 `force-init-stats` 为 `false` 时,TiDB 在统计信息初始化未完成时即可对外提供服务,但由于统计信息初始化未完成,优化器会用 pseudo 统计信息进行决策,可能会产生不合理的执行计划。 + ## opentracing opentracing 的相关的设置。 From 4d14048173746e868c3faeba9aa690a7029e2cc2 Mon Sep 17 00:00:00 2001 From: Aolin Date: Sat, 6 May 2023 14:46:56 +0800 Subject: [PATCH 081/257] develop: fix typo (#13883) --- develop/dev-guide-connection-parameters.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/develop/dev-guide-connection-parameters.md b/develop/dev-guide-connection-parameters.md index ef57465332a5..cdc2dae1f45c 100644 --- a/develop/dev-guide-connection-parameters.md +++ b/develop/dev-guide-connection-parameters.md @@ -13,7 +13,7 @@ aliases: ['/zh/tidb/dev/connection-parameters'] TiDB (MySQL) 连接建立是比较昂贵的操作(至少对于 OLTP 来讲),除了建立 TCP 连接外还需要进行连接鉴权操作,所以客户端通常会把 TiDB (MySQL) 连接保存到连接池中进行复用。 -Java 的连接池实现很多 ([HikariCP](https://github.com/brettwooldridge/HikariCP), [tomcat-jdbc](https://tomcat.apache.org/tomcat-10.1-doc/jdbc-pool.html), [durid](https://github.com/alibaba/druid), [c3p0](https://www.mchange.com/projects/c3p0/), [dbcp](https://commons.apache.org/proper/commons-dbcp/)),TiDB 不会限定使用的连接池,应用可以根据业务特点自行选择连接池实现。 +Java 的连接池实现很多 ([HikariCP](https://github.com/brettwooldridge/HikariCP), [tomcat-jdbc](https://tomcat.apache.org/tomcat-10.1-doc/jdbc-pool.html), [druid](https://github.com/alibaba/druid), [c3p0](https://www.mchange.com/projects/c3p0/), [dbcp](https://commons.apache.org/proper/commons-dbcp/)),TiDB 不会限定使用的连接池,应用可以根据业务特点自行选择连接池实现。 ### 连接数配置 From 2480820213eb30f5e59be7b2991314ae2991eac2 Mon Sep 17 00:00:00 2001 From: Grace Cai Date: Sat, 6 May 2023 14:52:57 +0800 Subject: [PATCH 082/257] Fix typos for LOAD (#13870) --- sql-statements/sql-statement-operate-load-data-job.md | 4 ++-- sql-statements/sql-statement-show-load-data.md | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/sql-statements/sql-statement-operate-load-data-job.md b/sql-statements/sql-statement-operate-load-data-job.md index d3d061586718..ef91b4567432 100644 --- a/sql-statements/sql-statement-operate-load-data-job.md +++ b/sql-statements/sql-statement-operate-load-data-job.md @@ -13,10 +13,10 @@ summary: TiDB 数据库中 CANCEL LOAD DATA 和 DROP LOAD DATA 的使用概况 ```ebnf+diagram CancelLoadDataJobsStmt ::= - 'CANCEL' 'LAOD' 'DATA' 'JOB' JobID + 'CANCEL' 'LOAD' 'DATA' 'JOB' JobID DropLoadDataJobsStmt ::= - 'DROP' 'LAOD' 'DATA' 'JOB' JobID + 'DROP' 'LOAD' 'DATA' 'JOB' JobID ``` ## 示例 diff --git a/sql-statements/sql-statement-show-load-data.md b/sql-statements/sql-statement-show-load-data.md index a11b6dc10a7e..9199e39d3bd2 100644 --- a/sql-statements/sql-statement-show-load-data.md +++ b/sql-statements/sql-statement-show-load-data.md @@ -11,10 +11,10 @@ summary: TiDB 数据库中 SHOW LOAD DATA 的使用概况。 ```ebnf+diagram ShowLoadDataJobsStmt ::= - 'SHOW' 'LAOD' 'DATA' 'JOBS' + 'SHOW' 'LOAD' 'DATA' 'JOBS' ShowLoadDataJobStmt ::= - 'SHOW' 'LAOD' 'DATA' 'JOB' JobID + 'SHOW' 'LOAD' 'DATA' 'JOB' JobID ``` `SHOW LOAD DATA` 语句显示的字段含义如下: From b76f64bf2d6590d99b971c920a00fd5f7163bdf1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=BA=8C=E6=89=8B=E6=8E=89=E5=8C=85=E5=B7=A5=E7=A8=8B?= =?UTF-8?q?=E5=B8=88?= Date: Mon, 8 May 2023 14:06:57 +0800 Subject: [PATCH 083/257] cdc: add some explanations about lossy DDL (#13869) --- releases/release-7.1.0.md | 4 ++++ ticdc/ticdc-faq.md | 13 +++++++++++++ 2 files changed, 17 insertions(+) diff --git a/releases/release-7.1.0.md b/releases/release-7.1.0.md index 66ec2a903ee0..76dbee97e4a2 100644 --- a/releases/release-7.1.0.md +++ b/releases/release-7.1.0.md @@ -263,6 +263,10 @@ TiDB 版本:7.1.0 (upcoming) - 提升 TiFlash 在存算分离架构下的性能和稳定性 [#6882](https://github.com/pingcap/tiflash/issues/6882) @[JaySon-Huang](https://github.com/JaySon-Huang) @[breezewish](https://github.com/breezewish) @[JinheLin](https://github.com/JinheLin) - 支持在 Semi Join 或 Anti Semi Join 中,通过选择较小的表作为 Build 端来优化查询性能 [#7280](https://github.com/pingcap/tiflash/issues/7280) @[yibin87](https://github.com/yibin87) ++ TiCDC + + - TiCDC 过滤了由有损 DDL 语句导致的数据变更,避免发送无效数据变更 [#43227](https://github.com/pingcap/tidb/issues/43227) @[hi-rustin](https://github.com/hi-rustin) + ## 贡献者 感谢来自 TiDB 社区的贡献者们: diff --git a/ticdc/ticdc-faq.md b/ticdc/ticdc-faq.md index 6c347d524ddf..62eeea40c2b0 100644 --- a/ticdc/ticdc-faq.md +++ b/ticdc/ticdc-faq.md @@ -202,6 +202,19 @@ TiCDC 对大事务(大小超过 5 GB)提供部分支持,根据场景不同 4. 建立一个新的 changefeed,从 `BackupTS` 开始同步任务。 5. 删除旧的 changefeed。 +## TiCDC 是否会将有损 DDL 产生的数据变更同步到下游? + +有损 DDL 是指在 TiDB 中执行可能会导致数据改变的 DDL。一些常见的有损 DDL 操作包括: + +- 修改列的类型,例如:INT -> VARCHAR +- 修改列的长度,例如:VARCHAR(20) -> VARCHAR(10) +- 修改列的精度,例如:DECIMAL(10, 3) -> DECIMAL(10, 2) +- 修改列的符号(有符号数/无符号数),例如:INT UNSIGNED -> INT SIGNED + +在 TiDB v7.1.0 之前,TiCDC 会将一条新旧数据相同的 DML 事件同步到下游。当下游是 MySQL 时,这些 DML 事件不会产生任何数据变更,只有下游接收并执行该 DDL 语句后,数据才会发生变更。但是当下游是 Kafka 或者云存储时,TiCDC 会写入一条无用的数据到下游。 + +从 TiDB v7.1.0 开始,TiCDC 会过滤掉这些无用的 DML 事件,不再将它们同步到下游。 + ## 同步 DDL 到下游 MySQL 5.7 时为什么时间类型字段默认值不一致? 比如上游 TiDB 的建表语句为 `create table test (id int primary key, ts timestamp)`,TiCDC 同步该语句到下游 MySQL 5.7,MySQL 使用默认配置,同步得到的表结构如下所示,timestamp 字段默认值会变成 `CURRENT_TIMESTAMP`: From 2a58f82ec58dfad893ea4b12b3d87ca46eceb433 Mon Sep 17 00:00:00 2001 From: Jianjun Liao <36503113+Leavrth@users.noreply.github.com> Date: Mon, 8 May 2023 14:18:58 +0800 Subject: [PATCH 084/257] br: change the permission for external storage when do restore (#13872) --- br/backup-and-restore-storages.md | 2 +- br/backup-and-restore-use-cases.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/br/backup-and-restore-storages.md b/br/backup-and-restore-storages.md index c822139a00b6..ec5fbf3c4f7b 100644 --- a/br/backup-and-restore-storages.md +++ b/br/backup-and-restore-storages.md @@ -149,7 +149,7 @@ BACKUP DATABASE * TO 's3://bucket-name/prefix' SEND_CREDENTIALS_TO_TIKV = FALSE; 在备份之前,需要为 br 命令行工具访问 Amazon S3 中的备份目录设置相应的访问权限: - 备份时 TiKV 和 br 命令行工具需要的访问备份数据目录的最小权限:`s3:ListBucket`、`s3:PutObject` 和 `s3:AbortMultipartUpload`。 -- 恢复时 TiKV 和 br 命令行工具需要的访问备份数据目录的最小权限:`s3:ListBucket` 和 `s3:GetObject`。 +- 恢复时 TiKV 和 br 命令行工具需要的访问备份数据目录的最小权限:`s3:ListBucket`、`s3:GetObject` 和 `s3:PutObject`。br 命令行工具会将断点信息写到备份数据目录下的 `./checkpoints` 子目录。在恢复日志备份数据时,br 命令行工具会将备份恢复集群的表 ID 映射关系写到备份数据目录下的 `./pitr_id_maps` 子目录。 如果你还没有创建备份数据保存目录,可以参考[创建存储桶](https://docs.aws.amazon.com/zh_cn/AmazonS3/latest/user-guide/create-bucket.html)在指定的区域中创建一个 S3 存储桶。如果需要使用文件夹,可以参考[使用文件夹在 Amazon S3 控制台中组织对象](https://docs.aws.amazon.com/zh_cn/AmazonS3/latest/user-guide/create-folder.html)在存储桶中创建一个文件夹。 diff --git a/br/backup-and-restore-use-cases.md b/br/backup-and-restore-use-cases.md index b6410536f4d0..444fc3beecf6 100644 --- a/br/backup-and-restore-use-cases.md +++ b/br/backup-and-restore-use-cases.md @@ -71,7 +71,7 @@ aliases: ['/docs-cn/dev/br/backup-and-restore-use-cases/','/docs-cn/dev/referenc 2. 配置 br 命令行工具和 TiKV 访问 S3 中的备份目录的权限。本文推荐使用最安全的 IAM 访问方式,配置过程可以参考[控制存储桶访问](https://docs.aws.amazon.com/zh_cn/AmazonS3/latest/userguide/walkthrough1.html)。权限要求如下: - 备份集群的 TiKV 和 br 命令行工具需要的 `s3://tidb-pitr-bucket/backup-data` 权限:`s3:ListBucket`、`s3:PutObject` 和 `s3:AbortMultipartUpload`。 - - 恢复集群的 TiKV 和 br 命令行工具需要 `s3://tidb-pitr-bucket/backup-data` 的最小权限:`s3:ListBucket` 和 `s3:GetObject`。 + - 恢复集群的 TiKV 和 br 命令行工具需要 `s3://tidb-pitr-bucket/backup-data` 的最小权限:`s3:ListBucket`、`s3:GetObject` 和 `s3:PutObject`。 3. 规划备份数据保存的目录结构,以及快照(全量)备份和日志备份的目录。 From bdf4920c99522b076a4ebf057491e266fbd55f6e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=BA=8C=E6=89=8B=E6=8E=89=E5=8C=85=E5=B7=A5=E7=A8=8B?= =?UTF-8?q?=E5=B8=88?= Date: Mon, 8 May 2023 15:54:57 +0800 Subject: [PATCH 085/257] ticdc: add docs for old value behavior (#13623) --- ticdc/ticdc-avro-protocol.md | 6 ++++ ticdc/ticdc-csv.md | 6 ++++ ticdc/ticdc-faq.md | 66 ++++++++++++++++++++++++++++++++++++ ticdc/ticdc-sink-to-kafka.md | 6 ++++ 4 files changed, 84 insertions(+) diff --git a/ticdc/ticdc-avro-protocol.md b/ticdc/ticdc-avro-protocol.md index 6c2be610a664..7a51be2af7b9 100644 --- a/ticdc/ticdc-avro-protocol.md +++ b/ticdc/ticdc-avro-protocol.md @@ -7,6 +7,12 @@ summary: 了解 TiCDC Avro Protocol 的概念和使用方法。 Avro 是由 [Apache Avro™](https://avro.apache.org/) 定义的一种数据交换格式协议,[Confluent Platform](https://docs.confluent.io/platform/current/platform.html) 选择它作为默认的数据交换格式。通过本文,你可以了解 TiCDC 对 Avro 数据格式的实现,包括 TiDB 扩展字段、Avro 数据格式定义,以及和 [Confluent Schema Registry](https://docs.confluent.io/platform/current/schema-registry/index.html) 的交互。 +> **警告:** +> +> 当开启 [Old Value 功能](/ticdc/ticdc-manage-changefeed.md#输出行变更的历史值-从-v405-版本开始引入)时 (`enable-old-value = true`),Avro 协议数据格式无法输出更新事件的旧值。 +> +> 具体原因请参考 [TiCDC 在开启 Old Value 功能后更新事件格式有何变化?](/ticdc/ticdc-faq.md#ticdc-在开启-old-value-功能后更新事件格式有何变化) + ## 使用 Avro 当使用 Message Queue (MQ) 作为下游 Sink 时,你可以在 `sink-uri` 中指定使用 Avro。TiCDC 获取 TiDB 的 DML 事件,并将这些事件封装到 Avro Message,然后发送到下游。当 Avro 检测到 schema 变化时,会向 Schema Registry 注册最新的 schema。 diff --git a/ticdc/ticdc-csv.md b/ticdc/ticdc-csv.md index e01a7247269c..9e99807b5500 100644 --- a/ticdc/ticdc-csv.md +++ b/ticdc/ticdc-csv.md @@ -7,6 +7,12 @@ summary: 了解 TiCDC CSV Protocol 的概念和使用方法。 当使用云存储服务作为下游 sink 时,你可以使用 CSV 格式将 DML 事件发送到下游云存储服务。 +> **警告:** +> +> 当开启 [Old Value 功能](/ticdc/ticdc-manage-changefeed.md#输出行变更的历史值-从-v405-版本开始引入)时 (`enable-old-value = true`),CSV 协议数据格式无法输出更新事件的旧值。 +> +> 具体原因请参考 [TiCDC 在开启 Old Value 功能后更新事件格式有何变化?](/ticdc/ticdc-faq.md#ticdc-在开启-old-value-功能后更新事件格式有何变化) + ## 使用 CSV 使用 CSV 时的配置样例如下所示: diff --git a/ticdc/ticdc-faq.md b/ticdc/ticdc-faq.md index 62eeea40c2b0..f3591c0a31df 100644 --- a/ticdc/ticdc-faq.md +++ b/ticdc/ticdc-faq.md @@ -288,3 +288,69 @@ TiCDC 需要磁盘是为了缓冲上游写入高峰时下游消费不及时堆 ## 上游有运行时间比较长的未提交事务,TiCDC 同步是否会被卡住? TiDB 有事务超时的机制,当事务运行超过 [`max-txn-ttl`](/tidb-configuration-file.md#max-txn-ttl) 后,会被 TiDB 强制回滚。TiCDC 遇到未提交的事务,会等待其提交后再继续同步其数据,因此会出现同步延迟。 + +## TiCDC 在开启 Old Value 功能后更新事件格式有何变化? + +在下面的说明中,有效索引的定义如下: + +- 主键 (`PRIMARY KEY`) 为有效索引。 +- 唯一索引 (`UNIQUE INDEX`) 中每一列在表结构中明确定义非空 (`NOT NULL`) 且不存在虚拟生成列 (`VIRTUAL GENERATED COLUMNS`)。 + +聚簇索引指的是 TiDB 从 v5.0 开始支持的特性,用于控制含有主键的表数据的存储方式。详见[聚簇索引](/clustered-indexes.md)。 + +在开启 [Old Value 功能](/ticdc/ticdc-manage-changefeed.md#输出行变更的历史值-从-v405-版本开始引入)后,TiCDC 的表现如下: + +- 对于非有效索引列的更新事件,输出的数据中会同时包含新值和旧值。 +- 对于有效索引列的更新事件,输出的数据视不同情况而定: + - 更新唯一索引列 (`UNIQUE INDEX`),并且该表不存在主键时,输出的数据中会同时包含新值和旧值。 + - 当上游 TiDB 集群未开启聚簇索引,更新非 INT 类型的主键列时,输出的数据中会同时包含新值和旧值。 + - 在其他情况下,更新事件会被拆分为对旧数据的删除事件和对新数据的插入事件。 + +以上行为的变化可能导致以下问题: + +### 当更新有效索引列的事件同时包含新值和旧值时,Kafka Sink 的分发行为可能无法保证将具有相同索引列的更新事件分发到同一分区 + +Kafka Sink 的 index-value 分发行为是根据索引列的值来分发的。当更新事件同时包含新值和旧值时,索引列的值会发生变化,从而导致相同索引列的更新事件被分发到不同的分区。下面是一个示例: + +在关闭 TiDB 聚簇索引功能时,创建表 `t`: + +```sql +CREATE TABLE t (a VARCHAR(255) PRIMARY KEY NONCLUSTERED); +``` + +执行如下 DML 语句: + +```sql +INSERT INTO t VALUES ("2"); +UPDATE t SET a="1" WHERE a="2"; +INSERT INTO t VALUES ("2"); +UPDATE t SET a="3" WHERE a="2"; +``` + +- 在未开启 Old Value 功能时,更新事件被拆分为删除旧值事件和插入新值事件。Kafka Sink 的 index-value 分发模式针对每个事件计算相应的分区。上述 DML 产生的事件会被发送到如下分区: + + | partition-1 | partition-2 | partition-3 | + | ------------ | ------------ | ------------ | + | INSERT a = 2 | INSERT a = 1 | INSERT a = 3 | + | DELETE a = 2 | | | + | INSERT a = 2 | | | + | DELETE a = 2 | | | + + 因为 Kafka 的每个分区内可以保证消息的顺序,Kafka 消费者可以独立地消费每个分区中的数据,最终结果和 DML 执行顺序相同。 + +- 在开启 Old Value 功能时,Kafka Sink 的 index-value 分发模式会将相同索引列的更新事件分发到不同的分区。因此上述 DML 会被分发到如下分区(更新事件同时包含新值和旧值): + + | partition-1 | partition-2 | partition-3 | + | ------------ | ------------------------ | ------------------------ | + | INSERT a = 2 | UPDATE a = 1 WHERE a = 2 | UPDATE a = 3 WHERE a = 2 | + | INSERT a = 2 | | | + + 因为 Kafka 的各个分区之间不能保证消息的顺序,因此上述 DML 在消费过程中可能无法保证索引列的更新顺序。如果需要在输出的数据中会同时包含新值和旧值时保证索引列的更新顺序,建议在开启 Old Value 功能时,使用 default 分发模式。 + +### 对于非有效索引列的更新事件和有效索引列的更新事件同时包含新值和旧值时,Kafka Sink 的 Avro 格式无法正确输出旧值 + +在 Avro 实现中,Kafka 消息的 Value 格式只包含当前列值,因此当一个事件既有新值也有旧值时,无法正确输出旧值。如果需要输出旧值,建议关闭 Old Value 功能以获取拆分后的删除和插入事件。 + +### 对于非有效索引列的更新事件和有效索引列的更新事件同时包含新值和旧值时,Cloud Storage Sink 的 CSV 格式无法正确输出旧值 + +因为 CSV 文件的列数是固定的,当一个事件既有新值也有旧值时,无法正确输出旧值。如果需要输出旧值,建议使用 Canal-JSON 格式。 diff --git a/ticdc/ticdc-sink-to-kafka.md b/ticdc/ticdc-sink-to-kafka.md index 7314e738a886..cd1061416873 100644 --- a/ticdc/ticdc-sink-to-kafka.md +++ b/ticdc/ticdc-sink-to-kafka.md @@ -236,6 +236,12 @@ partition 分发器用 partition = "xxx" 来指定,支持 default、ts、index > {matcher = ['*.*'], dispatcher = "ts", partition = "table"}, > ``` +> **警告:** +> +> 当开启 [Old Value 功能](/ticdc/ticdc-manage-changefeed.md#输出行变更的历史值-从-v405-版本开始引入)时 (`enable-old-value = true`),使用 index-value 分发器可能导致无法确保相同索引值的行变更顺序。因此,建议使用 default 分发器。 +> +> 具体原因请参考 [TiCDC 在开启 Old Value 功能后更新事件格式有何变化?](/ticdc/ticdc-faq.md#ticdc-在开启-old-value-功能后更新事件格式有何变化) + ## 横向扩展大单表的负载到多个 TiCDC 节点 该功能通过将大单表按 Region 个数切分成多个数据范围,将这些数据范围分布到多个 TiCDC 节点上,使得多个 TiCDC 节点可以同时同步大单表。该功能可以解决以下两个问题: From f3e080fa3b19858778a3bf4930c621ab5725ab57 Mon Sep 17 00:00:00 2001 From: dbsid Date: Tue, 9 May 2023 15:18:57 +0800 Subject: [PATCH 086/257] add the doc for cache-prep-stmt (#13498) --- ticdc/ticdc-sink-to-mysql.md | 1 + 1 file changed, 1 insertion(+) diff --git a/ticdc/ticdc-sink-to-mysql.md b/ticdc/ticdc-sink-to-mysql.md index 72ea3742e686..b625fddf39e7 100644 --- a/ticdc/ticdc-sink-to-mysql.md +++ b/ticdc/ticdc-sink-to-mysql.md @@ -58,6 +58,7 @@ URI 中可配置的参数如下: | `127.0.0.1` | 下游数据库的 IP。 | | `3306` | 下游数据的连接端口。 | | `worker-count` | 向下游执行 SQL 的并发度(可选,默认值为 `16`)。 | +| `cache-prep-stmts` | 向下游执行 SQL 时是否使用 prepared statement 并且开启客户端的 prepared statement 缓存(可选,默认值为 `true`)。 | | `max-txn-row` | 向下游执行 SQL 的 batch 大小(可选,默认值为 `256`)。 | | `ssl-ca` | 连接下游 MySQL 实例所需的 CA 证书文件路径(可选)。 | | `ssl-cert` | 连接下游 MySQL 实例所需的证书文件路径(可选)。 | From 77f040c9cff5c379224e2d126f3596ec0f432d8d Mon Sep 17 00:00:00 2001 From: Yiding Cui Date: Tue, 9 May 2023 18:02:58 +0800 Subject: [PATCH 087/257] statistics: refine format (#7392) --- statistics.md | 50 ++++++++++++++++++++++++++------------------------ 1 file changed, 26 insertions(+), 24 deletions(-) diff --git a/statistics.md b/statistics.md index e51b3348d0f3..8c3dbb1adf79 100644 --- a/statistics.md +++ b/statistics.md @@ -5,30 +5,13 @@ aliases: ['/docs-cn/dev/statistics/','/docs-cn/dev/reference/performance/statist # 统计信息简介 -TiDB 使用统计信息来决定[索引的选择](/choose-index.md)。变量 `tidb_analyze_version` 用于控制所收集到的统计信息。目前 TiDB 中支持两种统计信息:`tidb_analyze_version = 1` 以及 `tidb_analyze_version = 2`。在 v5.3.0 及之后的版本中,该变量的默认值为 `2`。如果从 v5.3.0 之前版本的集群升级至 v5.3.0 及之后的版本,`tidb_analyze_version` 的默认值不发生变化。 +TiDB 使用统计信息来决定[索引的选择](/choose-index.md)。 -> **注意:** -> -> 当 `tidb_analyze_version = 2` 时,如果执行 ANALYZE 语句后发生 OOM,请设置全局变量 `tidb_analyze_version = 1`,然后进行以下操作之一: -> -> - 如果 ANALYZE 语句是手动执行的,请手动 analyze 每张需要的表: -> -> ```sql -> SELECT DISTINCT(CONCAT('ANALYZE TABLE ', table_schema, '.', table_name, ';')) FROM information_schema.tables, mysql.stats_histograms WHERE stats_ver = 2 AND table_id = tidb_table_id; -> ``` -> -> - 如果 ANALYZE 语句是开启了自动 analyze 后 TiDB 自动执行的,请使用以下 SQL 语句生成 DROP STATS 的语句并执行: -> -> ```sql -> SELECT DISTINCT(CONCAT('DROP STATS ', table_schema, '.', table_name, ';')) FROM information_schema.tables, mysql.stats_histograms WHERE stats_ver = 2 AND table_id = tidb_table_id; -> ``` -> -> - 如果上一条语句返回结果太长,不方便拷贝粘贴,可以将结果导出到临时文件后,再执行: -> -> ```sql -> select distinct... into outfile '/tmp/sql.txt'; -> mysql -h XXX -u user -P 4000 ... < '/tmp/sql.txt'; -> ``` +## 统计信息版本 + +变量 `tidb_analyze_version` 用于控制所收集到的统计信息。目前 TiDB 中支持两种统计信息:`tidb_analyze_version = 1` 以及 `tidb_analyze_version = 2`。在 v5.3.0 及之后的版本中,该变量的默认值为 `2`。如果从 v5.3.0 之前版本的集群升级至 v5.3.0 及之后的版本,`tidb_analyze_version` 的默认值不发生变化。 + +Version 2 的统计信息避免了 Version 1 中因为哈希冲突导致的在较大的数据量中可能产生的较大误差,并保持了大多数场景中的估算精度。 两种版本中,TiDB 维护的统计信息如下: @@ -46,7 +29,26 @@ TiDB 使用统计信息来决定[索引的选择](/choose-index.md)。变量 `ti | 列的平均长度 | √ | √ | | 索引的平均长度 | √ | √ | -Version 2 的统计信息避免了 Version 1 中因为哈希冲突导致的在较大的数据量中可能产生的较大误差,并保持了大多数场景中的估算精度。 +当 `tidb_analyze_version = 2` 时,如果执行 ANALYZE 语句后发生 OOM,需要设置全局变量 `tidb_analyze_version = 1`,回退到 Version 1,然后根据情况进行以下操作: + +- 如果 ANALYZE 语句是手动执行的,你需要手动 ANALYZE 每张需要的表: + + ```sql + SELECT DISTINCT(CONCAT('ANALYZE TABLE ', table_schema, '.', table_name, ';')) FROM information_schema.tables, mysql.stats_histograms WHERE stats_ver = 2 AND table_id = tidb_table_id; + ``` + +- 如果 ANALYZE 语句是开启了自动 ANALYZE 后 TiDB 自动执行的,使用以下 SQL 语句生成 DROP STATS 的语句并执行: + + ```sql + SELECT DISTINCT(CONCAT('DROP STATS ', table_schema, '.', table_name, ';')) FROM information_schema.tables, mysql.stats_histograms WHERE stats_ver = 2 AND table_id = tidb_table_id; + ``` + +- 如果上一条语句返回结果太长,不方便复制粘贴,可以将结果导出到临时文件后,再执行: + + ```sql + SELECT DISTINCT... INTO outfile '/tmp/sql.txt'; + mysql -h ${TiDB_IP} -u user -P ${TIDB_PORT} ... < '/tmp/sql.txt'; + ``` 本文接下来将简单介绍其中出现的直方图和 Count-Min Sketch 以及 Top-N 这些数据结构,以及详细介绍统计信息的收集和维护。 From 6f550abd7c32b2a7beeff284eb37ed7243ac9530 Mon Sep 17 00:00:00 2001 From: Ran Date: Tue, 9 May 2023 22:07:01 +0800 Subject: [PATCH 088/257] tiup: optimize patch preparation steps (#13884) * optimize steps Signed-off-by: Ran * Update tiup/tiup-component-cluster-patch.md Co-authored-by: Aolin --------- Signed-off-by: Ran Co-authored-by: Aolin --- tiup/tiup-component-cluster-patch.md | 53 +++++++++++++++++++++++----- 1 file changed, 44 insertions(+), 9 deletions(-) diff --git a/tiup/tiup-component-cluster-patch.md b/tiup/tiup-component-cluster-patch.md index 02d0f08e9cdd..22fde155ade3 100644 --- a/tiup/tiup-component-cluster-patch.md +++ b/tiup/tiup-component-cluster-patch.md @@ -19,15 +19,50 @@ tiup cluster patch [flags] ``` - `` 代表要操作的集群名 -- `` 为用于替换的二进制包,其打包方式如下: - - 确定当前要替换的组件名称 `${component}` (tidb, tikv, pd...) 以及其版本 `${version}` (v4.0.0, v4.0.1 ...),以及其运行的平台 `${os}` (linux) 和 `${arch}` (amd64, arm64) - - 下载当前的组件包:`wget https://tiup-mirrors.pingcap.com/${component}-${version}-${os}-${arch}.tar.gz -O /tmp/${component}-${version}-${os}-${arch}.tar.gz` - - 建立临时打包目录:`mkdir -p /tmp/package && cd /tmp/package` - - 解压原来的二进制包:`tar xf /tmp/${component}-${version}-${os}-${arch}.tar.gz` - - 查看临时打包目录中的文件结构:`find .` - - 将要替换的二进制文件或配置文件复制到临时目录的对应位置 - - 重新打包 `tar czf /tmp/${component}-hotfix-${os}-${arch}.tar.gz *` - - 通过以上步骤之后,`/tmp/${component}-hotfix-${os}-${arch}.tar.gz` 就可以用于 patch 命令了 +- `` 为用于替换的二进制包路径 + +### 准备二进制包 + +在运行 `tiup cluster patch` 命令之前,你需要打包所需的二进制文件。请按照以下步骤操作: + +1. 确定以下变量的值: + + - `${component}`:需要替换的组件名(例如 `tidb`、`tikv`、`pd`)。 + - `${version}`:组件的版本(例如 `v7.0.0`、`v6.5.1`)。 + - `${os}`:操作系统 (`linux`)。 + - `${arch}`:组件运行的平台 (`amd64`、`arm64`)。 +2. 下载当前的组件包: + + ```shell + wget https://tiup-mirrors.pingcap.com/${component}-${version}-${os}-${arch}.tar.gz -O /tmp/${component}-${version}-${os}-${arch}.tar.gz + ``` + +3. 创建临时打包目录: + + ```shell + mkdir -p /tmp/package && cd /tmp/package + ``` + +4. 解压原来的二进制包: + + ```shell + tar xf /tmp/${component}-${version}-${os}-${arch}.tar.gz + ``` + +5. 查看临时打包目录中的文件结构: + + ```shell + find . + ``` + +6. 将要替换的二进制文件或配置文件复制到临时目录的对应位置。 +7. 将临时目录中的所有文件打包: + + ```shell + tar czf /tmp/${component}-hotfix-${os}-${arch}.tar.gz * + ``` + +完成上述步骤后,你可以在 `tiup cluster patch` 命令中使用 `/tmp/${component}-hotfix-${os}-${arch}.tar.gz` 作为 ``。 ## 选项 From 85eb4e0a2c2da2f724bcd2021bb721db830350cf Mon Sep 17 00:00:00 2001 From: Aolin Date: Wed, 10 May 2023 13:42:08 +0800 Subject: [PATCH 089/257] foreign-key: add note about inline references (#13891) --- foreign-key.md | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/foreign-key.md b/foreign-key.md index dd50c71029bc..5e29eaf99689 100644 --- a/foreign-key.md +++ b/foreign-key.md @@ -312,3 +312,31 @@ Create Table | CREATE TABLE `child` ( ### 与 MySQL 的兼容性 创建外键未指定名称时,TiDB 自动生成的外键名称和 MySQL 不一样。例如 TiDB 生成的外键名称为 `fk_1`、`fk_2`、`fk_3` 等,MySQL 生成的外键名称为 `table_name_ibfk_1`、 `table_name_ibfk_2`、`table_name_ibfk_3` 等。 + +MySQL 和 TiDB 均能解析但会忽略以内联 `REFERENCES` 的方式定义的外键。只有当 `REFERENCES` 作为 `FOREIGN KEY` 定义的一部分时,才会进行检查和执行。下面的示例在定义外键约束时只使用了 `REFERENCES`: + +```sql +CREATE TABLE parent ( + id INT KEY +); + +CREATE TABLE child ( + id INT, + pid INT REFERENCES parent(id) +); + +SHOW CREATE TABLE child; +``` + +输出结果显示 `child` 表不包含任何外键: + +```sql ++-------+-------------------------------------------------------------+ +| Table | Create Table | ++-------+-------------------------------------------------------------+ +| child | CREATE TABLE `child` ( | +| | `id` int(11) DEFAULT NULL, | +| | `pid` int(11) DEFAULT NULL | +| | ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin | ++-------+-------------------------------------------------------------+ +``` From c920d1f8e1f4c631c550141e321d665987e4d9fe Mon Sep 17 00:00:00 2001 From: Aolin Date: Wed, 10 May 2023 13:52:07 +0800 Subject: [PATCH 090/257] tidb config: add description about proxy protocol (#13893) --- command-line-flags-for-tidb-configuration.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/command-line-flags-for-tidb-configuration.md b/command-line-flags-for-tidb-configuration.md index de017f56917c..723073c35139 100644 --- a/command-line-flags-for-tidb-configuration.md +++ b/command-line-flags-for-tidb-configuration.md @@ -120,11 +120,11 @@ aliases: ['/docs-cn/dev/command-line-flags-for-tidb-configuration/','/docs-cn/de + 允许使用 [PROXY 协议](https://www.haproxy.org/download/1.8/doc/proxy-protocol.txt)连接 TiDB 的代理服务器地址列表。 + 默认:"" + 通常情况下,通过反向代理使用 TiDB 时,TiDB 会将反向代理服务器的 IP 地址视为客户端 IP 地址。对于支持 [PROXY 协议](https://www.haproxy.org/download/1.8/doc/proxy-protocol.txt)的反向代理(如 HAProxy),开启 PROXY 协议后能让反向代理透传客户端真实的 IP 地址给 TiDB。 -+ 配置该参数后,TiDB 将允许配置的源 IP 地址使用 PROXY 协议连接到 TiDB,且拒绝这些源 IP 地址使用非 PROXY 协议连接。若该参数为空,则任何源 IP 地址都不能使用 PROXY 协议连接到 TiDB。地址可以使用 IP 地址格式 (192.168.1.50) 或者 CIDR 格式 (192.168.1.0/24),并可用 `,` 分隔多个地址,或用 `*` 代表所有 IP 地址。 ++ 配置该参数后,TiDB 将允许配置的源 IP 地址使用 PROXY 协议连接到 TiDB,且拒绝这些源 IP 地址使用非 PROXY 协议连接。其他地址可以使用非 PROXY 协议连接到 TiDB。若该参数为空,则任何源 IP 地址都不能使用 PROXY 协议连接到 TiDB。地址可以使用 IP 地址格式 (192.168.1.50) 或者 CIDR 格式 (192.168.1.0/24),并可用 `,` 分隔多个地址,或用 `*` 代表所有 IP 地址。 > **警告:** > -> 需谨慎使用 `*` 符号,因为它可能引入安全风险,允许来自任何 IP 的客户端自行汇报其 IP 地址。另外,它可能会导致部分直接连接 TiDB 的内部组件无法使用,例如 TiDB Dashboard。 +> 需谨慎使用 `*` 符号,因为它可能引入安全风险,允许来自任何 IP 的客户端自行汇报其 IP 地址。另外,当 [`--proxy-protocol-fallbackable`](#--proxy-protocol-fallbackable) 设置为 `true` 以外的值时,使用 `*` 可能会导致部分直接连接 TiDB 的内部组件无法使用,例如 TiDB Dashboard。 > **注意:** > From ef88c916be4f68a1fe7bce257dda9bd5ef912f5f Mon Sep 17 00:00:00 2001 From: Yifan Xu <30385241+xuyifangreeneyes@users.noreply.github.com> Date: Wed, 10 May 2023 14:48:08 +0800 Subject: [PATCH 091/257] update description about compatible-kill-query configuration (#13653) --- tidb-configuration-file.md | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/tidb-configuration-file.md b/tidb-configuration-file.md index 1f36a5df908e..c2356ddfcb31 100644 --- a/tidb-configuration-file.md +++ b/tidb-configuration-file.md @@ -83,8 +83,12 @@ TiDB 配置文件比命令行参数支持更多的选项。你可以在 [config/ + 设置 `KILL` 语句的兼容性。 + 默认值:false -+ TiDB 中 `KILL xxx` 的行为和 MySQL 中的行为不相同。为杀死一条查询,在 TiDB 里需要加上 `TIDB` 关键词,即 `KILL TIDB xxx`。但如果把 `compatible-kill-query` 设置为 true,则不需要加上 `TIDB` 关键词。 -+ 这种区别很重要,因为当用户按下 Ctrl+C 时,MySQL 命令行客户端的默认行为是:创建与后台的新连接,并在该新连接中执行 `KILL` 语句。如果负载均衡器或代理已将该新连接发送到与原始会话不同的 TiDB 服务器实例,则该错误会话可能被终止,从而导致使用 TiDB 集群的业务中断。只有当您确定在 `KILL` 语句中引用的连接正好位于 `KILL` 语句发送到的服务器上时,才可以启用 `compatible-kill-query`。 ++ `compatible-kill-query` 仅在 [`enable-global-kill`](#enable-global-kill-从-v610-版本开始引入) 为 `false` 时生效。 ++ 当 [`enable-global-kill`](#enable-global-kill-从-v610-版本开始引入) 为 `false` 时,`compatible-kill-query` 控制杀死一条查询时是否需要加上 `TIDB` 关键词。 + - `compatible-kill-query` 为 `false` 时,TiDB 中 `KILL xxx` 的行为和 MySQL 中的行为不同。为杀死一条查询,在 TiDB 中需要加上 `TIDB` 关键词,即 `KILL TIDB xxx`。 + - `compatible-kill-query` 为 `true` 时,为杀死一条查询,在 TiDB 中无需加上 `TIDB` 关键词。**强烈不建议**设置 `compatible-kill-query` 为 `true`,**除非**你确定客户端将始终连接到同一个 TiDB 节点。这是因为当你在默认的 MySQL 客户端按下 Control+C 时,客户端会开启一个新连接,并在这个新连接中执行 `KILL` 语句。此时,如果客户端和 TiDB 之间存在代理,新连接可能会被路由到其他 TiDB 节点,从而错误地终止其他会话。 ++ 当 [`enable-global-kill`](#enable-global-kill-从-v610-版本开始引入) 为 `true` 时,`KILL xxx` 和 `KILL TIDB xxx` 的作用相同,但是暂不支持 Control+C 终止查询。 ++ 关于 `KILL` 语句的更多信息,请参考 [KILL [TIDB]](/sql-statements/sql-statement-kill.md)。 ### `check-mb4-value-in-utf8` From 745e69597ab18f719e21ed7c60554c8a05d23b25 Mon Sep 17 00:00:00 2001 From: Ran Date: Wed, 10 May 2023 19:08:08 +0800 Subject: [PATCH 092/257] limit trigger branches to release branch (#13922) --- .github/workflows/dispatch.yml | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/.github/workflows/dispatch.yml b/.github/workflows/dispatch.yml index e19a11e87a1b..fbe9a446d817 100644 --- a/.github/workflows/dispatch.yml +++ b/.github/workflows/dispatch.yml @@ -6,7 +6,17 @@ on: - ".github/**" branches: - master - - release-* + - release-7.0 + - release-6.6 + - release-6.5 + - release-6.1 + - release-5.4 + - release-5.3 + - release-5.2 + - release-5.1 + - release-5.0 + - release-4.0 + - release-3.0 jobs: trigger: From 6a4b0382941815a8a8bf2dc433fcdbd0cbd12f75 Mon Sep 17 00:00:00 2001 From: Aolin Date: Thu, 11 May 2023 10:21:21 +0800 Subject: [PATCH 093/257] tispark: remove the svg image (#13934) --- tispark-overview.md | 40 ++++++++++++++++++++-------------------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/tispark-overview.md b/tispark-overview.md index aef6b1c86401..0855b91e89f5 100644 --- a/tispark-overview.md +++ b/tispark-overview.md @@ -100,29 +100,29 @@ TiSpark 是 Spark 的第三方 jar 包,提供读写 TiKV 的能力。 你能用以下方式获取 jar 包: -- 从 [maven 中央仓库](https://search.maven.org/)获取,你可以搜索 [![Maven Search](https://img.shields.io/badge/com.pingcap/tispark-green.svg)](http://search.maven.org/#search%7Cga%7C1%7Cpingcap)。 +- 从 [maven 中央仓库](https://search.maven.org/)获取,你可以搜索 [`pingcap`](http://search.maven.org/#search%7Cga%7C1%7Cpingcap) 关键词。 - 从 [TiSpark releases](https://github.com/pingcap/tispark/releases) 获取。 - 通过以下步骤从源码构建: - 1. 下载 TiSpark 源码: - - ``` - git clone https://github.com/pingcap/tispark.git - cd tisapark - ``` - - 2. 在 TiSpark 根目录运行如下命令: - - ``` - // add -Dmaven.test.skip=true to skip the tests - mvn clean install -Dmaven.test.skip=true - // or you can add properties to specify spark version - mvn clean install -Dmaven.test.skip=true -Pspark3.2.1 - ``` - - > **注意:** - > - > 目前,你只能使用 java8 构架 TiSpark。运行 `mvn -version` 来检查 java 版本。 +1. 下载 TiSpark 源码: + + ``` + git clone https://github.com/pingcap/tispark.git + cd tisapark + ``` + +2. 在 TiSpark 根目录运行如下命令: + + ``` + // add -Dmaven.test.skip=true to skip the tests + mvn clean install -Dmaven.test.skip=true + // or you can add properties to specify spark version + mvn clean install -Dmaven.test.skip=true -Pspark3.2.1 + ``` + +> **注意:** +> +> 目前,你只能使用 java8 构架 TiSpark。运行 `mvn -version` 来检查 java 版本。 ### TiSpark jar 包的 artifact ID From e42bb7fd763b2630b4bcd0f4dab69d5d94d65cb8 Mon Sep 17 00:00:00 2001 From: Aolin Date: Thu, 11 May 2023 10:39:21 +0800 Subject: [PATCH 094/257] Describe auto_id_cache = 0 behavior and add link how to address TiKV_pending_task alert (#13892) --- alert-rules.md | 2 +- auto-increment.md | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/alert-rules.md b/alert-rules.md index 205d13a2bf48..f0dd92e8a248 100644 --- a/alert-rules.md +++ b/alert-rules.md @@ -752,7 +752,7 @@ aliases: ['/docs-cn/dev/alert-rules/','/docs-cn/dev/reference/alert-rules/'] * 处理方法: - 查看是哪一类任务的值偏高,通常 Coprocessor、apply worker 这类任务都可以在其他指标里找到解决办法。 + 观察 [**TiKV-Details** > **Task** 面板](/grafana-tikv-dashboard.md#task),查看是哪一类任务的 `Worker pending tasks` 值偏高。 #### `TiKV_low_space` diff --git a/auto-increment.md b/auto-increment.md index b172b7e7ab39..1bcaba9f6d78 100644 --- a/auto-increment.md +++ b/auto-increment.md @@ -344,6 +344,7 @@ CREATE TABLE t(a int AUTO_INCREMENT key) AUTO_ID_CACHE 1; > > - 对于 TiDB v6.4.0 之前的版本,由于每次分配 ID 都需要通过一个 TiKV 事务完成 `AUTO_INCREMENT` 值的持久化修改,因此设置 `AUTO_ID_CACHE` 为 `1` 会出现性能下降。 > - 对于 v6.4.0 及以上版本,由于引入了中心化的分配服务,`AUTO_INCREMENT` 值的修改只是在 TiDB 服务进程中的一个内存操作,相较于之前版本更快。 +> - 将 `AUTO_ID_CACHE` 设置为 `1` 表示 TiDB 使用默认的缓存大小 `30000`。 使用 MySQL 兼容模式后,能保证 ID **唯一**、**单调递增**,行为几乎跟 MySQL 完全一致。即使跨 TiDB 实例访问,ID 也不会出现回退。只有当中心化服务的“主” TiDB 实例异常崩溃时,才有可能造成少量 ID 不连续。这是因为主备切换时,“备” 节点需要丢弃一部分之前的“主” 节点可能已经分配的 ID,以保证 ID 不出现重复。 From 0c343191db1fab46ab45eb6034cf7f9a32c1fede Mon Sep 17 00:00:00 2001 From: Ran Date: Thu, 11 May 2023 17:40:11 +0800 Subject: [PATCH 095/257] update links; clarify dumpling auto gc setting (#13898) * update links; clarify dumpling auto gc Signed-off-by: Ran * fix glossary heading Signed-off-by: Ran * Update dumpling-overview.md Co-authored-by: Aolin --------- Signed-off-by: Ran Co-authored-by: Aolin --- dumpling-overview.md | 28 ++++++++++++++++++++-------- glossary.md | 2 +- tidb-troubleshooting-map.md | 2 +- 3 files changed, 22 insertions(+), 10 deletions(-) diff --git a/dumpling-overview.md b/dumpling-overview.md index 5cc028dc5afc..70d96534e6dd 100644 --- a/dumpling-overview.md +++ b/dumpling-overview.md @@ -6,7 +6,7 @@ aliases: ['/docs-cn/dev/dumpling-overview/','/docs-cn/dev/mydumper-overview/','/ # 使用 Dumpling 导出数据 -使用数据导出工具 [Dumpling](https://github.com/pingcap/dumpling),你可以把存储在 TiDB 或 MySQL 中的数据导出为 SQL 或 CSV 格式,用于逻辑全量备份。Dumpling 也支持将数据导出到 Amazon S3 中。 +使用数据导出工具 [Dumpling](https://github.com/pingcap/tidb/tree/master/dumpling),你可以把存储在 TiDB 或 MySQL 中的数据导出为 SQL 或 CSV 格式,用于逻辑全量备份。Dumpling 也支持将数据导出到 Amazon S3 中。 要快速了解 Dumpling 的基本功能,建议先观看下面的培训视频(时长 28 分钟)。注意本视频只作为功能介绍、学习参考,具体操作步骤和最新功能,请以文档内容为准。 @@ -38,10 +38,19 @@ TiDB 还提供了其他工具,你可以根据需要选择使用: - 支持导出到 Amazon S3 云盘。 - 针对 TiDB 进行了更多优化: - 支持配置 TiDB 单条 SQL 内存限制。 - - 针对 TiDB v4.0.0 及更新版本支持自动调整 TiDB GC 时间。 + - 针对 TiDB v4.0.0 及更新版本,如果 Dumpling 能够直接连接到 PD,则支持自动调整 TiDB GC 时间。 - 使用 TiDB 的隐藏列 `_tidb_rowid` 优化了单表内数据的并发导出性能。 - 对于 TiDB 可以设置 [tidb_snapshot](/read-historical-data.md#操作流程) 的值指定备份数据的时间点,从而保证备份的一致性,而不是通过 `FLUSH TABLES WITH READ LOCK` 来保证备份一致性。 +> **注意:** +> +> 在以下情况下,Dumpling 无法连接到 PD: +> +> - TiDB 集群正在 Kubernetes 上运行(Dumpling 本身在 Kubernetes 环境中运行时除外)。 +> - TiDB 集群正在 TiDB Cloud 上运行。 +> +> 在这种情况下,你需要手动[调整 TiDB GC 时间](#手动设置-tidb-gc-时间),以避免导出失败。 + ## 从 TiDB/MySQL 导出数据 ### 需要的权限 @@ -291,21 +300,24 @@ Dumpling 导出 TiDB 较大单表(超过 1 TB)时,可能会因为导出数 + 调小 `--tidb-mem-quota-query` 参数到 `8589934592` (8GB) 或更小。可控制 TiDB 单条查询语句的内存使用。 + 调整 `--params "tidb_distsql_scan_concurrency=5"` 参数,即设置导出时的 session 变量 [`tidb_distsql_scan_concurrency`](/system-variables.md#tidb_distsql_scan_concurrency) 从而减少 TiDB scan 操作的并发度。 -### 导出大规模数据时的 TiDB GC 设置 +### 手动设置 TiDB GC 时间 如果导出的 TiDB 版本为 v4.0.0 或更新版本,并且 Dumpling 可以访问 TiDB 集群的 PD 地址,Dumpling 会自动配置延长 GC 时间且不会对原集群造成影响。 -其他情况下,假如导出的数据量非常大,可以提前调长 GC 时间,以避免因为导出过程中发生 GC 导致导出失败: +但是,在以下场景中,Dumpling 无法自动调整 GC 时间: + +- 数据量非常大(超过 1 TB)。 +- Dumpling 无法直接连接到 PD,例如 TiDB 集群运行在 TiDB Cloud 上,或者 TiDB 集群运行在 Kubernetes 上且与 Dumpling 分离。 -{{< copyable "sql" >}} +在这些场景中,你必须提前手动调长 GC 时间,以避免因为导出过程中发生 GC 导致导出失败。 + +使用以下 SQL 语句手动调整 GC 时间: ```sql SET GLOBAL tidb_gc_life_time = '720h'; ``` -操作结束之后,再恢复 GC 时间为默认值 `10m`: - -{{< copyable "sql" >}} +在 Dumpling 退出后,无论导出是否成功,都必须将 GC 时间恢复为其原始值(默认值为 `10m`)。 ```sql SET GLOBAL tidb_gc_life_time = '10m'; diff --git a/glossary.md b/glossary.md index 0503dbb62eee..9d83220d6cd1 100644 --- a/glossary.md +++ b/glossary.md @@ -127,7 +127,7 @@ Pending 和 Down 是 Peer 可能出现的两种特殊状态。其中 Pending 表 ## R -## Raft Engine +### Raft Engine 一种内置的持久化存储引擎,有着日志结构的设计,为 TiKV 提供 multi-Raft 日志存储。从 v5.4 起,TiDB 支持使用 Raft Engine 作为 TiKV 的日志存储引擎。详情参见 [Raft Engine](/tikv-configuration-file.md#raft-engine)。 diff --git a/tidb-troubleshooting-map.md b/tidb-troubleshooting-map.md index c453fd3e5877..45dd9777dce1 100644 --- a/tidb-troubleshooting-map.md +++ b/tidb-troubleshooting-map.md @@ -479,7 +479,7 @@ TiDB 支持完整的分布式事务,自 v3.0 版本起,提供乐观事务与 ### 6.3 TiDB Lightning 问题 -- 6.3.1 TiDB Lightning 是快速的全量数据导入工具,见 [TiDB Lightning on GitHub](https://github.com/pingcap/tidb-lightning)。 +- 6.3.1 TiDB Lightning 是快速的全量数据导入工具,见 [TiDB Lightning on GitHub](https://github.com/pingcap/tidb/tree/master/br/pkg/lightning)。 - 6.3.2 导入速度太慢。 From 73ed67f61fc4d628e29d18c45e7a298f32c7cca8 Mon Sep 17 00:00:00 2001 From: dongmen <20351731+asddongmen@users.noreply.github.com> Date: Fri, 12 May 2023 11:00:22 +0800 Subject: [PATCH 096/257] ticdc: Fix some ticdc docs master 6.5 (#13765) --- ticdc/ticdc-changefeed-config.md | 56 ++++++++++++++++---------------- 1 file changed, 28 insertions(+), 28 deletions(-) diff --git a/ticdc/ticdc-changefeed-config.md b/ticdc/ticdc-changefeed-config.md index d33347f998e8..f140ad9cad85 100644 --- a/ticdc/ticdc-changefeed-config.md +++ b/ticdc/ticdc-changefeed-config.md @@ -70,24 +70,24 @@ enable-old-value = true # 过滤规则语法:https://docs.pingcap.com/zh/tidb/stable/table-filter#表库过滤语法 rules = ['*.*', '!test.*'] -# 事件过滤器规则 -# 事件过滤器的详细配置规则在下方的 Event Filter 配置规则中描述 +# 事件过滤器规则 +# 事件过滤器的详细配置规则可参考:https://docs.pingcap.com/zh/tidb/stable/ticdc-filter # 第一个事件过滤器规则 -[[filter.event-filters]] -matcher = ["test.worker"] # matcher 是一个白名单,表示该过滤规则只应用于 test 库中的 worker 表 -ignore-event = ["insert"] # 过滤掉 insert 事件 -ignore-sql = ["^drop", "add column"] # 过滤掉以 "drop" 开头或者包含 "add column" 的 DDL -ignore-delete-value-expr = "name = 'john'" # 过滤掉包含 name = 'john' 条件的 delete DML -ignore-insert-value-expr = "id >= 100" # 过滤掉包含 id >= 100 条件的 insert DML -ignore-update-old-value-expr = "age < 18" # 过滤掉旧值 age < 18 的 update DML -ignore-update-new-value-expr = "gender = 'male'" # 过滤掉新值 gender = 'male' 的 update DML +# [[filter.event-filters]] +# matcher = ["test.worker"] # matcher 是一个白名单,表示该过滤规则只应用于 test 库中的 worker 表 +# ignore-event = ["insert"] # 过滤掉 insert 事件 +# ignore-sql = ["^drop", "add column"] # 过滤掉以 "drop" 开头或者包含 "add column" 的 DDL +# ignore-delete-value-expr = "name = 'john'" # 过滤掉包含 name = 'john' 条件的 delete DML +# ignore-insert-value-expr = "id >= 100" # 过滤掉包含 id >= 100 条件的 insert DML +# ignore-update-old-value-expr = "age < 18" # 过滤掉旧值 age < 18 的 update DML +# ignore-update-new-value-expr = "gender = 'male'" # 过滤掉新值 gender = 'male' 的 update DML # 第二个事件过滤器规则 -[[filter.event-filters]] -matcher = ["test.fruit"] # 该事件过滤器只应用于 test.fruit 表 -ignore-event = ["drop table"] # 忽略 drop table 事件 -ignore-sql = ["delete"] # 忽略 delete DML -ignore-insert-value-expr = "price > 1000 and origin = 'no where'" # 忽略包含 price > 1000 和 origin = 'no where' 条件的 insert DML +# [[filter.event-filters]] +# matcher = ["test.fruit"] # 该事件过滤器只应用于 test.fruit 表 +# ignore-event = ["drop table", "delete"] # 忽略 drop table 的 DDL 事件和 delete 类型的 DML 事件 +# ignore-sql = ["^drop table", "alter table"] # 忽略以 drop table 开头的,或者包含 alter table 的 DDL 语句 +# ignore-insert-value-expr = "price > 1000 and origin = 'no where'" # 忽略包含 price > 1000 和 origin = 'no where' 条件的 insert DML [scheduler] # 将表按 Region 个数划分成多个同步范围,这些范围可由多个 TiCDC 节点同步。 @@ -101,34 +101,34 @@ region-threshold = 100000 # 对于 MQ 类的 Sink,可以通过 dispatchers 配置 event 分发器 # 支持 partition 及 topic(从 v6.1 开始支持)两种 event 分发器。二者的详细说明见下一节。 # matcher 的匹配语法和过滤器规则语法相同,matcher 匹配规则的详细说明见下一节。 -dispatchers = [ - {matcher = ['test1.*', 'test2.*'], topic = "Topic 表达式 1", partition = "ts" }, - {matcher = ['test3.*', 'test4.*'], topic = "Topic 表达式 2", partition = "index-value" }, - {matcher = ['test1.*', 'test5.*'], topic = "Topic 表达式 3", partition = "table"}, - {matcher = ['test6.*'], partition = "ts"} -] +# dispatchers = [ +# {matcher = ['test1.*', 'test2.*'], topic = "Topic 表达式 1", partition = "ts" }, +# {matcher = ['test3.*', 'test4.*'], topic = "Topic 表达式 2", partition = "index-value" }, +# {matcher = ['test1.*', 'test5.*'], topic = "Topic 表达式 3", partition = "table"}, +# {matcher = ['test6.*'], partition = "ts"} +# ] # protocol 用于指定传递到下游的协议格式 # 当下游类型是 Kafka 时,支持 canal-json、avro 两种协议。 # 当下游类型是存储服务时,目前仅支持 canal-json、csv 两种协议。 -protocol = "canal-json" +# protocol = "canal-json" # 以下三个配置项仅在同步到存储服务的 sink 中使用,在 MQ 和 MySQL 类 sink 中无需设置。 # 换行符,用来分隔两个数据变更事件。默认值为空,表示使用 "\r\n" 作为换行符。 -terminator = '' +# terminator = '' # 文件路径的日期分隔类型。可选类型有 `none`、`year`、`month` 和 `day`。默认值为 `none`,即不使用日期分隔。详见 。 date-separator = 'none' # 是否使用 partition 作为分隔字符串。默认值为 true,即一张表中各个 partition 的数据会分不同的目录来存储。建议保持该配置项为 true 以避免下游分区表可能丢数据的问题 。使用示例详见 。 enable-partition-separator = true # 从 v6.5.0 开始,TiCDC 支持以 CSV 格式将数据变更记录保存至存储服务中,在 MQ 和 MySQL 类 sink 中无需设置。 -[sink.csv] +# [sink.csv] # 字段之间的分隔符。必须为 ASCII 字符,默认值为 `,`。 -delimiter = ',' +# delimiter = ',' # 用于包裹字段的引号字符。空值代表不使用引号字符。默认值为 `"`。 -quote = '"' +# quote = '"' # CSV 中列为 NULL 时将以什么字符来表示。默认值为 `\N`。 -null = '\N' +# null = '\N' # 是否在 CSV 行中包含 commit-ts。默认值为 false。 -include-commit-ts = false +# include-commit-ts = false ``` From 474239d0a5115bfe811b3fd281ba2a0f3e35945f Mon Sep 17 00:00:00 2001 From: xixirangrang Date: Fri, 12 May 2023 12:04:21 +0800 Subject: [PATCH 097/257] learning path: update the link for deployment on k8s (#13952) --- _index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_index.md b/_index.md index 8afdc81a7952..836df438c97e 100644 --- a/_index.md +++ b/_index.md @@ -43,7 +43,7 @@ hide_commit: true [使用 TiUP 部署 TiDB(推荐)](https://docs.pingcap.com/zh/tidb/dev/production-deployment-using-tiup) -[在 Kubernetes 上部署 TiDB](https://docs.pingcap.com/zh/tidb/dev/tidb-in-kubernetes) +[在 Kubernetes 上部署 TiDB](https://docs.pingcap.com/zh/tidb-in-kubernetes/stable) From d5288de4bac284aa7b90db65d0203bf63f30ea2e Mon Sep 17 00:00:00 2001 From: Yifan Xu <30385241+xuyifangreeneyes@users.noreply.github.com> Date: Mon, 15 May 2023 11:47:16 +0800 Subject: [PATCH 098/257] add description about force-init-stats in introduction to statistics (#13948) --- statistics.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/statistics.md b/statistics.md index 8c3dbb1adf79..c1d74e38f8dc 100644 --- a/statistics.md +++ b/statistics.md @@ -686,6 +686,8 @@ DROP STATS TableName GLOBAL; - 通过修改 TiDB 配置项 [`stats-load-concurrency`](/tidb-configuration-file.md#stats-load-concurrency-从-v540-版本开始引入) 的值控制统计信息同步加载可以并发处理的最大列数。该配置项的默认值为 `5`。 - 通过修改 TiDB 配置项 [`stats-load-queue-size`](/tidb-configuration-file.md#stats-load-queue-size-从-v540-版本开始引入) 的值设置统计信息同步加载最多可以缓存多少列的请求。该配置项的默认值为 `1000`。 +在 TiDB 启动阶段,初始统计信息加载完成之前执行的 SQL 可能有不合理的执行计划,从而影响性能。为了避免这种情况,从 v7.1.0 开始,TiDB 引入了配置项 [`force-init-stats`](/tidb-configuration-file.md#force-init-stats-从-v710-版本开始引入)。你可以控制 TiDB 启动时是否在统计信息初始化完成后再对外提供服务。该配置项默认关闭。 + > **警告:** > > 轻量级的统计信息初始化目前为实验特性,不建议在生产环境中使用。该功能可能会在未事先通知的情况下发生变化或删除。如果发现 bug,请在 GitHub 上提 [issue](https://github.com/pingcap/tidb/issues) 反馈。 From ac8ff13d0821c1f3ce1cf0fc802c17858fe951b5 Mon Sep 17 00:00:00 2001 From: glorv Date: Mon, 15 May 2023 12:45:16 +0800 Subject: [PATCH 099/257] resource_control: fix resource group related ebnf syntax (#13957) --- sql-statements/sql-statement-alter-resource-group.md | 10 +++++----- sql-statements/sql-statement-create-resource-group.md | 10 +++++----- sql-statements/sql-statement-drop-resource-group.md | 4 ++-- sql-statements/sql-statement-set-resource-group.md | 4 ++-- 4 files changed, 14 insertions(+), 14 deletions(-) diff --git a/sql-statements/sql-statement-alter-resource-group.md b/sql-statements/sql-statement-alter-resource-group.md index d36ee2f9b735..75656bfcab1d 100644 --- a/sql-statements/sql-statement-alter-resource-group.md +++ b/sql-statements/sql-statement-alter-resource-group.md @@ -10,26 +10,26 @@ summary: TiDB 数据库中 ALTER RESOURCE GROUP 的使用概况。 ## 语法图 ```ebnf+diagram -AlterResourceGroupStmt: +AlterResourceGroupStmt ::= "ALTER" "RESOURCE" "GROUP" IfExists ResourceGroupName ResourceGroupOptionList IfExists ::= ('IF' 'EXISTS')? -ResourceGroupName: +ResourceGroupName ::= Identifier -ResourceGroupOptionList: +ResourceGroupOptionList ::= DirectResourceGroupOption | ResourceGroupOptionList DirectResourceGroupOption | ResourceGroupOptionList ',' DirectResourceGroupOption -DirectResourceGroupOption: +DirectResourceGroupOption ::= "RU_PER_SEC" EqOpt stringLit | "PRIORITY" EqOpt ResourceGroupPriorityOption | "BURSTABLE" -ResourceGroupPriorityOption: +ResourceGroupPriorityOption ::= LOW | MEDIUM | HIGH diff --git a/sql-statements/sql-statement-create-resource-group.md b/sql-statements/sql-statement-create-resource-group.md index 65651e5e50cc..63080f58c75f 100644 --- a/sql-statements/sql-statement-create-resource-group.md +++ b/sql-statements/sql-statement-create-resource-group.md @@ -10,26 +10,26 @@ summary: TiDB 数据库中 CREATE RESOURCE GROUP 的使用概况。 ## 语法图 ```ebnf+diagram -CreateResourceGroupStmt: +CreateResourceGroupStmt ::= "CREATE" "RESOURCE" "GROUP" IfNotExists ResourceGroupName ResourceGroupOptionList IfNotExists ::= ('IF' 'NOT' 'EXISTS')? -ResourceGroupName: +ResourceGroupName ::= Identifier -ResourceGroupOptionList: +ResourceGroupOptionList ::= DirectResourceGroupOption | ResourceGroupOptionList DirectResourceGroupOption | ResourceGroupOptionList ',' DirectResourceGroupOption -DirectResourceGroupOption: +DirectResourceGroupOption ::= "RU_PER_SEC" EqOpt stringLit | "PRIORITY" EqOpt ResourceGroupPriorityOption | "BURSTABLE" -ResourceGroupPriorityOption: +ResourceGroupPriorityOption ::= LOW | MEDIUM | HIGH diff --git a/sql-statements/sql-statement-drop-resource-group.md b/sql-statements/sql-statement-drop-resource-group.md index b562f4ba86ca..ed18d671bedd 100644 --- a/sql-statements/sql-statement-drop-resource-group.md +++ b/sql-statements/sql-statement-drop-resource-group.md @@ -10,13 +10,13 @@ summary: TiDB 数据库中 DROP RESOURCE GROUP 的使用概况。 ## 语法图 ```ebnf+diagram -DropResourceGroupStmt: +DropResourceGroupStmt ::= "DROP" "RESOURCE" "GROUP" IfExists ResourceGroupName IfExists ::= ('IF' 'EXISTS')? -ResourceGroupName: +ResourceGroupName ::= Identifier ``` diff --git a/sql-statements/sql-statement-set-resource-group.md b/sql-statements/sql-statement-set-resource-group.md index d6db0dcdad4f..1414d1dfb1f6 100644 --- a/sql-statements/sql-statement-set-resource-group.md +++ b/sql-statements/sql-statement-set-resource-group.md @@ -12,10 +12,10 @@ summary: TiDB 数据库中 SET RESOURCE GROUP 的使用概况。 **SetResourceGroupStmt:** ```ebnf+diagram -SetResourceGroupStmt: +SetResourceGroupStmt ::= "SET" "RESOURCE" "GROUP" ResourceGroupName -ResourceGroupName: +ResourceGroupName ::= Identifier ``` From 5a5f6f069a24324670f4a5adb2d9e2be78d14535 Mon Sep 17 00:00:00 2001 From: Yifan Xu <30385241+xuyifangreeneyes@users.noreply.github.com> Date: Mon, 15 May 2023 16:19:17 +0800 Subject: [PATCH 100/257] Add note about SELECT CAST(MeN AS CHAR) incompatibility (#7663) --- data-type-numeric.md | 4 ++++ functions-and-operators/cast-functions-and-operators.md | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/data-type-numeric.md b/data-type-numeric.md index 7d1fd24691ba..a439c839ab48 100644 --- a/data-type-numeric.md +++ b/data-type-numeric.md @@ -163,6 +163,10 @@ DOUBLE PRECISION [(M,D)] [UNSIGNED] [ZEROFILL], REAL[(M,D)] [UNSIGNED] [ZEROFILL > > 与在 MySQL 中一样,`DOUBLE` 数据类型存储近似值。对于货币之类的精确值,建议使用 `DECIMAL` 类型。 +> **注意:** +> +> 当 TiDB 将用科学计数法表示的双精度浮点数转换到 `CHAR` 类型时,其结果在显示上与 MySQL 不一致,详情参见 [Cast 函数和操作符](/functions-and-operators/cast-functions-and-operators.md)。 + ### 存储空间 每种类型对存储空间的需求如下表所示: diff --git a/functions-and-operators/cast-functions-and-operators.md b/functions-and-operators/cast-functions-and-operators.md index 1f8f4c3a2037..f012f2d8e2ba 100644 --- a/functions-and-operators/cast-functions-and-operators.md +++ b/functions-and-operators/cast-functions-and-operators.md @@ -14,3 +14,7 @@ Cast 函数和操作符用于将某种数据类型的值转换为另一种数据 | [`BINARY`](https://dev.mysql.com/doc/refman/5.7/en/cast-functions.html#operator_binary) | 将一个字符串转换成一个二进制字符串 | | [`CAST()`](https://dev.mysql.com/doc/refman/5.7/en/cast-functions.html#function_cast) | 将一个值转换成一个确定类型 | | [`CONVERT()`](https://dev.mysql.com/doc/refman/5.7/en/cast-functions.html#function_convert) | 将一个值转换成一个确定类型 | + +> **注意:** +> +> TiDB 和 MySQL 对于 `SELECT CAST(MeN AS CHAR)`(或者等价的 `SELECT CONVERT(MeM, CHAR)`)的结果显示不一致,其中 `MeN` 是用科学计数法表示的双精度浮点数。MySQL 在 `-15 <= N <= 14` 时显示完整数值,在 `N < -15` 或 `N > 14` 时显示科学计数法。而 TiDB 始终显示完整数值。例如,MySQL 对于 `SELECT CAST(3.1415e15 AS CHAR)` 的显示结果为 `3.1415e15`,而 TiDB 的显示结果为 `3141500000000000`。 From 1f4071c38373dc8fb8ddee8eaf5244cc2dd87e0c Mon Sep 17 00:00:00 2001 From: Grace Cai Date: Tue, 16 May 2023 14:07:18 +0800 Subject: [PATCH 101/257] update precision of DATETIME and TIMESTAMP values (#13969) --- data-type-date-and-time.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data-type-date-and-time.md b/data-type-date-and-time.md index cbb7bf1b2c95..c7b169777a62 100644 --- a/data-type-date-and-time.md +++ b/data-type-date-and-time.md @@ -228,7 +228,7 @@ CREATE TABLE t1 ( ## 时间值的小数部分 -`DATETIME` 和 `TIMESTAMP` 值最多可以有 6 位小数,精确到毫秒。如果包含小数部分,值的格式为 `YYYY-MM-DD HH:MM:SS[.fraction]`,小数部分的范围为 `000000` 到`999999`。必须使用小数点分隔小数部分与其他部分。 +`DATETIME` 和 `TIMESTAMP` 值最多可以有 6 位小数,精确到微秒。如果包含小数部分,值的格式为 `YYYY-MM-DD HH:MM:SS[.fraction]`,小数部分的范围为 `000000` 到`999999`。必须使用小数点分隔小数部分与其他部分。 + 使用 `type_name(fsp)` 可以定义精确到小数的列,其中 `type_name` 可以是`TIME`、`DATETIME` 或 `TIMESTAMP`。例如: From f1be2cf0901762dd5844faa944f8b87846b9261c Mon Sep 17 00:00:00 2001 From: wuhuizuo Date: Tue, 16 May 2023 14:59:18 +0800 Subject: [PATCH 102/257] chore: migrate to new prow reviewing (#13611) --- OWNERS | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 OWNERS diff --git a/OWNERS b/OWNERS new file mode 100644 index 000000000000..00b11a3d3357 --- /dev/null +++ b/OWNERS @@ -0,0 +1,38 @@ +# See the OWNERS docs at https://go.k8s.io/owners +approvers: + # docs-maintainers: + - lilin90 + - qiancai + # docs-committers: + - breezewish + - CharLotteiu + - csuzhangxc + - dcalvin + - dragonly + - en-jin19 + - hfxsd + - jackysp + - kissmydb + - lance6716 + - lichunzhu + - Liuxiaozhen12 + - Oreoxmt + - overvenus + - QueenyJin + - ran-huang + - tangenta +reviewers: + # docs-reviewers: + - 3pointer + - amyangfei + - anotherrachel + - crazycs520 + - dveeden + - glkappe + - GMHDBJD + - Icemap + - Joyinqin + - KanShiori + - lucklove + - tiancaiamao + - zimulala From 1018412f26adfdc66e8172b25fcb35b0e7c494e8 Mon Sep 17 00:00:00 2001 From: dongmen <20351731+asddongmen@users.noreply.github.com> Date: Tue, 16 May 2023 17:05:18 +0800 Subject: [PATCH 103/257] ticdc: add ddl detail to bidirectional replication doc (#13908) --- ticdc/ticdc-bidirectional-replication.md | 34 +++++++++++++++++----- ticdc/ticdc-filter.md | 37 ++++++++++++++++++++++++ 2 files changed, 64 insertions(+), 7 deletions(-) diff --git a/ticdc/ticdc-bidirectional-replication.md b/ticdc/ticdc-bidirectional-replication.md index d0be06e69e18..5f0f3d837dd4 100644 --- a/ticdc/ticdc-bidirectional-replication.md +++ b/ticdc/ticdc-bidirectional-replication.md @@ -38,16 +38,36 @@ TiCDC 复制功能只会将指定时间点之后的增量变更复制到下游 ## 执行 DDL -双向复制的集群不支持同步 DDL。 - -如果需要执行 DDL,采取以下步骤: - -1. 暂停所有集群中需要执行 DDL 的对应的表的写入操作。如果是添加非唯一索引,不用暂停写入。 +开启双向复制功能后,TiCDC 不会同步任何 DDL。用户需要自行在上下游集群中分别执行 DDL。 + +需要注意的是,某些 DDL 会造成表结构变更或者数据更改时序问题,从而导致数据同步后出现不一致的情况。因此,在开启双向同步功能后,只有下表中的 DDL 可以在业务不停止数据写入的情况下执行。 + +| 事件 | 是否会引起 changefeed 错误 | 说明 | +| ---------------------------- | ------ |--------------------------| +| create database | 是 | 用户手动在上下游都执行了 DDL 之后,错误可以自动恢复| +| drop database | 是 | 需要手动重启 changefeed,指定 `--overwrite-checkpoint-ts` 为该条 DDL 的commitTs 来恢复 | +| create table | 是 | 用户手动在上下游都执行了 DDL 之后,错误可以自动恢复 | +| drop table | 是 | 需要手动重启 changefeed,指定 `--overwrite-checkpoint-ts` 为该条 ddl 的commitTs 来恢复 | +| alter table comment | 否 | | +| rename index | 否 | | +| alter table index visibility | 否 | | +| add partition | 是 | 用户手动在上下游都执行了 DDL 之后,错误可以自动恢复 | +| drop partition | 否 | | +| create view | 否 | | +| drop view | 否 | | +| alter column default value | 否 | | +| reorganize partition | 是 | 用户手动在上下游都执行了 DDL 之后,错误可以自动恢复 | +| alter table ttl | 否 | | +| alter table remove ttl | 否 | | +| add **not unique** index | 否 | | +| drop **not unique** index | 否 | | + +如果需要执行以上列表中不存在的 DDL,需要采取以下步骤: + +1. 暂停所有集群中需要执行 DDL 的对应的表的写入操作。 2. 等待所有集群中对应表的所有写入已经同步到其他集群后,手动在每一个 TiDB 集群上单独执行所有的 DDL。 3. 等待 DDL 完成之后,重新恢复写入。 -注意,添加非唯一索引 DDL 不会引起双向复制链路中断,因此不用停止对应表的写入。 - ## 停止双向复制 在业务数据停止写入之后,你可以在两个集群中都插入一行特殊的值,通过检查这两行特殊的值来确保数据达到了一致的状态。 diff --git a/ticdc/ticdc-filter.md b/ticdc/ticdc-filter.md index 46e0554928ff..a9be2330cb88 100644 --- a/ticdc/ticdc-filter.md +++ b/ticdc/ticdc-filter.md @@ -88,3 +88,40 @@ ignore-update-new-value-expr = "gender = 'male' and age > 18" # 过滤掉新值 > - TiDB 在更新聚簇索引的列值时,会将一个 UPDATE 事件拆分成为 DELETE 和 INSERT 事件,TiCDC 无法将该类事件识别为 UPDATE 事件,因此无法正确地进行过滤。 > > - 在配置 SQL 表达式时,请确保符合 matcher 规则的所有表均包含了对应 SQL 表达式中指明的所有列,否则同步任务将无法创建成功。此外,若在同步的过程中表的结构发生变化,不再包含 SQL 表达式中的列,那么同步任务将会进入无法自动恢复的错误状态,你需要手动修改配置并进行恢复操作。 + +## DDL 白名单 + +目前 TiCDC 在同步 DDL 时使用白名单策略,只有在白名单内部的 DDL 会同步到下游,不在白名单内的 DDL 不会被 TiCDC 同步到下游。 + +以下为 TiCDC 支持同步的 DDL 的列表。 + +- create database +- drop database +- create table +- drop table +- add column +- drop column +- create index / add index +- drop index +- truncate table +- modify column +- rename table +- alter column default value +- alter table comment +- rename index +- add partition +- drop partition +- truncate partition +- create view +- drop view +- alter table character set +- alter database character set +- recover table +- add primary key +- drop primary key +- rebase auto id +- alter table index visibility +- exchange partition +- reorganize partition +- alter table ttl +- alter table remove ttl From 1e928583117cfad8009bfb1326fb4b92a9a2263d Mon Sep 17 00:00:00 2001 From: Xiaoju Wu Date: Tue, 16 May 2023 17:15:18 +0800 Subject: [PATCH 104/257] disable non-prep plan cache (#13947) --- sql-non-prepared-plan-cache.md | 6 ++++-- system-variables.md | 11 +++++++++-- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/sql-non-prepared-plan-cache.md b/sql-non-prepared-plan-cache.md index 43dadadb2e8d..688dda532209 100644 --- a/sql-non-prepared-plan-cache.md +++ b/sql-non-prepared-plan-cache.md @@ -5,6 +5,10 @@ summary: 介绍 TiDB 中非 Prepare 语句执行计划缓存的原理、使用 # 非 Prepare 语句执行计划缓存 +> **警告:** +> +> 非 Prepare 语句执行计划缓存 (Non-Prepared Plan Cache) 目前为实验特性,不建议在生产环境中使用。该功能可能会在未事先通知的情况下发生变化或删除。如果发现 bug,请在 GitHub 上提 [issue](https://github.com/pingcap/tidb/issues) 反馈。 + 对于某些非 `PREPARE` 语句,TiDB 可以像 [`Prepare`/`Execute` 语句](/sql-prepared-plan-cache.md)一样支持执行计划缓存。这可以让这些语句跳过优化器阶段,以提升性能。 ## 原理 @@ -20,8 +24,6 @@ Non-Prepared Plan Cache 为会话级别,并且与 [Prepared Plan Cache](/sql-p 目前,你可以通过 [`tidb_enable_non_prepared_plan_cache`](/system-variables.md#tidb_enable_non_prepared_plan_cache) 开启或关闭 Non-Prepared Plan Cache。同时,你还可以通过 [`tidb_session_plan_cache_size`](/system-variables.md#tidb_session_plan_cache_size-从-v710-版本开始引入) 来控制 Plan Cache 的大小。当缓存的计划数超过 `tidb_session_plan_cache_size` 时,TiDB 会使用 LRU (Least Recently Used) 策略进行逐出。 -`tidb_enable_non_prepared_plan_cache` 在 v7.1.0 之前版本中默认值为 `OFF`,即默认关闭。在 v7.1.0 及之后的版本中默认值为 `ON`,即默认开启。 - 从 v7.1.0 开始,你可以通过变量 [`tidb_plan_cache_max_plan_size`](/system-variables.md#tidb_plan_cache_max_plan_size-从-v710-版本开始引入) 来设置可以缓存的计划的最大大小,默认为 2 MB。超过该值的执行计划将不会被缓存到 Plan Cache 中。 > **注意:** diff --git a/system-variables.md b/system-variables.md index b817ae017f83..68c9bc210c03 100644 --- a/system-variables.md +++ b/system-variables.md @@ -1323,15 +1323,22 @@ MPP 是 TiFlash 引擎提供的分布式计算框架,允许节点之间的数 ### `tidb_enable_non_prepared_plan_cache` +> **警告:** +> +> 非 Prepare 语句执行计划缓存目前为实验特性,不建议在生产环境中使用。该功能可能会在未事先通知的情况下发生变化或删除。如果发现 bug,请在 GitHub 上提 [issue](https://github.com/pingcap/tidb/issues) 反馈。 + - 作用域:SESSION | GLOBAL - 是否持久化到集群:是 - 类型:布尔型 -- 默认值:在 v7.1.0 之前版本中为 `OFF`,即默认关闭。在 v7.1.0 及之后的版本中为 `ON`,即默认开启。 +- 默认值:`OFF` - 这个变量用来控制是否开启[非 Prepare 语句执行计划缓存](/sql-non-prepared-plan-cache.md)。 -- 从旧版本升级到 v7.1.0 及之后版本,该变量开关保持升级前的状态。 ### `tidb_enable_non_prepared_plan_cache_for_dml` 从 v7.1.0 版本开始引入 +> **警告:** +> +> 非 Prepare 语句执行计划缓存目前为实验特性,不建议在生产环境中使用。该功能可能会在未事先通知的情况下发生变化或删除。如果发现 bug,请在 GitHub 上提 [issue](https://github.com/pingcap/tidb/issues) 反馈。 + - 作用域:SESSION | GLOBAL - 是否持久化到集群:是 - 类型:布尔型 From bba9e8ba8149fd43bd71ae071e57c70c636a899e Mon Sep 17 00:00:00 2001 From: Zhou Kunqin <25057648+time-and-fate@users.noreply.github.com> Date: Tue, 16 May 2023 17:17:17 +0800 Subject: [PATCH 105/257] sql-plan-replayer: update description about plan replayer zip file GC strategy (#13950) --- sql-plan-replayer.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sql-plan-replayer.md b/sql-plan-replayer.md index 2453e17c881d..c7e2d78b5945 100644 --- a/sql-plan-replayer.md +++ b/sql-plan-replayer.md @@ -50,7 +50,7 @@ analyze table t; plan replayer dump explain select * from t; ``` -`PLAN REPLAYER DUMP` 会将以上信息打包整理成 `ZIP` 文件,并返回文件标识作为执行结果。该文件为一次性文件,被下载后 TiDB 会将其删除。 +`PLAN REPLAYER DUMP` 会将以上信息打包整理成 `ZIP` 文件,并返回文件标识作为执行结果。 > **注意:** > @@ -242,7 +242,7 @@ mysql> SELECT * FROM mysql.plan_replayer_status; > **注意:** > -> `PLAN REPLAYER CAPTURE` 的结果文件最多会在 TiDB 集群中保存一个小时,超时后 TiDB 会将其删除。 +> `PLAN REPLAYER CAPTURE` 的结果文件最多会在 TiDB 集群中保存一周,超时后 TiDB 会将其删除。 ## 使用 `PLAN REPLAYER CONTINUOUS CAPTURE` From 10363acae3351e83bccd42ab7184a835c6378ec6 Mon Sep 17 00:00:00 2001 From: Grace Cai Date: Tue, 16 May 2023 18:53:18 +0800 Subject: [PATCH 106/257] Update Keywords (#13871) --- keywords.md | 62 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) diff --git a/keywords.md b/keywords.md index c6a4d2ff1fd4..afbe449ae5c6 100644 --- a/keywords.md +++ b/keywords.md @@ -79,9 +79,12 @@ Query OK, 0 rows affected (0.08 sec) - ANALYZE (R) - AND (R) - ANY +- ARRAY (R) - AS (R) - ASC (R) - ASCII +- ATTRIBUTE +- ATTRIBUTES - AUTO_ID_CACHE - AUTO_INCREMENT - AUTO_RANDOM @@ -95,11 +98,13 @@ Query OK, 0 rows affected (0.08 sec) - BACKUP - BACKUPS - BEGIN +- BERNOULLI - BETWEEN (R) - BIGINT (R) - BINARY (R) - BINDING - BINDINGS +- BINDING_CACHE - BINLOG - BIT - BLOB (R) @@ -116,11 +121,14 @@ Query OK, 0 rows affected (0.08 sec)
C - CACHE +- CALIBRATE +- CALL (R) - CANCEL (R) - CAPTURE - CASCADE (R) - CASCADED - CASE (R) +- CAUSAL - CHAIN - CHANGE (R) - CHAR (R) @@ -132,6 +140,9 @@ Query OK, 0 rows affected (0.08 sec) - CIPHER - CLEANUP - CLIENT +- CLIENT_ERRORS_SUMMARY +- CLUSTER +- CLUSTERED - CMSKETCH (R) - COALESCE - COLLATE (R) @@ -148,6 +159,7 @@ Query OK, 0 rows affected (0.08 sec) - CONCURRENCY - CONFIG - CONNECTION +- CONSISTENCY - CONSISTENT - CONSTRAINT (R) - CONTEXT @@ -195,8 +207,10 @@ Query OK, 0 rows affected (0.08 sec) - DEPTH (R) - DESC (R) - DESCRIBE (R) +- DIGEST - DIRECTORY - DISABLE +- DISABLED - DISCARD - DISK - DISTINCT (R) @@ -214,6 +228,7 @@ Query OK, 0 rows affected (0.08 sec) - ELSE (R) - ENABLE +- ENABLED - ENCLOSED (R) - ENCRYPTION - END @@ -240,8 +255,10 @@ Query OK, 0 rows affected (0.08 sec) F +- FAILED_LOGIN_ATTEMPTS - FALSE (R) - FAULTS +- FETCH (R) - FIELDS - FILE - FIRST @@ -273,7 +290,9 @@ Query OK, 0 rows affected (0.08 sec) - HASH - HAVING (R) +- HELP - HIGH_PRIORITY (R) +- HISTOGRAM - HISTORY - HOSTS - HOUR @@ -286,6 +305,7 @@ Query OK, 0 rows affected (0.08 sec) - IDENTIFIED - IF (R) - IGNORE (R) +- ILIKE (R) - IMPORT - IMPORTS - IN (R) @@ -305,6 +325,7 @@ Query OK, 0 rows affected (0.08 sec) - INT4 (R) - INT8 (R) - INTEGER (R) +- INTERSECT (R) - INTERVAL (R) - INTO (R) - INVISIBLE @@ -354,6 +375,7 @@ Query OK, 0 rows affected (0.08 sec) - LOCALTIMESTAMP (R) - LOCATION - LOCK (R) +- LOCKED - LOGS - LONG (R) - LONGBLOB (R) @@ -376,6 +398,7 @@ Query OK, 0 rows affected (0.08 sec) - MEDIUMBLOB (R) - MEDIUMINT (R) - MEDIUMTEXT (R) +- MEMBER - MEMORY - MERGE - MICROSECOND @@ -406,6 +429,7 @@ Query OK, 0 rows affected (0.08 sec) - NODE_STATE (R) - NOMAXVALUE - NOMINVALUE +- NONCLUSTERED - NONE - NOT (R) - NOWAIT @@ -419,7 +443,12 @@ Query OK, 0 rows affected (0.08 sec) O +- OF (R) +- OFF - OFFSET +- OLTP_READ_ONLY +- OLTP_READ_WRITE +- OLTP_WRITE_ONLY - ON (R) - ONLINE - ONLY @@ -428,6 +457,7 @@ Query OK, 0 rows affected (0.08 sec) - OPTIMISTIC (R) - OPTIMIZE (R) - OPTION (R) +- OPTIONAL - OPTIONALLY (R) - OR (R) - ORDER (R) @@ -445,15 +475,21 @@ Query OK, 0 rows affected (0.08 sec) - PARTITIONING - PARTITIONS - PASSWORD +- PASSWORD_LOCK_TIME +- PAUSE +- PERCENT - PERCENT_RANK (R-Window) - PER_DB - PER_TABLE - PESSIMISTIC (R) - PLACEMENT (S) - PLUGINS +- POINT +- POLICY - PRECEDING - PRECISION (R) - PREPARE +- PRESERVE - PRE_SPLIT_REGIONS - PRIMARY (R) - PRIVILEGES @@ -462,7 +498,9 @@ Query OK, 0 rows affected (0.08 sec) - PROCESSLIST - PROFILE - PROFILES +- PROXY - PUMP (R) +- PURGE Q @@ -480,6 +518,7 @@ Query OK, 0 rows affected (0.08 sec) - REAL (R) - REBUILD - RECOVER +- RECURSIVE (R) - REDUNDANT - REFERENCES (R) - REGEXP (R) @@ -495,12 +534,18 @@ Query OK, 0 rows affected (0.08 sec) - REPEATABLE - REPLACE (R) - REPLICA +- REPLICAS - REPLICATION - REQUIRE (R) +- REQUIRED +- RESOURCE - RESPECT +- RESTART - RESTORE - RESTORES - RESTRICT (R) +- RESUME +- REUSE - REVERSE - REVOKE (R) - RIGHT (R) @@ -518,6 +563,8 @@ Query OK, 0 rows affected (0.08 sec) S - SAMPLES (R) +- SAN +- SAVEPOINT - SECOND - SECONDARY_ENGINE - SECONDARY_LOAD @@ -540,6 +587,7 @@ Query OK, 0 rows affected (0.08 sec) - SHUTDOWN - SIGNED - SIMPLE +- SKIP - SKIP_SCHEMA_FILES - SLAVE - SLOW @@ -570,11 +618,16 @@ Query OK, 0 rows affected (0.08 sec) - STATS (R) - STATS_AUTO_RECALC - STATS_BUCKETS (R) +- STATS_COL_CHOICE +- STATS_COL_LIST +- STATS_EXTENDED (R) - STATS_HEALTHY (R) - STATS_HISTOGRAMS (R) - STATS_META (R) +- STATS_OPTIONS - STATS_PERSISTENT - STATS_SAMPLE_PAGES +- STATS_SAMPLE_RATE - STATUS - STORAGE - STORED (R) @@ -586,12 +639,14 @@ Query OK, 0 rows affected (0.08 sec) - SUPER - SWAPS - SWITCHES +- SYSTEM - SYSTEM_TIME T - TABLE (R) - TABLES +- TABLESAMPLE (R) - TABLESPACE - TABLE_CHECKSUM - TEMPORARY @@ -601,6 +656,7 @@ Query OK, 0 rows affected (0.08 sec) - THAN - THEN (R) - TIDB (R) +- TiDB_CURRENT_TSO (R) - TIFLASH (R) - TIKV_IMPORTER - TIME @@ -611,6 +667,7 @@ Query OK, 0 rows affected (0.08 sec) - TO (R) - TOKEN_ISSUER - TOPN (R) +- TPCC - TRACE - TRADITIONAL - TRAILING (R) @@ -619,6 +676,9 @@ Query OK, 0 rows affected (0.08 sec) - TRIGGERS - TRUE (R) - TRUNCATE +- TTL +- TTL_ENABLE +- TTL_JOB_INTERVAL - TYPE U @@ -657,6 +717,7 @@ Query OK, 0 rows affected (0.08 sec) W +- WAIT - WARNINGS - WEEK - WEIGHT_STRING @@ -666,6 +727,7 @@ Query OK, 0 rows affected (0.08 sec) - WINDOW (R-Window) - WITH (R) - WITHOUT +- WORKLOAD - WRITE (R) X From 036655586bd99fdc784b007936526ce145b8466b Mon Sep 17 00:00:00 2001 From: Neil Shen Date: Wed, 17 May 2023 10:15:35 +0800 Subject: [PATCH 107/257] ticdc: update scale out config (#13578) --- ticdc/ticdc-changefeed-config.md | 10 +++++++++- ticdc/ticdc-sink-to-kafka.md | 12 ++++++++++-- 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/ticdc/ticdc-changefeed-config.md b/ticdc/ticdc-changefeed-config.md index f140ad9cad85..c22a47c86081 100644 --- a/ticdc/ticdc-changefeed-config.md +++ b/ticdc/ticdc-changefeed-config.md @@ -94,8 +94,16 @@ rules = ['*.*', '!test.*'] # 注意:该功能只在 Kafka changefeed 上生效,暂不支持 MySQL changefeed。 # 默认为 "false"。设置为 "true" 以打开该功能。 enable-table-across-nodes = false -# 打开该功能后,该功能只对 Region 个数大于 `region-threshold` 值的表生效。 +# 打开该功能后,该功能会对 Region 个数大于 `region-threshold` 值的表生效。 region-threshold = 100000 +# 打开该功能后,该功能会对每分钟修改行数大于 `write-key-threshold` 值的表生效。 +# 注意: +# * `write-key-threshold` 参数默认值为 0,代表该功能默认不会按表的修改行数来切分表的同步范围。 +# * 你可以根据集群负载来配置该参数,如 30000,代表当表每分钟的更新行数超过 30000 时,该功能将会切分表的同步范围。 +# * 当 `region-threshold` 和 `write-key-threshold` 同时配置时, +# TiCDC 将优先检查修改行数是否大于 `write-key-threshold`, +# 如果不超过,则再检查 Region 个数是否大于 `region-threshold`。 +write-key-threshold = 0 [sink] # 对于 MQ 类的 Sink,可以通过 dispatchers 配置 event 分发器 diff --git a/ticdc/ticdc-sink-to-kafka.md b/ticdc/ticdc-sink-to-kafka.md index cd1061416873..e21151edf005 100644 --- a/ticdc/ticdc-sink-to-kafka.md +++ b/ticdc/ticdc-sink-to-kafka.md @@ -244,7 +244,7 @@ partition 分发器用 partition = "xxx" 来指定,支持 default、ts、index ## 横向扩展大单表的负载到多个 TiCDC 节点 -该功能通过将大单表按 Region 个数切分成多个数据范围,将这些数据范围分布到多个 TiCDC 节点上,使得多个 TiCDC 节点可以同时同步大单表。该功能可以解决以下两个问题: +该功能可以按照大单表的数据量和每分钟的修改行数将表的同步范围切分为多个,并使各个范围之间所同步的数据量和修改行数基本相同。该功能将这些范围分布到多个 TiCDC 节点进行同步,使得多个 TiCDC 节点可以同时同步大单表。该功能可以解决以下两个问题: - 单个 TiCDC 节点不能及时同步大单表。 - TiCDC 节点之间资源(CPU、内存等)消耗不均匀。 @@ -257,10 +257,18 @@ partition 分发器用 partition = "xxx" 来指定,支持 default、ts、index ```toml [scheduler] -# 设置为 "true" 以打开该功能。 +# 默认值为 "false",设置为 "true" 以打开该功能。 enable-table-across-nodes = true # 打开该功能后,该功能只对 Region 个数大于 `region-threshold` 值的表生效。 region-threshold = 100000 +# 打开该功能后,该功能会对每分钟修改行数大于 `write-key-threshold` 值的表生效。 +# 注意: +# * 该参数默认值为 0,代表该功能默认不会按表的修改行数来切分表的同步范围。 +# * 你可以根据集群负载来配置该参数,如 30000,代表当表每分钟的更新行数超过 30000 时,该功能将会切分表的同步范围。 +# * 当 `region-threshold` 和 `write-key-threshold` 同时配置时, +# TiCDC 将优先检查修改行数是否大于 `write-key-threshold`, +# 如果不超过,则再检查 Region 个数是否大于 `region-threshold`。 +write-key-threshold = 30000 ``` 一个表包含的 Region 个数可用如下 SQL 查询: From cac3b2e8de8313b9cd88dce4e153e75e8157915b Mon Sep 17 00:00:00 2001 From: Benjamin2037 Date: Wed, 17 May 2023 11:07:35 +0800 Subject: [PATCH 108/257] Add dist task framework introduction doc (#13705) --- TOC.md | 2 + media/dist-task/dist-task-architect.jpg | Bin 0 -> 256019 bytes system-variables.md | 6 +- tidb-distributed-execution-framework.md | 94 ++++++++++++++++++++++++ 4 files changed, 101 insertions(+), 1 deletion(-) create mode 100644 media/dist-task/dist-task-architect.jpg create mode 100644 tidb-distributed-execution-framework.md diff --git a/TOC.md b/TOC.md index e57bcf917b8f..a2ffbcad2efa 100644 --- a/TOC.md +++ b/TOC.md @@ -969,6 +969,8 @@ - [遥测](/telemetry.md) - [错误码](/error-codes.md) - [通过拓扑 label 进行副本调度](/schedule-replicas-by-topology-labels.md) + - 内部组件介绍 + - [TiDB 后端任务分布式并行执行框架](/tidb-distributed-execution-framework.md) - 常见问题解答 (FAQ) - [FAQ 汇总](/faq/faq-overview.md) - [产品 FAQ](/faq/tidb-faq.md) diff --git a/media/dist-task/dist-task-architect.jpg b/media/dist-task/dist-task-architect.jpg new file mode 100644 index 0000000000000000000000000000000000000000..aea83125351cba9644b4ff07c0f7c919709db16c GIT binary patch literal 256019 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¥grE7cG@BNIlm$5qQ7lbBijqLJsSsO?@ISZSbmJ(K10 zqMD2|OOB_$ow18`c90<0<&@?yU1*IlKs*(HM#^&`Dh^%k;qEKFwwW!O9jgJh?n zWeyW$Jl%9Q`8M-45?Baq9k$PHB_uncnq|pF*pXV{#9n_K?Zo)t+C3M?3hr9bhHF_( z8sV`c7fPihXUtFfsr;lfgugAX>nDV_p=Qdnpxd!f^WQp)RQS;SvD?#j0 z(~Su{;-%j|piJgR3|o)Pw4Fhno`Pdw^KEPiinoDsWAIlHD%9)gUi`YlP-mgxg)Xf7lQZM16vyI*5zZTYk_#H&)mJvof!Vu1Wk>{=BLxZ@`t)7fS zxfw5_F)abR3iuj_7lv@Du((1|DV+m$Qa9|MoY%gB5Qhd?#Ui<#xm2Yyo||MdF*4V= zb{dgKZ%Cx6^3UV4CBcNG#_62t!?xQ8sGqf;X5pme3&2c`wPd966=;5qVjUs8(s=;_ z{@gp*FbFnTdc1~Q=Oi3^SLwQ|k1xsTk7JLQ>F5q$C3?o~SQ6O7e*ch5Xp+F|mIQ~e z3>+>bfn6kfP-4@Q3(`NUBKG%v6L7y$NQzcZpL(^iV)RUM*Hen59?LqKID>J1KKAay zUl78Dho5TQ4%HSE%9L2M#=*NkE$+3AqbwLq60{^nuuBgN^d=u}u~{t}sh7Lovv_tnpMzJpQmcb~h>fRbuS zu~~q9->btte3U2bj5@LETT5d&$hWMhT_XK#aa%P^yYJs|Ku2cK{+1? z(b4_7XQxeLfXB?en%h5{eo$%Zh#F{foy1RQw6&kh)Ix=wU5!C@@mGY`e3lo_eNgZ2 ze#a6~uvKe*V?P>8ce(<9Q5fS{m=6*TwjLXwr^^3ac≈JYVr{XN=2e1pbxFQ`;To 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 > 目前,PITR 恢复会额外处理日志备份时间段内通过索引加速功能创建的索引,以达到兼容效果。详细内容请参考[索引加速功能为什么与 PITR 功能不兼容](/faq/backup-and-restore-faq.md#索引加速功能为什么与-pitr-功能不兼容)。 +> **注意:** +> +> 在升级到 v6.5.0 及以上版本时,建议你检查 TiDB 的 [temp-dir](/tidb-configuration-file.md#temp-dir-从-v630-版本开始引入) 路径是否正确挂载了 SSD 磁盘。该参数是 TiDB 的配置参数,设置后需要重启 TiDB 才能生效。因此,在升级前提前进行设置,可以避免再次重启。 + ### `tidb_enable_dist_task` 从 v7.1.0 版本开始引入 > **警告:** @@ -993,7 +997,7 @@ MPP 是 TiFlash 引擎提供的分布式计算框架,允许节点之间的数 - 作用域:GLOBAL - 是否持久化到集群:是 - 默认值:`OFF` -- 这个变量用于控制是否开启分布式执行框架。开启分布式执行后,DDL 和 Import 等后端任务将会由集群中多个 TiDB 节点共同完成。 +- 这个变量用于控制是否开启 [TiDB 后端任务分布式框架](/tidb-distributed-execution-framework.md)。开启分布式框架后,DDL 和 Import 等后端任务将会由集群中多个 TiDB 节点共同完成。 - 在 TiDB v7.1.0 中,只支持分布式执行分区表的 `ADD INDEX`。 - 该变量由 `tidb_ddl_distribute_reorg` 改名而来。 diff --git a/tidb-distributed-execution-framework.md b/tidb-distributed-execution-framework.md new file mode 100644 index 000000000000..a158ca2eed82 --- /dev/null +++ b/tidb-distributed-execution-framework.md @@ -0,0 +1,94 @@ +--- +title: TiDB 后端任务分布式框架 +summary: 了解 TiDB 后端任务分布式框架的使用场景与限制、使用方法和实现原理。 +--- + +# TiDB 后端任务分布式框架 + +> **警告:** +> +> 当前该功能为实验特性,不建议在生产环境中使用。 + +TiDB 采用计算存储分离架构,具有出色的扩展性和弹性的扩缩容能力。从 v7.1.0 开始, TiDB 引入了一个后端任务分布式执行框架,以进一步发挥分布式架构的资源优势。该框架的目标是实现对所有后端任务的统一调度与分布式执行,并为接入的后端任务提供统一的资源管理能力,从整体和单个后端任务两个维度提供资源管理的能力,更好地满足用户对于资源使用的预期。 + +本文档介绍了 TiDB 后端任务分布式框架的使用场景与限制、使用方法和实现原理。 + +> **注意:** +> +> 本框架不支持 SQL 查询的分布式执行。 + +## 使用场景与限制 + +在数据库中,除了核心的事务型负载任务 (TP) 和分析型查询任务 (AP),也存在着其他重要任务,如 DDL 语句、Load Data、TTL、Analyze 和 Backup/Restore 等,即**后端任务**。这些任务需要处理数据库对象(表)中的大量数据,通常具有如下特点: + +- 需要处理一个 schema 或者一个数据库对象(表)中的所有数据。 +- 可能需要周期执行,但频率较低。 +- 如果资源控制不当,容易对事务型任务和分析型任务造成影响,影响数据库的服务质量。 + +启用 TiDB 后端任务分布式框架能够解决上述问题,并且具有以下三个优势: + +- 提供高扩展性、高可用性和高性能的统一能力支持。 +- 支持后端任务分布式执行,可以在整个 TiDB 集群可用的计算资源范围内进行灵活的调度,从而更好地利用 TiDB 集群内的计算资源。 +- 提供统一的资源使用和管理能力,从整体和单个后端任务两个维度提供资源管理的能力。 + +目前,后端任务分布式框架仅支持分布式执行 `ADD INDEX`,即 DDL 创建索引的场景。例如以下 SQL 语句: + +```sql +ALTER TABLE t1 ADD INDEX idx1(c1); +CREATE INDEX idx1 ON table t1(c1); +``` + +## 启用前提 + +使用分布式框架前,你需要启动 [Fast Online DDL](/system-variables.md#tidb_ddl_enable_fast_reorg-从-v630-版本开始引入) 模式。 + +1. 调整 Fast Online DDL 相关的系统变量: + + * [`tidb_ddl_enable_fast_reorg`](/system-variables.md#tidb_ddl_enable_fast_reorg-从-v630-版本开始引入):从 TiDB v6.5 开始默认打开,用于启用快速模式。 + * [`tidb_ddl_disk_quota`](/system-variables.md#tidb_ddl_disk_quota-从-v630-版本开始引入):用于控制快速模式可使用的本地磁盘最大配额。 + +2. 调整 Fast DDL 相关的配置项: + + * [temp-dir](/tidb-configuration-file.md#temp-dir-从-v630-版本开始引入):指定快速模式能够使用的本地盘路径。 + +> **注意:** +> +> 在升级到 v6.5.0 及以上版本时,建议你检查 TiDB 的 `temp-dir` 路径是否正确挂载了 SSD 磁盘。该参数是 TiDB 的配置参数,设置后需要重启 TiDB 才能生效。因此,在升级前提前进行设置,可以避免再次重启。 + +## 启用步骤 + +1. 启用分布式框架,只需将 [`tidb_enable_dist_task`](/system-variables.md#tidb_enable_dist_task-从-v710-版本开始引入) 设置为 `ON`: + + ```sql + SET GLOBAL tidb_enable_dist_task = ON; + ``` + + 在运行后端任务时,框架支持的语句会采用分布式方式执行。 + +2. 根据实际需求,调整可能影响 DDL 任务分布式执行的系统变量: + + * [tidb_ddl_reorg_worker_cnt](/system-variables.md#tidb_ddl_reorg_worker_cnt):使用默认值 `4` 即可,建议最大不超过 `16`。 + * [tidb_ddl_reorg_priority](/system-variables.md#tidb_ddl_reorg_priority) + * [tidb_ddl_error_count_limit](/system-variables.md#tidb_ddl_error_count_limit) + * [tidb_ddl_reorg_batch_size](/system-variables.md#tidb_ddl_reorg_batch_size):使用默认值即可,建议最大不超过 `1024`。 + +> **建议:** +> +> 对于分布式执行 `ADD INDEX` 语句,只需要设置 `tidb_ddl_reorg_worker_cnt`。 + +## 实现原理 + +TiDB 后端任务分布式框架的架构图如下: + +![后端任务分布式框架的架构](/media/dist-task/dist-task-architect.jpg) + +根据上图,分布式框架中任务的执行主要由以下模块负责: + +- Dispatcher:负责生成每个任务的分布式执行计划,管理执行过程,转换任务状态以及收集和反馈运行时任务信息等。 +- Scheduler:以 TiDB 节点为单位来同步分布式任务的执行,提高后端任务执行效率。 +- Subtask Executor:是实际的分布式子任务执行者,并将子任务的执行情况返回给 Scheduler,由 Scheduler 统一更新子任务的执行状态。 +- 资源池:通过对上述各种模块中计算资源进行池化,提供量化资源的使用与管理的基础。 + +## 另请参阅 + +* [DDL 执行原理及最佳实践](/ddl-introduction.md) From 77a3673095ea3c2fd072edce21efc58a338dec97 Mon Sep 17 00:00:00 2001 From: crazycs Date: Wed, 17 May 2023 11:09:35 +0800 Subject: [PATCH 109/257] foreign_key: fix typo (#13994) --- foreign-key.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/foreign-key.md b/foreign-key.md index 5e29eaf99689..07d41d96c4ab 100644 --- a/foreign-key.md +++ b/foreign-key.md @@ -201,7 +201,7 @@ Create Table: CREATE TABLE `child` ( - [`INFORMATION_SCHEMA.KEY_COLUMN_USAGE`](/information-schema/information-schema-key-column-usage.md) - [`INFORMATION_SCHEMA.TABLE_CONSTRAINTS`](/information-schema/information-schema-table-constraints.md) -- [`INFORMATION_SCHEMA.TABLE_CONSTRAINTS`](/information-schema/information-schema-table-constraints.md) +- [`INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS`](/information-schema/information-schema-referential-constraints.md) 下面提供了查询示例: From ebd845379890a77e48b8049a43386ab66df8e13d Mon Sep 17 00:00:00 2001 From: crazycs Date: Wed, 17 May 2023 11:23:35 +0800 Subject: [PATCH 110/257] how-to-run-sysbench: update cmd (#13962) --- benchmark/benchmark-tidb-using-sysbench.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/benchmark/benchmark-tidb-using-sysbench.md b/benchmark/benchmark-tidb-using-sysbench.md index 790b61385ad5..3020e4c50690 100644 --- a/benchmark/benchmark-tidb-using-sysbench.md +++ b/benchmark/benchmark-tidb-using-sysbench.md @@ -139,7 +139,7 @@ sysbench --config-file=config oltp_point_select --tables=32 --table-size=1000000 数据预热可将磁盘中的数据载入内存的 block cache 中,预热后的数据对系统整体的性能有较大的改善,建议在每次重启集群后进行一次数据预热。 ```bash -sysbench --config-file=config oltp_point_select --tables=32 --table-size=10000000 warmup +sysbench --config-file=config oltp_point_select --tables=32 --table-size=10000000 prewarm ``` ### Point select 测试命令 From eb46daf9bbf3438e5b47c05c7e23c5393b4ccc38 Mon Sep 17 00:00:00 2001 From: bb7133 Date: Wed, 17 May 2023 13:31:35 +0800 Subject: [PATCH 111/257] sql-statements: clarify the MySQL compatibility of `LOAD DATA` (#13968) --- sql-statements/sql-statement-load-data.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/sql-statements/sql-statement-load-data.md b/sql-statements/sql-statement-load-data.md index 7575f1cf54a3..6d79f69333ed 100644 --- a/sql-statements/sql-statement-load-data.md +++ b/sql-statements/sql-statement-load-data.md @@ -228,7 +228,7 @@ LOAD DATA LOCAL INFILE '/mnt/evo970/data-sets/bikeshare-data/2017Q4-capitalbikes ## MySQL 兼容性 -TiDB 中的 `LOAD DATA` 语句应该完全兼容 MySQL(除字符集选项被解析但会被忽略以外)。若发现任何兼容性差异,请在 GitHub 上提交 [issue](https://github.com/pingcap/tidb/issues/new/choose)。 +TiDB 中的 `LOAD DATA` 语句语法上兼容 MySQL(除字符集选项被解析但会被忽略以外)。若发现任何语法兼容性差异,请在 GitHub 上提交 [issue](https://github.com/pingcap/tidb/issues/new/choose)。 > **注意:** > @@ -236,11 +236,14 @@ TiDB 中的 `LOAD DATA` 语句应该完全兼容 MySQL(除字符集选项被 > - 从 TiDB v4.0.0 开始一直到 TiDB v6.6.0 的版本,TiDB 默认在一个事务中提交所有行。 > - 从 TiDB v7.0.0 开始,批量提交的行数由 `LOAD DATA` 语句的 `WITH batch_size=` 参数控制,默认 1000 行提交一次。 > - 从 TiDB v4.0.0 及以前版本升级后,可能出现 `ERROR 8004 (HY000) at line 1: Transaction is too large, size: 100000058` 错误。要解决该问题,建议调大 `tidb.toml` 文件中的 [`txn-total-size-limit`](/tidb-configuration-file.md#txn-total-size-limit) 值。如果无法增加此限制,还可以将 [`tidb_dml_batch_size`](/system-variables.md#tidb_dml_batch_size) 的值设置为 `20000` 来恢复升级前的行为。 +> - 无论以多少行为一个事务提交,`LOAD DATA` 都不会被显式事务中的 [`ROLLBACK`](/sql-statements/sql-statement-rollback.md) 语句回滚。 +> - `LOAD DATA` 语句始终以乐观事务模式执行,不受 TiDB 事务模式设置的影响。 ## 另请参阅 * [INSERT](/sql-statements/sql-statement-insert.md) * [乐观事务模型](/optimistic-transaction.md) +* [悲观事务模式](/pessimistic-transaction.md) * [TiDB Lightning](/tidb-lightning/tidb-lightning-overview.md) * [`SHOW LOAD DATA`](/sql-statements/sql-statement-show-load-data.md) * [`CANCEL LOAD DATA` 和 `DROP LOAD DATA`](/sql-statements/sql-statement-operate-load-data-job.md) From 7f9c014e09a0175f00f782bc2f7b8b8f455ca70b Mon Sep 17 00:00:00 2001 From: glkappe Date: Wed, 17 May 2023 17:11:36 +0800 Subject: [PATCH 112/257] update some desc about auto-analyze (#8859) --- statistics.md | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/statistics.md b/statistics.md index c1d74e38f8dc..30491b51cbab 100644 --- a/statistics.md +++ b/statistics.md @@ -332,9 +332,9 @@ ANALYZE INCREMENTAL TABLE TableName PARTITION PartitionNameList INDEX [IndexName ### 自动更新 -在发生增加,删除以及修改语句时,TiDB 会自动更新表的总行数以及修改的行数。这些信息会定期持久化下来,更新的周期是 20 * `stats-lease`,`stats-lease` 的默认值是 3s,如果将其指定为 0,那么将不会自动更新。 +在发生增加,删除以及修改语句时,TiDB 会自动更新表的总行数以及修改的行数。这些信息会定期持久化下来,更新的周期为 20 * [`stats-lease`](/tidb-configuration-file.md#stats-lease)。`stats-lease` 配置项的默认值是 3s,如果将其指定为 0,那么统计信息将不会自动更新。 -和统计信息自动更新相关的三个系统变量如下: +#### 相关系统变量 | 系统变量名 | 默认值 | 功能 | |---|---|---| @@ -346,6 +346,12 @@ ANALYZE INCREMENTAL TABLE TableName PARTITION PartitionNameList INDEX [IndexName 为了避免小表因为少量数据修改而频繁触发自动更新,当表的行数小于 1000 时,TiDB 不会触发对此表的自动更新。你可以通过 `SHOW STATS_META` 来查看表的行数情况。 +#### 关闭自动更新 + +如果发现自动更新统计信息消耗过多的资源,影响在线业务,可以通过系统变量 [`tidb_enable_auto_analyze`](/system-variables.md#tidb_enable_auto_analyze-从-v610-版本开始引入) 关闭自动更新。 + +#### 终止后台的 `ANALYZE` 任务 + 从 TiDB v6.0 起,TiDB 支持通过 `KILL` 语句终止正在后台运行的 `ANALYZE` 任务。如果发现正在后台运行的 `ANALYZE` 任务消耗大量资源影响业务,你可以通过以下步骤终止该 `ANALYZE` 任务: 1. 执行以下 SQL 语句: From 0a61ef4e666feea2a9c8b7938ab380fe693160bb Mon Sep 17 00:00:00 2001 From: ShuNing Date: Thu, 18 May 2023 08:05:37 +0530 Subject: [PATCH 113/257] update the behavior change about schedule.enable-diagnostic (#13989) --- pd-configuration-file.md | 2 +- releases/release-7.1.0.md | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/pd-configuration-file.md b/pd-configuration-file.md index e94f366a89b8..d7c3188cb7bf 100644 --- a/pd-configuration-file.md +++ b/pd-configuration-file.md @@ -355,7 +355,7 @@ pd-server 相关配置项。 ### `enable-diagnostic` 从 v6.3.0 版本开始引入 + 是否开启诊断功能。开启特性时,PD 将会记录调度中的一些状态来帮助诊断。开启时会略微影响调度速度,在 Store 数量较多时会消耗较大内存。 -+ 默认值:false ++ 默认值:true ### `hot-regions-write-interval` 从 v5.4.0 版本开始引入 diff --git a/releases/release-7.1.0.md b/releases/release-7.1.0.md index 76dbee97e4a2..d972d32ea2e2 100644 --- a/releases/release-7.1.0.md +++ b/releases/release-7.1.0.md @@ -253,6 +253,7 @@ TiDB 版本:7.1.0 (upcoming) | TiDB | [`force-init-stats`](/tidb-configuration-file.md#force-init-stats-从-v710-版本开始引入) | 新增 | 用于控制 TiDB 启动时是否在统计信息初始化完成后再对外提供服务。 | | TiDB | [`lite-init-stats`](/tidb-configuration-file.md#lite-init-stats-从-v710-版本开始引入) | 新增 | 用于控制 TiDB 启动时是否采用轻量级的统计信息初始化。 | | PD | [`store-limit-version`](/pd-configuration-file.md#store-limit-version-从-v710-版本开始引入) | 新增 | 用于设置 store limit 工作模式。可选值为 `"v1"` 和 `"v2"`。 | +| PD | [`schedule.enable-diagnostic`](/pd-configuration-file.md#enable-diagnostic-从-v630-版本开始引入) | 修改 | 默认值从 `false` 修改为 `true`,默认打开调度器的诊断功能。 | | TiFlash | `http_port` | 删除 | 废弃 TiFlash HTTP 服务端口(默认 `8123`)。 | | TiCDC | [`sink.enable-partition-separator`](/ticdc/ticdc-changefeed-config.md#ticdc-changefeed-配置文件说明) | 修改 | 默认值从 `false` 修改为 `true`,代表默认会将表中各个分区的数据分不同的目录来存储。建议保持该配置项为 `true` 以避免同步分区表到存储服务时可能丢数据的问题。 | From 84bd857aa3942112fed597b5599a2ff96014c2ab Mon Sep 17 00:00:00 2001 From: Aolin Date: Thu, 18 May 2023 11:47:36 +0800 Subject: [PATCH 114/257] =?UTF-8?q?keywords:=20v7.1=20add=20CLOSE;CONTINUE?= =?UTF-8?q?;CURSOR;DECLARE;ELSEIF;EXIT;FOUND;HA=E2=80=A6=20(#13990)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- keywords.md | 31 ++++++++++++++++++++++++------- 1 file changed, 24 insertions(+), 7 deletions(-) diff --git a/keywords.md b/keywords.md index afbe449ae5c6..8a01665c8193 100644 --- a/keywords.md +++ b/keywords.md @@ -141,6 +141,7 @@ Query OK, 0 rows affected (0.08 sec) - CLEANUP - CLIENT - CLIENT_ERRORS_SUMMARY +- CLOSE - CLUSTER - CLUSTERED - CMSKETCH (R) @@ -148,8 +149,8 @@ Query OK, 0 rows affected (0.08 sec) - COLLATE (R) - COLLATION - COLUMN (R) -- COLUMNS - COLUMN_FORMAT +- COLUMNS - COMMENT - COMMIT - COMMITTED @@ -163,6 +164,7 @@ Query OK, 0 rows affected (0.08 sec) - CONSISTENT - CONSTRAINT (R) - CONTEXT +- CONTINUE (R) - CONVERT (R) - CPU - CREATE (R) @@ -181,6 +183,7 @@ Query OK, 0 rows affected (0.08 sec) - CURRENT_TIME (R) - CURRENT_TIMESTAMP (R) - CURRENT_USER (R) +- CURSOR (R) - CYCLE D @@ -198,10 +201,11 @@ Query OK, 0 rows affected (0.08 sec) - DDL (R) - DEALLOCATE - DECIMAL (R) +- DECLARE - DEFAULT (R) - DEFINER -- DELAYED (R) - DELAY_KEY_WRITE +- DELAYED (R) - DELETE (R) - DENSE_RANK (R-Window) - DEPTH (R) @@ -227,6 +231,7 @@ Query OK, 0 rows affected (0.08 sec) E - ELSE (R) +- ELSEIF (R) - ENABLE - ENABLED - ENCLOSED (R) @@ -248,6 +253,7 @@ Query OK, 0 rows affected (0.08 sec) - EXCLUSIVE - EXECUTE - EXISTS (R) +- EXIT (R) - EXPANSION - EXPIRE - EXPLAIN (R) @@ -271,6 +277,7 @@ Query OK, 0 rows affected (0.08 sec) - FORCE (R) - FOREIGN (R) - FORMAT +- FOUND - FROM (R) - FULL - FULLTEXT (R) @@ -288,6 +295,7 @@ Query OK, 0 rows affected (0.08 sec) H +- HANDLER - HASH - HAVING (R) - HELP @@ -315,6 +323,7 @@ Query OK, 0 rows affected (0.08 sec) - INDEXES - INFILE (R) - INNER (R) +- INOUT (R) - INSERT (R) - INSERT_METHOD - INSTANCE @@ -335,6 +344,7 @@ Query OK, 0 rows affected (0.08 sec) - IS (R) - ISOLATION - ISSUER +- ITERATE (R) J @@ -356,11 +366,12 @@ Query OK, 0 rows affected (0.08 sec) - LAG (R-Window) - LANGUAGE - LAST -- LASTVAL - LAST_BACKUP - LAST_VALUE (R-Window) +- LASTVAL - LEAD (R-Window) - LEADING (R) +- LEAVE (R) - LEFT (R) - LESS - LEVEL @@ -450,9 +461,9 @@ Query OK, 0 rows affected (0.08 sec) - OLTP_READ_WRITE - OLTP_WRITE_ONLY - ON (R) +- ON_DUPLICATE - ONLINE - ONLY -- ON_DUPLICATE - OPEN - OPTIMISTIC (R) - OPTIMIZE (R) @@ -461,6 +472,7 @@ Query OK, 0 rows affected (0.08 sec) - OPTIONALLY (R) - OR (R) - ORDER (R) +- OUT (R) - OUTER (R) - OUTFILE (R) - OVER (R-Window) @@ -554,10 +566,10 @@ Query OK, 0 rows affected (0.08 sec) - ROLLBACK - ROUTINE - ROW (R) -- ROWS (R-Window) - ROW_COUNT - ROW_FORMAT - ROW_NUMBER (R-Window) +- ROWS (R-Window) - RTREE S @@ -566,10 +578,10 @@ Query OK, 0 rows affected (0.08 sec) - SAN - SAVEPOINT - SECOND +- SECOND_MICROSECOND (R) - SECONDARY_ENGINE - SECONDARY_LOAD - SECONDARY_UNLOAD -- SECOND_MICROSECOND (R) - SECURITY - SELECT (R) - SEND_CREDENTIALS_TO_TIKV @@ -612,6 +624,9 @@ Query OK, 0 rows affected (0.08 sec) - SQL_TSI_SECOND - SQL_TSI_WEEK - SQL_TSI_YEAR +- SQLEXCEPTION (R) +- SQLSTATE (R) +- SQLWARNING (R) - SSL (R) - START - STARTING (R) @@ -656,7 +671,6 @@ Query OK, 0 rows affected (0.08 sec) - THAN - THEN (R) - TIDB (R) -- TiDB_CURRENT_TSO (R) - TIFLASH (R) - TIKV_IMPORTER - TIME @@ -680,6 +694,7 @@ Query OK, 0 rows affected (0.08 sec) - TTL_ENABLE - TTL_JOB_INTERVAL - TYPE +- TiDB_CURRENT_TSO (R) U @@ -692,6 +707,7 @@ Query OK, 0 rows affected (0.08 sec) - UNKNOWN - UNLOCK (R) - UNSIGNED (R) +- UNTIL (R) - UPDATE (R) - USAGE (R) - USE (R) @@ -723,6 +739,7 @@ Query OK, 0 rows affected (0.08 sec) - WEIGHT_STRING - WHEN (R) - WHERE (R) +- WHILE (R) - WIDTH (R) - WINDOW (R-Window) - WITH (R) From b664e9b92c7a4d5ad64a934b24d95a720cc272f3 Mon Sep 17 00:00:00 2001 From: tonyxuqqi Date: Wed, 17 May 2023 21:23:35 -0700 Subject: [PATCH 115/257] multirocks related config update (#13991) --- configure-load-base-split.md | 6 +++--- releases/release-7.1.0.md | 3 +++ tikv-configuration-file.md | 28 ++++++++++++++++++++++++++++ 3 files changed, 34 insertions(+), 3 deletions(-) diff --git a/configure-load-base-split.md b/configure-load-base-split.md index 200bbd63c4ff..e05e62e016c3 100644 --- a/configure-load-base-split.md +++ b/configure-load-base-split.md @@ -31,9 +31,9 @@ Load Base Split 后的 Region 不会被迅速 Merge。一方面,PD 的 `MergeC 目前的 Load Base Split 的控制参数如下: -- `split.qps-threshold`:表明一个 Region 被识别为热点的 QPS 阈值,默认为每秒 `3000` QPS。 -- `split.byte-threshold`:自 v5.0 引入,表明一个 Region 被识别为热点的流量阈值,单位为 Byte,默认为每秒 `30 MiB` 流量。 -- `split.region-cpu-overload-threshold-ratio`:自 v6.2.0 引入,表明一个 Region 被识别为热点的 CPU 使用率(占读线程池 CPU 时间的百分比)阈值,默认为 `0.25`。 +- [`split.qps-threshold`](/tikv-configuration-file.md#qps-threshold):表明一个 Region 被识别为热点的 QPS 阈值。当 [`region-split-size`](/tikv-configuration-file.md#region-split-size) 小于 4 GB 时,默认为每秒 `3000` QPS。当 `region-split-size` 大于或等于 4 GB 时,默认值为每秒 `7000` QPS。 +- [`split.byte-threshold`](/tikv-configuration-file.md#byte-threshold-从-v50-版本开始引入):自 v5.0 引入,表明一个 Region 被识别为热点的流量阈值,单位为 Byte。当 `region-split-size` 小于 4 GB 时,默认值为每秒 `30 MiB` 流量。当 `region-split-size` 大于或等于 4 GB 时,默认值为每秒 `100 MiB` 流量。 +- [`split.region-cpu-overload-threshold-ratio`](/tikv-configuration-file.md#region-cpu-overload-threshold-ratio-从-v620-版本开始引入):自 v6.2.0 引入,表明一个 Region 被识别为热点的 CPU 使用率(占读线程池 CPU 时间的百分比)阈值。当 `region-split-size` 小于 4 GB 时,默认值为 `0.25`。当 `region-split-size` 大于或等于 4 GB 时,默认值为 `0.75`。 如果连续 10s 内,某个 Region 每秒的各类读请求之和超过了 `split.qps-threshold`、流量超过了 `split.byte-threshold`,或 CPU 使用率在 Unified Read Pool 内的占比超过了 `split.region-cpu-overload-threshold-ratio`,那么就会尝试对此 Region 进行拆分。 diff --git a/releases/release-7.1.0.md b/releases/release-7.1.0.md index d972d32ea2e2..e1872833bef3 100644 --- a/releases/release-7.1.0.md +++ b/releases/release-7.1.0.md @@ -252,6 +252,9 @@ TiDB 版本:7.1.0 (upcoming) | -------- | -------- | -------- | -------- | | TiDB | [`force-init-stats`](/tidb-configuration-file.md#force-init-stats-从-v710-版本开始引入) | 新增 | 用于控制 TiDB 启动时是否在统计信息初始化完成后再对外提供服务。 | | TiDB | [`lite-init-stats`](/tidb-configuration-file.md#lite-init-stats-从-v710-版本开始引入) | 新增 | 用于控制 TiDB 启动时是否采用轻量级的统计信息初始化。 | +| TiKV | [`split.byte-threshold`](/tikv-configuration-file.md#byte-threshold-从-v50-版本开始引入) | 修改 | 当 [`region-split-size`](/tikv-configuration-file.md#region-split-size) 大于等于 4 GB 时,默认值从 `30MiB` 修改为 `100MiB`。 | +| TiKV | [`split.qps-threshold`](/tikv-configuration-file.md#qps-threshold) | 修改 | 当 [`region-split-size`](/tikv-configuration-file.md#region-split-size) 大于等于 4 GB 时,默认值从 `3000` 修改为 `7000`。 | +| TiKV | [`split.region-cpu-overload-threshold-ratio`](/tikv-configuration-file.md#region-cpu-overload-threshold-ratio-从-v620-版本开始引入) | 修改 | 当 [`region-split-size`](/tikv-configuration-file.md#region-split-size) 大于等于 4 GB 时,默认值从 `0.25` 修改为 `0.75`。 | | PD | [`store-limit-version`](/pd-configuration-file.md#store-limit-version-从-v710-版本开始引入) | 新增 | 用于设置 store limit 工作模式。可选值为 `"v1"` 和 `"v2"`。 | | PD | [`schedule.enable-diagnostic`](/pd-configuration-file.md#enable-diagnostic-从-v630-版本开始引入) | 修改 | 默认值从 `false` 修改为 `true`,默认打开调度器的诊断功能。 | | TiFlash | `http_port` | 删除 | 废弃 TiFlash HTTP 服务端口(默认 `8123`)。 | diff --git a/tikv-configuration-file.md b/tikv-configuration-file.md index 6af3e1f3709e..1b2695a5a664 100644 --- a/tikv-configuration-file.md +++ b/tikv-configuration-file.md @@ -2233,3 +2233,31 @@ Raft Engine 相关的配置项。 + 是否支持对用户前台的读写请求按照对应的资源组配额做优先级调度。有关 TiDB 资源组和资源管控的信息,请参考 [TiDB 资源管控](/tidb-resource-control.md) + 在 TiDB 侧开启 [`tidb_enable_resource_control`](/system-variables.md#tidb_enable_resource_control-从-v660-版本开始引入) 全局变量的情况下,开启这个配置项才有意义。此配置参数开启后,TiKV 会使用优先级队列对排队的用户前台读写请求做调度,调度的优先级和请求所在资源组已经消费的资源量反相关,和对应资源组的配额正相关。 + 默认值:true(即开启按照资源组配额调度) + +## split + +[Load Base Split](/configure-load-base-split.md) 相关的配置项。 + +### `byte-threshold` 从 v5.0 版本开始引入 + ++ 控制某个 Region 被识别为热点 Region 的流量阈值。 ++ 默认值: + + + 当 [`region-split-size`](#region-split-size) 小于 4 GB 时,默认值为每秒 `30MiB` 流量。 + + 当 [`region-split-size`](#region-split-size) 大于或等于 4 GB 时,默认值为每秒 `100MiB` 流量。 + +### `qps-threshold` + ++ 控制某个 Region 被识别为热点 Region 的 QPS 阈值。 ++ 默认值: + + + 当 [`region-split-size`](#region-split-size) 小于 4 GB 时,默认值为每秒 `3000` QPS。 + + 当 [`region-split-size`](#region-split-size) 大于或等于 4 GB 时,默认值为每秒 `7000` QPS。 + +### `region-cpu-overload-threshold-ratio` 从 v6.2.0 版本开始引入 + ++ 控制某个 Region 被识别为热点 Region 的 CPU 使用率阈值。 ++ 默认值: + + + 当 [`region-split-size`](#region-split-size) 小于 4 GB 时,默认值为 `0.25`。 + + 当 [`region-split-size`](#region-split-size) 大于或等于 4 GB 时,默认值为 `0.75`。 \ No newline at end of file From fe9bbb5819640341cbaf1492cf7aef85b50ca5b6 Mon Sep 17 00:00:00 2001 From: Aolin Date: Thu, 18 May 2023 14:27:36 +0800 Subject: [PATCH 116/257] update reference-style links to inline links (#13660) --- .../expressions-pushed-down.md | 310 +----------------- functions-and-operators/json-functions.md | 134 ++------ tidb-lightning/tidb-lightning-data-source.md | 4 +- 3 files changed, 46 insertions(+), 402 deletions(-) diff --git a/functions-and-operators/expressions-pushed-down.md b/functions-and-operators/expressions-pushed-down.md index be491e615200..867d8dca2191 100644 --- a/functions-and-operators/expressions-pushed-down.md +++ b/functions-and-operators/expressions-pushed-down.md @@ -15,306 +15,18 @@ TiFlash 也支持[本页](/tiflash/tiflash-supported-pushdown-calculations.md) | 表达式分类 | 具体操作 | | :-------------- | :------------------------------------- | | [逻辑运算](/functions-and-operators/operators.md#逻辑操作符) | AND (&&), OR (||), NOT (!), XOR | -| [位运算](/functions-and-operators/operators.md#操作符) | [&][operator_bitwise-and], [~][operator_bitwise-invert], [\|][operator_bitwise-or], [^][operator_bitwise-xor], [<<][operator_left-shift], [>>][operator_right-shift] | -| [比较运算](/functions-and-operators/operators.md#比较方法和操作符) | [<][operator_less-than], [<=][operator_less-than-or-equal], [=][operator_equal], [!= (<\>)][operator_not-equal], [>][operator_greater-than], [>=][operator_greater-than-or-equal], [<=>][operator_equal-to], [BETWEEN ... AND ...][operator_between], [COALESCE()][function_coalesce], [IN()][operator_in], [INTERVAL()][function_interval], [IS NOT NULL][operator_is-not-null], [IS NOT][operator_is-not], [IS NULL][operator_is-null], [IS][operator_is], [ISNULL()][function_isnull], [LIKE][operator_like], [NOT BETWEEN ... AND ...][operator_not-between], [NOT IN()][operator_not-in], [NOT LIKE][operator_not-like], [STRCMP()][function_strcmp] | -| [数值运算](/functions-and-operators/numeric-functions-and-operators.md) | [+][operator_plus], [-][operator_minus], [*][operator_times], [/][operator_divide], [DIV][operator_div], [% (MOD)][operator_mod], [-][operator_unary-minus], [ABS()][function_abs], [ACOS()][function_acos], [ASIN()][function_asin], [ATAN()][function_atan], [ATAN2(), ATAN()][function_atan2], [CEIL()][function_ceil], [CEILING()][function_ceiling], [CONV()][function_conv], [COS()][function_cos], [COT()][function_cot], [CRC32()][function_crc32], [DEGREES()][function_degrees], [EXP()][function_exp], [FLOOR()][function_floor], [LN()][function_ln], [LOG()][function_log], [LOG10()][function_log10], [LOG2()][function_log2], [MOD()][function_mod], [PI()][function_pi], [POW()][function_pow], [POWER()][function_power], [RADIANS()][function_radians], [RAND()][function_rand], [ROUND()][function_round], [SIGN()][function_sign], [SIN()][function_sin], [SQRT()][function_sqrt] | -| [控制流运算](/functions-and-operators/control-flow-functions.md) | [CASE][operator_case], [IF()][function_if], [IFNULL()][function_ifnull] | -| [JSON 运算](/functions-and-operators/json-functions.md) | [JSON_ARRAY([val[, val] ...])][json_array],
[JSON_CONTAINS(target, candidate[, path])][json_contains],
[JSON_EXTRACT(json_doc, path[, path] ...)][json_extract],
[JSON_INSERT(json_doc, path, val[, path, val] ...)][json_insert],
[JSON_LENGTH(json_doc[, path])][json_length],
[JSON_MERGE(json_doc, json_doc[, json_doc] ...)][json_merge],
[JSON_OBJECT([key, val[, key, val] ...])][json_object],
[JSON_REMOVE(json_doc, path[, path] ...)][json_remove],
[JSON_REPLACE(json_doc, path, val[, path, val] ...)][json_replace],
[JSON_SET(json_doc, path, val[, path, val] ...)][json_set],
[JSON_TYPE(json_val)][json_type],
[JSON_UNQUOTE(json_val)][json_unquote],
[JSON_VALID(val)][json_valid] | -| [日期运算](/functions-and-operators/date-and-time-functions.md) | [DATE()][function_date], [DATE_FORMAT()][function_date-format], [DATEDIFF()][function_datediff], [DAYOFMONTH()][function_dayofmonth], [DAYOFWEEK()][function_dayofweek], [DAYOFYEAR()][function_dayofyear], [FROM_DAYS()][function_from-days], [HOUR()][function_hour], [MAKEDATE()][function_makedate], [MAKETIME()][function_maketime], [MICROSECOND()][function_microsecond], [MINUTE()][function_minute], [MONTH()][function_month], [MONTHNAME()][function_monthname], [PERIOD_ADD()][function_period-add], [PERIOD_DIFF()][function_period-diff], [SEC_TO_TIME()][function_sec-to-time], [SECOND()][function_second], [SYSDATE()][function_sysdate], [TIME_TO_SEC()][function_time-to-sec], [TIMEDIFF()][function_timediff], [WEEK()][function_week], [WEEKOFYEAR()][function_weekofyear], [YEAR()][function_year] | -| [字符串函数](/functions-and-operators/string-functions.md) | [ASCII()][function_ascii], [BIT_LENGTH()][function_bit-length], [CHAR()][function_char], [CHAR_LENGTH()][function_char-length], [CONCAT()][function_concat], [CONCAT_WS()][function_concat-ws], [ELT()][function_elt], [FIELD()][function_field], [HEX()][function_hex], [LENGTH()][function_length], [LIKE][operator_like], [LTRIM()][function_ltrim], [MID()][function_mid], [NOT LIKE][operator_not-like], [NOT REGEXP][operator_not-regexp], [REGEXP][operator_regexp], [REPLACE()][function_replace], [REVERSE()][function_reverse], [RIGHT()][function_right], [RTRIM()][function_rtrim], [SPACE()][function_space], [STRCMP()][function_strcmp], [SUBSTR()][function_substr], [SUBSTRING()][function_substring] | -| [聚合函数](/functions-and-operators/aggregate-group-by-functions.md#group-by-聚合函数) | [COUNT()][function_count], [COUNT(DISTINCT)][function_count-distinct], [SUM()][function_sum], [AVG()][function_avg], [MAX()][function_max], [MIN()][function_min], [VARIANCE()][function_variance], [VAR_POP()][function_var-pop], [STD()][function_std], [STDDEV()][function_stddev], [STDDEV_POP][function_stddev-pop], [VAR_SAMP()][function_var-samp], [STDDEV_SAMP()][function_stddev-samp], [JSON_ARRAYAGG(key)][json_arrayagg], [JSON_OBJECTAGG(key, value)][function_json-objectagg] | -| [加密和压缩函数](/functions-and-operators/encryption-and-compression-functions.md#加密和压缩函数) | [MD5()][function_md5], [SHA1(), SHA()][function_sha1], [UNCOMPRESSED_LENGTH()][function_uncompressed-length] | -| [Cast 函数](/functions-and-operators/cast-functions-and-operators.md#cast-函数和操作符) | [CAST()][function_cast], [CONVERT()][function_convert] | -| [其他函数](/functions-and-operators/miscellaneous-functions.md#支持的函数) | [UUID()][function_uuid] | +| [位运算](/functions-and-operators/operators.md#操作符) | [&](https://dev.mysql.com/doc/refman/5.7/en/bit-functions.html#operator_bitwise-and), [~](https://dev.mysql.com/doc/refman/5.7/en/bit-functions.html#operator_bitwise-invert), [\|](https://dev.mysql.com/doc/refman/5.7/en/bit-functions.html#operator_bitwise-or), [`^`](https://dev.mysql.com/doc/refman/5.7/en/bit-functions.html#operator_bitwise-xor), [`<<`](https://dev.mysql.com/doc/refman/5.7/en/bit-functions.html#operator_left-shift), [`>>`](https://dev.mysql.com/doc/refman/5.7/en/bit-functions.html#operator_right-shift) | +| [比较运算](/functions-and-operators/operators.md#比较方法和操作符) | [`<`](https://dev.mysql.com/doc/refman/5.7/en/comparison-operators.html#operator_less-than), [`<=`](https://dev.mysql.com/doc/refman/5.7/en/comparison-operators.html#operator_less-than-or-equal), [`=`](https://dev.mysql.com/doc/refman/5.7/en/comparison-operators.html#operator_equal), [`!= (<>)`](https://dev.mysql.com/doc/refman/5.7/en/comparison-operators.html#operator_not-equal), [`>`](https://dev.mysql.com/doc/refman/5.7/en/comparison-operators.html#operator_greater-than), [`>=`](https://dev.mysql.com/doc/refman/5.7/en/comparison-operators.html#operator_greater-than-or-equal), [`<=>`](https://dev.mysql.com/doc/refman/5.7/en/comparison-operators.html#operator_equal-to), [BETWEEN ... AND ...](https://dev.mysql.com/doc/refman/5.7/en/comparison-operators.html#operator_between), [COALESCE()](https://dev.mysql.com/doc/refman/5.7/en/comparison-operators.html#function_coalesce), [IN()](https://dev.mysql.com/doc/refman/5.7/en/comparison-operators.html#operator_in), [INTERVAL()](https://dev.mysql.com/doc/refman/5.7/en/comparison-operators.html#function_interval), [IS NOT NULL](https://dev.mysql.com/doc/refman/5.7/en/comparison-operators.html#operator_is-not-null), [IS NOT](https://dev.mysql.com/doc/refman/5.7/en/comparison-operators.html#operator_is-not), [IS NULL](https://dev.mysql.com/doc/refman/5.7/en/comparison-operators.html#operator_is-null), [IS](https://dev.mysql.com/doc/refman/5.7/en/comparison-operators.html#operator_is), [ISNULL()](https://dev.mysql.com/doc/refman/5.7/en/comparison-operators.html#function_isnull), [LIKE](https://dev.mysql.com/doc/refman/5.7/en/string-comparison-functions.html#operator_like), [NOT BETWEEN ... AND ...](https://dev.mysql.com/doc/refman/5.7/en/comparison-operators.html#operator_not-between), [NOT IN()](https://dev.mysql.com/doc/refman/5.7/en/comparison-operators.html#operator_not-in), [NOT LIKE](https://dev.mysql.com/doc/refman/5.7/en/string-comparison-functions.html#operator_not-like), [STRCMP()](https://dev.mysql.com/doc/refman/5.7/en/string-comparison-functions.html#function_strcmp) | +| [数值运算](/functions-and-operators/numeric-functions-and-operators.md) | [+](https://dev.mysql.com/doc/refman/5.7/en/arithmetic-functions.html#operator_plus), [-](https://dev.mysql.com/doc/refman/5.7/en/arithmetic-functions.html#operator_minus), [*](https://dev.mysql.com/doc/refman/5.7/en/arithmetic-functions.html#operator_times), [/](https://dev.mysql.com/doc/refman/5.7/en/arithmetic-functions.html#operator_divide), [DIV](https://dev.mysql.com/doc/refman/5.7/en/arithmetic-functions.html#operator_div), [% (MOD)](https://dev.mysql.com/doc/refman/5.7/en/arithmetic-functions.html#operator_mod), [-](https://dev.mysql.com/doc/refman/5.7/en/arithmetic-functions.html#operator_unary-minus), [ABS()](https://dev.mysql.com/doc/refman/5.7/en/mathematical-functions.html#function_abs), [ACOS()](https://dev.mysql.com/doc/refman/5.7/en/mathematical-functions.html#function_acos), [ASIN()](https://dev.mysql.com/doc/refman/5.7/en/mathematical-functions.html#function_asin), [ATAN()](https://dev.mysql.com/doc/refman/5.7/en/mathematical-functions.html#function_atan), [ATAN2(), ATAN()](https://dev.mysql.com/doc/refman/5.7/en/mathematical-functions.html#function_atan2), [CEIL()](https://dev.mysql.com/doc/refman/5.7/en/mathematical-functions.html#function_ceil), [CEILING()](https://dev.mysql.com/doc/refman/5.7/en/mathematical-functions.html#function_ceiling), [CONV()](https://dev.mysql.com/doc/refman/5.7/en/mathematical-functions.html#function_conv), [COS()](https://dev.mysql.com/doc/refman/5.7/en/mathematical-functions.html#function_cos), [COT()](https://dev.mysql.com/doc/refman/5.7/en/mathematical-functions.html#function_cot), [CRC32()](https://dev.mysql.com/doc/refman/5.7/en/mathematical-functions.html#function_crc32), [DEGREES()](https://dev.mysql.com/doc/refman/5.7/en/mathematical-functions.html#function_degrees), [EXP()](https://dev.mysql.com/doc/refman/5.7/en/mathematical-functions.html#function_exp), [FLOOR()](https://dev.mysql.com/doc/refman/5.7/en/mathematical-functions.html#function_floor), [LN()](https://dev.mysql.com/doc/refman/5.7/en/mathematical-functions.html#function_ln), [LOG()](https://dev.mysql.com/doc/refman/5.7/en/mathematical-functions.html#function_log), [LOG10()](https://dev.mysql.com/doc/refman/5.7/en/mathematical-functions.html#function_log10), [LOG2()](https://dev.mysql.com/doc/refman/5.7/en/mathematical-functions.html#function_log2), [MOD()](https://dev.mysql.com/doc/refman/5.7/en/mathematical-functions.html#function_mod), [PI()](https://dev.mysql.com/doc/refman/5.7/en/mathematical-functions.html#function_pi), [POW()](https://dev.mysql.com/doc/refman/5.7/en/mathematical-functions.html#function_pow), [POWER()](https://dev.mysql.com/doc/refman/5.7/en/mathematical-functions.html#function_power), [RADIANS()](https://dev.mysql.com/doc/refman/5.7/en/mathematical-functions.html#function_radians), [RAND()](https://dev.mysql.com/doc/refman/5.7/en/mathematical-functions.html#function_rand), [ROUND()](https://dev.mysql.com/doc/refman/5.7/en/mathematical-functions.html#function_round), [SIGN()](https://dev.mysql.com/doc/refman/5.7/en/mathematical-functions.html#function_sign), [SIN()](https://dev.mysql.com/doc/refman/5.7/en/mathematical-functions.html#function_sin), [SQRT()](https://dev.mysql.com/doc/refman/5.7/en/mathematical-functions.html#function_sqrt) | +| [控制流运算](/functions-and-operators/control-flow-functions.md) | [CASE](https://dev.mysql.com/doc/refman/5.7/en/flow-control-functions.html#operator_case), [IF()](https://dev.mysql.com/doc/refman/5.7/en/flow-control-functions.html#function_if), [IFNULL()](https://dev.mysql.com/doc/refman/5.7/en/flow-control-functions.html#function_ifnull) | +| [JSON 运算](/functions-and-operators/json-functions.md) | [JSON_ARRAY([val[, val] ...])](https://dev.mysql.com/doc/refman/5.7/en/json-creation-functions.html#function_json-array),
[JSON_CONTAINS(target, candidate[, path])](https://dev.mysql.com/doc/refman/5.7/en/json-search-functions.html#function_json-contains),
[JSON_EXTRACT(json_doc, path[, path] ...)](https://dev.mysql.com/doc/refman/5.7/en/json-search-functions.html#function_json-extract),
[JSON_INSERT(json_doc, path, val[, path, val] ...)](https://dev.mysql.com/doc/refman/5.7/en/json-modification-functions.html#function_json-insert),
[JSON_LENGTH(json_doc[, path])](https://dev.mysql.com/doc/refman/5.7/en/json-attribute-functions.html#function_json-length),
[JSON_MERGE(json_doc, json_doc[, json_doc] ...)](https://dev.mysql.com/doc/refman/5.7/en/json-modification-functions.html#function_json-merge),
[JSON_OBJECT([key, val[, key, val] ...])](https://dev.mysql.com/doc/refman/5.7/en/json-creation-functions.html#function_json-object),
[JSON_REMOVE(json_doc, path[, path] ...)](https://dev.mysql.com/doc/refman/5.7/en/json-modification-functions.html#function_json-remove),
[JSON_REPLACE(json_doc, path, val[, path, val] ...)](https://dev.mysql.com/doc/refman/5.7/en/json-modification-functions.html#function_json-replace),
[JSON_SET(json_doc, path, val[, path, val] ...)](https://dev.mysql.com/doc/refman/5.7/en/json-modification-functions.html#function_json-set),
[JSON_TYPE(json_val)](https://dev.mysql.com/doc/refman/5.7/en/json-attribute-functions.html#function_json-type),
[JSON_UNQUOTE(json_val)](https://dev.mysql.com/doc/refman/5.7/en/json-modification-functions.html#function_json-unquote),
[JSON_VALID(val)](https://dev.mysql.com/doc/refman/5.7/en/json-attribute-functions.html#function_json-valid) | +| [日期运算](/functions-and-operators/date-and-time-functions.md) | [DATE()](https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_date), [DATE_FORMAT()](https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_date-format), [DATEDIFF()](https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_datediff), [DAYOFMONTH()](https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_dayofmonth), [DAYOFWEEK()](https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_dayofweek), [DAYOFYEAR()](https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_dayofyear), [FROM_DAYS()](https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_from-days), [HOUR()](https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_hour), [MAKEDATE()](https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_makedate), [MAKETIME()](https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_maketime), [MICROSECOND()](https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_microsecond), [MINUTE()](https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_minute), [MONTH()](https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_month), [MONTHNAME()](https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_monthname), [PERIOD_ADD()](https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_period-add), [PERIOD_DIFF()](https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_period-diff), [SEC_TO_TIME()](https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_sec-to-time), [SECOND()](https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_second), [SYSDATE()](https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_sysdate), [TIME_TO_SEC()](https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_time-to-sec), [TIMEDIFF()](https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_timediff), [WEEK()](https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_week), [WEEKOFYEAR()](https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_weekofyear), [YEAR()](https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_year) | +| [字符串函数](/functions-and-operators/string-functions.md) | [ASCII()](https://dev.mysql.com/doc/refman/5.7/en/string-functions.html#function_ascii), [BIT_LENGTH()](https://dev.mysql.com/doc/refman/5.7/en/string-functions.html#function_bit-length), [CHAR()](https://dev.mysql.com/doc/refman/5.7/en/string-functions.html#function_char), [CHAR_LENGTH()](https://dev.mysql.com/doc/refman/5.7/en/string-functions.html#function_char-length), [CONCAT()](https://dev.mysql.com/doc/refman/5.7/en/string-functions.html#function_concat), [CONCAT_WS()](https://dev.mysql.com/doc/refman/5.7/en/string-functions.html#function_concat-ws), [ELT()](https://dev.mysql.com/doc/refman/5.7/en/string-functions.html#function_elt), [FIELD()](https://dev.mysql.com/doc/refman/5.7/en/string-functions.html#function_field), [HEX()](https://dev.mysql.com/doc/refman/5.7/en/string-functions.html#function_hex), [LENGTH()](https://dev.mysql.com/doc/refman/5.7/en/string-functions.html#function_length), [LIKE](https://dev.mysql.com/doc/refman/5.7/en/string-comparison-functions.html#operator_like), [LTRIM()](https://dev.mysql.com/doc/refman/5.7/en/string-functions.html#function_ltrim), [MID()](https://dev.mysql.com/doc/refman/5.7/en/string-functions.html#function_mid), [NOT LIKE](https://dev.mysql.com/doc/refman/5.7/en/string-comparison-functions.html#operator_not-like), [NOT REGEXP](https://dev.mysql.com/doc/refman/5.7/en/regexp.html#operator_not-regexp), [REGEXP](https://dev.mysql.com/doc/refman/5.7/en/regexp.html#operator_regexp), [REPLACE()](https://dev.mysql.com/doc/refman/5.7/en/string-functions.html#function_replace), [REVERSE()](https://dev.mysql.com/doc/refman/5.7/en/string-functions.html#function_reverse), [RIGHT()](https://dev.mysql.com/doc/refman/5.7/en/string-functions.html#function_right), [RTRIM()](https://dev.mysql.com/doc/refman/5.7/en/string-functions.html#function_rtrim), [SPACE()](https://dev.mysql.com/doc/refman/5.7/en/string-functions.html#function_space), [STRCMP()](https://dev.mysql.com/doc/refman/5.7/en/string-comparison-functions.html#function_strcmp), [SUBSTR()](https://dev.mysql.com/doc/refman/5.7/en/string-functions.html#function_substr), [SUBSTRING()](https://dev.mysql.com/doc/refman/5.7/en/string-functions.html#function_substring) | +| [聚合函数](/functions-and-operators/aggregate-group-by-functions.md#group-by-聚合函数) | [COUNT()](https://dev.mysql.com/doc/refman/5.7/en/aggregate-functions.html#function_count), [COUNT(DISTINCT)](https://dev.mysql.com/doc/refman/5.7/en/aggregate-functions.html#function_count-distinct), [SUM()](https://dev.mysql.com/doc/refman/5.7/en/aggregate-functions.html#function_sum), [AVG()](https://dev.mysql.com/doc/refman/5.7/en/aggregate-functions.html#function_avg), [MAX()](https://dev.mysql.com/doc/refman/5.7/en/aggregate-functions.html#function_max), [MIN()](https://dev.mysql.com/doc/refman/5.7/en/aggregate-functions.html#function_min), [VARIANCE()](https://dev.mysql.com/doc/refman/5.7/en/aggregate-functions.html#function_variance), [VAR_POP()](https://dev.mysql.com/doc/refman/5.7/en/aggregate-functions.html#function_var-pop), [STD()](https://dev.mysql.com/doc/refman/5.7/en/aggregate-functions.html#function_std), [STDDEV()](https://dev.mysql.com/doc/refman/5.7/en/aggregate-functions.html#function_stddev), [STDDEV_POP](https://dev.mysql.com/doc/refman/5.7/en/aggregate-functions.html#function_stddev-pop), [VAR_SAMP()](https://dev.mysql.com/doc/refman/5.7/en/aggregate-functions.html#function_var-samp), [STDDEV_SAMP()](https://dev.mysql.com/doc/refman/5.7/en/aggregate-functions.html#function_stddev-samp), [JSON_ARRAYAGG(key)](https://dev.mysql.com/doc/refman/5.7/en/aggregate-functions.html#function_json-arrayagg), [JSON_OBJECTAGG(key, value)](https://dev.mysql.com/doc/refman/5.7/en/aggregate-functions.html#function_json-objectagg) | +| [加密和压缩函数](/functions-and-operators/encryption-and-compression-functions.md#加密和压缩函数) | [MD5()](https://dev.mysql.com/doc/refman/5.7/en/encryption-functions.html#function_md5), [SHA1(), SHA()](https://dev.mysql.com/doc/refman/5.7/en/encryption-functions.html#function_sha1), [UNCOMPRESSED_LENGTH()](https://dev.mysql.com/doc/refman/5.7/en/encryption-functions.html#function_uncompressed-length) | +| [Cast 函数](/functions-and-operators/cast-functions-and-operators.md#cast-函数和操作符) | [CAST()](https://dev.mysql.com/doc/refman/5.7/en/cast-functions.html#function_cast), [CONVERT()](https://dev.mysql.com/doc/refman/5.7/en/cast-functions.html#function_convert) | +| [其他函数](/functions-and-operators/miscellaneous-functions.md#支持的函数) | [UUID()](https://dev.mysql.com/doc/refman/5.7/en/miscellaneous-functions.html#function_uuid) | ## 禁止特定表达式下推 当[已支持下推的表达式列表](#已支持下推的表达式列表)中的函数和运算符,或特定的数据类型(**仅限** [`ENUM` 类型](/data-type-string.md#enum-类型)和 [`BIT` 类型](/data-type-numeric.md#bit-类型))的计算过程因下推而出现异常时,你可以使用黑名单功能禁止其下推,从而快速恢复 TiDB 业务。具体而言,你可以将函数名、运算符名,或数据列类型加入黑名单 `mysql.expr_pushdown_blacklist` 中,以禁止特定表达式下推。具体方法,请参阅[表达式下推黑名单](/blocklist-control-plan.md#禁止特定表达式下推)。 - -[function_abs]: https://dev.mysql.com/doc/refman/5.7/en/mathematical-functions.html#function_abs - -[function_acos]: https://dev.mysql.com/doc/refman/5.7/en/mathematical-functions.html#function_acos - -[function_ascii]: https://dev.mysql.com/doc/refman/5.7/en/string-functions.html#function_ascii - -[function_asin]: https://dev.mysql.com/doc/refman/5.7/en/mathematical-functions.html#function_asin - -[function_atan]: https://dev.mysql.com/doc/refman/5.7/en/mathematical-functions.html#function_atan - -[function_atan2]: https://dev.mysql.com/doc/refman/5.7/en/mathematical-functions.html#function_atan2 - -[function_avg]: https://dev.mysql.com/doc/refman/5.7/en/aggregate-functions.html#function_avg - -[function_bit-length]: https://dev.mysql.com/doc/refman/5.7/en/string-functions.html#function_bit-length - -[function_cast]: https://dev.mysql.com/doc/refman/5.7/en/cast-functions.html#function_cast - -[function_ceil]: https://dev.mysql.com/doc/refman/5.7/en/mathematical-functions.html#function_ceil - -[function_ceiling]: https://dev.mysql.com/doc/refman/5.7/en/mathematical-functions.html#function_ceiling - -[function_char-length]: https://dev.mysql.com/doc/refman/5.7/en/string-functions.html#function_char-length - -[function_char]: https://dev.mysql.com/doc/refman/5.7/en/string-functions.html#function_char - -[function_coalesce]: https://dev.mysql.com/doc/refman/5.7/en/comparison-operators.html#function_coalesce - -[function_concat-ws]: https://dev.mysql.com/doc/refman/5.7/en/string-functions.html#function_concat-ws - -[function_concat]: https://dev.mysql.com/doc/refman/5.7/en/string-functions.html#function_concat - -[function_conv]: https://dev.mysql.com/doc/refman/5.7/en/mathematical-functions.html#function_conv - -[function_convert]: https://dev.mysql.com/doc/refman/5.7/en/cast-functions.html#function_convert - -[function_cos]: https://dev.mysql.com/doc/refman/5.7/en/mathematical-functions.html#function_cos - -[function_cot]: https://dev.mysql.com/doc/refman/5.7/en/mathematical-functions.html#function_cot - -[function_count-distinct]: https://dev.mysql.com/doc/refman/5.7/en/aggregate-functions.html#function_count-distinct - -[function_count]: https://dev.mysql.com/doc/refman/5.7/en/aggregate-functions.html#function_count - -[function_crc32]: https://dev.mysql.com/doc/refman/5.7/en/mathematical-functions.html#function_crc32 - -[function_date-format]: https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_date-format - -[function_date]: https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_date - -[function_datediff]: https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_datediff - -[function_dayofmonth]: https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_dayofmonth - -[function_dayofweek]: https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_dayofweek - -[function_dayofyear]: https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_dayofyear - -[function_degrees]: https://dev.mysql.com/doc/refman/5.7/en/mathematical-functions.html#function_degrees - -[function_elt]: https://dev.mysql.com/doc/refman/5.7/en/string-functions.html#function_elt - -[function_exp]: https://dev.mysql.com/doc/refman/5.7/en/mathematical-functions.html#function_exp - -[function_field]: https://dev.mysql.com/doc/refman/5.7/en/string-functions.html#function_field - -[function_floor]: https://dev.mysql.com/doc/refman/5.7/en/mathematical-functions.html#function_floor - -[function_from-days]: https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_from-days - -[function_hex]: https://dev.mysql.com/doc/refman/5.7/en/string-functions.html#function_hex - -[function_hour]: https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_hour - -[function_if]: https://dev.mysql.com/doc/refman/5.7/en/flow-control-functions.html#function_if - -[function_ifnull]: https://dev.mysql.com/doc/refman/5.7/en/flow-control-functions.html#function_ifnull - -[function_interval]: https://dev.mysql.com/doc/refman/5.7/en/comparison-operators.html#function_interval - -[function_isnull]: https://dev.mysql.com/doc/refman/5.7/en/comparison-operators.html#function_isnull - -[function_json-objectagg]: https://dev.mysql.com/doc/refman/5.7/en/aggregate-functions.html#function_json-objectagg - -[function_length]: https://dev.mysql.com/doc/refman/5.7/en/string-functions.html#function_length - -[function_ln]: https://dev.mysql.com/doc/refman/5.7/en/mathematical-functions.html#function_ln - -[function_log]: https://dev.mysql.com/doc/refman/5.7/en/mathematical-functions.html#function_log - -[function_log10]: https://dev.mysql.com/doc/refman/5.7/en/mathematical-functions.html#function_log10 - -[function_log2]: https://dev.mysql.com/doc/refman/5.7/en/mathematical-functions.html#function_log2 - -[function_ltrim]: https://dev.mysql.com/doc/refman/5.7/en/string-functions.html#function_ltrim - -[function_makedate]: https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_makedate - -[function_maketime]: https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_maketime - -[function_max]: https://dev.mysql.com/doc/refman/5.7/en/aggregate-functions.html#function_max - -[function_md5]: https://dev.mysql.com/doc/refman/5.7/en/encryption-functions.html#function_md5 - -[function_microsecond]: https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_microsecond - -[function_mid]: https://dev.mysql.com/doc/refman/5.7/en/string-functions.html#function_mid - -[function_min]: https://dev.mysql.com/doc/refman/5.7/en/aggregate-functions.html#function_min - -[function_minute]: https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_minute - -[function_mod]: https://dev.mysql.com/doc/refman/5.7/en/mathematical-functions.html#function_mod - -[function_month]: https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_month - -[function_monthname]: https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_monthname - -[function_period-add]: https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_period-add - -[function_period-diff]: https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_period-diff - -[function_pi]: https://dev.mysql.com/doc/refman/5.7/en/mathematical-functions.html#function_pi - -[function_pow]: https://dev.mysql.com/doc/refman/5.7/en/mathematical-functions.html#function_pow - -[function_power]: https://dev.mysql.com/doc/refman/5.7/en/mathematical-functions.html#function_power - -[function_radians]: https://dev.mysql.com/doc/refman/5.7/en/mathematical-functions.html#function_radians - -[function_rand]: https://dev.mysql.com/doc/refman/5.7/en/mathematical-functions.html#function_rand - -[function_replace]: https://dev.mysql.com/doc/refman/5.7/en/string-functions.html#function_replace - -[function_reverse]: https://dev.mysql.com/doc/refman/5.7/en/string-functions.html#function_reverse - -[function_right]: https://dev.mysql.com/doc/refman/5.7/en/string-functions.html#function_right - -[function_round]: https://dev.mysql.com/doc/refman/5.7/en/mathematical-functions.html#function_round - -[function_rtrim]: https://dev.mysql.com/doc/refman/5.7/en/string-functions.html#function_rtrim - -[function_sec-to-time]: https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_sec-to-time - -[function_second]: https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_second - -[function_sha1]: https://dev.mysql.com/doc/refman/5.7/en/encryption-functions.html#function_sha1 - -[function_sign]: https://dev.mysql.com/doc/refman/5.7/en/mathematical-functions.html#function_sign - -[function_sin]: https://dev.mysql.com/doc/refman/5.7/en/mathematical-functions.html#function_sin - -[function_space]: https://dev.mysql.com/doc/refman/5.7/en/string-functions.html#function_space - -[function_sqrt]: https://dev.mysql.com/doc/refman/5.7/en/mathematical-functions.html#function_sqrt - -[function_std]: https://dev.mysql.com/doc/refman/5.7/en/aggregate-functions.html#function_std - -[function_stddev-pop]: https://dev.mysql.com/doc/refman/5.7/en/aggregate-functions.html#function_stddev-pop - -[function_stddev-samp]: https://dev.mysql.com/doc/refman/5.7/en/aggregate-functions.html#function_stddev-samp - -[function_stddev]: https://dev.mysql.com/doc/refman/5.7/en/aggregate-functions.html#function_stddev - -[function_strcmp]: https://dev.mysql.com/doc/refman/5.7/en/string-comparison-functions.html#function_strcmp - -[function_substr]: https://dev.mysql.com/doc/refman/5.7/en/string-functions.html#function_substr - -[function_substring]: https://dev.mysql.com/doc/refman/5.7/en/string-functions.html#function_substring - -[function_sum]: https://dev.mysql.com/doc/refman/5.7/en/aggregate-functions.html#function_sum - -[function_sysdate]: https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_sysdate - -[function_time-to-sec]: https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_time-to-sec - -[function_timediff]: https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_timediff - -[function_uncompressed-length]: https://dev.mysql.com/doc/refman/5.7/en/encryption-functions.html#function_uncompressed-length - -[function_uuid]: https://dev.mysql.com/doc/refman/5.7/en/miscellaneous-functions.html#function_uuid - -[function_var-pop]: https://dev.mysql.com/doc/refman/5.7/en/aggregate-functions.html#function_var-pop - -[function_var-samp]: https://dev.mysql.com/doc/refman/5.7/en/aggregate-functions.html#function_var-samp - -[function_variance]: https://dev.mysql.com/doc/refman/5.7/en/aggregate-functions.html#function_variance - -[function_week]: https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_week - -[function_weekofyear]: https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_weekofyear - -[function_year]: https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_year - -[json_array]: https://dev.mysql.com/doc/refman/5.7/en/json-creation-functions.html#function_json-array - -[json_arrayagg]:https://dev.mysql.com/doc/refman/5.7/en/aggregate-functions.html#function_json-arrayagg - -[json_contains]: https://dev.mysql.com/doc/refman/5.7/en/json-search-functions.html#function_json-contains - -[json_extract]: https://dev.mysql.com/doc/refman/5.7/en/json-search-functions.html#function_json-extract - -[json_insert]: https://dev.mysql.com/doc/refman/5.7/en/json-modification-functions.html#function_json-insert - -[json_length]: https://dev.mysql.com/doc/refman/5.7/en/json-attribute-functions.html#function_json-length - -[json_merge]: https://dev.mysql.com/doc/refman/5.7/en/json-modification-functions.html#function_json-merge - -[json_object]: https://dev.mysql.com/doc/refman/5.7/en/json-creation-functions.html#function_json-object - -[json_remove]: https://dev.mysql.com/doc/refman/5.7/en/json-modification-functions.html#function_json-remove - -[json_replace]: https://dev.mysql.com/doc/refman/5.7/en/json-modification-functions.html#function_json-replace - -[json_set]: https://dev.mysql.com/doc/refman/5.7/en/json-modification-functions.html#function_json-set - -[json_type]: https://dev.mysql.com/doc/refman/5.7/en/json-attribute-functions.html#function_json-type - -[json_unquote]: https://dev.mysql.com/doc/refman/5.7/en/json-modification-functions.html#function_json-unquote - -[json_valid]: https://dev.mysql.com/doc/refman/5.7/en/json-attribute-functions.html#function_json-valid - -[operator_between]: https://dev.mysql.com/doc/refman/5.7/en/comparison-operators.html#operator_between - -[operator_bitwise-and]: https://dev.mysql.com/doc/refman/5.7/en/bit-functions.html#operator_bitwise-and - -[operator_bitwise-invert]: https://dev.mysql.com/doc/refman/5.7/en/bit-functions.html#operator_bitwise-invert - -[operator_bitwise-or]: https://dev.mysql.com/doc/refman/5.7/en/bit-functions.html#operator_bitwise-or - -[operator_bitwise-xor]: https://dev.mysql.com/doc/refman/5.7/en/bit-functions.html#operator_bitwise-xor - -[operator_case]: https://dev.mysql.com/doc/refman/5.7/en/flow-control-functions.html#operator_case - -[operator_div]: https://dev.mysql.com/doc/refman/5.7/en/arithmetic-functions.html#operator_div - -[operator_divide]: https://dev.mysql.com/doc/refman/5.7/en/arithmetic-functions.html#operator_divide - -[operator_equal-to]: https://dev.mysql.com/doc/refman/5.7/en/comparison-operators.html#operator_equal-to - -[operator_equal]: https://dev.mysql.com/doc/refman/5.7/en/comparison-operators.html#operator_equal - -[operator_greater-than-or-equal]: https://dev.mysql.com/doc/refman/5.7/en/comparison-operators.html#operator_greater-than-or-equal - -[operator_greater-than]: https://dev.mysql.com/doc/refman/5.7/en/comparison-operators.html#operator_greater-than - -[operator_in]: https://dev.mysql.com/doc/refman/5.7/en/comparison-operators.html#operator_in - -[operator_is-not-null]: https://dev.mysql.com/doc/refman/5.7/en/comparison-operators.html#operator_is-not-null - -[operator_is-not]: https://dev.mysql.com/doc/refman/5.7/en/comparison-operators.html#operator_is-not - -[operator_is-null]: https://dev.mysql.com/doc/refman/5.7/en/comparison-operators.html#operator_is-null - -[operator_is]: https://dev.mysql.com/doc/refman/5.7/en/comparison-operators.html#operator_is - -[operator_left-shift]: https://dev.mysql.com/doc/refman/5.7/en/bit-functions.html#operator_left-shift - -[operator_less-than-or-equal]: https://dev.mysql.com/doc/refman/5.7/en/comparison-operators.html#operator_less-than-or-equal - -[operator_less-than]: https://dev.mysql.com/doc/refman/5.7/en/comparison-operators.html#operator_less-than - -[operator_like]: https://dev.mysql.com/doc/refman/5.7/en/string-comparison-functions.html#operator_like - -[operator_minus]: https://dev.mysql.com/doc/refman/5.7/en/arithmetic-functions.html#operator_minus - -[operator_mod]: https://dev.mysql.com/doc/refman/5.7/en/arithmetic-functions.html#operator_mod - -[operator_not-between]: https://dev.mysql.com/doc/refman/5.7/en/comparison-operators.html#operator_not-between - -[operator_not-equal]: https://dev.mysql.com/doc/refman/5.7/en/comparison-operators.html#operator_not-equal - -[operator_not-in]: https://dev.mysql.com/doc/refman/5.7/en/comparison-operators.html#operator_not-in - -[operator_not-like]: https://dev.mysql.com/doc/refman/5.7/en/string-comparison-functions.html#operator_not-like - -[operator_not-regexp]: https://dev.mysql.com/doc/refman/5.7/en/regexp.html#operator_not-regexp - -[operator_plus]: https://dev.mysql.com/doc/refman/5.7/en/arithmetic-functions.html#operator_plus - -[operator_regexp]: https://dev.mysql.com/doc/refman/5.7/en/regexp.html#operator_regexp - -[operator_right-shift]: https://dev.mysql.com/doc/refman/5.7/en/bit-functions.html#operator_right-shift - -[operator_times]: https://dev.mysql.com/doc/refman/5.7/en/arithmetic-functions.html#operator_times - -[operator_unary-minus]: https://dev.mysql.com/doc/refman/5.7/en/arithmetic-functions.html#operator_unary-minus diff --git a/functions-and-operators/json-functions.md b/functions-and-operators/json-functions.md index 26d48b0efe8a..f501173cc58a 100644 --- a/functions-and-operators/json-functions.md +++ b/functions-and-operators/json-functions.md @@ -11,133 +11,67 @@ TiDB 支持 MySQL 5.7 GA 版本发布的大多数 JSON 函数。 | 函数 | 功能描述 | | ------------------------------------------------------------------ | ---------------------------------------------------------- | -| [JSON_ARRAY([val[, val] ...])][json_array] | 根据一系列元素创建一个 JSON 文档 | -| [JSON_OBJECT(key, val[, key, val] ...)][json_object] | 根据一系列 K/V 对创建一个 JSON 文档 | -| [JSON_QUOTE(string)][json_quote] | 返回一个字符串,该字符串为带引号的 JSON 值 | +| [JSON_ARRAY([val[, val] ...])](https://dev.mysql.com/doc/refman/5.7/en/json-creation-functions.html#function_json-array) | 根据一系列元素创建一个 JSON 文档 | +| [JSON_OBJECT(key, val[, key, val] ...)](https://dev.mysql.com/doc/refman/5.7/en/json-creation-functions.html#function_json-object) | 根据一系列 K/V 对创建一个 JSON 文档 | +| [JSON_QUOTE(string)](https://dev.mysql.com/doc/refman/5.7/en/json-creation-functions.html#function_json-quote) | 返回一个字符串,该字符串为带引号的 JSON 值 | ## 搜索 JSON 值的函数 | 函数 | 功能描述 | | ------------------------------------------------------------ | ------------------------------------------------------------ | -| [JSON_CONTAINS(target, candidate[, path])][json_contains] | 通过返回 1 或 0 来表示目标 JSON 文档中是否包含给定的 candidate JSON 文档 | -| [JSON_CONTAINS_PATH(json_doc, one_or_all, path[, path] ...)][json_contains_path] | 通过返回 0 或 1 来表示一个 JSON 文档在给定路径是否包含数据 | -| [JSON_EXTRACT(json_doc, path[, path] ...)][json_extract] | 从 JSON 文档中解出某一路径对应的子文档 | -| [->][json_short_extract] | 返回执行路径后面的 JSON 列的值;`JSON_EXTRACT(doc, path_literal)` 的别名 | -| [->>][json_short_extract_unquote] | 返回执行路径后面的 JSON 列的值和转义后的结果; `JSON_UNQUOTE(JSON_EXTRACT(doc, path_literal))` 的别名 | -| [JSON_KEYS(json_doc[, path])][json_keys] | 返回从 JSON 对象的顶级值作为 JSON array 的键,如果给定了路径参数,则从选定路径中获取顶级键 | -| [JSON_SEARCH(json_doc, one_or_all, search_str[, escape_char[, path] ...])][json_search] | 返回指定字符在 JSON 文档中的路径 | -| [value MEMBER OF(json_array)][MEMBER_OF] | 如果传入值是 JSON array 中的一个元素,返回 1,否则返回 0 | -| [JSON_OVERLAPS(json_doc1, json_doc2)][json_overlaps] | 表示两个 JSON 文档中是否包含公共部分。返回 1 表示两个 JSON 文档中包含公共部分,否则返回 0 | +| [JSON_CONTAINS(target, candidate[, path])](https://dev.mysql.com/doc/refman/5.7/en/json-search-functions.html#function_json-contains) | 通过返回 1 或 0 来表示目标 JSON 文档中是否包含给定的 candidate JSON 文档 | +| [JSON_CONTAINS_PATH(json_doc, one_or_all, path[, path] ...)](https://dev.mysql.com/doc/refman/5.7/en/json-search-functions.html#function_json-contains-path) | 通过返回 0 或 1 来表示一个 JSON 文档在给定路径是否包含数据 | +| [JSON_EXTRACT(json_doc, path[, path] ...)](https://dev.mysql.com/doc/refman/5.7/en/json-search-functions.html#function_json-extract) | 从 JSON 文档中解出某一路径对应的子文档 | +| [->](https://dev.mysql.com/doc/refman/5.7/en/json-search-functions.html#operator_json-column-path) | 返回执行路径后面的 JSON 列的值;`JSON_EXTRACT(doc, path_literal)` 的别名 | +| [->>](https://dev.mysql.com/doc/refman/5.7/en/json-search-functions.html#operator_json-inline-path) | 返回执行路径后面的 JSON 列的值和转义后的结果; `JSON_UNQUOTE(JSON_EXTRACT(doc, path_literal))` 的别名 | +| [JSON_KEYS(json_doc[, path])](https://dev.mysql.com/doc/refman/5.7/en/json-search-functions.html#function_json-keys) | 返回从 JSON 对象的顶级值作为 JSON array 的键,如果给定了路径参数,则从选定路径中获取顶级键 | +| [JSON_SEARCH(json_doc, one_or_all, search_str[, escape_char[, path] ...])](https://dev.mysql.com/doc/refman/5.7/en/json-search-functions.html#function_json-search) | 返回指定字符在 JSON 文档中的路径 | +| [value MEMBER OF(json_array)](https://dev.mysql.com/doc/refman/8.0/en/json-search-functions.html#operator_member-of) | 如果传入值是 JSON array 中的一个元素,返回 1,否则返回 0 | +| [JSON_OVERLAPS(json_doc1, json_doc2)](https://dev.mysql.com/doc/refman/8.0/en/json-search-functions.html#function_json-overlaps) | 表示两个 JSON 文档中是否包含公共部分。返回 1 表示两个 JSON 文档中包含公共部分,否则返回 0 | ## 修改 JSON 值的函数 | 函数 | 功能描述 | | --------------------------------- | ----------- | -| [JSON_APPEND(json_doc, path, value)][json_append] | `JSON_ARRAY_APPEND` 的别名 | -| [JSON_ARRAY_APPEND(json_doc, path, value)][json_array_append] | 将值追加到指定路径的 JSON 数组的末尾 | -| [JSON_ARRAY_INSERT(json_doc, path, val[, path, val] ...)][json_array_insert] | 将数组插入 JSON 文档,并返回修改后的文档 | -| [JSON_INSERT(json_doc, path, val[, path, val] ...)][json_insert] | 在 JSON 文档中在某一路径下插入子文档 | -| [JSON_MERGE(json_doc, json_doc[, json_doc] ...)][json_merge] | 已废弃的 `JSON_MERGE_PRESERVE` 别名 | -| [JSON_MERGE_PATCH(json_doc, json_doc[, json_doc] ...)][json_merge_patch] | 合并 JSON 文档 | -| [JSON_MERGE_PRESERVE(json_doc, json_doc[, json_doc] ...)][json_merge_preserve] | 将两个或多个 JSON 文档合并成一个文档,并返回合并结果 | -| [JSON_REMOVE(json_doc, path[, path] ...)][json_remove] | 移除 JSON 文档中某一路径下的子文档 | -| [JSON_REPLACE(json_doc, path, val[, path, val] ...)][json_replace] | 替换 JSON 文档中的某一路径下的子文档 | -| [JSON_SET(json_doc, path, val[, path, val] ...)][json_set] | 在 JSON 文档中为某一路径设置子文档 | -| [JSON_UNQUOTE(json_val)][json_unquote] | 去掉 JSON 值外面的引号,返回结果为字符串 | -| [JSON_ARRAY_APPEND(json_doc, path, val[, path, val] ...)][json_array_append] | 将值添加到 JSON 文档指定数组的末尾,并返回添加结果 | -| [JSON_ARRAY_INSERT(json_doc, path, val[, path, val] ...)][json_array_insert] | 将值插入到 JSON 文档的指定位置,并返回插入结果 | +| [JSON_APPEND(json_doc, path, value)](https://dev.mysql.com/doc/refman/5.7/en/json-modification-functions.html#function_json-append) | `JSON_ARRAY_APPEND` 的别名 | +| [JSON_ARRAY_APPEND(json_doc, path, value)](https://dev.mysql.com/doc/refman/5.7/en/json-modification-functions.html#function_json-array-append) | 将值追加到指定路径的 JSON 数组的末尾 | +| [JSON_ARRAY_INSERT(json_doc, path, val[, path, val] ...)](https://dev.mysql.com/doc/refman/5.7/en/json-modification-functions.html#function_json-array-insert) | 将数组插入 JSON 文档,并返回修改后的文档 | +| [JSON_INSERT(json_doc, path, val[, path, val] ...)](https://dev.mysql.com/doc/refman/5.7/en/json-modification-functions.html#function_json-insert) | 在 JSON 文档中在某一路径下插入子文档 | +| [JSON_MERGE(json_doc, json_doc[, json_doc] ...)](https://dev.mysql.com/doc/refman/5.7/en/json-modification-functions.html#function_json-merge) | 已废弃的 `JSON_MERGE_PRESERVE` 别名 | +| [JSON_MERGE_PATCH(json_doc, json_doc[, json_doc] ...)](https://dev.mysql.com/doc/refman/5.7/en/json-modification-functions.html#function_json-merge-patch) | 合并 JSON 文档 | +| [JSON_MERGE_PRESERVE(json_doc, json_doc[, json_doc] ...)](https://dev.mysql.com/doc/refman/5.7/en/json-modification-functions.html#function_json-merge-preserve) | 将两个或多个 JSON 文档合并成一个文档,并返回合并结果 | +| [JSON_REMOVE(json_doc, path[, path] ...)](https://dev.mysql.com/doc/refman/5.7/en/json-modification-functions.html#function_json-remove) | 移除 JSON 文档中某一路径下的子文档 | +| [JSON_REPLACE(json_doc, path, val[, path, val] ...)](https://dev.mysql.com/doc/refman/5.7/en/json-modification-functions.html#function_json-replace) | 替换 JSON 文档中的某一路径下的子文档 | +| [JSON_SET(json_doc, path, val[, path, val] ...)](https://dev.mysql.com/doc/refman/5.7/en/json-modification-functions.html#function_json-set) | 在 JSON 文档中为某一路径设置子文档 | +| [JSON_UNQUOTE(json_val)](https://dev.mysql.com/doc/refman/5.7/en/json-modification-functions.html#function_json-unquote) | 去掉 JSON 值外面的引号,返回结果为字符串 | +| [JSON_ARRAY_APPEND(json_doc, path, val[, path, val] ...)](https://dev.mysql.com/doc/refman/5.7/en/json-modification-functions.html#function_json-array-append) | 将值添加到 JSON 文档指定数组的末尾,并返回添加结果 | +| [JSON_ARRAY_INSERT(json_doc, path, val[, path, val] ...)](https://dev.mysql.com/doc/refman/5.7/en/json-modification-functions.html#function_json-array-insert) | 将值插入到 JSON 文档的指定位置,并返回插入结果 | ## 返回 JSON 值属性的函数 | 函数 | 功能描述 | | --------------------------------- | ----------- | -| [JSON_DEPTH(json_doc)][json_depth] | 返回 JSON 文档的最大深度 | -| [JSON_LENGTH(json_doc[, path])][json_length] | 返回 JSON 文档的长度;如果路径参数已定,则返回该路径下值的长度 | -| [JSON_TYPE(json_val)][json_type] | 检查某 JSON 文档内部内容的类型 | -| [JSON_VALID(json_doc)][json_valid] | 检查 JSON 文档内容是否有效;用于将列转换为 JSON 类型之前对该列进行检查 | +| [JSON_DEPTH(json_doc)](https://dev.mysql.com/doc/refman/5.7/en/json-attribute-functions.html#function_json-depth) | 返回 JSON 文档的最大深度 | +| [JSON_LENGTH(json_doc[, path])](https://dev.mysql.com/doc/refman/5.7/en/json-attribute-functions.html#function_json-length) | 返回 JSON 文档的长度;如果路径参数已定,则返回该路径下值的长度 | +| [JSON_TYPE(json_val)](https://dev.mysql.com/doc/refman/5.7/en/json-attribute-functions.html#function_json-type) | 检查某 JSON 文档内部内容的类型 | +| [JSON_VALID(json_doc)](https://dev.mysql.com/doc/refman/5.7/en/json-attribute-functions.html#function_json-valid) | 检查 JSON 文档内容是否有效;用于将列转换为 JSON 类型之前对该列进行检查 | ## 效用函数 | 函数 | 功能描述 | | --------------------------------- | ----------- | -| [JSON_PRETTY(json_doc)][json_pretty] |格式化 JSON 文档 | -| [JSON_STORAGE_FREE(json_doc)][json_storage_free] | 返回该 JSON 对象的存储空间中空闲的字节数。由于 TiDB 采用与 MySQL 完全不同的存储结构,本函数对合法的 JSON 值总是返回 0,主要用于兼容 MySQL 8.0 | -| [JSON_STORAGE_SIZE(json_doc)][json_storage_size] | 返回存储 JSON 值所需的大致字节大小,由于不考虑 TiKV 压缩的字节大小,因此函数的输出与 MySQL 不严格兼容 | +| [JSON_PRETTY(json_doc)](https://dev.mysql.com/doc/refman/5.7/en/json-utility-functions.html#function_json-pretty) |格式化 JSON 文档 | +| [JSON_STORAGE_FREE(json_doc)](https://dev.mysql.com/doc/refman/8.0/en/json-utility-functions.html#function_json-storage-free) | 返回该 JSON 对象的存储空间中空闲的字节数。由于 TiDB 采用与 MySQL 完全不同的存储结构,本函数对合法的 JSON 值总是返回 0,主要用于兼容 MySQL 8.0 | +| [JSON_STORAGE_SIZE(json_doc)](https://dev.mysql.com/doc/refman/5.7/en/json-utility-functions.html#function_json-storage-size) | 返回存储 JSON 值所需的大致字节大小,由于不考虑 TiKV 压缩的字节大小,因此函数的输出与 MySQL 不严格兼容 | ## 聚合函数 | 函数 | 功能描述 | | --------------------------------- | ----------- | -| [JSON_ARRAYAGG(key)][json_arrayagg] | 提供指定列 key 的聚合 | -| [JSON_OBJECTAGG(key, value)][json_objectagg] | 提供给定两列键值对的聚合 | +| [JSON_ARRAYAGG(key)](https://dev.mysql.com/doc/refman/5.7/en/aggregate-functions.html#function_json-arrayagg) | 提供指定列 key 的聚合 | +| [JSON_OBJECTAGG(key, value)](https://dev.mysql.com/doc/refman/5.7/en/aggregate-functions.html#function_json-objectagg) | 提供给定两列键值对的聚合 | ## 另请参阅 * [JSON Function Reference](https://dev.mysql.com/doc/refman/5.7/en/json-function-reference.html) * [JSON Data Type](/data-type-json.md) - -[json_extract]: https://dev.mysql.com/doc/refman/5.7/en/json-search-functions.html#function_json-extract - -[json_short_extract]: https://dev.mysql.com/doc/refman/5.7/en/json-search-functions.html#operator_json-column-path - -[json_short_extract_unquote]: https://dev.mysql.com/doc/refman/5.7/en/json-search-functions.html#operator_json-inline-path - -[json_unquote]: https://dev.mysql.com/doc/refman/5.7/en/json-modification-functions.html#function_json-unquote - -[json_type]: https://dev.mysql.com/doc/refman/5.7/en/json-attribute-functions.html#function_json-type - -[json_set]: https://dev.mysql.com/doc/refman/5.7/en/json-modification-functions.html#function_json-set - -[json_insert]: https://dev.mysql.com/doc/refman/5.7/en/json-modification-functions.html#function_json-insert - -[json_replace]: https://dev.mysql.com/doc/refman/5.7/en/json-modification-functions.html#function_json-replace - -[json_remove]: https://dev.mysql.com/doc/refman/5.7/en/json-modification-functions.html#function_json-remove - -[json_merge]: https://dev.mysql.com/doc/refman/5.7/en/json-modification-functions.html#function_json-merge - -[json_merge_patch]: https://dev.mysql.com/doc/refman/5.7/en/json-modification-functions.html#function_json-merge-patch - -[json_merge_preserve]: https://dev.mysql.com/doc/refman/5.7/en/json-modification-functions.html#function_json-merge-preserve - -[json_object]: https://dev.mysql.com/doc/refman/5.7/en/json-creation-functions.html#function_json-object - -[json_array]: https://dev.mysql.com/doc/refman/5.7/en/json-creation-functions.html#function_json-array - -[json_keys]: https://dev.mysql.com/doc/refman/5.7/en/json-search-functions.html#function_json-keys - -[json_length]: https://dev.mysql.com/doc/refman/5.7/en/json-attribute-functions.html#function_json-length - -[json_valid]: https://dev.mysql.com/doc/refman/5.7/en/json-attribute-functions.html#function_json-valid - -[json_quote]: https://dev.mysql.com/doc/refman/5.7/en/json-creation-functions.html#function_json-quote - -[json_contains]: https://dev.mysql.com/doc/refman/5.7/en/json-search-functions.html#function_json-contains - -[json_contains_path]: https://dev.mysql.com/doc/refman/5.7/en/json-search-functions.html#function_json-contains-path - -[json_arrayagg]: https://dev.mysql.com/doc/refman/5.7/en/aggregate-functions.html#function_json-arrayagg - -[json_depth]: https://dev.mysql.com/doc/refman/5.7/en/json-attribute-functions.html#function_json-depth - -[json_search]: https://dev.mysql.com/doc/refman/5.7/en/json-search-functions.html#function_json-search - -[json_append]: https://dev.mysql.com/doc/refman/5.7/en/json-modification-functions.html#function_json-append - -[json_array_append]: https://dev.mysql.com/doc/refman/5.7/en/json-modification-functions.html#function_json-array-append - -[json_array_insert]: https://dev.mysql.com/doc/refman/5.7/en/json-modification-functions.html#function_json-array-insert - -[json_arrayagg]: https://dev.mysql.com/doc/refman/5.7/en/aggregate-functions.html#function_json-arrayagg - -[json_objectagg]: https://dev.mysql.com/doc/refman/5.7/en/aggregate-functions.html#function_json-objectagg - -[json_pretty]: https://dev.mysql.com/doc/refman/5.7/en/json-utility-functions.html#function_json-pretty - -[json_storage_free]: https://dev.mysql.com/doc/refman/8.0/en/json-utility-functions.html#function_json-storage-free - -[json_storage_size]: https://dev.mysql.com/doc/refman/5.7/en/json-utility-functions.html#function_json-storage-size - -[MEMBER_OF]: https://dev.mysql.com/doc/refman/8.0/en/json-search-functions.html#operator_member-of - -[json_overlaps]: https://dev.mysql.com/doc/refman/8.0/en/json-search-functions.html#function_json-overlaps diff --git a/tidb-lightning/tidb-lightning-data-source.md b/tidb-lightning/tidb-lightning-data-source.md index bfb4035f27d1..5bbcdadd1dac 100644 --- a/tidb-lightning/tidb-lightning-data-source.md +++ b/tidb-lightning/tidb-lightning-data-source.md @@ -88,13 +88,11 @@ trim-last-separator = false - 如果 `delimiter` 为空,所有字段都会被取消引用。 - 常用值: - * `'"'` 使用双引号引用字段,和 [RFC 4180] 一致。 + * `'"'` 使用双引号引用字段,和 [RFC 4180](https://tools.ietf.org/html/rfc4180) 一致。 * `''` 不引用 - 对应 LOAD DATA 语句中的 `FIELDS ENCLOSED BY` 项。 -参考 [RFC 4180](https://tools.ietf.org/html/rfc4180)。 - #### `terminator` - 指定行尾定界符。 From c7a79e060efcbea5a67e1149197ce276aff2ab8c Mon Sep 17 00:00:00 2001 From: tiancaiamao Date: Thu, 18 May 2023 14:55:36 +0800 Subject: [PATCH 117/257] configuration: add document for the log.timeout configuration (#13985) --- releases/release-7.1.0.md | 1 + tidb-configuration-file.md | 7 +++++++ 2 files changed, 8 insertions(+) diff --git a/releases/release-7.1.0.md b/releases/release-7.1.0.md index e1872833bef3..41243379dbb0 100644 --- a/releases/release-7.1.0.md +++ b/releases/release-7.1.0.md @@ -252,6 +252,7 @@ TiDB 版本:7.1.0 (upcoming) | -------- | -------- | -------- | -------- | | TiDB | [`force-init-stats`](/tidb-configuration-file.md#force-init-stats-从-v710-版本开始引入) | 新增 | 用于控制 TiDB 启动时是否在统计信息初始化完成后再对外提供服务。 | | TiDB | [`lite-init-stats`](/tidb-configuration-file.md#lite-init-stats-从-v710-版本开始引入) | 新增 | 用于控制 TiDB 启动时是否采用轻量级的统计信息初始化。 | +| TiDB | [`timeout`](/tidb-configuration-file.md#timeout-从-v710-版本开始引入) | 新增 | 用于控制 TiDB 写日志操作的超时时间,当磁盘故障导致日志无法写入时,该配置可以让 TiDB 进程崩溃而不是卡死。默认值为 `0`,即不设定超时时间。 | | TiKV | [`split.byte-threshold`](/tikv-configuration-file.md#byte-threshold-从-v50-版本开始引入) | 修改 | 当 [`region-split-size`](/tikv-configuration-file.md#region-split-size) 大于等于 4 GB 时,默认值从 `30MiB` 修改为 `100MiB`。 | | TiKV | [`split.qps-threshold`](/tikv-configuration-file.md#qps-threshold) | 修改 | 当 [`region-split-size`](/tikv-configuration-file.md#region-split-size) 大于等于 4 GB 时,默认值从 `3000` 修改为 `7000`。 | | TiKV | [`split.region-cpu-overload-threshold-ratio`](/tikv-configuration-file.md#region-cpu-overload-threshold-ratio-从-v620-版本开始引入) | 修改 | 当 [`region-split-size`](/tikv-configuration-file.md#region-split-size) 大于等于 4 GB 时,默认值从 `0.25` 修改为 `0.75`。 | diff --git a/tidb-configuration-file.md b/tidb-configuration-file.md index c2356ddfcb31..bb9f119345bd 100644 --- a/tidb-configuration-file.md +++ b/tidb-configuration-file.md @@ -287,6 +287,13 @@ TiDB 配置文件比命令行参数支持更多的选项。你可以在 [config/ + 默认值:10000 + 当查询的行数(包括中间结果,基于统计信息)大于这个值,该操作会被认为是 `expensive` 查询,并输出一个前缀带有 `[EXPENSIVE_QUERY]` 的日志。 +### `timeout` 从 v7.1.0 版本开始引入 + ++ 用于设置 TiDB 写日志操作的超时时间。当磁盘故障导致日志无法写入时,该配置可以让 TiDB 进程崩溃而不是卡死。 ++ 默认值:0,表示不设置超时 ++ 单位:秒 ++ 在某些用户场景中,TiDB 日志可能是保存在热插拔盘或网络挂载盘上,这些磁盘可能会永久丢失。在这种场景下,TiDB 无法自动恢复,写日志操作会永久阻塞。尽管 TiDB 进程看起来仍在运行,但不会响应任何请求。该配置项用于处理这样的场景。 + ## log.file 日志文件相关的配置项。 From a6578a09d2566ebe7dd910982d41486831b23f49 Mon Sep 17 00:00:00 2001 From: Aolin Date: Thu, 18 May 2023 16:39:36 +0800 Subject: [PATCH 118/257] add some missing rocksdb options (#14016) --- releases/release-6.2.0.md | 1 + releases/release-7.1.0.md | 2 ++ tikv-configuration-file.md | 24 ++++++++++++++++++++++++ 3 files changed, 27 insertions(+) diff --git a/releases/release-6.2.0.md b/releases/release-6.2.0.md index 6b21b908d734..416c08dcaf7c 100644 --- a/releases/release-6.2.0.md +++ b/releases/release-6.2.0.md @@ -262,6 +262,7 @@ TiDB 版本:6.2.0-DMR | TiKV | [quota.background-write-bandwidth](/tikv-configuration-file.md#background-write-bandwidth-从-v620-版本开始引入) | 新增 | 限制后台事务写入的带宽(暂未生效)。| | TiKV | [quota.background-read-bandwidth](/tikv-configuration-file.md#background-read-bandwidth-从-v620-版本开始引入) | 新增 | 限制后台事务读取数据和 Coprocessor 读取数据的带宽(暂未生效)。 | | TiKV | [quota.enable-auto-tune](/tikv-configuration-file.md#enable-auto-tune-从-v620-版本开始引入) | 新增 | 是否支持 quota 动态调整。如果打开该配置项,TiKV 会根据 TiKV 实例的负载情况动态调整对后台请求的限制 quota。 | +| TiKV | [rocksdb.defaultcf|writecf|lockcf.format-version](/tikv-configuration-file.md#format-version-从-v620-版本开始引入) | 新增 | 设置 SST 文件的格式版本。 | | TiKV | rocksdb.enable-pipelined-commit | 删除 | 该配置不再生效。 | | TiKV | gc-merge-rewrite | 删除 | 该配置不再生效。 | | TiKV | [log-backup.enable](/tikv-configuration-file.md#enable-从-v620-版本开始引入) | 新增 | TiKV 是否开启日志备份功能。 | diff --git a/releases/release-7.1.0.md b/releases/release-7.1.0.md index 41243379dbb0..d548a5b774e2 100644 --- a/releases/release-7.1.0.md +++ b/releases/release-7.1.0.md @@ -253,6 +253,8 @@ TiDB 版本:7.1.0 (upcoming) | TiDB | [`force-init-stats`](/tidb-configuration-file.md#force-init-stats-从-v710-版本开始引入) | 新增 | 用于控制 TiDB 启动时是否在统计信息初始化完成后再对外提供服务。 | | TiDB | [`lite-init-stats`](/tidb-configuration-file.md#lite-init-stats-从-v710-版本开始引入) | 新增 | 用于控制 TiDB 启动时是否采用轻量级的统计信息初始化。 | | TiDB | [`timeout`](/tidb-configuration-file.md#timeout-从-v710-版本开始引入) | 新增 | 用于控制 TiDB 写日志操作的超时时间,当磁盘故障导致日志无法写入时,该配置可以让 TiDB 进程崩溃而不是卡死。默认值为 `0`,即不设定超时时间。 | +| TiKV | [`optimize-filters-for-memory`](/tikv-configuration-file.md#optimize-filters-for-memory-从-v710-版本开始引入) | 新增 | 控制是否生成能够最小化内存碎片的 Bloom/Ribbon filter。 | +| TiKV | [`ribbon-filter-above-level`](/tikv-configuration-file.md#ribbon-filter-above-level-从-v710-版本开始引入) | 新增 | 控制是否对于大于等于该值的 level 使用 Ribbon filter,对于小于该值的 level,使用非 block-based bloom filter。 | | TiKV | [`split.byte-threshold`](/tikv-configuration-file.md#byte-threshold-从-v50-版本开始引入) | 修改 | 当 [`region-split-size`](/tikv-configuration-file.md#region-split-size) 大于等于 4 GB 时,默认值从 `30MiB` 修改为 `100MiB`。 | | TiKV | [`split.qps-threshold`](/tikv-configuration-file.md#qps-threshold) | 修改 | 当 [`region-split-size`](/tikv-configuration-file.md#region-split-size) 大于等于 4 GB 时,默认值从 `3000` 修改为 `7000`。 | | TiKV | [`split.region-cpu-overload-threshold-ratio`](/tikv-configuration-file.md#region-cpu-overload-threshold-ratio-从-v620-版本开始引入) | 修改 | 当 [`region-split-size`](/tikv-configuration-file.md#region-split-size) 大于等于 4 GB 时,默认值从 `0.25` 修改为 `0.75`。 | diff --git a/tikv-configuration-file.md b/tikv-configuration-file.md index 1b2695a5a664..6916609a8ae6 100644 --- a/tikv-configuration-file.md +++ b/tikv-configuration-file.md @@ -1350,6 +1350,12 @@ rocksdb defaultcf、rocksdb writecf 和 rocksdb lockcf 相关的配置项。 + `writecf` 默认值:`false` + `lockcf` 默认值:`false` +### `optimize-filters-for-memory` 从 v7.1.0 版本开始引入 + ++ 控制是否生成能够最小化内存碎片的 Bloom/Ribbon filter。 ++ 只有当 [`format-version`](#format-version-从-v620-版本开始引入) >= 5 时,该配置项才生效。 ++ 默认值:`false` + ### `whole-key-filtering` + 开启将整个 key 放到 bloom filter 中的开关。 @@ -1368,6 +1374,12 @@ rocksdb defaultcf、rocksdb writecf 和 rocksdb lockcf 相关的配置项。 + 开启每个 block 建立 bloom filter 的开关。 + 默认值:false +### `ribbon-filter-above-level` 从 v7.1.0 版本开始引入 + ++ 控制是否对于大于等于该值的 level 使用 Ribbon filter,对于小于该值的 level,使用非 block-based bloom filter。当该配置开启时,[`block-based-bloom-filter`](#block-based-bloom-filter) 将被忽略。 ++ 只有当 [`format-version`](#format-version-从-v620-版本开始引入) >= 5 时,该配置项才生效。 ++ 默认值:`false` + ### `read-amp-bytes-per-bit` + 开启读放大统计的开关,0:不开启,> 0 开启。 @@ -1522,6 +1534,18 @@ rocksdb defaultcf、rocksdb writecf 和 rocksdb lockcf 相关的配置项。 + 默认值:128MB + 单位:KB|MB|GB +### `format-version` 从 v6.2.0 版本开始引入 + ++ 设置 SST 文件的格式版本。该配置项只影响新写入的表,对于已经存在的表,版本信息会从 footer 中读取。 ++ 可选值: + - `0`:适用于所有 TiKV 版本。默认 checksum 类型为 CRC32。该版本不支持修改 checksum 类型。 + - `1`:适用于所有 TiKV 版本。支持使用非默认的 checksum 类型,例如 xxHash。只有在 checksum 类型不是 CRC32 时,RocksDB 才会写入数据。(`0` 版本会自动升级) + - `2`:适用于所有 TiKV 版本。更改了压缩块的编码方式,使用 LZ4、BZip2 和 Zlib 压缩。 + - `3`:适用于 TiKV v2.1 及以上版本。更改了索引块中 key 的编码方式。 + - `4`:适用于 TiKV v3.0 及以上版本。更改了索引块中 value 的编码方式。 + - `5`:适用于 TiKV v6.1 及以上版本。全量和分区 filter 采用一种具有不同模式的、更快、更准确的 Bloom filter 实现。 ++ 默认值:`2` + ## rocksdb.defaultcf.titan rocksdb defaultcf titan 相关的配置项。 From 4f25c24527d82aa1cfb4eb761049e94b2613cb61 Mon Sep 17 00:00:00 2001 From: ShuNing Date: Thu, 18 May 2023 14:19:36 +0530 Subject: [PATCH 119/257] pd-recovery: add the new way to recover (#12186) --- pd-recover.md | 54 +++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 48 insertions(+), 6 deletions(-) diff --git a/pd-recover.md b/pd-recover.md index 18cfcece492a..646042ef9881 100644 --- a/pd-recover.md +++ b/pd-recover.md @@ -24,9 +24,51 @@ PD Recover 是对 PD 进行灾难性恢复的工具,用于恢复无法正常 PD Recover 的安装包位于 TiDB 离线工具包中。下载方式,请参考 [TiDB 工具下载](/download-ecosystem-tools.md)。 -## 快速开始 +下面介绍两种重建集群的方式:从存活的 PD 节点重建和完全重建。 -### 获取 Cluster ID +## 方式一:从存活的 PD 节点重建集群 + +当 PD 集群的大多数节点发生灾难性故障时,集群将无法提供服务。当还有 PD 节点存活时,可以选择一个存活的 PD 节点,通过强制修改 Raft Group 的成员,使该节点重新恢复服务。具体操作步骤如下: + +### 第 1 步:停止所有节点 + +停止集群中的 TiDB、TiKV 和 TiFlash 服务进程,以防止在恢复过程中与 PD 参数交互,造成数据错乱或其他无法挽救的异常状况。 + +### 第 2 步:启动存活的 PD 节点 + +使用启动参数 `--force-new-cluster` 拉起该存活的 PD 节点,如: + +```shell +./bin/pd-server --force-new-cluster --name=pd-127.0.0.10-2379 --client-urls=http://0.0.0.0:2379 --advertise-client-urls=http://127.0.0.1:2379 --peer-urls=http://0.0.0.0:2380 --advertise-peer-urls=http://127.0.0.1:2380 --config=conf/pd.toml +``` + +### 第 3 步:使用 `pd-recover` 修复元数据 + +该方法是利用少数派 PD 节点恢复服务,但由于该节点可能存在数据落后的情况,因此对于 `alloc_id` 和 `tso` 等数据,一旦发生回退,可能导致集群数据错乱或不可用。为确保该节点能提供正确的分配 ID 和 TSO 等服务,需要使用 `pd-recover` 修改元数据。具体命令参考: + +```shell +./bin/pd-recover --from-old-member --endpoints=http://127.0.0.1:2379 # 指定对应的 PD 地址 +``` + +> **注意:** +> +> 该步骤会自动将存储中的 `alloc_id` 增加一个安全值 `100000000`。这将导致后续集群中分配的 ID 偏大。 +> +> 此外,`pd-recover` 不会修改 TSO。因此,在执行此步骤之前,请确保本地时间晚于故障发生时间,并且确认故障前 PD 组件之间已开启 NTP 时钟同步服务。如果未开启,则需要将本地时钟调整到一个未来的时间,以确保 TSO 不会回退。 + +### 第 4 步:重启这个 PD + +当上一步出现 `recovery is successful` 的提示信息后,重启 PD。 + +### 第 5 步:扩容 PD 并启动集群 + +通过部署工具扩容 PD,并启动集群中的其他组件。至此服务恢复。 + +## 方式二:完全重建 PD 集群 + +该方式适用于所有 PD 的数据都丢失,但 TiDB、TiKV 和 TiFlash 等其他组件数据都还存在的情况。 + +### 第 1 步:获取 Cluster ID 一般在 PD、TiKV 或 TiDB 的日志中都可以获取 Cluster ID。你可以直接在服务器上查看日志以获取 Cluster ID。 @@ -77,7 +119,7 @@ cat {{/path/to}}/tikv.log | grep "connect to PD cluster" ... ``` -### 获取已分配 ID +### 第 2 步:获取已分配 ID 在指定已分配 ID 时,需指定一个比当前最大的已分配 ID 更大的值。可以从监控中获取已分配 ID,也可以直接在服务器上查看日志。 @@ -102,11 +144,11 @@ cat {{/path/to}}/pd*.log | grep "idAllocator allocates a new id" | awk -F'=' '{ 你也可以在所有 PD server 中运行上述命令,找到最大的值。 -### 部署一套新的 PD 集群 +### 第 3 步:部署一套新的 PD 集群 部署新的 PD 集群之前,需要停止当前的 PD 集群,然后删除旧的数据目录(或者用 `--data-dir` 指定新的数据目录)。 -### 使用 pd-recover +### 第 4 步:使用 pd-recover 只需在一个 PD 节点上执行 `pd-recover` 即可。 @@ -116,7 +158,7 @@ cat {{/path/to}}/pd*.log | grep "idAllocator allocates a new id" | awk -F'=' '{ ./pd-recover -endpoints http://10.0.1.13:2379 -cluster-id 6747551640615446306 -alloc-id 10000 ``` -### 重启整个集群 +### 第 5 步:重启整个集群 当出现 `recovery is successful` 的提示信息时,重启整个集群。 From 51e6762d59690511b3432a8e903f31444a0624b5 Mon Sep 17 00:00:00 2001 From: Chao Zheng Date: Thu, 18 May 2023 18:09:36 -0700 Subject: [PATCH 120/257] ticdc: refine the ticdc changefeed configuration file (#14014) --- ticdc/ticdc-changefeed-config.md | 55 +++++++++++++++++++++++++++++++- 1 file changed, 54 insertions(+), 1 deletion(-) diff --git a/ticdc/ticdc-changefeed-config.md b/ticdc/ticdc-changefeed-config.md index c22a47c86081..cace946b6f95 100644 --- a/ticdc/ticdc-changefeed-config.md +++ b/ticdc/ticdc-changefeed-config.md @@ -37,6 +37,10 @@ Info: {"upstream_id":7178706266519722477,"namespace":"default","id":"simple-repl 本章节详细介绍了同步任务的配置。 ```toml +# 指定该 Changefeed 在 Capture Server 中内存配额的上限。对于超额使用部分, +# 会在运行中被 Go runtime 优先回收。默认值为 `1073741824`,即 1 GB。 +# memory-quota = 1073741824 + # 指定配置文件中涉及的库名、表名是否为大小写敏感 # 该配置会同时影响 filter 和 sink 相关配置,默认为 true case-sensitive = true @@ -45,17 +49,20 @@ case-sensitive = true enable-old-value = true # 是否开启 Syncpoint 功能,从 v6.3.0 开始支持,该功能默认关闭。 -# 从 v6.4.0 开始,使用 Syncpoint 功能需要同步任务拥有下游集群的 SYSTEM_VARIABLES_ADMIN 或者 SUPER 权限 +# 从 v6.4.0 开始,使用 Syncpoint 功能需要同步任务拥有下游集群的 SYSTEM_VARIABLES_ADMIN 或者 SUPER 权限。 +# 注意:该参数只有当下游为 Kafka 或存储服务时,才会生效。 # enable-sync-point = false # Syncpoint 功能对齐上下游 snapshot 的时间间隔 # 配置格式为 h m s,例如 "1h30m30s" # 默认值为 10m,最小值为 30s +# 注意:该参数只有当下游为 Kafka 或存储服务时,才会生效。 # sync-point-interval = "5m" # Syncpoint 功能在下游表中保存的数据的时长,超过这个时间的数据会被清理 # 配置格式为 h m s,例如 "24h30m30s" # 默认值为 24h +# 注意:该参数只有当下游为 Kafka 或存储服务时,才会生效。 # sync-point-retention = "1h" [mounter] @@ -70,6 +77,10 @@ enable-old-value = true # 过滤规则语法:https://docs.pingcap.com/zh/tidb/stable/table-filter#表库过滤语法 rules = ['*.*', '!test.*'] +# 忽略特定 start_ts 的事务 +# 默认值为空列表。 +# IgnoreTxnStartTs = [] + # 事件过滤器规则 # 事件过滤器的详细配置规则可参考:https://docs.pingcap.com/zh/tidb/stable/ticdc-filter # 第一个事件过滤器规则 @@ -94,8 +105,10 @@ rules = ['*.*', '!test.*'] # 注意:该功能只在 Kafka changefeed 上生效,暂不支持 MySQL changefeed。 # 默认为 "false"。设置为 "true" 以打开该功能。 enable-table-across-nodes = false + # 打开该功能后,该功能会对 Region 个数大于 `region-threshold` 值的表生效。 region-threshold = 100000 + # 打开该功能后,该功能会对每分钟修改行数大于 `write-key-threshold` 值的表生效。 # 注意: # * `write-key-threshold` 参数默认值为 0,代表该功能默认不会按表的修改行数来切分表的同步范围。 @@ -109,6 +122,7 @@ write-key-threshold = 0 # 对于 MQ 类的 Sink,可以通过 dispatchers 配置 event 分发器 # 支持 partition 及 topic(从 v6.1 开始支持)两种 event 分发器。二者的详细说明见下一节。 # matcher 的匹配语法和过滤器规则语法相同,matcher 匹配规则的详细说明见下一节。 +# 注意:该参数只有当下游为消息队列时,才会生效。 # dispatchers = [ # {matcher = ['test1.*', 'test2.*'], topic = "Topic 表达式 1", partition = "ts" }, # {matcher = ['test3.*', 'test4.*'], topic = "Topic 表达式 2", partition = "index-value" }, @@ -119,16 +133,40 @@ write-key-threshold = 0 # protocol 用于指定传递到下游的协议格式 # 当下游类型是 Kafka 时,支持 canal-json、avro 两种协议。 # 当下游类型是存储服务时,目前仅支持 canal-json、csv 两种协议。 +# 注意:该参数只有当下游为 Kafka 或存储服务时,才会生效。 # protocol = "canal-json" # 以下三个配置项仅在同步到存储服务的 sink 中使用,在 MQ 和 MySQL 类 sink 中无需设置。 # 换行符,用来分隔两个数据变更事件。默认值为空,表示使用 "\r\n" 作为换行符。 # terminator = '' + # 文件路径的日期分隔类型。可选类型有 `none`、`year`、`month` 和 `day`。默认值为 `none`,即不使用日期分隔。详见 。 +# 注意:该参数只有当下游为存储服务时,才会生效。 date-separator = 'none' + # 是否使用 partition 作为分隔字符串。默认值为 true,即一张表中各个 partition 的数据会分不同的目录来存储。建议保持该配置项为 true 以避免下游分区表可能丢数据的问题 。使用示例详见 。 +# 注意:该参数只有当下游为存储服务时,才会生效。 enable-partition-separator = true +# Schema 注册表的 URL。 +# 注意:该参数只有当下游为消息队列时,才会生效。 +# schema-registry = "http://localhost:80801/subjects/{subject-name}/versions/{version-number}/schema" + +# 编码数据时所用编码器的线程数。 +# 默认值为 16。 +# 注意:该参数只有当下游为消息队列时,才会生效。 +# encoder-concurrency = 16 + +# 是否开启 Kafka Sink V2。Kafka Sink V2 内部使用 kafka-go 实现。 +# 默认值为 false。 +# 注意:该参数只有当下游为消息队列时,才会生效。 +# enable-kafka-sink-v2 = false + +# 是否只向下游同步有内容更新的列。 +# 默认值为 false。 +# 注意:该参数只有当下游为消息队列,并且使用 Open Protocol 或 Canal-JSON 时,才会生效。 +# only-output-updated-columns = false + # 从 v6.5.0 开始,TiCDC 支持以 CSV 格式将数据变更记录保存至存储服务中,在 MQ 和 MySQL 类 sink 中无需设置。 # [sink.csv] # 字段之间的分隔符。必须为 ASCII 字符,默认值为 `,`。 @@ -139,4 +177,19 @@ enable-partition-separator = true # null = '\N' # 是否在 CSV 行中包含 commit-ts。默认值为 false。 # include-commit-ts = false + +# sink.consistent 中的字段用于配置 Changefeed 的数据一致性。详细的信息,请参考 。 +# 注意:一致性相关参数只有当下游为数据库并且开启 redo log 功能时,才会生效。 +[sink.consistent] +# 数据一致性级别。默认值为 "none",可选值为 "none" 和 "eventual"。 +# 设置为 "none" 时将关闭 redo log。 +level = "none" +# redo log 的最大日志大小,单位为 MB。默认值为 64。 +max-log-size = 64 +# 两次 redo log 刷新的时间间隔,单位为毫秒。默认值为 2000。 +flush-interval = 2000 +# redo log 使用存储服务的 URI。默认值为空。 +storage = "" +# 是否将 redo log 存储到文件中。默认值为 false。 +use-file-backend = false ``` From 67fd1d11ba347f88932caebd59fa0fb72bba0d31 Mon Sep 17 00:00:00 2001 From: Aolin Date: Mon, 22 May 2023 14:45:37 +0800 Subject: [PATCH 121/257] Revert "sql: GA load data logical mode and add experimental physical mode" (#14017) --- TOC.md | 2 - basic-features.md | 2 +- error-codes.md | 40 ------ mysql-schema.md | 1 - releases/release-7.0.0.md | 14 +- releases/release-7.1.0.md | 28 ---- sql-statements/sql-statement-load-data.md | 131 +----------------- .../sql-statement-operate-load-data-job.md | 47 ------- .../sql-statement-show-load-data.md | 74 ---------- system-variables.md | 2 +- tidb-configuration-file.md | 1 - 11 files changed, 14 insertions(+), 328 deletions(-) delete mode 100644 sql-statements/sql-statement-operate-load-data-job.md delete mode 100644 sql-statements/sql-statement-show-load-data.md diff --git a/TOC.md b/TOC.md index a2ffbcad2efa..445e257d3114 100644 --- a/TOC.md +++ b/TOC.md @@ -700,7 +700,6 @@ - [`BACKUP`](/sql-statements/sql-statement-backup.md) - [`BATCH`](/sql-statements/sql-statement-batch.md) - [`BEGIN`](/sql-statements/sql-statement-begin.md) - - [`CANCEL LOAD DATA` 和 `DROP LOAD DATA`](/sql-statements/sql-statement-operate-load-data-job.md) - [`CALIBRATE RESOURCE`](/sql-statements/sql-statement-calibrate-resource.md) - [`CHANGE COLUMN`](/sql-statements/sql-statement-change-column.md) - [`CHANGE DRAINER`](/sql-statements/sql-statement-change-drainer.md) @@ -794,7 +793,6 @@ - [`SHOW INDEX [FROM|IN]`](/sql-statements/sql-statement-show-index.md) - [`SHOW INDEXES [FROM|IN]`](/sql-statements/sql-statement-show-indexes.md) - [`SHOW KEYS [FROM|IN]`](/sql-statements/sql-statement-show-keys.md) - - [`SHOW LOAD DATA`](/sql-statements/sql-statement-show-load-data.md) - [`SHOW MASTER STATUS`](/sql-statements/sql-statement-show-master-status.md) - [`SHOW PLACEMENT`](/sql-statements/sql-statement-show-placement.md) - [`SHOW PLACEMENT FOR`](/sql-statements/sql-statement-show-placement-for.md) diff --git a/basic-features.md b/basic-features.md index 25d0886da23b..888b14c7c654 100644 --- a/basic-features.md +++ b/basic-features.md @@ -243,6 +243,6 @@ aliases: ['/docs-cn/dev/basic-features/','/docs-cn/dev/experimental-features-4.0 [^4]: 从 [TiDB v6.4.0](/releases/release-6.4.0.md) 开始,支持[高性能、全局单调递增的 `AUTO_INCREMENT` 列](/auto-increment.md#mysql-兼容模式) -[^5]: 对于 [TiDB v7.1.0](/releases/release-7.1.0.md),新增的并发导入和集成 Physical Import Mode 功能,均为实验特性。 +[^5]: 对于 [TiDB v7.0.0](/releases/release-7.0.0.md),新增参数 `FIELDS DEFINED NULL BY` 以及新增支持从 S3 和 GCS 导入数据,均为实验特性。 [^6]: 对于 TiDB v4.0,事务 `LOAD DATA` 不保证原子性。 diff --git a/error-codes.md b/error-codes.md index 406113b8e878..0c30520970e9 100644 --- a/error-codes.md +++ b/error-codes.md @@ -297,18 +297,10 @@ TiDB 兼容 MySQL 的错误码,在大多数情况下,返回和 MySQL 一样 目前 `LOAD DATA` 不支持从 TiDB 服务器本地导入数据,可以指定 `LOCAL` 从客户端导入,或者将数据上传到 S3/GCS 再进行导入。请参考 [`LOAD DATA`](/sql-statements/sql-statement-load-data.md)。 -* Error Number: 8155 - - 目前 `LOAD DATA` 不支持从 local 导入 Parquet 格式的数据文件,只支持从 S3/GCS 导入 Parquet 格式的数据文件。你可以将数据上传到 S3/GCS 后再导入。请参考 [`LOAD DATA`](/sql-statements/sql-statement-load-data.md)。 - * Error Number: 8156 `LOAD DATA` 语句的文件路径不能为空。需要设置正确的路径再进行导入。请参考 [`LOAD DATA`](/sql-statements/sql-statement-load-data.md)。 -* Error Number: 8157 - - 不支持的数据格式。请参考 [`LOAD DATA`](/sql-statements/sql-statement-load-data.md) 查看支持的数据格式。 - * Error Number: 8158 传入的 S3/GCS 路径无效。请参考[外部存储](/br/backup-and-restore-storages.md)设置有效的路径。 @@ -325,38 +317,6 @@ TiDB 兼容 MySQL 的错误码,在大多数情况下,返回和 MySQL 一样 `LOAD DATA` 语句存在错误。请参考 [`LOAD DATA`](/sql-statements/sql-statement-load-data.md) 查看已支持的功能。 -* Error Number: 8163 - - 未知的 `LOAD DATA ... WITH ...` 选项。请参考 [`LOAD DATA`](/sql-statements/sql-statement-load-data.md) 查看支持的选项。 - -* Error Number: 8164 - - `LOAD DATA ... WITH ...` 选项取值无效。请参考 [`LOAD DATA`](/sql-statements/sql-statement-load-data.md) 查看有效的取值。 - -* Error Number: 8165 - - 重复指定了 `LOAD DATA ... WITH ...` 选项,每个选项只能指定一次。 - -* Error Number: 8166 - - 某些 `LOAD DATA ... WITH ...` 选项只能在特定的导入模式下才可以使用。请参考 [`LOAD DATA`](/sql-statements/sql-statement-load-data.md) 查看支持的选项。 - -* Error Number: 8170 - - 指定的 `LOAD DATA` job 不存在或不是由当前用户创建。目前用户只能查看自己创建的 job。 - -* Error Number: 8171 - - 对不支持的 `LOAD DATA` 任务状态不能进行运维操作。请根据具体的错误提示进行处理。 - -* Error Number: 8172 - - 指定 `LOCAL` 时,不能指定特定的选项,比如 `DETACHED` 和 `import_mode='PHYSICAL'`。请参考 [`LOAD DATA`](/sql-statements/sql-statement-load-data.md) 更改 SQL 语句。 - -* Error Number: 8173 - - 执行 Physical Import 时,TiDB 会对当前环境进行检查,比如检查下游表是否为空等。请根据提示进行处理。 - * Error Number: 8200 尚不支持的 DDL 语法。请参考[与 MySQL DDL 的兼容性](/mysql-compatibility.md#ddl-的限制)。 diff --git a/mysql-schema.md b/mysql-schema.md index c21f5d58047f..8308405e00ba 100644 --- a/mysql-schema.md +++ b/mysql-schema.md @@ -39,7 +39,6 @@ aliases: ['/docs-cn/dev/system-tables/system-table-overview/','/docs-cn/dev/refe * `column_stats_usage` 列统计信息的使用情况 * `schema_index_usage` 索引的使用情况 * `analyze_jobs` 正在执行的统计信息收集任务以及过去 7 天内的历史任务记录 -* `load_data_jobs` 正在执行或历史执行的 `LOAD DATA` 任务 ## 执行计划相关系统表 diff --git a/releases/release-7.0.0.md b/releases/release-7.0.0.md index 1c6aeea89f71..ed2520ebfd76 100644 --- a/releases/release-7.0.0.md +++ b/releases/release-7.0.0.md @@ -56,8 +56,8 @@ TiDB 版本:7.0.0 数据库管理与可观测性
- TiDB 通过 LOAD DATA 语句集成 TiDB Lightning(实验特性) - 集成 TiDB Lightning 的逻辑导入模式使 LOAD DATA 语句更加强大,例如支持从 S3/GCS 导入数据、支持任务管理等。 + LOAD DATA 语句功能增强(实验特性) + LOAD DATA 语句功能增强,例如支持从 S3/GCS 导入数据。 TiCDC 支持对象存储 Sink (GA) @@ -258,15 +258,13 @@ TiDB 版本:7.0.0 ### 数据迁移 -* `LOAD DATA` 语句集成 TiDB Lightning,你可以使用 `LOAD DATA` 语句完成原先需要使用 TiDB Lightning 才能完成的数据导入任务(实验特性)[#40499](https://github.com/pingcap/tidb/issues/40499) @[lance6716](https://github.com/lance6716) +* 增强 `LOAD DATA` 语句功能,支持导入云存储中的数据(实验特性)[#40499](https://github.com/pingcap/tidb/issues/40499) @[lance6716](https://github.com/lance6716) - 在集成 TiDB Lightning 之前,`LOAD DATA` 语句只能用于导入客户端的数据文件,如果你需要从云存储导入数据,不得不借助 TiDB Lightning 来实现。但是单独部署 TiDB Lightning 又会带来额外的部署成本和管理成本。将 TiDB Lightning 逻辑导入能力 (Logical Import Mode) 集成到 `LOAD DATA` 语句后,不仅可以省去 TiDB Lightning 的部署和管理成本,还可以借助 TiDB Lightning 的功能极大扩展 `LOAD DATA` 语句的能力。部分扩展的功能举例说明如下: + 之前,`LOAD DATA` 语句只能用于导入客户端的数据文件,如果你需要从云存储导入数据,不得不借助 TiDB Lightning 来实现。但是单独部署 TiDB Lightning 又会带来额外的部署成本和管理成本。现在可直接通过`LOAD DATA` 语句导入云存储中的数据。功能举例说明如下: - 支持从 Amazon S3 和 Google Cloud Storage 导入数据到 TiDB,且支持使用通配符一次性匹配多个源文件导入到 TiDB。 - 支持 `DEFINED NULL BY` 来定义 null。 - - 支持 CSV、TSV、Parquet、SQL (mydumper/dumpling) 格式的源文件。 - - 支持将任务设置为 `Detached`,让任务在后台执行。 - - 支持任务管理,可通过 `SHOW LOAD DATA jobid` 查询任务状态和进展详情,方便管理和维护。 + - 支持 CSV、TSV 格式的源文件。 更多信息,请参考[用户文档](/sql-statements/sql-statement-load-data.md)。 @@ -326,7 +324,7 @@ TiDB 版本:7.0.0 在升级 TiCDC 集群到 v7.0.0 时,如果使用 Avro 同步的表包含 `FLOAT` 类型数据,请在升级前手动调整 Confluent Schema Registry 的兼容性策略为 `None`,使 changefeed 能够成功更新 schema。否则,在升级之后 changefeed 将无法更新 schema 并进入错误状态。 -* [`LOAD DATA` SQL 语句](/sql-statements/sql-statement-load-data.md)在 v7.0.0 中新增参数 `batch_size` 来实现事务的拆分。`batch_size` 参数默认值为 `1000`,表示将待导入 TiDB 的数据拆分成多个事务提交,每一个事务插入 1000 行记录到 TiDB。在 v7.0.0 以前控制事务拆分的参数为 [`tidb_dml_batch_size`](/system-variables.md#tidb_dml_batch_size),自 v7.0.0 起不再生效。 +* 自 v7.0.0 起,[`tidb_dml_batch_size`](/system-variables.md#tidb_dml_batch_size) 对 [`LOAD DATA` 语句](/sql-statements/sql-statement-load-data.md)不再生效。 ### 系统变量 diff --git a/releases/release-7.1.0.md b/releases/release-7.1.0.md index d548a5b774e2..a3619c1cb90c 100644 --- a/releases/release-7.1.0.md +++ b/releases/release-7.1.0.md @@ -146,32 +146,6 @@ TiDB 版本:7.1.0 (upcoming) 更多信息,请参考[用户文档](/partitioned-table.md#range-interval-分区)。 -* `LOAD DATA` 部分功能 GA [#40499](https://github.com/pingcap/tidb/issues/40499) @[lance6716](https://github.com/lance6716) - - 在 TiDB v7.1.0 中,以下 `LOAD DATA` 功能 GA: - - - 支持从 S3、GCS 导入数据。 - - 支持导入 Parquet 格式的数据。 - - 支持解析源文件中的下列字符集:`ascii`、`latin1`、`binary`、`gbk` 和 `utf8mbd` - - 支持设置 `FIELDS DEFINED NULL BY` 将源文件中的指定值转换为 `NULL` 并写入目标表。 - - 支持设置 `batch_size` 指定批量写入目标表的行数,从而提升写入性能。 - - 支持设置 `detached`,允许指定任务在后台运行。 - - 支持使用 `SHOW LOAD DATA` 和 `DROP LOAD DATA` 管理任务。 - - 更多信息,请参考[用户文档](/sql-statements/sql-statement-load-data.md)。 - -* `LOAD DATA` 集成 TiDB Lightning Physical Import Mode 的导入功能,提升导入性能(实验特性)[#42930](https://github.com/pingcap/tidb/issues/42930) @[D3Hunter](https://github.com/D3Hunter) - - `LOAD DATA` 集成 TiDB Lightning 的物理导入模式 (Physical Import Mode),你可以通过设置 `WITH import_mode = 'PHYSICAL'` 开启。相比逻辑导入模式 (Logical Import Mode),可成倍提升数据导入的性能。 - - 更多信息,请参考[用户文档](/sql-statements/sql-statement-load-data.md)。 - -* `LOAD DATA` 支持并发导入,提升导入性能(实验特性)[#40499](https://github.com/pingcap/tidb/issues/40499) @[lance6716](https://github.com/lance6716) - - 在 v7.1.0 之前版本中,`LOAD DATA` 不支持并发导入数据,导致性能未达到预期。从 v7.1.0 开始,`LOAD DATA` 支持并发导入数据,你可以通过 `WITH thread=` 提高并发度以提升导入的性能。在内部测试中,相较于 v7.0.0,测试负载下的逻辑导入性能提升了近 4 倍。 - - 更多信息,请参考[用户文档](/sql-statements/sql-statement-load-data.md)。 - * 生成列 (Generated Columns) 成为正式功能 (GA) @[bb7133](https://github.com/bb7133) 生成列是数据库中非常有价值的一个功能。在创建表时,可以定义一列的值由表中其他列的值计算而来,而不是由用户显式插入或更新。这个生成列可以是虚拟列 (Virtual Column) 或存储列 (Stored Column)。TiDB 在早期版本就提供了与 MySQL 兼容的生成列功能,在 v7.1.0 中这个功能正式 GA。 @@ -225,8 +199,6 @@ TiDB 版本:7.1.0 (upcoming) 如果你已经将 TiFlash 升级到 v7.1.0,那么在升级 TiDB 到 v7.1.0 的过程中,TiDB 无法读取 TiFlash 系统表([`INFORMATION_SCHEMA.TIFLASH_TABLES`](/information-schema/information-schema-tiflash-tables.md) 和 [`INFORMATION_SCHEMA.TIFLASH_SEGMENTS`](/information-schema/information-schema-tiflash-segments.md))。 -* [`SHOW LOAD DATA`](/sql-statements/sql-statement-show-load-data.md) 的返回值中废弃了参数 `Loaded_File_Size`,修改为参数 `Imported_Rows` - ### 系统变量 | 变量名 | 修改类型 | 描述 | diff --git a/sql-statements/sql-statement-load-data.md b/sql-statements/sql-statement-load-data.md index 6d79f69333ed..d3e51b6d3c67 100644 --- a/sql-statements/sql-statement-load-data.md +++ b/sql-statements/sql-statement-load-data.md @@ -8,52 +8,28 @@ aliases: ['/docs-cn/dev/sql-statements/sql-statement-load-data/','/docs-cn/dev/r `LOAD DATA` 语句用于将数据批量加载到 TiDB 表中。 -从 v7.0.0 开始,`LOAD DATA` 集成 TiDB Lightning 的逻辑导入模式 (Logical Import Mode),使 `LOAD DATA` 语句更加强大,包括: +在 v7.0.0 版本支持以下功能: - 支持从 S3、GCS 导入数据 -- 支持导入 Parquet 格式的数据 -- 新增参数 `FORMAT`、`FIELDS DEFINED NULL BY` 和 `WITH batch_size=,detached` - -从 v7.1.0 开始,`LOAD DATA` 支持以下特性: - -- 支持导入压缩的 `DELIMITED DATA` 和 `SQL FILE` 数据文件 -- 逻辑导入支持并发导入 -- 支持通过 `CharsetOpt` 来指定数据文件的编码格式 -- `LOAD DATA` 集成 TiDB Lightning 的物理导入模式 (Physical Import Mode)。该模式不经过 SQL 接口,而是直接将数据以键值对的形式插入 TiKV 节点,是一种高效且快速的导入模式。 +- 新增参数 `FIELDS DEFINED NULL BY` > **警告:** > -> v7.1.0 新增的并发导入和物理导入模式为实验特性,不建议在生产环境中使用。 +> v7.0.0 新增支持从 S3、GCS 导入数据和 `FIELDS DEFINED NULL BY` 参数为实验特性,不建议在生产环境中使用。该功能可能会在未事先通知的情况下发生变化或删除。如果发现 bug,请在 GitHub 上提 [issue](https://github.com/pingcap/tidb/issues) 反馈。 ## 语法图 ```ebnf+diagram LoadDataStmt ::= - 'LOAD' 'DATA' LocalOpt 'INFILE' stringLit FormatOpt DuplicateOpt 'INTO' 'TABLE' TableName CharsetOpt Fields Lines IgnoreLines ColumnNameOrUserVarListOptWithBrackets LoadDataSetSpecOpt LoadDataOptionListOpt + 'LOAD' 'DATA' LocalOpt 'INFILE' stringLit DuplicateOpt 'INTO' 'TABLE' TableName CharsetOpt Fields Lines IgnoreLines ColumnNameOrUserVarListOptWithBrackets LoadDataSetSpecOpt LocalOpt ::= ('LOCAL')? -FormatOpt ::= - ('FORMAT' ('DELIMITED DATA' | 'SQL FILE' | 'PARQUET'))? - -DuplicateOpt ::= - ('IGNORE' | 'REPLACE')? - Fields ::= ('TERMINATED' 'BY' stringLit | ('OPTIONALLY')? 'ENCLOSED' 'BY' stringLit | 'ESCAPED' 'BY' stringLit | 'DEFINED' 'NULL' 'BY' stringLit ('OPTIONALLY' 'ENCLOSED')?)? - -LoadDataOptionListOpt ::= - ('WITH' (LoadDataOption (',' LoadDataOption)*))? - -LoadDataOption ::= - import_mode '=' ('LOGICAL' | 'PHYSICAL') - | thread '=' numberLiteral - | batch_size '=' numberLiteral - | max_write_speed '=' stringLit - | detached ``` ## 参数说明 @@ -74,36 +50,8 @@ LoadDataOption ::= - 导入指定路径下所有以 `foo` 为前缀的文件:`s3:///path/to/data/foo*` - 导入指定路径下以 `foo` 为前缀、以 `.csv` 结尾的文件:`s3:///path/to/data/foo*.csv` -### `FORMAT` - -你可以通过 `FORMAT` 参数来指定数据文件的格式。如果不指定该参数,需要使用的格式为 `DELIMITED DATA`,该格式即 MySQL `LOAD DATA` 支持的数据格式。 - -数据格式 `DELIMITED DATA` 和 `SQL FILE` 支持压缩文件。`LOAD DATA` 会根据文件名称的后缀来自动决定压缩格式。目前支持的压缩格式如下: - -| 文件后缀 | 压缩格式 | 示例 | -|:---|:---|:---| -| `.gz` 或 `.gzip` | gzip 压缩格式 | `tbl.0001.csv.gz` | -| `.zstd` 或 `.zst` | zstd 压缩格式 | `tbl.0001.csv.zstd` | -| `.snappy` | snappy 压缩格式 | `tbl.0001.csv.snappy` | - -### `DuplicateOpt` - -该参数与 MySQL 行为一致,具体请参考 [MySQL LOAD DATA 文档](https://dev.mysql.com/doc/refman/8.0/en/load-data.html#load-data-error-handling)。 - -该参数只适用于逻辑导入模式,对物理导入模式不生效。 - -### `CharsetOpt` - -当数据格式是 `DELIMITED DATA` 时,可以通过 `CharsetOpt` 指定数据文件的编码格式。目前支持下列编码格式:`ascii`、`latin1`、`binary`、`utf8`、`utf8mb4` 和 `gbk`。 - -```sql -LOAD DATA INFILE 's3:///path/to/data/foo.csv' INTO TABLE load_charset.latin1 CHARACTER SET latin1 -``` - ### `Fields`、`Lines`、`Ignore Lines` -只有数据格式是 `DELIMITED DATA` 时,才能指定 `Fields`、`Lines`、`Ignore Lines` 等语句。 - 你可以使用 `Fields` 和 `Lines` 参数来指定如何处理数据格式: - 使用 `FIELDS TERMINATED BY` 来指定数据的分隔符号。 @@ -131,7 +79,7 @@ LOAD DATA INFILE 's3:///path/to/data/foo.csv' INTO TABLE load_chars FIELDS TERMINATED BY ',' ENCLOSED BY '\"' LINES TERMINATED BY '\r\n' ``` -当数据格式为 `DELIMITED DATA` 且不指定处理数据的参数时,将按以下参数处理: +当不指定处理数据的参数时,将按以下参数处理: ```sql FIELDS TERMINATED BY '\t' ENCLOSED BY '' ESCAPED BY '\\' @@ -140,71 +88,8 @@ LINES TERMINATED BY '\n' STARTING BY '' 你可以通过 `IGNORE LINES` 参数来忽略文件开始的 `` 行。例如,可以使用 `IGNORE 1 LINES` 来忽略文件的第一行。 -### `WITH import_mode = ('LOGICAL' | 'PHYSICAL')` - -可以通过 `import_mode = ('LOGICAL' | 'PHYSICAL')` 来指定数据导入的模式,默认值为 `LOGICAL`,即逻辑导入。从 v7.1.0 开始,`LOAD DATA` 集成 TiDB Lightning 的物理导入模式,可通过 `WITH import_mode = 'PHYSICAL'` 开启。 - -物理导入模式只能在非 `LOCAL` 模式下使用,采用单线程执行。目前物理导入尚未接入[冲突监测](/tidb-lightning/tidb-lightning-physical-import-mode-usage.md#冲突数据检测),因此遇到数据主键或唯一键冲突时会报 checksum 不一致错误。建议在导入前检查数据文件是否存在键值冲突。其他的限制和必要条件,请参考 [TiDB Lightning Physical Import Mode 简介](/tidb-lightning/tidb-lightning-physical-import-mode.md)。 - -物理导入模式下,`LOAD DATA` 将本地排序后的数据写入 TiDB [`temp-dir`](/tidb-configuration-file.md#temp-dir-从-v630-版本开始引入) 子目录中。子目录命名规则为 `import-/`。 - -物理导入模式目前尚未接入[磁盘资源配额](/tidb-lightning/tidb-lightning-physical-import-mode-usage.md#磁盘资源配额-从-v620-版本开始引入)。请确保对应磁盘有足够的空间,具体可参考[必要条件及限制](/tidb-lightning/tidb-lightning-physical-import-mode.md#必要条件及限制)中存储空间的部分。 - -### `WITH thread=` - -目前该参数仅对逻辑导入生效。 - -可以通过 `WITH thread=` 指定数据导入的并发度。默认值与 `FORMAT` 有关: - -- 当 `FORMAT` 为 `PARQUET` 时,默认值为 CPU 核数的 75%。 -- 对于其他 `FORMAT`,默认值为 CPU 的逻辑核数。 - -### `WITH batch_size=` - -可以通过 `WITH batch_size=` 来指定批量写入 TiDB 时的行数,默认值为 `1000`。如果不希望分批写入,可以指定为 `0`。 - -### `WITH max_write_speed = stringLit` - -在使用物理导入模式时,可以通过该参数指定写入单个 TiKV 的速率限制。默认值为 `0`,表示无限制。 - -该参数支持 [go-units](https://pkg.go.dev/github.com/docker/go-units#example-RAMInBytes) 格式。例如,`WITH max_write_speed = '1MB'` 表示写入单个 TiKV 的最大速率为 `1MB/s`。 - -### `WITH detached` - -如果你指定了 S3/GCS 路径(且未指定 `LOCAL` 参数),可以通过 `WITH detached` 让 `LOAD DATA` 任务在后台运行。此时 `LOAD DATA` 会返回任务的 ID。 - -你可以执行 [`SHOW LOAD DATA`](/sql-statements/sql-statement-show-load-data.md) 查看创建的任务,也可以使用 [`CANCEL LOAD DATA` 和 `DROP LOAD DATA`](/sql-statements/sql-statement-operate-load-data-job.md) 取消或删除创建的任务。 - ## 示例 -后台运行 job,执行后会输出对应的 job id: - -```sql -LOAD DATA INFILE 's3://bucket-name/test.csv?access_key=XXX&secret_access_key=XXX' INTO TABLE my_db.my_table FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '' LINES TERMINATED BY '\n' WITH detached; -``` - -```sql -+--------+ -| Job_ID | -+--------+ -| 150063 | -+--------+ -1 row in set (3.14 sec) -``` - -```sql -SHOW LOAD DATA JOB 1; -``` - -```sql -+--------+----------------------------+----------------------------+---------------------+---------------------------+--------------------+-------------+------------+-----------+------------+------------------+------------------+-------------+----------------+ -| Job_ID | Create_Time | Start_Time | End_Time | Data_Source | Target_Table | Import_Mode | Created_By | Job_State | Job_Status | Source_File_Size | Loaded_File_Size | Result_Code | Result_Message | -+--------+----------------------------+----------------------------+---------------------+---------------------------+-------------------+-------------+------------+-----------+------------+------------------+------------------+-------------+----------------+ -| 1 | 2023-03-16 22:29:12.990576 | 2023-03-16 22:29:12.991951 | 0000-00-00 00:00:00 | s3://bucket-name/test.csv | `my_db`.`my_table` | logical | root@% | loading | running | 52.43MB | 43.58MB | | | -+--------+----------------------------+----------------------------+---------------------+---------------------------+--------------------+-------------+------------+-----------+------------+------------------+------------------+-------------+----------------+ -1 row in set (0.01 sec) -``` - 通过 `LOAD DATA` 导入数据,指定数据的分隔符为逗号,忽略包围数据的引号,并且忽略文件的第一行数据。 如果此时遇到 `ERROR 1148 (42000): the used command is not allowed with this TiDB version` 报错信息。可以参考文档解决:[ERROR 1148 (42000): the used command is not allowed with this TiDB version 问题的处理方法](/error-codes.md#mysql-原生报错汇总) @@ -234,8 +119,7 @@ TiDB 中的 `LOAD DATA` 语句语法上兼容 MySQL(除字符集选项被解 > > - 在 TiDB v4.0.0 之前的版本中,`LOAD DATA` 语句每 20000 行进行一次提交。 > - 从 TiDB v4.0.0 开始一直到 TiDB v6.6.0 的版本,TiDB 默认在一个事务中提交所有行。 -> - 从 TiDB v7.0.0 开始,批量提交的行数由 `LOAD DATA` 语句的 `WITH batch_size=` 参数控制,默认 1000 行提交一次。 -> - 从 TiDB v4.0.0 及以前版本升级后,可能出现 `ERROR 8004 (HY000) at line 1: Transaction is too large, size: 100000058` 错误。要解决该问题,建议调大 `tidb.toml` 文件中的 [`txn-total-size-limit`](/tidb-configuration-file.md#txn-total-size-limit) 值。如果无法增加此限制,还可以将 [`tidb_dml_batch_size`](/system-variables.md#tidb_dml_batch_size) 的值设置为 `20000` 来恢复升级前的行为。 +> - 从 TiDB v4.0.0 及以前版本升级后,可能出现 `ERROR 8004 (HY000) at line 1: Transaction is too large, size: 100000058` 错误。要解决该问题,建议调大 `tidb.toml` 文件中的 [`txn-total-size-limit`](/tidb-configuration-file.md#txn-total-size-limit) 值。如果无法增加此限制,还可以将 [`tidb_dml_batch_size`](/system-variables.md#tidb_dml_batch_size) 的值设置为 `20000` 来恢复升级前的行为。注意自 v7.0.0 起,`tidb_dml_batch_size` 对 `LOAD DATA` 语句不再生效。 > - 无论以多少行为一个事务提交,`LOAD DATA` 都不会被显式事务中的 [`ROLLBACK`](/sql-statements/sql-statement-rollback.md) 语句回滚。 > - `LOAD DATA` 语句始终以乐观事务模式执行,不受 TiDB 事务模式设置的影响。 @@ -244,6 +128,3 @@ TiDB 中的 `LOAD DATA` 语句语法上兼容 MySQL(除字符集选项被解 * [INSERT](/sql-statements/sql-statement-insert.md) * [乐观事务模型](/optimistic-transaction.md) * [悲观事务模式](/pessimistic-transaction.md) -* [TiDB Lightning](/tidb-lightning/tidb-lightning-overview.md) -* [`SHOW LOAD DATA`](/sql-statements/sql-statement-show-load-data.md) -* [`CANCEL LOAD DATA` 和 `DROP LOAD DATA`](/sql-statements/sql-statement-operate-load-data-job.md) diff --git a/sql-statements/sql-statement-operate-load-data-job.md b/sql-statements/sql-statement-operate-load-data-job.md deleted file mode 100644 index ef91b4567432..000000000000 --- a/sql-statements/sql-statement-operate-load-data-job.md +++ /dev/null @@ -1,47 +0,0 @@ ---- -title: CANCEL LOAD DATA 和 DROP LOAD DATA -summary: TiDB 数据库中 CANCEL LOAD DATA 和 DROP LOAD DATA 的使用概况。 ---- - -# CANCEL LOAD DATA 和 DROP LOAD DATA - -`CANCEL LOAD DATA` 语句用于取消系统中创建的 LOAD DATA 任务。 - -`DROP LOAD DATA` 语句用于删除系统中创建的 LOAD DATA 任务。 - -## 语法图 - -```ebnf+diagram -CancelLoadDataJobsStmt ::= - 'CANCEL' 'LOAD' 'DATA' 'JOB' JobID - -DropLoadDataJobsStmt ::= - 'DROP' 'LOAD' 'DATA' 'JOB' JobID -``` - -## 示例 - -```sql -CANCEL LOAD DATA JOB 1; -``` - -``` -Query OK, 0 rows affected (0.01 sec) -``` - -```sql -DROP LOAD DATA JOB 1; -``` - -``` -Query OK, 1 row affected (0.01 sec) -``` - -## MySQL 兼容性 - -该语句是 TiDB 对 MySQL 语法的扩展。 - -## 另请参阅 - -* [LOAD DATA](/sql-statements/sql-statement-load-data.md) -* [SHOW LOAD DATA](/sql-statements/sql-statement-show-load-data.md) diff --git a/sql-statements/sql-statement-show-load-data.md b/sql-statements/sql-statement-show-load-data.md deleted file mode 100644 index 9199e39d3bd2..000000000000 --- a/sql-statements/sql-statement-show-load-data.md +++ /dev/null @@ -1,74 +0,0 @@ ---- -title: SHOW LOAD DATA -summary: TiDB 数据库中 SHOW LOAD DATA 的使用概况。 ---- - -# SHOW LOAD DATA - -`SHOW LOAD DATA` 语句用于显示系统中创建的 LOAD DATA 任务。该语句只能显示由当前用户创建的任务。 - -## 语法图 - -```ebnf+diagram -ShowLoadDataJobsStmt ::= - 'SHOW' 'LOAD' 'DATA' 'JOBS' - -ShowLoadDataJobStmt ::= - 'SHOW' 'LOAD' 'DATA' 'JOB' JobID -``` - -`SHOW LOAD DATA` 语句显示的字段含义如下: - -| 列名 | 说明 | -|------------------|-------------------------| -| Job_ID | 任务 ID | -| Create_Time | 任务创建时间 | -| Start_Time | 任务启动时间 | -| End_Time | 任务结束时间 | -| Data_Source | 数据源信息 | -| Target_Table | 目标表 | -| Import_Mode | 导入模式,目前该字段只能取值 `logical` | -| Created_By | 创建该任务的数据库用户名 | -| Job_State | 表示任务当前所处的阶段,对于 `logical` 模式的任务,只有 `loading` 这一个阶段 | -| Job_Status | 表示当前任务的状态。有以下几种状态:`pending` 表示任务已创建但还未开始运行;`running` 表示运行中;`canceled` 表示已经取消的任务;`failed` 表示任务失败并退出;`finished` 表示任务已完成。 | -| Source_File_Size | 源文件大小 | -| Imported_Rows | 已经读到并写入目标表的数据行数 | -| Result_Code | 任务状态为 `finished` 时,其值为 `0`。任务状态为 `failed` 时,其值为对应的错误码。 | -| Result_Message | 如果导入成功,则返回摘要信息。如果导入失败,则返回错误信息。 | - -## 示例 - -```sql -SHOW LOAD DATA JOBS; -``` - -``` -+--------+----------------------------+----------------------------+---------------------+---------------------------+--------------------+-------------+------------+-----------+------------+------------------+------------------+-------------+----------------+ -| Job_ID | Create_Time | Start_Time | End_Time | Data_Source | Target_Table | Import_Mode | Created_By | Job_State | Job_Status | Source_File_Size | Imported_Rows | Result_Code | Result_Message | -+--------+----------------------------+----------------------------+---------------------+---------------------------+-------------------+-------------+------------+-----------+------------+------------------+------------------+-------------+----------------+ -| 1 | 2023-03-16 22:29:12.990576 | 2023-03-16 22:29:12.991951 | 0000-00-00 00:00:00 | s3://bucket-name/test.csv | `my_db`.`my_table` | logical | root@% | loading | running | 52.43MB | 323339 | | | -+--------+----------------------------+----------------------------+---------------------+---------------------------+--------------------+-------------+------------+-----------+------------+------------------+------------------+-------------+----------------+ -1 row in set (0.01 sec) -``` - -```sql -SHOW LOAD DATA JOB 1; -``` - -``` -+--------+----------------------------+----------------------------+---------------------+---------------------------+--------------------+-------------+------------+-----------+------------+------------------+------------------+-------------+----------------+ -| Job_ID | Create_Time | Start_Time | End_Time | Data_Source | Target_Table | Import_Mode | Created_By | Job_State | Job_Status | Source_File_Size | Imported_Rows | Result_Code | Result_Message | -+--------+----------------------------+----------------------------+---------------------+---------------------------+-------------------+-------------+------------+-----------+------------+------------------+------------------+-------------+----------------+ -| 1 | 2023-03-16 22:29:12.990576 | 2023-03-16 22:29:12.991951 | 0000-00-00 00:00:00 | s3://bucket-name/test.csv | `my_db`.`my_table` | logical | root@% | loading | running | 52.43MB | 323339 | | | -+--------+----------------------------+----------------------------+---------------------+---------------------------+--------------------+-------------+------------+-----------+------------+------------------+------------------+-------------+----------------+ -1 row in set (0.01 sec) -``` - -## MySQL 兼容性 - -该语句是 TiDB 对 MySQL 语法的扩展。 - -## 另请参阅 - -* [`LOAD DATA`](/sql-statements/sql-statement-load-data.md) -* [`CANCEL LOAD DATA` 和 `DROP LOAD DATA`](/sql-statements/sql-statement-operate-load-data-job.md) diff --git a/system-variables.md b/system-variables.md index 9466b77bbd74..cb24aa224371 100644 --- a/system-variables.md +++ b/system-variables.md @@ -1103,7 +1103,7 @@ MPP 是 TiFlash 引擎提供的分布式计算框架,允许节点之间的数 > **注意:** > -> 自 v7.0.0 起,`tidb_dml_batch_size`对 [`LOAD DATA` 语句](/sql-statements/sql-statement-load-data.md)不再生效。如需控制 `LOAD DATA` 语句的事务大小,可使用参数 [`batch_size`](/sql-statements/sql-statement-load-data.md#with-batch_sizenumber)。 +> 自 v7.0.0 起,`tidb_dml_batch_size` 对 [`LOAD DATA` 语句](/sql-statements/sql-statement-load-data.md)不再生效。 ### `tidb_enable_1pc` 从 v5.0 版本开始引入 diff --git a/tidb-configuration-file.md b/tidb-configuration-file.md index bb9f119345bd..f7850eea5b11 100644 --- a/tidb-configuration-file.md +++ b/tidb-configuration-file.md @@ -46,7 +46,6 @@ TiDB 配置文件比命令行参数支持更多的选项。你可以在 [config/ + TiDB 用于存放临时数据的路径。如果一个功能需要使用 TiDB 节点的本地存储,TiDB 将把对应数据临时存放在这个目录下。 + 在创建索引的过程中,如果开启了[创建索引加速](/system-variables.md#tidb_ddl_enable_fast_reorg-从-v630-版本开始引入),那么新创建索引需要回填的数据会被先存放在 TiDB 本地临时存储路径,然后批量导入到 TiKV,从而提升索引创建速度。 -+ 在使用 [`LOAD DATA`](/sql-statements/sql-statement-load-data.md) 的物理导入模式时,排序后的数据会被先存放在 TiDB 本地临时存储路径,然后批量导入到 TiKV。 + 默认值:"/tmp/tidb" ### `oom-use-tmp-storage` From 0134da93e86db2955a1f82696f586677d97c85e3 Mon Sep 17 00:00:00 2001 From: Grace Cai Date: Mon, 22 May 2023 16:17:38 +0800 Subject: [PATCH 122/257] system-variables: Add type information, range info for float (#13949) --- system-variables.md | 170 +++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 169 insertions(+), 1 deletion(-) diff --git a/system-variables.md b/system-variables.md index cb24aa224371..1b99305f8c4a 100644 --- a/system-variables.md +++ b/system-variables.md @@ -48,6 +48,7 @@ SET GLOBAL tidb_distsql_scan_concurrency = 10; - 作用域:SESSION | GLOBAL - 是否持久化到集群:是 +- 类型:布尔型 - 默认值:`OFF` - 是否允许在 `INSERT` 语句中显式指定含有 `AUTO_RANDOM` 属性的列的值。 @@ -55,6 +56,7 @@ SET GLOBAL tidb_distsql_scan_concurrency = 10; - 作用域:SESSION | GLOBAL - 是否持久化到集群:是 +- 类型:整数型 - 默认值:`1` - 范围:`[1, 65535]` - 控制 `AUTO_INCREMENT` 自增值字段的自增步长。该变量常与 `auto_increment_offset` 一起使用。 @@ -63,6 +65,7 @@ SET GLOBAL tidb_distsql_scan_concurrency = 10; - 作用域:SESSION | GLOBAL - 是否持久化到集群:是 +- 类型:整数型 - 默认值:`1` - 范围:`[1, 65535]` - 控制 `AUTO_INCREMENT` 自增值字段的初始值。该变量常与 `auto_increment_increment` 一起使用。示例如下: @@ -97,6 +100,7 @@ mysql> SELECT * FROM t1; - 作用域:SESSION | GLOBAL - 是否持久化到集群:是 +- 类型:布尔型 - 默认值:`ON` - 用于设置在非显式事务时是否自动提交事务。更多信息,请参见[事务概述](/transaction-overview.md#自动提交)。 @@ -169,6 +173,7 @@ mysql> SELECT * FROM t1; - 作用域:SESSION | GLOBAL - 是否持久化到集群:是 +- 类型:整数型 - 默认值:`1000` - 范围:`[0, 4294967295]` - 这个变量用于控制公共表表达式的最大递归深度。 @@ -195,6 +200,7 @@ mysql> SELECT * FROM t1; - 作用域:GLOBAL - 是否持久化到集群:是 +- 类型:枚举型 - 默认值:`mysql_native_password` - 可选值:`mysql_native_password`,`caching_sha2_password`,`tidb_sm3_password`,`tidb_auth_token` - `tidb_auth_token` 认证方式仅用于 TiDB Cloud 内部实现,**不要设置为该值**。 @@ -286,6 +292,7 @@ mysql> SELECT * FROM t1; - 作用域:SESSION | GLOBAL - 是否持久化到集群:是 +- 类型:整数型 - 默认值:`50` - 范围:`[1, 3600]` - 单位:秒 @@ -295,6 +302,7 @@ mysql> SELECT * FROM t1; - 作用域:SESSION | GLOBAL - 是否持久化到集群:是 +- 类型:整数型 - 默认值:`28800` - 范围:`[1, 31536000]` - 单位:秒 @@ -311,12 +319,14 @@ mysql> SELECT * FROM t1; ### `last_plan_from_binding` 从 v4.0 版本开始引入 - 作用域:SESSION +- 类型:布尔型 - 默认值:`OFF` - 该变量用来显示上一条执行的语句所使用的执行计划是否来自 binding 的[执行计划](/sql-plan-management.md)。 ### `last_plan_from_cache` 从 v4.0 版本开始引入 - 作用域:SESSION +- 类型:布尔型 - 默认值:`OFF` - 这个变量用来显示上一个 `execute` 语句所使用的执行计划是不是直接从 plan cache 中取出来的。 @@ -353,6 +363,7 @@ mysql> SELECT * FROM t1; - 作用域:SESSION | GLOBAL - 是否持久化到集群:是 +- 类型:整数型 - 默认值:`0` - 范围:`[0, 2147483647]` - 单位:毫秒 @@ -399,6 +410,7 @@ mysql> SHOW GLOBAL VARIABLES LIKE 'max_prepared_stmt_count'; - 作用域:SESSION | GLOBAL - 是否持久化到集群:是 +- 类型:整数型 - 默认值:`67108864` - 取值范围:`[1024, 1073741824]` - 该变量取值应为 1024 的整数倍。若取值无法被 1024 整除,则会提示 warning 并向下取整。例如设置为 1025 时,则 TiDB 中的实际取值为 1024。 @@ -463,6 +475,7 @@ mysql> SHOW GLOBAL VARIABLES LIKE 'max_prepared_stmt_count'; ### `port` - 作用域:NONE +- 类型:整数型 - 默认值:`4000` - 范围:`[0, 65535]` - 使用 MySQL 协议时 tidb-server 监听的端口。 @@ -470,6 +483,7 @@ mysql> SHOW GLOBAL VARIABLES LIKE 'max_prepared_stmt_count'; ### `rand_seed1` - 作用域:SESSION +- 类型:整数型 - 默认值:`0` - 范围:`[0, 2147483647]` - 该变量用于为 SQL 函数 `RAND()` 中使用的随机值生成器添加种子。 @@ -478,6 +492,7 @@ mysql> SHOW GLOBAL VARIABLES LIKE 'max_prepared_stmt_count'; ### `rand_seed2` - 作用域:SESSION +- 类型:整数型 - 默认值:`0` - 范围:`[0, 2147483647]` - 该变量用于为 SQL 函数 `RAND()` 中使用的随机值生成器添加种子。 @@ -487,6 +502,7 @@ mysql> SHOW GLOBAL VARIABLES LIKE 'max_prepared_stmt_count'; - 作用域:GLOBAL - 是否持久化到集群:是 +- 类型:布尔型 - 默认值:`OFF` - 该变量控制是否所有 TiDB 的连接都在本地 socket 上进行通信,或使用 TLS。详情见[为 TiDB 客户端服务端间通信开启加密传输](/enable-tls-between-clients-and-servers.md)。 - 该变量设置为 `ON` 时,必须使用开启 TLS 的会话连接到 TiDB,防止在 TLS 配置不正确时出现锁定的情况。 @@ -496,6 +512,7 @@ mysql> SHOW GLOBAL VARIABLES LIKE 'max_prepared_stmt_count'; - 作用域:GLOBAL - 是否持久化到集群:是 +- 类型:布尔型 - 默认值:`OFF` - 该变量控制 `tidb-server` 实例是否将主机名作为连接握手的一部分来解析。 - 当 DNS 不可靠时,可以启用该变量来提高网络性能。 @@ -549,6 +566,7 @@ mysql> SHOW GLOBAL VARIABLES LIKE 'max_prepared_stmt_count'; - 作用域:SESSION | GLOBAL - 是否持久化到集群:是 +- 类型:整数型 - 默认值:`18446744073709551615` - 范围:`[0, 18446744073709551615]` - 单位:行 @@ -591,6 +609,7 @@ mysql> SHOW GLOBAL VARIABLES LIKE 'max_prepared_stmt_count'; - 作用域:SESSION | GLOBAL - 是否持久化到集群:是 +- 类型:整数型 - 默认值:`1` - 范围:`[0, 2]` - 这个变量用于控制 TiDB 向 TiFlash 发送 coprocessor 请求的方式,有以下几种取值: @@ -616,6 +635,7 @@ mysql> SHOW GLOBAL VARIABLES LIKE 'max_prepared_stmt_count'; - 作用域:SESSION | GLOBAL - 是否持久化到集群:是 +- 类型:布尔型 - 默认值:`ON` - 这个变量用于控制是否使用 TiFlash 的 MPP 模式执行查询,可以设置的值包括: - 0 或 OFF,代表从不使用 MPP 模式 @@ -626,6 +646,7 @@ MPP 是 TiFlash 引擎提供的分布式计算框架,允许节点之间的数 ### `tidb_allow_remove_auto_inc` 从 v2.1.18 和 v3.0.4 版本开始引入 - 作用域:SESSION +- 类型:布尔型 - 默认值:`OFF` - 这个变量用来控制是否允许通过 `ALTER TABLE MODIFY` 或 `ALTER TABLE CHANGE` 来移除某个列的 `AUTO_INCREMENT` 属性。默认 (`OFF`) 为不允许。 @@ -644,6 +665,7 @@ MPP 是 TiFlash 引擎提供的分布式计算框架,允许节点之间的数 - 作用域:SESSION | GLOBAL - 是否持久化到集群:是 +- 类型:整数型 - 默认值:`2` - 范围:`[1, 2]` - 这个变量用于控制 TiDB 收集统计信息的行为。 @@ -653,6 +675,7 @@ MPP 是 TiFlash 引擎提供的分布式计算框架,允许节点之间的数 - 作用域:GLOBAL - 是否持久化到集群:是 +- 类型:时间 - 默认值:`23:59 +0000` - 这个变量用来设置一天中允许自动 ANALYZE 更新统计信息的结束时间。例如,只允许在 UTC 时间的凌晨 1:00 至 3:00 之间自动更新统计信息,可以设置如下: @@ -673,7 +696,9 @@ MPP 是 TiFlash 引擎提供的分布式计算框架,允许节点之间的数 - 作用域:GLOBAL - 是否持久化到集群:是 +- 类型:浮点数 - 默认值:`0.5` +- 范围:`[0, 18446744073709551615]` - 这个变量用来设置 TiDB 在后台自动执行 [`ANALYZE TABLE`](/sql-statements/sql-statement-analyze-table.md) 更新统计信息的阈值。`0.5` 指的是当表中超过 50% 的行被修改时,触发自动 ANALYZE 更新。可以指定 `tidb_auto_analyze_start_time` 和 `tidb_auto_analyze_end_time` 来限制自动 ANALYZE 的时间 > **注意:** @@ -684,6 +709,7 @@ MPP 是 TiFlash 引擎提供的分布式计算框架,允许节点之间的数 - 作用域:GLOBAL - 是否持久化到集群:是 +- 类型:时间 - 默认值:`00:00 +0000` - 这个变量用来设置一天中允许自动 ANALYZE 更新统计信息的开始时间。例如,只允许在 UTC 时间的凌晨 1:00 至 3:00 之间自动更新统计信息,可以设置如下: @@ -703,6 +729,7 @@ MPP 是 TiFlash 引擎提供的分布式计算框架,允许节点之间的数 - 作用域:SESSION | GLOBAL - 是否持久化到集群:是 +- 类型:整数型 - 默认值:`10` - 范围:`[1, 2147483647]` - 这个变量用来设置读请求遇到锁的 backoff 时间。 @@ -711,6 +738,7 @@ MPP 是 TiFlash 引擎提供的分布式计算框架,允许节点之间的数 - 作用域:SESSION | GLOBAL - 是否持久化到集群:是 +- 类型:整数型 - 默认值:`2` - 范围:`[0, 2147483647]` - 这个变量用来给 TiDB 的 `backoff` 最大时间增加权重,即内部遇到网络或其他组件 (TiKV, PD) 故障时,发送重试请求的最大重试时间。可以通过这个变量来调整最大重试时间,最小值为 1。 @@ -765,6 +793,7 @@ MPP 是 TiFlash 引擎提供的分布式计算框架,允许节点之间的数 - 作用域:SESSION | GLOBAL - 是否持久化到集群:是 +- 类型:整数型 - 默认值:`10240` - 范围:`[0, 9223372036854775807]` - 单位:行 @@ -775,6 +804,7 @@ MPP 是 TiFlash 引擎提供的分布式计算框架,允许节点之间的数 - 作用域:SESSION | GLOBAL - 是否持久化到集群:是 +- 类型:整数型 - 默认值:`104857600` (100 MiB) - 范围:`[0, 9223372036854775807]` - 单位:字节 @@ -796,6 +826,7 @@ MPP 是 TiFlash 引擎提供的分布式计算框架,允许节点之间的数 - 作用域:GLOBAL - 是否持久化到集群:是 +- 类型:布尔型 - 默认值:`OFF` - 这个变量用于控制是否开启[自动捕获绑定](/sql-plan-management.md#自动捕获绑定-baseline-capturing)功能。该功能依赖 Statement Summary,因此在使用自动绑定之前需打开 Statement Summary 开关。 - 开启该功能后会定期遍历一次 Statement Summary 中的历史 SQL 语句,并为至少出现两次的 SQL 语句自动创建绑定。 @@ -813,6 +844,7 @@ MPP 是 TiFlash 引擎提供的分布式计算框架,允许节点之间的数 - 作用域:GLOBAL - 是否持久化到集群:否,仅作用于当前连接的 TiDB 实例 +- 类型:布尔型 - 默认值:`ON` - 设置该变量为 `ON` 可强制只存储[基本多文种平面 (BMP)](https://zh.wikipedia.org/zh-hans/Unicode字符平面映射) 编码区段内的 `utf8` 字符值。若要存储 BMP 区段外的 `utf8` 值,推荐使用 `utf8mb4` 字符集。 - 早期版本的 TiDB 中 (v2.1.x),`utf8` 检查更为宽松。如果你的 TiDB 集群是从早期版本升级的,推荐关闭该变量,详情参阅[升级与升级后常见问题](/faq/upgrade-faq.md)。 @@ -821,6 +853,7 @@ MPP 是 TiFlash 引擎提供的分布式计算框架,允许节点之间的数 - 作用域:GLOBAL - 是否持久化到集群:是 +- 类型:整数型 - 默认值:`128` - 范围:`[1, 10000]` - 在单个事务的提交阶段,用于执行提交操作相关请求的 goroutine 数量。 @@ -847,6 +880,7 @@ MPP 是 TiFlash 引擎提供的分布式计算框架,允许节点之间的数 - 作用域:SESSION | GLOBAL - 是否持久化到集群:是 +- 类型:布尔型 - 默认值:`OFF` - 该变量仅适用于乐观事务模型。悲观事务模式中的行为由 [`tidb_constraint_check_in_place_pessimistic`](#tidb_constraint_check_in_place_pessimistic-从-v630-版本开始引入) 控制。 - 当这个变量设置为 `OFF` 时,唯一索引的重复值检查会被推迟到事务提交时才进行。这有助于提高性能,但对于某些应用,可能导致非预期的行为。详情见[约束](/constraints.md#乐观事务)。 @@ -975,6 +1009,7 @@ MPP 是 TiFlash 引擎提供的分布式计算框架,允许节点之间的数 - 作用域:GLOBAL - 是否持久化到集群:是 +- 类型:布尔型 - 默认值:`ON` - 这个变量用来控制是否开启添加索引加速功能,来提升创建索引回填过程的速度。开启该变量对于数据量较大的表有一定的性能提升。 - TiDB v7.1.0 引入了快速加索引功能的检查点机制,即使 TiDB owner 因故障重启或者切换,也能够通过自动定期保存的检查点恢复部分进度。 @@ -1005,6 +1040,7 @@ MPP 是 TiFlash 引擎提供的分布式计算框架,允许节点之间的数 - 作用域:GLOBAL - 是否持久化到集群:是 +- 类型:整数型 - 默认值:`512` - 范围:`[0, 9223372036854775807]` - 这个变量用来控制 DDL 操作失败重试的次数。失败重试次数超过该参数的值后,会取消出错的 DDL 操作。 @@ -1022,6 +1058,7 @@ MPP 是 TiFlash 引擎提供的分布式计算框架,允许节点之间的数 - 作用域:GLOBAL - 是否持久化到集群:是 +- 类型:整数型 - 默认值:`256` - 范围:`[32, 10240]` - 单位:行 @@ -1042,6 +1079,7 @@ MPP 是 TiFlash 引擎提供的分布式计算框架,允许节点之间的数 - 作用域:GLOBAL - 是否持久化到集群:是 +- 类型:整数型 - 默认值:`4` - 范围:`[1, 256]` - 单位:线程 @@ -1064,6 +1102,7 @@ MPP 是 TiFlash 引擎提供的分布式计算框架,允许节点之间的数 - 作用域:SESSION | GLOBAL - 是否持久化到集群:是 +- 类型:布尔型 - 默认值:`ON` - 这个变量用来设置是否禁用显式的乐观事务自动重试,设置为 `ON` 时,不会自动重试,如果遇到事务冲突需要在应用层重试。 @@ -1079,6 +1118,7 @@ MPP 是 TiFlash 引擎提供的分布式计算框架,允许节点之间的数 - 作用域:SESSION | GLOBAL - 是否持久化到集群:是 +- 类型:整数型 - 默认值:`15` - 范围:`[1, 256]` - 单位:线程 @@ -1094,6 +1134,7 @@ MPP 是 TiFlash 引擎提供的分布式计算框架,允许节点之间的数 - 作用域:SESSION | GLOBAL - 是否持久化到集群:是 +- 类型:整数型 - 默认值:`0` - 范围:`[0, 2147483647]` - 单位:行 @@ -1109,6 +1150,7 @@ MPP 是 TiFlash 引擎提供的分布式计算框架,允许节点之间的数 - 作用域:SESSION | GLOBAL - 是否持久化到集群:是 +- 类型:布尔型 - 默认值:`ON` - 指定是否在只涉及一个 Region 的事务上启用一阶段提交特性。比起传统两阶段提交,一阶段提交能大幅降低事务提交延迟并提升吞吐。 @@ -1122,6 +1164,7 @@ MPP 是 TiFlash 引擎提供的分布式计算框架,允许节点之间的数 - 作用域:SESSION | GLOBAL - 是否持久化到集群:是 +- 类型:布尔型 - 默认值:`OFF` - 该变量控制 `ANALYZE` 读取历史时刻的数据还是读取最新的数据。当该变量设置为 `ON` 时,`ANALYZE` 读取 `ANALYZE` 开始时刻的历史数据。当该变量设置为 `OFF` 时,`ANALYZE` 读取最新的数据。 - 在 v5.2 之前,`ANALYZE` 读取最新的数据。v5.2 至 v6.1 版本 `ANALYZE` 读取 `ANALYZE` 开始时刻的历史数据。 @@ -1134,6 +1177,7 @@ MPP 是 TiFlash 引擎提供的分布式计算框架,允许节点之间的数 - 作用域:SESSION | GLOBAL - 是否持久化到集群:是 +- 类型:布尔型 - 默认值:`ON` - 该变量控制是否启用 Async Commit 特性,使事务两阶段提交的第二阶段于后台异步进行。开启本特性能降低事务提交的延迟。 @@ -1147,6 +1191,7 @@ MPP 是 TiFlash 引擎提供的分布式计算框架,允许节点之间的数 - 作用域:GLOBAL - 是否持久化到集群:是 +- 类型:布尔型 - 默认值:`ON` - 该变量控制 TiDB 是否以后台操作自动更新表的统计信息。 - 在 v6.1.0 之前这个开关通过 TiDB 配置文件 (`performance.run-auto-analyze`) 进行配置,升级到 v6.1.0 时会自动继承原有设置。 @@ -1155,6 +1200,7 @@ MPP 是 TiFlash 引擎提供的分布式计算框架,允许节点之间的数 - 作用域:SESSION | GLOBAL - 是否持久化到集群:是 +- 类型:布尔型 - 默认值:`OFF` - 这个变量用于控制是否允许在创建生成列或者表达式索引时引用自增列。 @@ -1178,12 +1224,14 @@ MPP 是 TiFlash 引擎提供的分布式计算框架,允许节点之间的数 - 作用域:SESSION | GLOBAL - 是否持久化到集群:是 +- 类型:布尔型 - 默认值:`OFF` - 这个变量用于控制是否开启 cascades planner。 ### `tidb_enable_chunk_rpc` 从 v4.0 版本开始引入 - 作用域:SESSION +- 类型:布尔型 - 默认值:`ON` - 这个变量用来设置是否启用 Coprocessor 的 `Chunk` 数据编码格式。 @@ -1191,6 +1239,7 @@ MPP 是 TiFlash 引擎提供的分布式计算框架,允许节点之间的数 - 作用域:SESSION | GLOBAL - 是否持久化到集群:是 +- 类型:枚举型 - 默认值:`ON` - 可选值:`OFF`,`ON`,`INT_ONLY` - 这个变量用于控制默认情况下表的主键是否使用[聚簇索引](/clustered-indexes.md)。“默认情况”即不显式指定 `CLUSTERED`/`NONCLUSTERED` 关键字的情况。可设置为 `OFF`/`ON`/`INT_ONLY`。 @@ -1202,6 +1251,7 @@ MPP 是 TiFlash 引擎提供的分布式计算框架,允许节点之间的数 - 作用域:GLOBAL - 是否持久化到集群:否,仅作用于当前连接的 TiDB 实例 +- 类型:布尔型 - 默认值:`ON` - 这个变量用于控制是否同时将各个执行算子的执行信息记录入 slow query log 中。 @@ -1213,6 +1263,7 @@ MPP 是 TiFlash 引擎提供的分布式计算框架,允许节点之间的数 - 作用域:GLOBAL - 是否持久化到集群:是 +- 类型:布尔型 - 默认值:`OFF` - 这个变量用于控制是否开启 TiDB 对 `PREDICATE COLUMNS` 的收集。关闭该变量后,之前收集的 `PREDICATE COLUMNS` 会被清除。详情见[收集部分列的统计信息](/statistics.md#收集部分列的统计信息)。 @@ -1227,6 +1278,7 @@ MPP 是 TiFlash 引擎提供的分布式计算框架,允许节点之间的数 ### `tidb_enable_enhanced_security` - 作用域:NONE +- 类型:布尔型 - 默认值:`OFF` - 这个变量表示所连接的 TiDB 服务器是否启用了安全增强模式 (SEM)。若要改变该变量值,你需要在 TiDB 服务器的配置文件中修改 `enable-sem` 项的值,并重启 TiDB 服务器。 - 安全增强模式受[安全增强式 Linux](https://zh.wikipedia.org/wiki/安全增强式Linux) 等系统设计的启发,削减拥有 MySQL `SUPER` 权限的用户能力,转而使用细粒度的 `RESTRICTED` 权限作为替代。这些细粒度的 `RESTRICTED` 权限如下: @@ -1256,6 +1308,7 @@ MPP 是 TiFlash 引擎提供的分布式计算框架,允许节点之间的数 - 作用域:GLOBAL - 是否持久化到集群:是 +- 类型:布尔型 - 默认值:`OFF` - 可选值:`OFF` 和 `ON` - `tidb_restricted_read_only`和 [`tidb_super_read_only`](#tidb_super_read_only-从-v531-版本开始引入) 的作用相似。在大多数情况下,你只需要使用 [`tidb_super_read_only`](#tidb_super_read_only-从-v531-版本开始引入) 即可。 @@ -1301,6 +1354,7 @@ MPP 是 TiFlash 引擎提供的分布式计算框架,允许节点之间的数 - 作用域:SESSION | GLOBAL - 是否持久化到集群:是 +- 类型:布尔型 - 默认值:`OFF` - 这个变量用来控制是否启用统计信息快速分析功能。默认值 0 表示不开启。 - 快速分析功能开启后,TiDB 会随机采样约 10000 行的数据来构建统计信息。因此在数据分布不均匀或者数据量比较少的情况下,统计信息的准确度会比较低。这可能导致执行计划不优,比如选错索引。如果可以接受普通 `ANALYZE` 语句的执行时间,则推荐关闭快速分析功能。 @@ -1387,6 +1441,7 @@ MPP 是 TiFlash 引擎提供的分布式计算框架,允许节点之间的数 - 作用域:SESSION | GLOBAL - 是否持久化到集群:是 +- 类型:布尔型 - 默认值:`ON` - 这个变量用于控制是否开启 index merge 功能。 @@ -1403,6 +1458,7 @@ MPP 是 TiFlash 引擎提供的分布式计算框架,允许节点之间的数 - 作用域:SESSION | GLOBAL - 是否持久化到集群:是 +- 类型:布尔型 - 默认值:`ON` - 这个变量用于允许使用 `SET SESSION` 对 `INSTANCE` 作用域的变量进行设置,用法同 `SET GLOBAL`。 - 为了兼容之前的 TiDB 版本,该变量值默认为 `ON`。 @@ -1411,6 +1467,7 @@ MPP 是 TiFlash 引擎提供的分布式计算框架,允许节点之间的数 - 作用域:SESSION | GLOBAL - 是否持久化到集群:是 +- 类型:布尔型 - 默认值:`ON` - 这个变量用来设置是否开启 `LIST (COLUMNS) TABLE PARTITION` 特性。 @@ -1426,6 +1483,7 @@ MPP 是 TiFlash 引擎提供的分布式计算框架,允许节点之间的数 - 作用域:GLOBAL - 是否持久化到集群:是 +- 类型:布尔型 - 默认值:`ON` - 这个变量用来设置是否开启[元数据锁](/metadata-lock.md)特性。需要注意,在设置该变量时,集群中不能有 DDL 任务,以免造成非预期数据正确性、一致性问题。 @@ -1461,7 +1519,9 @@ MPP 是 TiFlash 引擎提供的分布式计算框架,允许节点之间的数 - 作用域:SESSION | GLOBAL - 是否持久化到集群:是 +- 类型:枚举型 - 默认值:`OFF` +- 可选值:`ON`、`OFF`、`WARN` - 默认情况下,用户尝试将某些语法用于尚未实现的功能时,TiDB 会报错。若将该变量值设为 `ON`,TiDB 则自动忽略此类功能不可用的情况,即不会报错。若用户无法更改 SQL 代码,可考虑将变量值设为 `ON`。 - 启用 `noop` 函数可以控制以下行为: * `LOCK IN SHARE MODE` 语法 @@ -1478,6 +1538,7 @@ MPP 是 TiFlash 引擎提供的分布式计算框架,允许节点之间的数 - 作用域:GLOBAL - 是否持久化到集群:是 +- 类型:布尔型 - 默认值:`ON` - 若该变量值为 `OFF`,TiDB 具有以下行为: * 使用 `SET` 设置 `noop` 的系统变量时会报 `"setting *variable_name* has no effect in TiDB"` 的警告。 @@ -1527,6 +1588,7 @@ MPP 是 TiFlash 引擎提供的分布式计算框架,允许节点之间的数 - 作用域:SESSION | GLOBAL - 是否持久化到集群:是 +- 类型:布尔型 - 默认值:`ON` - 这个变量用于控制是否使用分页 (paging) 方式发送 Coprocessor 请求。对于 [v5.4.0, v6.2.0) 区间的 TiDB 版本,该变量只对 `IndexLookup` 算子生效;对于 v6.2.0 以及之后的版本,该变量对全局生效。从 v6.4.0 版本开始,该变量默认值由 `OFF` 改成 `ON`。 - 适用场景: @@ -1543,7 +1605,8 @@ MPP 是 TiFlash 引擎提供的分布式计算框架,允许节点之间的数 - 作用域:SESSION | GLOBAL - 是否持久化到集群:是 -- 默认值:0 +- 类型:布尔型 +- 默认值:`OFF` - 这个变量用于控制是否开启 Apply 算子并发,并发数由 `tidb_executor_concurrency` 变量控制。Apply 算子用来处理关联子查询且默认无并发,所以执行速度较慢。打开 Apply 并发开关可增加并发度,提高执行速度。目前默认关闭。 ### `tidb_enable_pipelined_window_function` @@ -1590,6 +1653,7 @@ MPP 是 TiFlash 引擎提供的分布式计算框架,允许节点之间的数 - 作用域:SESSION | GLOBAL - 是否持久化到集群:是 +- 类型:布尔型 - 默认值:`ON` - 这个变量用来控制是否开启 [Prepared Plan Cache](/sql-prepared-plan-cache.md)。开启后,对 `Prepare`、`Execute` 请求的执行计划会进行缓存,以便在后续执行时跳过查询计划优化这个步骤,获得性能上的提升。 - 在 v6.1.0 之前这个开关通过 TiDB 配置文件 (`prepared-plan-cache.enabled`) 进行配置,升级到 v6.1.0 时会自动继承原有设置。 @@ -1598,6 +1662,7 @@ MPP 是 TiFlash 引擎提供的分布式计算框架,允许节点之间的数 - 作用域:SESSION | GLOBAL - 是否持久化到集群:是 +- 类型:布尔型 - 默认值:`ON` - 这个变量用来控制是否统计 Prepared Plan Cache 中所缓存的执行计划占用的内存。具体可见 [Prepared Plan Cache 的内存管理](/sql-prepared-plan-cache.md#prepared-plan-cache-的内存管理)。 @@ -1605,6 +1670,7 @@ MPP 是 TiFlash 引擎提供的分布式计算框架,允许节点之间的数 - 作用域:SESSION | GLOBAL - 是否持久化到集群:是 +- 类型:布尔型 - 默认值:`OFF` - 这个变量用来控制优化器在一张表上的统计信息过期时的行为。 - 统计信息过期的判断标准:最近一次对某张表执行 `ANALYZE` 获得统计信息后,该表数据被修改的行数大于该表总行数的 80%,便可判定该表的统计信息已过期。该比例可通过 [`pseudo-estimate-ratio`](/tidb-configuration-file.md#pseudo-estimate-ratio) 配置参数调整。 @@ -1615,6 +1681,7 @@ MPP 是 TiFlash 引擎提供的分布式计算框架,允许节点之间的数 - 作用域:SESSION | GLOBAL - 是否持久化到集群:是 +- 类型:布尔型 - 默认值:`OFF` - 这个变量控制是否为读数据的算子开启动态内存控制功能。读数据的算子默认启用 [`tidb_distsql_scan_concurrency`](/system-variables.md#tidb_distsql_scan_concurrency) 所允许的最大线程数来读取数据。当单条 SQL 语句的内存使用每超过 [`tidb_mem_quota_query`](/system-variables.md#tidb_mem_quota_query) 一次,读数据的算子会停止一个线程。 - 当读数据的算子只剩 1 个线程且当单条 SQL 语句的内存使用继续超过 [`tidb_mem_quota_query`](/system-variables.md#tidb_mem_quota_query) 时,该 SQL 语句会触发其它的内存控制行为,例如[落盘](/system-variables.md#tidb_enable_tmp_storage_on_oom)。 @@ -1636,6 +1703,7 @@ MPP 是 TiFlash 引擎提供的分布式计算框架,允许节点之间的数 - 作用域:SESSION | GLOBAL - 是否持久化到集群:是 +- 类型:布尔型 - 默认值:`ON` - 可选值:`OFF`,`ON` - 该变量用于控制 TiDB 是否启用 Chunk 对象缓存。如果为 `ON`,则优先使用缓存中的 Chunk 对象,缓存中找不到申请的对象时才会从系统内存中申请。如果为 `OFF`,则直接从系统内存中申请 Chunk 对象。 @@ -1644,6 +1712,7 @@ MPP 是 TiFlash 引擎提供的分布式计算框架,允许节点之间的数 - 作用域:GLOBAL - 是否持久化到集群:否,仅作用于当前连接的 TiDB 实例 +- 类型:布尔型 - 默认值:`ON` - 这个变量用于控制是否开启 slow log 功能。 @@ -1651,6 +1720,7 @@ MPP 是 TiFlash 引擎提供的分布式计算框架,允许节点之间的数 - 作用域:GLOBAL - 是否持久化到集群:是 +- 类型:布尔型 - 默认值:`ON` - 这个变量用来控制是否开启 statement summary 功能。如果开启,SQL 的耗时等执行信息将被记录到系统表 `information_schema.STATEMENTS_SUMMARY` 中,用于定位和排查 SQL 性能问题。 @@ -1658,6 +1728,7 @@ MPP 是 TiFlash 引擎提供的分布式计算框架,允许节点之间的数 - 作用域:SESSION | GLOBAL - 是否持久化到集群:是 +- 类型:布尔型 - 默认值:`ON` - 这个变量用来控制是否可以用 `DOUBLE` 类型的无效定义创建表。该设置的目的是提供一个从 TiDB 早期版本升级的方法,因为早期版本在验证类型方面不太严格。 - 该变量的默认值 `ON` 与 MySQL 兼容。 @@ -1682,6 +1753,7 @@ Query OK, 0 rows affected (0.09 sec) - 作用域:SESSION | GLOBAL - 是否持久化到集群:是 - 默认值:`ON` +- 类型:枚举型 - 可选值:`OFF`,`ON`,`AUTO` - 这个变量用来设置是否开启 `TABLE PARTITION` 特性。目前变量支持以下三种值: - 默认值 `ON` 表示开启 TiDB 当前已实现了的分区表类型,目前 Range partition、Hash partition 以及 Range column 单列的场景会生效。 @@ -1692,6 +1764,7 @@ Query OK, 0 rows affected (0.09 sec) - 作用域:GLOBAL - 是否持久化到集群:是 +- 类型:布尔型 - 默认值:`OFF` - 这个变量用于动态地控制 TiDB 遥测功能是否开启,当前版本默认关闭 TiDB 的遥测功能。当所有 TiDB 实例都设置配置项 [`enable-telemetry`](/tidb-configuration-file.md#enable-telemetry-从-v402-版本开始引入) 为 `false` 时,将忽略该系统变量,并总是关闭 TiDB 遥测功能。参阅[遥测](/telemetry.md)了解该功能详情。 @@ -1724,6 +1797,7 @@ Query OK, 0 rows affected (0.09 sec) - 作用域:GLOBAL - 是否持久化到集群:是 +- 类型:布尔型 - 默认值:`OFF` - 这个变量用于控制是否开启 [Top SQL 特性](/dashboard/top-sql.md)。 @@ -1731,6 +1805,7 @@ Query OK, 0 rows affected (0.09 sec) - 作用域:GLOBAL - 是否持久化到集群:是 +- 类型:布尔型 - 默认值:`OFF` - 这个变量用来开启 TSO Follower Proxy 特性。当该值为 `OFF` 时,TiDB 仅会从 PD leader 获取 TSO。开启该特性之后,TiDB 在获取 TSO 时会将请求均匀地发送到所有 PD 节点上,通过 PD follower 转发 TSO 请求,从而降低 PD leader 的 CPU 压力。 - 适合开启 TSO Follower Proxy 的场景: @@ -1753,6 +1828,7 @@ Query OK, 0 rows affected (0.09 sec) - 作用域:SESSION | GLOBAL - 是否持久化到集群:是 +- 类型:布尔型 - 默认值:`ON` - 这个变量用于控制是否开启向量化执行。 @@ -1760,6 +1836,7 @@ Query OK, 0 rows affected (0.09 sec) - 作用域:SESSION | GLOBAL - 是否持久化到集群:是 +- 类型:布尔型 - 默认值:`ON` - 这个变量用来控制是否开启窗口函数的支持。默认值 1 代表开启窗口函数的功能。 - 由于窗口函数会使用一些保留关键字,可能导致原先可以正常执行的 SQL 语句在升级 TiDB 后无法被解析语法,此时可以将 `tidb_enable_window_function` 设置为 `OFF`。 @@ -1767,6 +1844,7 @@ Query OK, 0 rows affected (0.09 sec) ### `tidb_enforce_mpp` 从 v5.1 版本开始引入 - 作用域:SESSION +- 类型:布尔型 - 默认值:`OFF`(表示关闭)。如需修改此变量的默认值,请配置 [`performance.enforce-mpp`](/tidb-configuration-file.md#enforce-mpp) 参数。 - 这个变量用于控制是否忽略优化器代价估算,强制使用 TiFlash 的 MPP 模式执行查询,可以设置的值包括: - 0 或 OFF,代表不强制使用 MPP 模式(默认) @@ -1778,6 +1856,7 @@ MPP 是 TiFlash 引擎提供的分布式计算框架,允许节点之间的数 - 作用域:SESSION | GLOBAL - 是否持久化到集群:是 +- 类型:布尔型 - 默认值:`OFF` - 这个变量用于控制是否启用自动演进绑定功能。该功能的详细介绍和使用方法可以参考[自动演进绑定](/sql-plan-management.md#自动演进绑定-baseline-evolution)。 - 为了减少自动演进对集群的影响,可以进行以下配置: @@ -1789,6 +1868,7 @@ MPP 是 TiFlash 引擎提供的分布式计算框架,允许节点之间的数 - 作用域:GLOBAL - 是否持久化到集群:是 +- 类型:时间 - 默认值:`23:59 +0000` - 这个变量用来设置一天中允许自动演进的结束时间。 @@ -1796,6 +1876,7 @@ MPP 是 TiFlash 引擎提供的分布式计算框架,允许节点之间的数 - 作用域:GLOBAL - 是否持久化到集群:是 +- 类型:整数型 - 默认值:`600` - 范围:`[-1, 9223372036854775807]` - 单位:秒 @@ -1805,6 +1886,7 @@ MPP 是 TiFlash 引擎提供的分布式计算框架,允许节点之间的数 - 作用域:GLOBAL - 是否持久化到集群:是 +- 类型:时间 - 默认值:`00:00 +0000` - 这个变量用来设置一天中允许自动演进的开始时间。 @@ -1812,6 +1894,7 @@ MPP 是 TiFlash 引擎提供的分布式计算框架,允许节点之间的数 - 作用域:SESSION | GLOBAL - 是否持久化到集群:是 +- 类型:整数型 - 默认值:`5` - 范围:`[1, 256]` - 单位:线程 @@ -1843,6 +1926,7 @@ v5.0 后,用户仍可以单独修改以上系统变量(会有废弃警告) - 作用域:GLOBAL - 是否持久化到集群:否,仅作用于当前连接的 TiDB 实例 +- 类型:整数型 - 默认值:`60` - 范围:`[10, 2147483647]` - 单位:秒 @@ -1862,6 +1946,7 @@ v5.0 后,用户仍可以单独修改以上系统变量(会有废弃警告) - 作用域:GLOBAL - 是否持久化到集群:是 +- 类型:整数型 - 默认值:`-1` - 范围:`[1, 256]` - 单位:线程 @@ -1871,6 +1956,7 @@ v5.0 后,用户仍可以单独修改以上系统变量(会有废弃警告) - 作用域:GLOBAL - 是否持久化到集群:是 +- 类型:布尔型 - 默认值:`ON` - 这个变量用于控制是否启用 TiKV 的垃圾回收 (GC) 机制。如果不启用 GC 机制,系统将不再清理旧版本的数据,因此会有损系统性能。 @@ -1878,6 +1964,7 @@ v5.0 后,用户仍可以单独修改以上系统变量(会有废弃警告) - 作用域:GLOBAL - 是否持久化到集群:是 +- 类型:Duration - 默认值:`10m0s` - 范围:`[10m0s, 8760h0m0s]` - 这个变量用于指定每次进行垃圾回收 (GC) 时保留数据的时限。变量值为 Go 的 Duration 字符串格式。每次进行 GC 时,将以当前时间减去该变量的值作为 safe point。 @@ -1903,6 +1990,7 @@ v5.0 后,用户仍可以单独修改以上系统变量(会有废弃警告) - 作用域:GLOBAL - 是否持久化到集群:是 +- 类型:Duration - 默认值:`10m0s` - 范围:`[10m0s, 8760h0m0s]` - 这个变量用于指定垃圾回收 (GC) 运行的时间间隔。变量值为 Go 的 Duration 字符串格式,如`"1h30m"`、`"15m"`等。 @@ -1915,6 +2003,7 @@ v5.0 后,用户仍可以单独修改以上系统变量(会有废弃警告) - 作用域:GLOBAL - 是否持久化到集群:是 +- 类型:枚举型 - 默认值:`LEGACY` - 可设置为:`PHYSICAL`,`LEGACY` - `LEGACY`:使用旧的扫描方式,即禁用 Green GC。 @@ -1925,6 +2014,7 @@ v5.0 后,用户仍可以单独修改以上系统变量(会有废弃警告) - 作用域:GLOBAL - 是否持久化到集群:否,仅作用于当前连接的 TiDB 实例 +- 类型:布尔型 - 默认值:`OFF` - 这个变量用来设置是否在[日志](/tidb-configuration-file.md#logfile)里记录所有的 SQL 语句。该功能默认关闭。如果系统运维人员在定位问题过程中需要追踪所有 SQL 记录,可考虑开启该功能。 - 在 TiDB 配置项 [`log.level`](/tidb-configuration-file.md#level) 为 `"info"` 或 `"debug"` 时,通过查询 `"GENERAL_LOG"` 字符串可以定位到该功能在日志中的所有记录。日志会记录以下内容: @@ -1996,6 +2086,7 @@ v5.0 后,用户仍可以单独修改以上系统变量(会有废弃警告) - 作用域:SESSION | GLOBAL - 是否持久化到集群:是 +- 类型:整数型 - 默认值:`-1` - 范围:`[1, 256]` - 单位:线程 @@ -2010,6 +2101,7 @@ v5.0 后,用户仍可以单独修改以上系统变量(会有废弃警告) - 作用域:SESSION | GLOBAL - 是否持久化到集群:是 +- 类型:整数型 - 默认值:`-1` - 范围:`[1, 256]` - 单位:线程 @@ -2024,6 +2116,7 @@ v5.0 后,用户仍可以单独修改以上系统变量(会有废弃警告) - 作用域:SESSION | GLOBAL - 是否持久化到集群:是 +- 类型:整数型 - 默认值:`-1` - 范围:`[1, 256]` - 单位:线程 @@ -2042,6 +2135,7 @@ v5.0 后,用户仍可以单独修改以上系统变量(会有废弃警告) - 作用域:SESSION | GLOBAL - 是否持久化到集群:是 +- 类型:布尔型 - 默认值:`OFF` - 这个变量用来设置是否忽略关闭 Prepared Statement 的指令。 - 如果变量值设为 `ON`,Binary 协议的 `COM_STMT_CLOSE` 信号和文本协议的 [`DEALLOCATE PREPARE`](/sql-statements/sql-statement-deallocate.md) 语句都会被忽略。 @@ -2050,6 +2144,7 @@ v5.0 后,用户仍可以单独修改以上系统变量(会有废弃警告) - 作用域:SESSION | GLOBAL - 是否持久化到集群:是 +- 类型:整数型 - 默认值:`25000` - 范围:`[1, 2147483647]` - 单位:行 @@ -2107,6 +2202,7 @@ v5.0 后,用户仍可以单独修改以上系统变量(会有废弃警告) - 作用域:SESSION | GLOBAL - 是否持久化到集群:是 +- 类型:整数型 - 默认值:`20000` - 范围:`[1, 2147483647]` - 单位:行 @@ -2116,6 +2212,7 @@ v5.0 后,用户仍可以单独修改以上系统变量(会有废弃警告) - 作用域:SESSION | GLOBAL - 是否持久化到集群:是 +- 类型:整数型 - 默认值:`1` - 范围:`[1, 256]` - 单位:线程 @@ -2125,6 +2222,7 @@ v5.0 后,用户仍可以单独修改以上系统变量(会有废弃警告) - 作用域:SESSION | GLOBAL - 是否持久化到集群:是 +- 类型:整数型 - 默认值:`32` - 范围:`[1, 32]` - 单位:行 @@ -2185,6 +2283,7 @@ v5.0 后,用户仍可以单独修改以上系统变量(会有废弃警告) - 作用域:GLOBAL - 是否持久化到集群:否,仅作用于当前连接的 TiDB 实例 +- 类型:整数型 - 默认值:`0` - 范围:`[0, 2147483647]` - 这个变量可以调整当前 TiDB 实例上日志的最大保留天数。默认值是实例配置文件中指定的值,见配置项 [`max-days`](/tidb-configuration-file.md#max-days)。此变量只影响当前 TiDB 实例上的配置,重启后丢失,且配置文件不受影响。 @@ -2192,6 +2291,7 @@ v5.0 后,用户仍可以单独修改以上系统变量(会有废弃警告) ### `tidb_low_resolution_tso` - 作用域:SESSION +- 类型:布尔型 - 默认值:`OFF` - 这个变量用来设置是否启用低精度 TSO 特性。开启该功能之后,新事务会使用一个每 2s 更新一次的 TS 来读取数据。 - 主要场景是在可以容忍读到旧数据的情况下,降低小的只读事务获取 TSO 的开销。 @@ -2260,6 +2360,7 @@ v5.0 后,用户仍可以单独修改以上系统变量(会有废弃警告) - 作用域:SESSION | GLOBAL - 是否持久化到集群:是 +- 类型:整数型 - 默认值:`1024` - 范围:`[32, 2147483647]` - 单位:行 @@ -2269,6 +2370,7 @@ v5.0 后,用户仍可以单独修改以上系统变量(会有废弃警告) - 作用域:GLOBAL - 是否持久化到集群:是 +- 类型:整数型 - 默认值:`1024` - 范围:`[100, 16384]` - 这个变量用来设置缓存 schema 版本信息(对应版本修改的相关 table IDs)的个数限制,可设置的范围 100 - 16384。此变量在 2.1.18 及之后版本支持。 @@ -2277,6 +2379,7 @@ v5.0 后,用户仍可以单独修改以上系统变量(会有废弃警告) - 作用域:SESSION | GLOBAL - 是否持久化到集群:是 +- 类型:整数型 - 默认值:`50000` - 范围:`[1, 9223372036854775807]` - 单位:行 @@ -2296,6 +2399,7 @@ v5.0 后,用户仍可以单独修改以上系统变量(会有废弃警告) - 作用域:GLOBAL - 是否持久化到集群:是 +- 类型:枚举型 - 默认值:`CANCEL` - 可选值:`CANCEL`,`LOG` - 该变量控制当单个查询使用的内存超过限制 (`tidb_mem_quota_query`) 且不能再利用临时磁盘时,TiDB 所采取的操作。详情见 [TiDB 内存控制](/configure-memory-usage.md)。 @@ -2324,6 +2428,7 @@ v5.0 后,用户仍可以单独修改以上系统变量(会有废弃警告) - 作用域:SESSION | GLOBAL - 是否持久化到集群:是 +- 类型:整数型 - 默认值:`33554432` (32 MiB) - 范围:`[0, 9223372036854775807]` - 单位:字节 @@ -2334,6 +2439,7 @@ v5.0 后,用户仍可以单独修改以上系统变量(会有废弃警告) - 作用域:GLOBAL - 是否持久化到集群:是 +- 类型:整数型 - 默认值:`67108864` (64 MiB) - 范围:`[0, 2147483647]` - 单位:字节 @@ -2344,6 +2450,7 @@ v5.0 后,用户仍可以单独修改以上系统变量(会有废弃警告) - 作用域:SESSION | GLOBAL - 是否持久化到集群:是 +- 类型:整数型 - 默认值:`1073741824` (1 GiB) - 范围:`[-1, 9223372036854775807]` - 单位:字节 @@ -2372,6 +2479,7 @@ v5.0 后,用户仍可以单独修改以上系统变量(会有废弃警告) - 作用域:GLOBAL - 是否持久化到集群:是 +- 类型:浮点数 - 默认值:`0.7` - 范围:`[0.0, 1.0]` - 这个变量用于设置触发 tidb-server 内存告警的内存使用比率。默认情况下,当 TiDB 内存使用量超过总内存的 70% 且满足[报警条件](/configure-memory-usage.md#tidb-server-内存占用过高时的报警)时,TiDB 会打印报警日志。 @@ -2413,6 +2521,7 @@ v5.0 后,用户仍可以单独修改以上系统变量(会有废弃警告) ### `tidb_metric_query_range_duration` 从 v4.0 版本开始引入 - 作用域:SESSION +- 类型:整数型 - 默认值:`60` - 范围:`[10, 216000]` - 单位:秒 @@ -2421,6 +2530,7 @@ v5.0 后,用户仍可以单独修改以上系统变量(会有废弃警告) ### `tidb_metric_query_step` 从 v4.0 版本开始引入 - 作用域:SESSION +- 类型:整数型 - 默认值:`60` - 范围:`[10, 216000]` - 单位:秒 @@ -2430,6 +2540,7 @@ v5.0 后,用户仍可以单独修改以上系统变量(会有废弃警告) - 作用域:SESSION | GLOBAL - 是否持久化到集群:是 +- 类型:整数型 - 默认值:`128` - 范围:`[1, 9223372036854775807]` - 单位:行 @@ -2451,6 +2562,7 @@ v5.0 后,用户仍可以单独修改以上系统变量(会有废弃警告) - 作用域:SESSION | GLOBAL - 是否持久化到集群:是 +- 类型:枚举型 - 默认值:`OFF` - 可选值:`OFF`,`ON`,`WARN` - 该变量用于控制是否在同一个 `COM_QUERY` 调用中执行多个查询。 @@ -2515,6 +2627,7 @@ v5.0 后,用户仍可以单独修改以上系统变量(会有废弃警告) - 作用域:SESSION | GLOBAL - 是否持久化到集群:是 +- 类型:整数型 - 默认值:`1` - 范围:`[0, 2147483647]` - 当交叉估算方法不可用时,会采用启发式估算方法。这个变量用来控制启发式方法的行为。当值为 0 时不用启发式估算方法,大于 0 时,该变量值越大,启发式估算方法越倾向 index scan,越小越倾向 table scan。 @@ -2523,7 +2636,9 @@ v5.0 后,用户仍可以单独修改以上系统变量(会有废弃警告) - 作用域:SESSION | GLOBAL - 是否持久化到集群:是 +- 类型:浮点数 - 默认值:`0.9` +- 范围:`[0, 1]` - 这个变量用来设置优化器启用交叉估算 row count 方法的阈值。如果列和 handle 列之间的顺序相关性超过这个阈值,就会启用交叉估算方法。 - 交叉估算方法可以简单理解为,利用这个列的直方图来估算 handle 列需要扫的行数。 @@ -2565,6 +2680,7 @@ v5.0 后,用户仍可以单独修改以上系统变量(会有废弃警告) ### `tidb_opt_distinct_agg_push_down` - 作用域:SESSION +- 类型:布尔型 - 默认值:`OFF` - 这个变量用来设置优化器是否执行带有 `Distinct` 的聚合函数(比如 `select count(distinct a) from t`)下推到 Coprocessor 的优化操作。当查询中带有 `Distinct` 的聚合操作执行很慢时,可以尝试设置该变量为 `1`。 @@ -2600,6 +2716,7 @@ mysql> desc select count(distinct a) from test.t; - 作用域:SESSION | GLOBAL - 是否持久化到集群:是 +- 类型:布尔型 - 默认值:`ON` - 这个变量用来控制优化器是否开启交叉估算。 @@ -2646,6 +2763,7 @@ mysql> desc select count(distinct a) from test.t; - 作用域:SESSION | GLOBAL - 是否持久化到集群:是 +- 类型:布尔型 - 默认值:`ON` - 这个变量用来设置是否开启优化规则:将子查询转成 join 和 aggregation。 @@ -2687,6 +2805,7 @@ mysql> desc select count(distinct a) from test.t; - 作用域:SESSION | GLOBAL - 是否持久化到集群:是 +- 类型:整数型 - 默认值:`100` - 范围:`[0, 2147483647]` - 这个变量用来设置将 Limit 和 TopN 算子下推到 TiKV 的阈值。 @@ -2762,6 +2881,7 @@ mysql> desc select count(distinct a) from test.t; - 作用域:SESSION | GLOBAL - 是否持久化到集群:是 +- 类型:布尔型 - 默认值:`OFF` - 将该变量值设为 `ON` 后,优化器总是偏好区间扫描而不是全表扫描。 - 在以下示例中,`tidb_opt_prefer_range_scan` 开启前,TiDB 优化器需要执行全表扫描。`tidb_opt_prefer_range_scan` 开启后,优化器选择了索引区间扫描。 @@ -2953,6 +3073,7 @@ SHOW WARNINGS; - 作用域:SESSION | GLOBAL - 是否持久化到集群:是 +- 类型:布尔型 - 默认值:`OFF` - 这个变量用来设置优化器是否将带有 `DISTINCT` 的聚合函数(例如 `SELECT b, count(DISTINCT a) FROM t GROUP BY b`)改写为两层聚合函数(例如 `SELECT b, count(a) FROM (SELECT b, a FROM t GROUP BY b, a) t GROUP BY b`)。当聚合列有严重的数据倾斜,且 `DISTINCT` 列有很多不同的值时,这种改写能够避免查询执行过程中的数据倾斜,从而提升查询性能。 @@ -3002,6 +3123,7 @@ SHOW WARNINGS; - 作用域:GLOBAL - 是否持久化到集群:是 +- 类型:布尔型 - 默认值:`ON` - 这个变量用于控制是否开启 [ANALYZE 配置持久化](/statistics.md#analyze-配置持久化)特性。 @@ -3024,6 +3146,7 @@ SHOW WARNINGS; - 作用域:SESSION | GLOBAL - 是否持久化到集群:是 +- 类型:枚举型 - 默认值:`STRICT` - 可选值:`STRICT`,`IGNORE` - 该变量用于控制 DDL 语句是否忽略 [Placement Rules in SQL](/placement-rules-in-sql.md) 指定的放置规则。变量值为 `IGNORE` 时将忽略所有放置规则选项。 @@ -3053,6 +3176,7 @@ SHOW WARNINGS; - 作用域:GLOBAL - 是否持久化到集群:否,仅作用于当前连接的 TiDB 实例 +- 类型:整数型 - 默认值:`0` - 范围:`[0, 1]` - 这个变量用来控制是否在 profile 输出中标记出对应的 SQL 语句,用于定位和排查性能问题。 @@ -3061,6 +3185,7 @@ SHOW WARNINGS; - 作用域:SESSION | GLOBAL - 是否持久化到集群:是 +- 类型:布尔型 - 默认值:`ON` - 这个变量用于控制 TiDB 优化器是否将某些过滤条件下推到前缀索引,尽量避免不必要的回表,从而提高查询性能。 - 将该变量设置为 `ON` 时,会将过滤条件下推到前缀索引。此时,假设一张表中 `col` 列是索引前缀列,查询语句中的 `col is null` 或者 `col is not null` 条件会被归为索引上的过滤条件,而不是回表时的过滤条件,从而避免不必要的回表。 @@ -3124,6 +3249,7 @@ EXPLAIN FORMAT='brief' SELECT COUNT(1) FROM t WHERE a = 1 AND b IS NOT NULL; - 作用域:SESSION | GLOBAL - 是否持久化到集群:是 +- 类型:布尔型 - 默认值:`OFF` - 这个变量用于设定 TiDB 选择 [MPP Hash Join 算法](/tiflash/use-tiflash-mpp-mode.md#mpp-模式的算法支持)时,是否使用最小网络交换的数据量策略。开启该变量后,TiDB 会估算 Broadcast Hash Join 和 Shuffled Hash Join 两种算法所需进行网络交换的数据量,并选择网络交换数据量较小的算法。 - 该功能开启后 [`tidb_broadcast_join_threshold_count`](#tidb_broadcast_join_threshold_count-从-v50-版本开始引入) 和 [`tidb_broadcast_join_threshold_size`](#tidb_broadcast_join_threshold_size-从-v50-版本开始引入) 将不再生效。 @@ -3132,6 +3258,7 @@ EXPLAIN FORMAT='brief' SELECT COUNT(1) FROM t WHERE a = 1 AND b IS NOT NULL; - 作用域:GLOBAL - 是否持久化到集群:是 +- 类型:浮点数 - 默认值:`0.1` - 范围:`[0, 1]` - 这个变量用来控制 Prepared Plan Cache 触发内存保护机制的阈值,具体可见 [Prepared Plan Cache 的内存管理](/sql-prepared-plan-cache.md#prepared-plan-cache-的内存管理)。 @@ -3145,6 +3272,7 @@ EXPLAIN FORMAT='brief' SELECT COUNT(1) FROM t WHERE a = 1 AND b IS NOT NULL; - 作用域:SESSION | GLOBAL - 是否持久化到集群:是 +- 类型:整数型 - 默认值:`100` - 范围:`[1, 100000]` - 这个变量用来控制单个 `SESSION` 的 Prepared Plan Cache 最多能够缓存的计划数量,具体可见 [Prepared Plan Cache 的内存管理](/sql-prepared-plan-cache.md#prepared-plan-cache-的内存管理)。 @@ -3158,6 +3286,7 @@ EXPLAIN FORMAT='brief' SELECT COUNT(1) FROM t WHERE a = 1 AND b IS NOT NULL; - 作用域:SESSION | GLOBAL - 是否持久化到集群:是 +- 类型:整数型 - 默认值:`-1` - 范围:`[-1, 256]` - 单位:线程 @@ -3168,6 +3297,7 @@ EXPLAIN FORMAT='brief' SELECT COUNT(1) FROM t WHERE a = 1 AND b IS NOT NULL; - 作用域:GLOBAL - 是否持久化到集群:是 +- 类型:整数型 - 默认值:`4096` (4 KiB) - 范围:`[0, 1073741824]` - 单位:字节 @@ -3184,6 +3314,7 @@ EXPLAIN FORMAT='brief' SELECT COUNT(1) FROM t WHERE a = 1 AND b IS NOT NULL; - 作用域:GLOBAL - 是否持久化到集群:否,仅作用于当前连接的 TiDB 实例 +- 类型:布尔型 - 默认值:`OFF` - 该变量用于优化时间戳的获取,适用于悲观事务 `READ-COMMITTED` 隔离级别下读写冲突较少的场景,开启此变量可以避免获取全局 timestamp 带来的延迟和开销,并优化事务内读语句延迟。 - 如果读写冲突较为严重,开启此功能会增加额外开销和延迟,造成性能回退。更详细的说明,请参考[读已提交隔离级别 (Read Committed) 文档](/transaction-isolation-levels.md#读已提交隔离级别-read-committed)。 @@ -3213,6 +3344,7 @@ EXPLAIN FORMAT='brief' SELECT COUNT(1) FROM t WHERE a = 1 AND b IS NOT NULL; ### `tidb_read_staleness` 从 v5.4.0 版本开始引入 - 作用域:SESSION +- 类型:整数型 - 默认值:`0` - 范围 `[-2147483648, 0]` - 这个变量用于设置当前会话允许读取的历史数据范围。设置后,TiDB 会从参数允许的范围内选出一个尽可能新的时间戳,并影响后继的所有读操作。比如,如果该变量的值设置为 `-5`,TiDB 会在 5 秒时间范围内,保证 TiKV 拥有对应历史版本数据的情况下,选择尽可能新的一个时间戳。 @@ -3221,6 +3353,7 @@ EXPLAIN FORMAT='brief' SELECT COUNT(1) FROM t WHERE a = 1 AND b IS NOT NULL; - 作用域:GLOBAL - 是否持久化到集群:否,仅作用于当前连接的 TiDB 实例 +- 类型:布尔型 - 默认值:`ON` - 这个变量用于控制是否在 slow log 里包含慢查询的执行计划。 @@ -3228,6 +3361,7 @@ EXPLAIN FORMAT='brief' SELECT COUNT(1) FROM t WHERE a = 1 AND b IS NOT NULL; - 作用域:SESSION | GLOBAL - 是否持久化到集群:是 +- 类型:布尔型 - 默认值:`OFF` - 这个变量用于控制在记录 TiDB 日志和慢日志时,是否将 SQL 中的用户信息遮蔽。 - 将该变量设置为 `1` 即开启后,假设执行的 SQL 为 `insert into t values (1,2)`,在日志中记录的 SQL 会是 `insert into t values (?,?)`,即用户输入的信息被遮蔽。 @@ -3236,6 +3370,7 @@ EXPLAIN FORMAT='brief' SELECT COUNT(1) FROM t WHERE a = 1 AND b IS NOT NULL; - 作用域:SESSION | GLOBAL - 是否持久化到集群:是 +- 类型:布尔型 - 默认值:`ON` - 这个变量用来控制优化器是否可以将包含 null 的等值条件作为前缀条件来访问索引。 - 该变量默认开启。开启后,该变量可以使优化器减少需要访问的索引数据量,从而提高查询的执行速度。例如,在有多列索引 `index(a, b)` 且查询条件为 `a<=>null and b=1` 的情况下,优化器可以同时使用查询条件中的 `a<=>null` 和 `b=1` 进行索引访问。如果关闭该变量,因为 `a<=>null and b=1` 包含 null 的等值条件,优化器不会使用 `b=1` 进行索引访问。 @@ -3252,6 +3387,7 @@ EXPLAIN FORMAT='brief' SELECT COUNT(1) FROM t WHERE a = 1 AND b IS NOT NULL; - 作用域:SESSION | GLOBAL - 是否持久化到集群:是 +- 类型:枚举型 - 默认值:`leader` - 可选值:`leader`、`follower`、`leader-and-follower`、`prefer-leader`、`closest-replicas`、`closest-adaptive` 和 `learner`。其中,`learner` 从 v6.6.0 开始引入。 - 这个变量用于控制 TiDB 的 Follower Read 功能的行为。 @@ -3261,6 +3397,7 @@ EXPLAIN FORMAT='brief' SELECT COUNT(1) FROM t WHERE a = 1 AND b IS NOT NULL; - 作用域:SESSION | GLOBAL - 是否持久化到集群:是 +- 类型:整数型 - 默认值:`10` - 范围:`[-1, 9223372036854775807]` - 这个变量用来设置乐观事务的最大重试次数。一个事务执行中遇到可重试的错误(例如事务冲突、事务提交过慢或表结构变更)时,会根据该变量的设置进行重试。注意当 `tidb_retry_limit = 0` 时,也会禁用自动重试。该变量仅适用于乐观事务,不适用于悲观事务。 @@ -3269,6 +3406,7 @@ EXPLAIN FORMAT='brief' SELECT COUNT(1) FROM t WHERE a = 1 AND b IS NOT NULL; - 作用域:SESSION | GLOBAL - 是否持久化到集群:是 +- 类型:整数型 - 默认值:`2` - 范围:`[1, 2]` - 控制新保存数据的表数据格式版本。TiDB v4.0 中默认使用版本号为 2 的[新表数据格式](https://github.com/pingcap/tidb/blob/master/docs/design/2018-07-19-row-format.md)保存新数据。 @@ -3281,6 +3419,7 @@ EXPLAIN FORMAT='brief' SELECT COUNT(1) FROM t WHERE a = 1 AND b IS NOT NULL; - 作用域:GLOBAL - 是否持久化到集群:是 +- 类型:布尔型 - 默认值:`OFF` - TiDB 默认会在建表时为新表分裂 Region。开启该变量后,会在建表语句执行时,同步打散刚分裂出的 Region。适用于批量建表后紧接着批量写入数据,能让刚分裂出的 Region 先在 TiKV 分散而不用等待 PD 进行调度。为了保证后续批量写入数据的稳定性,建表语句会等待打散 Region 完成后再返回建表成功,建表语句执行时间会是该变量关闭时的数倍。 - 如果建表时设置了 `SHARD_ROW_ID_BITS` 和 `PRE_SPLIT_REGIONS`,建表成功后会均匀切分出指定数量的 Region。 @@ -3345,6 +3484,7 @@ EXPLAIN FORMAT='brief' SELECT COUNT(1) FROM t WHERE a = 1 AND b IS NOT NULL; - 作用域:SESSION | GLOBAL - 是否持久化到集群:是 +- 类型:布尔型 - 默认值:`OFF` - 这个变量用来设置是否校验 ASCII 字符的合法性。 - 校验 ASCII 字符会损耗些许性能。当你确认输入的字符串为有效的 ASCII 字符时,可以将其设置为 `ON`。 @@ -3353,6 +3493,7 @@ EXPLAIN FORMAT='brief' SELECT COUNT(1) FROM t WHERE a = 1 AND b IS NOT NULL; - 作用域:SESSION | GLOBAL - 是否持久化到集群:是 +- 类型:布尔型 - 默认值:`OFF` - 开启这个开关之后,如果对 `tx_isolation` 赋值一个 TiDB 不支持的隔离级别,不会报错,有助于兼容其他设置了(但不依赖于)不同隔离级别的应用。 @@ -3370,6 +3511,7 @@ Query OK, 0 rows affected, 1 warning (0.00 sec) - 作用域:SESSION | GLOBAL - 是否持久化到集群:是 +- 类型:布尔型 - 默认值:`OFF` - 这个变量用来设置是否校验 UTF-8 字符的合法性。 - 校验 UTF-8 字符会损耗些许性能。当你确认输入的字符串为有效的 UTF-8 字符时,可以将其设置为 `ON`。 @@ -3383,6 +3525,7 @@ Query OK, 0 rows affected, 1 warning (0.00 sec) - 作用域:GLOBAL - 是否持久化到集群:否,仅作用于当前连接的 TiDB 实例 - 默认值:`300` +- 类型:整数型 - 范围:`[-1, 9223372036854775807]` - 单位:毫秒 - 输出慢日志的耗时阈值。当查询大于这个值,就会当做是一个慢查询,输出到慢查询日志。默认为 300 ms。 @@ -3415,6 +3558,7 @@ Query OK, 0 rows affected, 1 warning (0.00 sec) - 作用域:GLOBAL - 是否持久化到集群:是 +- 类型:整数型 - 默认值:`0` - 这个变量用于控制 TiDB 内部统计信息缓存使用内存的上限。 @@ -3422,6 +3566,7 @@ Query OK, 0 rows affected, 1 warning (0.00 sec) - 作用域:SESSION | GLOBAL - 是否持久化到集群:是 +- 类型:整数型 - 默认值:`100` - 单位:毫秒 - 范围:`[0, 2147483647]` @@ -3431,6 +3576,7 @@ Query OK, 0 rows affected, 1 warning (0.00 sec) - 作用域:GLOBAL - 是否持久化到集群:是 +- 类型:布尔型 - 默认值:`ON` - 这个变量用于控制统计信息同步加载超时后,SQL 是执行失败(`OFF`),还是退回使用 pseudo 的统计信息(`ON`)。 @@ -3495,6 +3641,7 @@ Query OK, 0 rows affected, 1 warning (0.00 sec) - 作用域:GLOBAL - 是否持久化到集群:是 +- 类型:整数型 - 默认值:`24` - 范围:`[0, 255]` - 这个变量设置了 [statement summary tables](/statement-summary-tables.md) 的历史记录容量。 @@ -3503,6 +3650,7 @@ Query OK, 0 rows affected, 1 warning (0.00 sec) - 作用域:GLOBAL - 是否持久化到集群:是 +- 类型:布尔型 - 默认值:`OFF` - 这个变量用来控制是否在 [statement summary tables](/statement-summary-tables.md) 中包含 TiDB 内部 SQL 的信息。 @@ -3510,6 +3658,7 @@ Query OK, 0 rows affected, 1 warning (0.00 sec) - 作用域:GLOBAL - 是否持久化到集群:是 +- 类型:整数型 - 默认值:`4096` - 范围:`[0, 2147483647]` - 这个变量控制 [statement summary tables](/statement-summary-tables.md) 显示的 SQL 字符串长度。 @@ -3518,6 +3667,7 @@ Query OK, 0 rows affected, 1 warning (0.00 sec) - 作用域:GLOBAL - 是否持久化到集群:是 +- 类型:整数型 - 默认值:`3000` - 范围:`[1, 32767]` - 这个变量设置了 [statement summary tables](/statement-summary-tables.md) 在内存中保存的语句的最大数量。 @@ -3526,6 +3676,7 @@ Query OK, 0 rows affected, 1 warning (0.00 sec) - 作用域:GLOBAL - 是否持久化到集群:是 +- 类型:整数型 - 默认值:`1800` - 范围:`[1, 2147483647]` - 单位:秒 @@ -3553,6 +3704,7 @@ Query OK, 0 rows affected, 1 warning (0.00 sec) - 作用域:GLOBAL - 是否持久化到集群:是 +- 类型:整数型 - 默认值:`5000` - 范围:`[1, 10000]` - 这个变量用于控制 [Top SQL](/dashboard/top-sql.md) 每分钟最多收集 SQL 语句类型的数量。 @@ -3561,6 +3713,7 @@ Query OK, 0 rows affected, 1 warning (0.00 sec) - 作用域:GLOBAL - 是否持久化到集群:是 +- 类型:整数型 - 默认值:`100` - 范围:`[1, 5000]` - 这个变量用于控制 [Top SQL](/dashboard/top-sql.md) 每分钟保留消耗负载最大的前多少条 SQL(即 Top N) 的数据。 @@ -3573,6 +3726,7 @@ Query OK, 0 rows affected, 1 warning (0.00 sec) - 作用域:GLOBAL - 是否持久化到集群:是 +- 类型:整数型 - 默认值:`0` - 范围:`[0, 9223372036854775807]` - 这个变量用于限制 TiDB 同时向 TiKV 发送的请求的最大数量,0 表示没有限制。 @@ -3599,6 +3753,7 @@ Query OK, 0 rows affected, 1 warning (0.00 sec) - 作用域:SESSION | GLOBAL - 是否持久化到集群:是 +- 类型:布尔型 - 默认值:`OFF` - 这个变量用于控制 `SYSDATE` 函数能否替换为 `NOW` 函数,其效果与 MYSQL 中的 [`sysdate-is-now`](https://dev.mysql.com/doc/refman/8.0/en/server-options.html#option_mysqld_sysdate-is-now) 一致。 @@ -3615,6 +3770,7 @@ Query OK, 0 rows affected, 1 warning (0.00 sec) - 作用域:GLOBAL - 是否持久化到集群:是 +- 类型:整数型 - 默认值:`3` - 范围:`[1, 10]` - 单位:秒 @@ -3624,6 +3780,7 @@ Query OK, 0 rows affected, 1 warning (0.00 sec) - 作用域:SESSION | GLOBAL - 是否持久化到集群:是 +- 类型:整数型 - 默认值:`67108864` - 范围:`[1048576, 137438953472]` - 单位:字节 @@ -3645,6 +3802,7 @@ Query OK, 0 rows affected, 1 warning (0.00 sec) - 作用域:GLOBAL - 是否持久化到集群:是 +- 类型:浮点数 - 默认值:`0` - 范围:`[0, 10]` - 单位:毫秒 @@ -3664,6 +3822,7 @@ Query OK, 0 rows affected, 1 warning (0.00 sec) - 作用域:GLOBAL - 是否持久化到集群:是 +- 类型:整数型 - 默认值:`0` - 范围:`[0, 9223372036854775807]` - 这个变量用来对每个 TiDB 节点的 TTL 删除操作进行限流。其值代表了在 TTL 任务中单个节点每秒允许 `DELETE` 语句执行的最大次数。当此变量设置为 `0` 时,则表示不做限制。更多信息,请参考 [Time to Live](/time-to-live.md)。 @@ -3737,6 +3896,7 @@ Query OK, 0 rows affected, 1 warning (0.00 sec) - 作用域:SESSION | GLOBAL - 是否持久化到集群:是 +- 类型:枚举型 - 默认值:`FAST` - 可选值:`OFF`,`FAST`,`STRICT` - 这个变量用于设置 assertion 级别。assertion 是一项在事务提交过程中进行的数据索引一致性校验,它对正在写入的 key 是否存在进行检查。如果不符则说明数据索引不一致,会导致事务 abort。详见[数据索引一致性报错](/troubleshoot-data-inconsistency-errors.md)。 @@ -3760,6 +3920,7 @@ Query OK, 0 rows affected, 1 warning (0.00 sec) - 作用域:SESSION | GLOBAL - 是否持久化到集群:是 +- 类型:枚举型 - 默认值:`pessimistic` - 可选值:`pessimistic`,`optimistic` - 这个变量用于设置事务模式。TiDB v3.0 支持了悲观事务,自 v3.0.8 开始,默认使用[悲观事务模式](/pessimistic-transaction.md)。 @@ -3770,12 +3931,14 @@ Query OK, 0 rows affected, 1 warning (0.00 sec) - 作用域:SESSION | GLOBAL - 是否持久化到集群:是 +- 类型:布尔型 - 默认值:`ON` - 这个变量用于控制是否开启执行计划绑定功能,默认打开,可通过赋值 `OFF` 来关闭。关于执行计划绑定功能的使用可以参考[执行计划绑定文档](/sql-plan-management.md#创建绑定)。 ### `tidb_wait_split_region_finish` - 作用域:SESSION +- 类型:布尔型 - 默认值:`ON` - 由于打散 Region 的时间可能比较长,主要由 PD 调度以及 TiKV 的负载情况所决定。这个变量用来设置在执行 `SPLIT REGION` 语句时,是否同步等待所有 Region 都打散完成后再返回结果给客户端。 - 默认 `ON` 代表等待打散完成后再返回结果 @@ -3785,6 +3948,7 @@ Query OK, 0 rows affected, 1 warning (0.00 sec) ### `tidb_wait_split_region_timeout` - 作用域:SESSION +- 类型:整数型 - 默认值:`300` - 范围:`[1, 2147483647]` - 单位:秒 @@ -3798,6 +3962,7 @@ Query OK, 0 rows affected, 1 warning (0.00 sec) - 作用域:SESSION | GLOBAL - 是否持久化到集群:是 +- 类型:整数型 - 默认值:`-1` - 范围:`[1, 256]` - 单位:线程 @@ -3855,6 +4020,7 @@ Query OK, 0 rows affected, 1 warning (0.00 sec) - 作用域:SESSION | GLOBAL - 是否持久化到集群:是 +- 类型:枚举型 - 默认值:`REPEATABLE-READ` - 可选值:`READ-UNCOMMITTED`,`READ-COMMITTED`,`REPEATABLE-READ`,`SERIALIZABLE` - 这个变量用于设置事务隔离级别。TiDB 为了兼容 MySQL,支持可重复读 (`REPEATABLE-READ`),但实际的隔离级别是快照隔离。详情见[事务隔离级别](/transaction-isolation-levels.md)。 @@ -3994,6 +4160,7 @@ Query OK, 0 rows affected, 1 warning (0.00 sec) - 作用域:SESSION | GLOBAL - 是否持久化到集群:是 +- 类型:整数型 - 默认值:`28800` - 范围:`[0, 31536000]` - 单位:秒 @@ -4009,5 +4176,6 @@ Query OK, 0 rows affected, 1 warning (0.00 sec) - 作用域:SESSION | GLOBAL - 是否持久化到集群:是 +- 类型:布尔型 - 默认值:`ON` - 这个变量用于控制计算窗口函数时是否采用高精度模式。 From 71c28b0e96fb323afdbccee9d6e6e8b3d75b6b96 Mon Sep 17 00:00:00 2001 From: xzhangxian1008 Date: Mon, 22 May 2023 16:25:38 +0800 Subject: [PATCH 123/257] Add tidb_server_memory_limit tip (#14026) --- configure-memory-usage.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/configure-memory-usage.md b/configure-memory-usage.md index e8923eadd92e..8537f7652400 100644 --- a/configure-memory-usage.md +++ b/configure-memory-usage.md @@ -65,6 +65,10 @@ SET GLOBAL tidb_server_memory_limit = "32GB"; 在 tidb-server 实例内存用量到达总内存的一定比例时(比例由系统变量 [`tidb_server_memory_limit_gc_trigger`](/system-variables.md#tidb_server_memory_limit_gc_trigger-从-v640-版本开始引入) 控制), tidb-server 会尝试主动触发一次 Golang GC 以缓解内存压力。为了避免实例内存在阈值上下范围不断波动导致频繁 GC 进而带来的性能问题,该 GC 方式 1 分钟最多只会触发 1 次。 +> **注意:** +> +> 在混合部署的情况下,`tidb_server_memory_limit` 为单个 tidb-server 实例的内存使用阈值,而不是整个物理机的总内存阈值。 + ## 使用 INFORMATION_SCHEMA 系统表查看当前 tidb-server 的内存用量 要查看当前实例或集群的内存使用情况,你可以查询系统表 [`INFORMATION_SCHEMA.(CLUSTER_)MEMORY_USAGE`](/information-schema/information-schema-memory-usage.md)。 From cad2ccd94fd2ecf94e30f8f0247c986a0a61d9bf Mon Sep 17 00:00:00 2001 From: 3pointer Date: Mon, 22 May 2023 16:51:38 +0800 Subject: [PATCH 124/257] br: explain more about restore speed in test report (#13941) --- br/br-pitr-guide.md | 10 +++++++++- br/use-br-command-line-tool.md | 1 + 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/br/br-pitr-guide.md b/br/br-pitr-guide.md index a7806335adb8..5a70e96539c6 100644 --- a/br/br-pitr-guide.md +++ b/br/br-pitr-guide.md @@ -114,12 +114,18 @@ Restore KV Files <-------------------------------------------------------------- > > 以上功能指标是根据下述两个场景测试得出的结论,如有出入,建议以实际测试结果为准: > -> - 全量恢复速度 = 全量恢复集群数据量 /(时间 * TiKV 数量) +> - 全量恢复速度 = 全量恢复数据量 /(时间 * TiKV 数量) > - 日志恢复速度 = 日志恢复总量 /(时间 * TiKV 数量) +> +> 其中全量恢复数据量,是指单个副本中所有 KV 的逻辑大小,并不代表实际恢复的数据量。BR 恢复数据时会根据集群设置的副本数来恢复全部副本,当副本数越多时,实际恢复的数据量也就越多。 +> 所有测试集群默认设置 3 副本。 +> 如果想提升整体恢复的性能,可以通过根据实际情况调整 TiKV 配置文件中的 [`import.num-threads`](/tikv-configuration-file.md#import) 配置项以及 BR 命令的 [`concurrency`](/br/use-br-command-line-tool.md#常用选项) 参数。 测试场景 1([TiDB Cloud](https://tidbcloud.com) 上部署) - TiKV 节点(8 core,16 GB 内存)数量:21 +- TiKV 配置项 `import.num-threads`:8 +- BR 命令参数 `concurrency`:128 - Region 数量:183,000 - 集群新增日志数据:10 GB/h - 写入 (INSERT/UPDATE/DELETE) QPS:10,000 @@ -127,6 +133,8 @@ Restore KV Files <-------------------------------------------------------------- 测试场景 2(本地部署) - TiKV 节点(8 core,64 GB 内存)数量:6 +- TiKV 配置项 `import.num-threads`:8 +- BR 命令参数 `concurrency`:128 - Region 数量:50,000 - 集群新增日志数据:10 GB/h - 写入 (INSERT/UPDATE/DELETE) QPS:10,000 diff --git a/br/use-br-command-line-tool.md b/br/use-br-command-line-tool.md index 4fe461023ee9..b26a6606ef8f 100644 --- a/br/use-br-command-line-tool.md +++ b/br/use-br-command-line-tool.md @@ -47,6 +47,7 @@ br backup full --pd "${PD_IP}:2379" \ * `--cert`:指定 PEM 格式的 SSL 证书文件路径。 * `--key`:指定 PEM 格式的 SSL 证书密钥文件路径。 * `--status-addr`:向 Prometheus 提供统计数据的监听地址。 +* `--concurrency`:备份或恢复阶段的任务并发数。 ## 全量备份命令行 From 9dcb044274c9d4da26658b7d0fe4a1b24149431c Mon Sep 17 00:00:00 2001 From: Ti Chi Robot Date: Mon, 22 May 2023 17:10:26 +0800 Subject: [PATCH 125/257] LOAD DATA: remove two sql statements (#14031) (#14034) Co-authored-by: Aolin --- sql-statements/sql-statement-load-data.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sql-statements/sql-statement-load-data.md b/sql-statements/sql-statement-load-data.md index d3e51b6d3c67..f67f94b74ecf 100644 --- a/sql-statements/sql-statement-load-data.md +++ b/sql-statements/sql-statement-load-data.md @@ -1,7 +1,7 @@ --- title: LOAD DATA summary: TiDB 数据库中 LOAD DATA 的使用概况。 -aliases: ['/docs-cn/dev/sql-statements/sql-statement-load-data/','/docs-cn/dev/reference/sql/statements/load-data/'] +aliases: ['/docs-cn/dev/sql-statements/sql-statement-load-data/','/docs-cn/dev/reference/sql/statements/load-data/','/zh/tidb/dev/sql-statement-operate-load-data-job','/zh/tidb/dev/sql-statement-show-load-data'] --- # LOAD DATA From b5bc989036e337c764adfd39d645777669bfef4e Mon Sep 17 00:00:00 2001 From: Aolin Date: Mon, 22 May 2023 17:15:38 +0800 Subject: [PATCH 126/257] update Golang version to 1.20 (#14029) --- hardware-and-software-requirements.md | 2 +- pd-control.md | 2 +- pd-recover.md | 2 +- tidb-control.md | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/hardware-and-software-requirements.md b/hardware-and-software-requirements.md index 76fb6dde4c7b..69e724cb1c13 100644 --- a/hardware-and-software-requirements.md +++ b/hardware-and-software-requirements.md @@ -45,7 +45,7 @@ TiDB 作为一款开源一栈式实时 HTAP 数据库,可以很好地部署和 | 编译和构建 TiDB 所需的依赖库 | 版本 | | :--- | :--- | -| Golang | 1.18.5 及以上版本 | +| Golang | 1.20 及以上版本 | | Rust | nightly-2022-07-31 及以上版本 | | GCC | 7.x | | LLVM | 13.0 及以上版本 | diff --git a/pd-control.md b/pd-control.md index a5614436bf97..633ca481ad77 100644 --- a/pd-control.md +++ b/pd-control.md @@ -32,7 +32,7 @@ PD Control 是 PD 的命令行工具,用于获取集群状态信息和调整 ### 源码编译 -1. [Go](https://golang.org/) Version 1.19 以上 +1. [Go](https://golang.org/) 1.20 或以上版本 2. 在 PD 项目根目录使用 `make` 或者 `make pd-ctl` 命令进行编译,生成 bin/pd-ctl ## 简单例子 diff --git a/pd-recover.md b/pd-recover.md index 646042ef9881..54f99d20db50 100644 --- a/pd-recover.md +++ b/pd-recover.md @@ -13,7 +13,7 @@ PD Recover 是对 PD 进行灾难性恢复的工具,用于恢复无法正常 ### 从源代码编译 -* [Go](https://golang.org/):PD Recover 使用了 Go 模块,请安装 Go v1.19 或更新版本。 +* [Go](https://golang.org/):PD Recover 使用了 Go 模块,请安装 Go 1.20 或以上版本。 * 在 [PD](https://github.com/pingcap/pd) 根目录下,运行 `make pd-recover` 命令来编译源代码并生成 `bin/pd-recover`。 > **注意:** diff --git a/tidb-control.md b/tidb-control.md index ea410e700234..a1ed517fd56c 100644 --- a/tidb-control.md +++ b/tidb-control.md @@ -21,7 +21,7 @@ TiDB Control 是 TiDB 的命令行工具,用于获取 TiDB 状态信息,多 ### 从源代码编译安装 -编译环境要求:[Go](https://golang.org/) Version 1.19 以上 +编译环境要求:[Go](https://golang.org/) 1.20 或以上版本 编译步骤:在 [TiDB Control 项目](https://github.com/pingcap/tidb-ctl)根目录,使用 `make` 命令进行编译,生成 tidb-ctl。 From 4dc0927ff4e35edb7ff2a2e4522547c843f69f02 Mon Sep 17 00:00:00 2001 From: Ran Date: Tue, 23 May 2023 11:49:38 +0800 Subject: [PATCH 127/257] *: refine docs for ddl dist framework (#14001) --- system-variables.md | 2 +- tidb-distributed-execution-framework.md | 16 ++++++++-------- tiflash/use-tiflash-mpp-mode.md | 2 +- 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/system-variables.md b/system-variables.md index 1b99305f8c4a..d2b06e63d32a 100644 --- a/system-variables.md +++ b/system-variables.md @@ -1021,7 +1021,7 @@ MPP 是 TiFlash 引擎提供的分布式计算框架,允许节点之间的数 > **注意:** > -> 在升级到 v6.5.0 及以上版本时,建议你检查 TiDB 的 [temp-dir](/tidb-configuration-file.md#temp-dir-从-v630-版本开始引入) 路径是否正确挂载了 SSD 磁盘。该参数是 TiDB 的配置参数,设置后需要重启 TiDB 才能生效。因此,在升级前提前进行设置,可以避免再次重启。 +> 在升级到 v6.5.0 及以上版本时,建议你检查 TiDB 的 [`temp-dir`](/tidb-configuration-file.md#temp-dir-从-v630-版本开始引入) 路径是否正确挂载了 SSD 磁盘。该参数是 TiDB 的配置参数,设置后需要重启 TiDB 才能生效。因此,在升级前提前进行设置,可以避免再次重启。 ### `tidb_enable_dist_task` 从 v7.1.0 版本开始引入 diff --git a/tidb-distributed-execution-framework.md b/tidb-distributed-execution-framework.md index a158ca2eed82..b9ceda19f7ca 100644 --- a/tidb-distributed-execution-framework.md +++ b/tidb-distributed-execution-framework.md @@ -9,7 +9,7 @@ summary: 了解 TiDB 后端任务分布式框架的使用场景与限制、使 > > 当前该功能为实验特性,不建议在生产环境中使用。 -TiDB 采用计算存储分离架构,具有出色的扩展性和弹性的扩缩容能力。从 v7.1.0 开始, TiDB 引入了一个后端任务分布式执行框架,以进一步发挥分布式架构的资源优势。该框架的目标是实现对所有后端任务的统一调度与分布式执行,并为接入的后端任务提供统一的资源管理能力,从整体和单个后端任务两个维度提供资源管理的能力,更好地满足用户对于资源使用的预期。 +TiDB 采用计算存储分离架构,具有出色的扩展性和弹性的扩缩容能力。从 v7.1.0 开始,TiDB 引入了一个后端任务分布式执行框架,以进一步发挥分布式架构的资源优势。该框架的目标是实现对所有后端任务的统一调度与分布式执行,并为接入的后端任务提供统一的资源管理能力,从整体和单个后端任务两个维度提供资源管理的能力,更好地满足用户对于资源使用的预期。 本文档介绍了 TiDB 后端任务分布式框架的使用场景与限制、使用方法和实现原理。 @@ -44,12 +44,12 @@ CREATE INDEX idx1 ON table t1(c1); 1. 调整 Fast Online DDL 相关的系统变量: - * [`tidb_ddl_enable_fast_reorg`](/system-variables.md#tidb_ddl_enable_fast_reorg-从-v630-版本开始引入):从 TiDB v6.5 开始默认打开,用于启用快速模式。 + * [`tidb_ddl_enable_fast_reorg`](/system-variables.md#tidb_ddl_enable_fast_reorg-从-v630-版本开始引入):从 TiDB v6.5.0 开始默认打开,用于启用快速模式。 * [`tidb_ddl_disk_quota`](/system-variables.md#tidb_ddl_disk_quota-从-v630-版本开始引入):用于控制快速模式可使用的本地磁盘最大配额。 -2. 调整 Fast DDL 相关的配置项: +2. 调整 Fast Online DDL 相关的配置项: - * [temp-dir](/tidb-configuration-file.md#temp-dir-从-v630-版本开始引入):指定快速模式能够使用的本地盘路径。 + * [`temp-dir`](/tidb-configuration-file.md#temp-dir-从-v630-版本开始引入):指定快速模式能够使用的本地盘路径。 > **注意:** > @@ -67,10 +67,10 @@ CREATE INDEX idx1 ON table t1(c1); 2. 根据实际需求,调整可能影响 DDL 任务分布式执行的系统变量: - * [tidb_ddl_reorg_worker_cnt](/system-variables.md#tidb_ddl_reorg_worker_cnt):使用默认值 `4` 即可,建议最大不超过 `16`。 - * [tidb_ddl_reorg_priority](/system-variables.md#tidb_ddl_reorg_priority) - * [tidb_ddl_error_count_limit](/system-variables.md#tidb_ddl_error_count_limit) - * [tidb_ddl_reorg_batch_size](/system-variables.md#tidb_ddl_reorg_batch_size):使用默认值即可,建议最大不超过 `1024`。 + * [`tidb_ddl_reorg_worker_cnt`](/system-variables.md#tidb_ddl_reorg_worker_cnt):使用默认值 `4` 即可,建议最大不超过 `16`。 + * [`tidb_ddl_reorg_priority`](/system-variables.md#tidb_ddl_reorg_priority) + * [`tidb_ddl_error_count_limit`](/system-variables.md#tidb_ddl_error_count_limit) + * [`tidb_ddl_reorg_batch_size`](/system-variables.md#tidb_ddl_reorg_batch_size):使用默认值即可,建议最大不超过 `1024`。 > **建议:** > diff --git a/tiflash/use-tiflash-mpp-mode.md b/tiflash/use-tiflash-mpp-mode.md index 43410ba43489..8dee755abfe2 100644 --- a/tiflash/use-tiflash-mpp-mode.md +++ b/tiflash/use-tiflash-mpp-mode.md @@ -99,7 +99,7 @@ TiFlash 提供了 3 个全局/会话变量决定是否选择 Broadcast Hash Join - [`tidb_broadcast_join_threshold_size`](/system-variables.md#tidb_broadcast_join_threshold_size-从-v50-版本开始引入),单位为 bytes。如果表大小(字节数)小于该值,则选择 Broadcast Hash Join 算法。否则选择 Shuffled Hash Join 算法。 - [`tidb_broadcast_join_threshold_count`](/system-variables.md#tidb_broadcast_join_threshold_count-从-v50-版本开始引入),单位为行数。如果 join 的对象为子查询,优化器无法估计子查询结果集大小,在这种情况下通过结果集行数判断。如果子查询的行数估计值小于该变量,则选择 Broadcast Hash Join 算法。否则选择 Shuffled Hash Join 算法。 -- [`tidb_prefer_broadcast_join_by_exchange_data_size`](/system-variables.md#tidb_prefer_broadcast_join_by_exchange_data_size-从-v710-版本开始引入),控制是否使用最小网络数据交换策略。使用该策略时,TiDB 会估算 Broadcast Hash Join 和 Shuffled Hash Join 两种算法所需进行网络交换的数据量,并选择网络交换数据量较小的算法。该功能开启后, [`tidb_broadcast_join_threshold_size`](/system-variables.md#tidb_broadcast_join_threshold_size-从-v50-版本开始引入) 和 [`tidb_broadcast_join_threshold_count`](/system-variables.md#tidb_broadcast_join_threshold_count-从-v50-版本开始引入) 将不再生效。 +- [`tidb_prefer_broadcast_join_by_exchange_data_size`](/system-variables.md#tidb_prefer_broadcast_join_by_exchange_data_size-从-v710-版本开始引入),控制是否使用最小网络数据交换策略。使用该策略时,TiDB 会估算 Broadcast Hash Join 和 Shuffled Hash Join 两种算法所需进行网络交换的数据量,并选择网络交换数据量较小的算法。该功能开启后,[`tidb_broadcast_join_threshold_size`](/system-variables.md#tidb_broadcast_join_threshold_size-从-v50-版本开始引入) 和 [`tidb_broadcast_join_threshold_count`](/system-variables.md#tidb_broadcast_join_threshold_count-从-v50-版本开始引入) 将不再生效。 ## MPP 模式访问分区表 From 909f2bc886b6c157be628d03fe58aae1119e3cec Mon Sep 17 00:00:00 2001 From: Ling Jin <7138436+3AceShowHand@users.noreply.github.com> Date: Tue, 23 May 2023 13:43:38 +0800 Subject: [PATCH 128/257] cdc: the e2e checksum integrity check functionality (#13664) --- TOC.md | 1 + functions-and-operators/tidb-functions.md | 50 +++++++++++ system-variables.md | 8 ++ ticdc/ticdc-changefeed-config.md | 6 ++ ticdc/ticdc-integrity-check.md | 104 ++++++++++++++++++++++ 5 files changed, 169 insertions(+) create mode 100644 ticdc/ticdc-integrity-check.md diff --git a/TOC.md b/TOC.md index 445e257d3114..fc8e51ca33d5 100644 --- a/TOC.md +++ b/TOC.md @@ -527,6 +527,7 @@ - [管理 Changefeed](/ticdc/ticdc-manage-changefeed.md) - [日志过滤器](/ticdc/ticdc-filter.md) - [双向复制](/ticdc/ticdc-bidirectional-replication.md) + - [单行数据正确性校验](/ticdc/ticdc-integrity-check.md) - 监控告警 - [基本监控指标](/ticdc/ticdc-summary-monitor.md) - [详细监控指标](/ticdc/monitor-ticdc.md) diff --git a/functions-and-operators/tidb-functions.md b/functions-and-operators/tidb-functions.md index eec8ab8f7e11..64d273e202e5 100644 --- a/functions-and-operators/tidb-functions.md +++ b/functions-and-operators/tidb-functions.md @@ -399,3 +399,53 @@ TIDBShardExpr ::= ### MySQL 兼容性 `TIDB_SHARD` 是 TiDB 特有的函数,和 MySQL 不兼容。 + +## TIDB_ROW_CHECKSUM + +`TIDB_ROW_CHECKSUM` 函数用于查询行数据的 Checksum 值。该函数只能用于 FastPlan 流程的 `SELECT` 语句,即你可通过形如 `SELECT TIDB_ROW_CHECKSUM() FROM t WHERE id = ?` 或 `SELECT TIDB_ROW_CHECKSUM() FROM t WHERE id IN (?, ?, ...)` 的语句进行查询。 + +### 语法图 + +```ebnf+diagram +TableStmt ::= + "TIDB_ROW_CHECKSUM()" +``` + +### 示例 + +在 TiDB 中开启行数据 Checksum 功能 [`tidb_enable_row_level_checksum`](/system-variables.md#tidb_enable_row_level_checksum-从-v710-版本开始引入): + +```sql +SET GLOBAL tidb_enable_row_level_checksum = ON; +``` + +创建表 `t` 并插入数据: + +```sql +USE test; +CREATE TABLE t (id INT PRIMARY KEY, k INT, c int); +INSERT INTO TABLE t values (1, 10, a); +``` + +查询表 `t` 中 `id = 1` 的行数据的 Checksum 值: + +```sql +SELECT *, TIDB_ROW_CHECKSUM() FROM t WHERE id = 1; +``` + +```sql ++----+------+------+---------------------+ +| id | k | c | TIDB_ROW_CHECKSUM() | ++----+------+------+---------------------+ +| 1 | 10 | a | 3813955661 | ++----+------+------+---------------------+ +1 row in set (0.000 sec) +``` + +### MySQL 兼容性 + +`TIDB_ROW_CHECKSUM` 是 TiDB 特有的函数,和 MySQL 不兼容。 + +### 另请参阅 + +- [数据正确性校验](/ticdc/ticdc-integrity-check.md) \ No newline at end of file diff --git a/system-variables.md b/system-variables.md index d2b06e63d32a..082a02dbefd0 100644 --- a/system-variables.md +++ b/system-variables.md @@ -1841,6 +1841,14 @@ Query OK, 0 rows affected (0.09 sec) - 这个变量用来控制是否开启窗口函数的支持。默认值 1 代表开启窗口函数的功能。 - 由于窗口函数会使用一些保留关键字,可能导致原先可以正常执行的 SQL 语句在升级 TiDB 后无法被解析语法,此时可以将 `tidb_enable_window_function` 设置为 `OFF`。 +### `tidb_enable_row_level_checksum` 从 v7.1.0 版本开始引入 + +- 作用域:GLOBAL +- 是否持久化到集群:是 +- 类型:布尔型 +- 默认值:`OFF` +- 这个变量用于控制是否开启 [TiCDC 单行数据正确性校验](/ticdc/ticdc-integrity-check.md)功能。 + ### `tidb_enforce_mpp` 从 v5.1 版本开始引入 - 作用域:SESSION diff --git a/ticdc/ticdc-changefeed-config.md b/ticdc/ticdc-changefeed-config.md index cace946b6f95..c984b28abf60 100644 --- a/ticdc/ticdc-changefeed-config.md +++ b/ticdc/ticdc-changefeed-config.md @@ -192,4 +192,10 @@ flush-interval = 2000 storage = "" # 是否将 redo log 存储到文件中。默认值为 false。 use-file-backend = false + +[integrity] +# 是否开启单行数据的 Checksum 校验功能,默认值为 "none",即不开启。可选值为 "none" 和 "correctness"。 +integrity-check-level = "none" +# 当单行数据的 Checksum 校验失败时,Changefeed 打印错误行数据相关日志的级别。默认值为 "warn",可选值为 "warn" 和 "error"。 +corruption-handle-level = "warn" ``` diff --git a/ticdc/ticdc-integrity-check.md b/ticdc/ticdc-integrity-check.md new file mode 100644 index 000000000000..1376722d5f26 --- /dev/null +++ b/ticdc/ticdc-integrity-check.md @@ -0,0 +1,104 @@ +--- +title: TiCDC 单行数据正确性校验 +summary: 介绍 TiCDC 数据正确性校验功能的实现原理和使用方法。 +--- + +# TiCDC 单行数据正确性校验 + +从 v7.1.0 开始,TiCDC 引入了单行数据正确性校验功能。该功能基于 Checksum 算法,校验一行数据从 TiDB 写入、通过 TiCDC 同步,到写入 Kafka 集群的过程中数据内容是否发生错误。TiCDC 数据正确性校验功能仅支持下游是 Kafka 的 Changefeed,目前支持 Avro 协议。 + +## 实现原理 + +在启用单行数据 Checksum 正确性校验功能后,TiDB 使用 CRC32 算法计算该行数据的 Checksum 值,并将其一并写入 TiKV。TiCDC 从 TiKV 读取数据,根据相同的算法重新计算 Checksum,如果该值与 TiDB 写入的值相同,则可以证明数据在 TiDB 至 TiCDC 的传输过程中是正确的。 + +TiCDC 将数据编码成特定格式并发送至 Kafka。Kafka Consumer 读取数据后,可以使用与 TiDB 相同的算法计算得到新的 Checksum,将此值与数据中携带的 Checksum 值进行比较,若二者一致,则可证明从 TiCDC 至 Kafka Consumer 的传输链路上的数据是正确的。 + +关于 Checksum 值的计算规则,请参考 [Checksum 计算规则](#checksum-计算规则)。 + +## 启用功能 + +TiCDC 数据正确性校验功能默认关闭,要使用该功能,请执行以下步骤: + +1. 首先,你需要在上游 TiDB 中开启行数据 Checksum 功能 ([`tidb_enable_row_level_checksum`](/system-variables.md#tidb_enable_row_level_checksum-从-v710-版本开始引入)): + + ```sql + SET GLOBAL tidb_enable_row_level_checksum = ON; + ``` + + 上述配置仅对新创建的会话生效,因此需要重新连接 TiDB。 + +2. 在创建 Changefeed 的 `--config` 参数所指定的[配置文件中](/ticdc/ticdc-changefeed-config.md#ticdc-changefeed-配置文件说明),添加如下配置: + + ```toml + [integrity] + integrity-check-level = "correctness" + corruption-handle-level = "warn" + ``` + +3. 当使用 Avro 作为数据编码格式时,你需要在 [`sink-uri`](/ticdc/ticdc-sink-to-kafka.md#sink-uri-配置-kafka) 中设置 [`enable-tidb-extension=true`](/ticdc/ticdc-sink-to-kafka.md#sink-uri-配置-kafka)。同时,为了防止数值类型在网络传输过程中发生精度丢失,导致 Checksum 校验失败,还需要设置 [`avro-decimal-handling-mode=string`](/ticdc/ticdc-sink-to-kafka.md#sink-uri-配置-kafka) 和 [`avro-bigint-unsigned-handling-mode=string`](/ticdc/ticdc-sink-to-kafka.md#sink-uri-配置-kafka)。下面是一个配置示例: + + ```shell + cdc cli changefeed create --server=http://127.0.0.1:8300 --changefeed-id="kafka-avro-checksum" --sink-uri="kafka://127.0.0.1:9092/topic-name?protocol=avro&enable-tidb-extension=true&avro-decimal-handling-mode=string&avro-bigint-unsigned-handling-mode=string" --schema-registry=http://127.0.0.1:8081 --config changefeed_config.toml + ``` + + 通过上述配置,Changefeed 会在每条写入 Kafka 的消息中携带该消息对应数据的 Checksum,你可以根据此 Checksum 的值进行数据一致性校验。 + + > **注意:** + > + > 对于已有 Changefeed,如果未设置 `avro-decimal-handling-mode` 和 `avro-bigint-unsigned-handling-mode`,开启 Checksum 校验功能时会引起 Schema 不兼容问题。可以通过修改 Schema Registry 的兼容性为 `NONE` 解决该问题。详情可参考 [Schema 兼容性](https://docs.confluent.io/platform/current/schema-registry/fundamentals/avro.html#no-compatibility-checking)。 + +## 关闭功能 + +TiCDC 默认关闭单行数据的 Checksum 校验功能。若要在开启此功能后将其关闭,请执行以下步骤: + +1. 首先,按照 [TiCDC 更新同步任务配置](/ticdc/ticdc-manage-changefeed.md#更新同步任务配置)的说明,按照 `暂停任务 -> 修改配置 -> 恢复任务` 的流程更新 Changefeed 的配置内容。在 Changefeed 的 `--config` 参数所指定的配置文件中调整 `[integrity]` 的配置内容为: + + ```toml + [integrity] + integrity-check-level = "none" + corruption-handle-level = "warn" + ``` + +2. 在上游 TiDB 中关闭行数据 Checksum 功能 ([`tidb_enable_row_level_checksum`](/system-variables.md#tidb_enable_row_level_checksum-从-v710-版本开始引入)),执行如下 SQL 语句: + + ```sql + SET GLOBAL tidb_enable_row_level_checksum = OFF; + ``` + + 上述配置仅对新创建的会话生效。在所有写入 TiDB 的客户端都完成数据库连接重建后,Changefeed 写入 Kafka 的消息中将不再携带该条消息对应数据的 Checksum 值。 + +## Checksum 计算规则 + +Checksum 计算算法的伪代码如下: + +``` +fn checksum(columns) { + let result = 0 + for column in sort_by_schema_order(columns) { + result = crc32.update(result, encode(column)) + } + return result +} +``` + +* `columns` 应该按照 column ID 排序。在 Avro schema 中,各个字段已经按照 column ID 的顺序排序,因此可以直接按照此顺序排序 `columns`。 + +* `encode(column)` 函数将 column 的值编码为字节,编码规则取决于该 column 的数据类型。具体规则如下: + + * TINYINT、SMALLINT、INT、BIGINT、MEDIUMINT 和 YEAR 类型会被转换为 UINT64 类型,并按照小端序编码。例如,数字 `0x0123456789abcdef` 会被编码为 `hex'0x0123456789abcdef'`。 + * FLOAT 和 DOUBLE 类型会被转换为 DOUBLE 类型,然后转换为 IEEE754 格式的 UINT64 类型。 + * BIT、ENUM 和 SET 类型会被转换为 UINT64 类型。 + + * BIT 类型按照二进制转换为 UINT64 类型。 + * ENUM 和 SET 类型按照其对应的 INT 值转换为 UINT64 类型。例如,`SET('a','b','c')` 类型 column 的数据值为 `'a,c'`,则该值将被编码为 `0b101`。 + + * TIMESTAMP、DATE、DURATION、DATETIME、JSON 和 DECIMAL 类型会被转换为 STRING 类型,然后转换为 UTF8 编码的字节。 + * VARBIANRY、BINARY 和 BLOB(包括 TINY、MEDIUM 和 LONG)类型会直接使用它的字节。 + * VARCHAR、CHAR 和 TEXT(包括 TINY、MEDIUM 和 LONG)类型会被编码为 UTF8 编码的字节。 + * NULL 和 GEOMETRY 类型不会被纳入到 Checksum 计算中,返回空字节。 + +> **注意:** +> +> 开启 Checksum 校验功能后,DECIMAL 和 UNSIGNED BIGINT 类型的数据会被转换为字符串类型。因此在下游消费者代码中需要将其转换为对应的数值类型,然后进行 Checksum 相关计算。 + +Golang 消费者代码实现了解码从 Kafka 读取到的数据、按照 schema fields 排序以及 Checksum 计算等步骤。详情请参考 [`avro/decoder.go`](https://github.com/pingcap/tiflow/blob/master/pkg/sink/codec/avro/decoder.go)。 From 2d52c9db582e0e8065ef8c25af8858b2b7971aa4 Mon Sep 17 00:00:00 2001 From: Grace Cai Date: Wed, 24 May 2023 09:19:38 +0800 Subject: [PATCH 129/257] Add link how to address TiDB_tikvclient_region_err_total (#14015) --- alert-rules.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/alert-rules.md b/alert-rules.md index f0dd92e8a248..84f5145314c0 100644 --- a/alert-rules.md +++ b/alert-rules.md @@ -44,11 +44,11 @@ aliases: ['/docs-cn/dev/alert-rules/','/docs-cn/dev/reference/alert-rules/'] * 规则描述: - TiDB 访问 TiKV 时发生了 Region 错误。如果在 10 分钟之内该错误多于 6000 次,则报警。 + TiDB server 根据自己的缓存信息访问 TiKV 的 Region leader。如果 Region leader 有变化或者当前 TiKV 的 Region 信息与 TiDB 的缓存不一致,就会产生 Region 缓存错误。如果在 10 分钟之内该错误多于 6000 次,则报警。 * 处理方法: - 查看 TiKV 的监控状态。 + 查看 [**TiKV-Details** > **Cluster** 面板](/grafana-tikv-dashboard.md#cluster),检查 leader 的分布是否均衡。 #### `TiDB_domain_load_schema_total` From 5fd68ed4594c3486b4e5523763f165c89f93cc85 Mon Sep 17 00:00:00 2001 From: Hu# Date: Wed, 24 May 2023 09:49:39 +0800 Subject: [PATCH 130/257] resource-control: add dashboard panel (#13907) --- TOC.md | 1 + dashboard/continuous-profiling.md | 2 +- dashboard/dashboard-cluster-info.md | 6 +- dashboard/dashboard-diagnostics-access.md | 4 +- dashboard/dashboard-intro.md | 6 ++ dashboard/dashboard-profiling.md | 2 +- dashboard/dashboard-resource-manager.md | 76 ++++++++++++++++++ dashboard/dashboard-slow-query.md | 6 +- dashboard/dashboard-statement-list.md | 6 +- dashboard/top-sql.md | 2 +- ...resource-manager-calibrate-by-hardware.png | Bin 0 -> 48701 bytes ...resource-manager-calibrate-by-workload.png | Bin 0 -> 160760 bytes .../dashboard-resource-manager-info.png | Bin 0 -> 372317 bytes releases/release-7.0.0.md | 2 +- releases/release-7.1.0.md | 2 +- tidb-resource-control.md | 14 ++-- 16 files changed, 104 insertions(+), 25 deletions(-) create mode 100644 dashboard/dashboard-resource-manager.md create mode 100644 media/dashboard/dashboard-resource-manager-calibrate-by-hardware.png create mode 100644 media/dashboard/dashboard-resource-manager-calibrate-by-workload.png create mode 100644 media/dashboard/dashboard-resource-manager-info.png diff --git a/TOC.md b/TOC.md index fc8e51ca33d5..964f496b33ac 100644 --- a/TOC.md +++ b/TOC.md @@ -958,6 +958,7 @@ - [使用示例](/dashboard/dashboard-diagnostics-usage.md) - [监控指标页面](/dashboard/dashboard-monitoring.md) - [日志搜索页面](/dashboard/dashboard-log-search.md) + - [资源管控页面](/dashboard/dashboard-resource-manager.md) - 实例性能分析 - [手动分析页面](/dashboard/dashboard-profiling.md) - [持续分析页面](/dashboard/continuous-profiling.md) diff --git a/dashboard/continuous-profiling.md b/dashboard/continuous-profiling.md index 3dc229b474b0..89b8f3195e8c 100644 --- a/dashboard/continuous-profiling.md +++ b/dashboard/continuous-profiling.md @@ -38,7 +38,7 @@ summary: 了解如何持续地收集 TiDB、TiKV、PD 各个实例的性能数 你可以通过以下任一方式访问持续性能分析页面: -- 登录后,在左侧导航栏中点击**高级调试** (Advanced Debugging) > **实例性能分析** (Profiling Instances) > **持续分析** (Continuous Profiling)。 +- 登录 TiDB Dashboard 后,在左侧导航栏中点击**高级调试** (Advanced Debugging) > **实例性能分析** (Profiling Instances) > **持续分析** (Continuous Profiling)。 ![访问页面](/media/dashboard/dashboard-conprof-access.png) diff --git a/dashboard/dashboard-cluster-info.md b/dashboard/dashboard-cluster-info.md index b94d6d7768eb..126c00031487 100644 --- a/dashboard/dashboard-cluster-info.md +++ b/dashboard/dashboard-cluster-info.md @@ -12,11 +12,9 @@ aliases: ['/docs-cn/dev/dashboard/dashboard-cluster-info/'] 可以通过以下两种方法访问集群信息页面: -- 登录后,左侧导航条点击**集群信息** (Cluster Info): +* 登录 TiDB Dashboard 后,在左侧导航栏中点击**集群信息** (Cluster Info)。 - ![访问](/media/dashboard/dashboard-cluster-info-access-v650.png) - -- 在浏览器中访问 (将 `127.0.0.1:2379` 替换为实际 PD 实例地址和端口)。 +* 在浏览器中访问 (将 `127.0.0.1:2379` 替换为实际 PD 实例地址和端口)。 ## 实例列表 diff --git a/dashboard/dashboard-diagnostics-access.md b/dashboard/dashboard-diagnostics-access.md index 5e6e3c3c5abf..2883d5aaf128 100644 --- a/dashboard/dashboard-diagnostics-access.md +++ b/dashboard/dashboard-diagnostics-access.md @@ -15,11 +15,11 @@ aliases: ['/docs-cn/dev/dashboard/dashboard-diagnostics-access/'] 可以通过以下两种方法访问集群诊断页面: -* 登录后,左侧导航条点击**集群诊断** (Cluster Diagnostics): +* 登录 TiDB Dashboard 后,在左侧导航栏中点击**集群诊断** (Cluster Diagnostics)。 ![访问](/media/dashboard/dashboard-diagnostics-access-v650.png) -* 在浏览器中访问 [http://127.0.0.1:2379/dashboard/#/diagnose](http://127.0.0.1:2379/dashboard/#/diagnose)(将 `127.0.0.1:2379` 替换为任意实际 PD 地址和端口)。 +* 在浏览器中访问 [http://127.0.0.1:2379/dashboard/#/diagnose](http://127.0.0.1:2379/dashboard/#/diagnose)(将 `127.0.0.1:2379` 替换为你的实际 PD 地址和端口)。 ## 生成诊断报告 diff --git a/dashboard/dashboard-intro.md b/dashboard/dashboard-intro.md index 19bd8e2e7928..86996a352f69 100644 --- a/dashboard/dashboard-intro.md +++ b/dashboard/dashboard-intro.md @@ -59,6 +59,12 @@ TiDB Dashboard 在 GitHub 上[开源](https://github.com/pingcap-incubator/tidb- 参阅[日志搜索页面](/dashboard/dashboard-log-search.md)了解详情。 +## 预估资源管控容量 + +为使用[资源管控 (Resource Control)](/tidb-resource-control.md) 特性实现资源隔离,集群管理员可以定义资源组 (Resource Group),通过资源组限定配额。 + +在进行资源规划之前,你需要了解集群的整体容量。参阅[资源管控页面](/dashboard/dashboard-resource-manager.md)了解详情。 + ## 收集分析各个组件的性能数据 高级调试功能:无需第三方工具,在线地对各个组件进行性能分析,剖析组件实例在分析时间段内执行的各种内部操作及比例。 diff --git a/dashboard/dashboard-profiling.md b/dashboard/dashboard-profiling.md index 75567abce357..a39ff5ce5d6c 100644 --- a/dashboard/dashboard-profiling.md +++ b/dashboard/dashboard-profiling.md @@ -34,7 +34,7 @@ aliases: ['/docs-cn/dev/dashboard/dashboard-profiling/'] 可以通过以下两种方法访问实例性能分析页面: -- 登录后,左侧导航条点击**高级调试** (Advanced Debugging) > **实例性能分析** (Profile Instances) > **手动分析** (Manual Profiling): +- 登录 TiDB Dashboard 后,在左侧导航栏中点击**高级调试** (Advanced Debugging) > **实例性能分析** (Profile Instances) > **手动分析** (Manual Profiling): ![访问页面](/media/dashboard/dashboard-profiling-access.png) diff --git a/dashboard/dashboard-resource-manager.md b/dashboard/dashboard-resource-manager.md new file mode 100644 index 000000000000..d585e5c50b17 --- /dev/null +++ b/dashboard/dashboard-resource-manager.md @@ -0,0 +1,76 @@ +--- +title: TiDB Dashboard 资源管控页面 +summary: 介绍如何使用 TiDB Dashboard 的资源管控页面查看资源管控相关信息,以便预估集群容量,更好地进行资源配置。 +--- + +# TiDB Dashboard 资源管控页面 + +为使用[资源管控 (Resource Control)](/tidb-resource-control.md) 特性实现资源隔离,集群管理员可以定义资源组 (Resource Group),通过资源组限定配额。在进行资源规划之前,你需要了解集群的整体容量。该页面可以帮助你查看资源管控相关信息,以便预估集群容量,更好地进行资源配置。 + +## 访问方式 + +可以通过以下两种方法访问资源管控页面: + +* 登录 TiDB Dashboard 后,在左侧导航栏中点击**资源管控** (Resource Manager)。 + +* 在浏览器中访问 (将 `127.0.0.1:2379` 替换为你的实际 PD 地址和端口)。 + +## 资源管控详情 + +资源管控详情页面如下图所示: + +![TiDB Dashboard: Resource Manager](/media/dashboard/dashboard-resource-manager-info.png) + +资源管控详情页包含以下三个部分: + +- 配置 (Configuration):数据来自于 TiDB 的 `RESOURCE_GROUPS` 表中所有资源组的信息。参见 [`RESOURCE_GROUPS`](/information-schema/information-schema-resource-groups.md) 文档。 + +- 容量估算 (Estimate Capacity):在进行资源规划之前,你需要了解集群的整体容量。目前提供两种估算方式: + + - [基于硬件部署估算容量](/sql-statements/sql-statement-calibrate-resource.md#基于硬件部署估算容量) + - [根据实际负载估算容量](/sql-statements/sql-statement-calibrate-resource.md#根据实际负载估算容量) + +- 监控指标 (Metrics):通过观察面板上的指标,可以了解当前集群整体的资源消耗状态。 + +## 容量估算 + +在进行资源规划之前,你需要了解集群的整体容量。目前提供两种估算方式预估当前集群的 [Request Unit (RU)](/tidb-resource-control.md#什么是-request-unit-ru#什么是-request-unit-ru) 的容量: + +- [基于硬件部署估算容量](/sql-statements/sql-statement-calibrate-resource.md#基于硬件部署估算容量) (Calibrate by Hardware) + + 目前提供了以下负载类型供选择: + + - `tpcc`:数据写入较重的负载,根据类似 `TPC-C` 的负载模型预测。 + - `oltp_write_only`:数据写入较重的负载,根据类似 `sysbench oltp_write_only` 的负载模型预测。 + - `oltp_read_write`:数据读写平衡的负载,根据类似 `sysbench oltp_read_write` 的负载模型预测。 + - `oltp_read_only`:数据读取较重的负载,根据类似 `sysbench oltp_read_only` 的负载模型预测。 + + ![基于硬件部署估算容量](/media/dashboard/dashboard-resource-manager-calibrate-by-hardware.png) + + 用户资源分组总请求单元 (Total RU of user resource groups) 表示当前除 `default` 用户外的 RU 总量。当该数值小于容量估算值时,系统会发出提醒。系统预定义的 `default` 资源组默认拥有无限用量。当所有用户都属于 `default` 资源组时,资源分配方式与关闭资源管控时相同。 + +- [根据实际负载估算容量](/sql-statements/sql-statement-calibrate-resource.md#根据实际负载估算容量) (Calibrate by Workload) + + ![根据实际负载估算容量](/media/dashboard/dashboard-resource-manager-calibrate-by-workload.png) + + 可以选择 10 分钟至 24 小时的时间范围进行预估。时区与前端用户所处时区相同。 + + - 如果时间窗口范围不满足 10 分钟至 24 小时的条件,会报错 `Error 1105 (HY000): the duration of calibration is too short, which could lead to inaccurate output. Please make the duration between 10m0s and 24h0m0s`。 + + - 如果时间窗口范围内的负载过低,会报错 `Error 1105 (HY000): The workload in selected time window is too low, with which TiDB is unable to reach a capacity estimation; please select another time window with higher workload, or calibrate resource by hardware instead`。 + + 可以通过[监控指标](#监控指标)中的 **CPU Usage** 选择合适的时间范围。 + +## 监控指标 + +通过观察面板上的指标,可以了解当前集群整体的资源消耗状态。监控指标及其含义如下: + +- Total RU Consumed:实时统计的 Request Unit 总消耗量 +- RU Consumed by Resource Groups:以资源组为单位进行实时统计的 Request Unit 消耗数量 +- TiDB + - CPU Quota:TiDB 最大 CPU 占用率 + - CPU Usage:所有 TiDB 实例 CPU 占用率 +- TiKV + - CPU Quota:TiKV 最大 CPU 占用率 + - CPU Usage:所有 TiKV 实例 CPU 占用率 + - IO MBps:所有 TiKV 实例的 I/O 吞吐量 \ No newline at end of file diff --git a/dashboard/dashboard-slow-query.md b/dashboard/dashboard-slow-query.md index 669d7b8bb89d..a14260773a05 100644 --- a/dashboard/dashboard-slow-query.md +++ b/dashboard/dashboard-slow-query.md @@ -18,11 +18,9 @@ aliases: ['/docs-cn/dev/dashboard/dashboard-slow-query/'] 可以通过以下两种方法访问慢查询页面: -* 登录后,左侧导航条点击**慢查询** (**Slow Queries**): +* 登录 TiDB Dashboard 后,在左侧导航栏中点击**慢查询** (Slow Queries)。 -![access 访问页面](/media/dashboard/dashboard-slow-queries-access-v620.png) - -* 在浏览器中访问 (将 `127.0.0.1:2379` 替换为任意实际 PD 地址和端口)。 +* 在浏览器中访问 (将 `127.0.0.1:2379` 替换为你的实际 PD 地址和端口)。 慢查询页面所展示的所有数据都来自于 TiDB 慢查询系统表及慢查询日志,参见[慢查询日志](/identify-slow-queries.md)文档了解详细情况。 diff --git a/dashboard/dashboard-statement-list.md b/dashboard/dashboard-statement-list.md index 3f27e1ad678c..f6ffc351b00b 100644 --- a/dashboard/dashboard-statement-list.md +++ b/dashboard/dashboard-statement-list.md @@ -14,11 +14,9 @@ aliases: ['/docs-cn/dev/dashboard/dashboard-statement-list/'] 可以通过以下两种方法访问 SQL 语句分析页面: -- 登录后,左侧导航条点击 "**SQL 语句分析**" (SQL Statements)。 +* 登录 TiDB Dashboard 后,在左侧导航栏中点击**SQL 语句分析** (SQL Statements)。 - ![访问](/media/dashboard/dashboard-statement-access.png) - -- 在浏览器中访问 (将 `127.0.0.1:2379` 替换为实际 PD 实例地址和端口)。 +* 在浏览器中访问 (将 `127.0.0.1:2379` 替换为实际 PD 实例地址和端口)。 SQL 语句分析页面所展示的所有数据都来自于 TiDB Statement 系统表,参见 [Statement Summary Tables](/statement-summary-tables.md) 文档了解该系统表的详细情况。 diff --git a/dashboard/top-sql.md b/dashboard/top-sql.md index 8c4a06f3ce12..5e22e7784646 100644 --- a/dashboard/top-sql.md +++ b/dashboard/top-sql.md @@ -35,7 +35,7 @@ Top SQL 不能用于解答与性能无关的问题,例如数据正确性或异 你可以通过以下任一方式访问 Top SQL 页面: -- 登录 TiDB Dashboard 后,在左侧导航栏中点击**Top SQL** +- 登录 TiDB Dashboard 后,在左侧导航栏中点击**Top SQL**。 ![Top SQL](/media/dashboard/top-sql-access.png) diff --git a/media/dashboard/dashboard-resource-manager-calibrate-by-hardware.png b/media/dashboard/dashboard-resource-manager-calibrate-by-hardware.png new file mode 100644 index 0000000000000000000000000000000000000000..b9f6596e25a744b141d8457a04c25a5471b0aed4 GIT binary patch literal 48701 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

ZNnxmr2KofTz*5&+|d6EX!rymzW z5`UwUYF`i8{R!0)fV&}3otA+$t1h>)J;s32v*sZh)`tOGPX2%Z^jWI0BQ)8>tz$c&xxf^H1pR;Pqveh6e!~aLYf3@>d-Hx=R}?uy57o{7wD;xi{pGcz-5WI9q)c zkC)$_0e=}EFmUCd-S0!iYi5Ab{H^8J^~X2BU4#sb@c!jt{PjB3FSNUiCu}%qFKyl*xo7v${p$L!8w#=lwAKIl3_y-EVpqiZ_pj}C z2RuaJEQBjppoPjm43f(S(0=#3;yT?w3?J?K*Lr{pno>Vv{J(S%PHX=+2>uO%e}mxP nH^IMef`6BT|Mzl0-Pw~VUhAe~e{f_E_%k;~oOopDa^t@MIO<%% literal 0 HcmV?d00001 diff --git a/media/dashboard/dashboard-resource-manager-calibrate-by-workload.png b/media/dashboard/dashboard-resource-manager-calibrate-by-workload.png new file mode 100644 index 0000000000000000000000000000000000000000..bbc659e5ccb5f183557ef018e39ffd33f86c5124 GIT binary patch literal 160760 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 cTFrTWjZrR1N6b`?vw5dpNdF|~IZhT9 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�T1q^AzhKHm`Ez$=%ur= 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

BOzAY3h>NM)w9~4s$UggW~(U_CayYbk{ zR3M>a_yE3wzgiaZc`~~tazy8kVVvj3Tuc`x3h+5v{2?H6XLnJ#K?_5h-}(UhJjfHH z>VH|x>T)put;;qi-6>{5^8u8xsrJ4)-}8H`@W4a8bIS;RWbFi2;l>SrQH*8R=Y6?L z#fyreF{8~N*>WNKVl+GKIkoupsT5OC`nUv1F2@xE!h@7_=F|7fs~;cWKge@e_)I&{ z9lSewvDHn7c`(b?PLNcYN-eP*3A!B7M0O%);&qBuPw@;S9eaD=gg{(9^fY+tKG3s3 zbq;Y+#D49f#C5bbx+&az`DFNcT;o6bCq=gr4<%#v(q6Dx){XoD+jF*^p4crwsQj4MZGm|@U>T6 z69ymi!H5(cMvF}J))rsJcD_{o()5F93?ayE?qgr(z=$wY(X32P=x0>KKD5K&aw|4Z zT>ErkraS{%^yQZ=8DR_M`+grgnW7D@OUU0{m!=`NbNJa?UH)Aau`5aiJKyrB)*~7Xq~Qm*6?jpH49&kX)80DTpjnR(!Ami2KT39$aod=ItV%KD5Gm4tVOk$YysL<%);*nz!E79hx91?o0ymh#G*gkP& zrZItAB(vOi1cFU0D1D(73|hJFlB^Q~TSt(gNt@ji{wx`Yy4pEDKoJB~RCF+f0I5~B zLHy4%oDS{ES!*1_wn>R*zxYwc@mH*5|8YweW` z7`=FX@!5YUKl<-*rwbJ1%iM7pM~T^#{}n9sm<7!kvnynp5k zT~S9TeHFaL_m7mU|B_M^!SXvAvxO$$4KevbbWQ%3p3PSkcuCiC<*NVV{lwvJ-%GWi zennS$<6OkQ&G^rg`wu^da@|6PZ-lhpKXl{#hui-4WB*Rif3&y%PS3y7^WSczzwg_B zrRV>r(o@_ZWMaK$xrSM5FgCYx`Hl+xqrpM*Nb4ADV*^wAK7};6@qa7W|4Y-2$f1rf jniMW+n-3INA^gr~ZF%;bT1?V!@F#uY^7+I+bpHH*D!M%8 literal 0 HcmV?d00001 diff --git a/releases/release-7.0.0.md b/releases/release-7.0.0.md index ed2520ebfd76..06922fcd796c 100644 --- a/releases/release-7.0.0.md +++ b/releases/release-7.0.0.md @@ -150,7 +150,7 @@ TiDB 版本:7.0.0 TiDB 优化了基于资源组的资源管控特性。该特性将会极大地提升 TiDB 集群的资源利用效率和性能表现。资源管控特性的引入对 TiDB 具有里程碑的意义,你可以将一个分布式数据库集群划分成多个逻辑单元,将不同的数据库用户映射到对应的资源组中,并根据需要设置每个资源组的配额。当集群资源紧张时,来自同一个资源组的会话所使用的全部资源将被限制在配额内,避免其中一个资源组过度消耗,从而影响其他资源组中的会话正常运行。 - 该特性也可以将多个来自不同系统的中小型应用合入一个 TiDB 集群中,个别应用的负载提升,不会影响其他应用的正常运行。而在系统负载较低的时候,繁忙的应用即使超过设定的读写配额,也仍然可以被分配到所需的系统资源,达到资源的最大化利用。此外,合理利用资源管控特性可以减少集群数量,降低运维难度及管理成本。 + 该特性也可以将多个来自不同系统的中小型应用合入一个 TiDB 集群中,个别应用的负载提升,不会影响其他应用的正常运行。而在系统负载较低的时候,繁忙的应用即使超过设定的配额,也仍然可以被分配到所需的系统资源,达到资源的最大化利用。此外,合理利用资源管控特性可以减少集群数量,降低运维难度及管理成本。 该特性不仅提供了 Grafana 内置的 Resource Control Dashboard 展示资源的实际使用情况,协助你更合理地配置资源,还支持基于会话和语句级别(Hint)的动态资源管控能力。这些功能的引入将帮助你更精确地掌控 TiDB 集群的资源使用情况,并根据实际需要动态调整配额。 diff --git a/releases/release-7.1.0.md b/releases/release-7.1.0.md index a3619c1cb90c..fd3f1f0c0765 100644 --- a/releases/release-7.1.0.md +++ b/releases/release-7.1.0.md @@ -90,7 +90,7 @@ TiDB 版本:7.1.0 (upcoming) TiDB 持续增强资源管控能力,在 v7.1.0 该功能正式 GA。该特性将极大地提升 TiDB 集群的资源利用率和性能表现。资源管控特性的引入对 TiDB 具有里程碑的意义,你可以将一个分布式数据库集群划分成多个逻辑单元,将不同的数据库用户映射到对应的资源组中,并根据实际需求设置每个资源组的配额。当集群资源紧张时,同一资源组内的会话所使用的全部资源将受到配额限制,防止某一资源组的过度消耗对其他资源组的会话造成影响。 - 该特性也可以将多个来自不同系统的中小型应用整合到同一个 TiDB 集群中。即使某个应用的负载增加,也不会影响其他应用的正常运行。而在系统负载较低的时候,繁忙的应用即使超出设定的读写配额,仍可获得所需系统资源,实现资源的最大化利用。此外,合理利用资源管控特性可以减少集群数量,降低运维难度及管理成本。 + 该特性也可以将多个来自不同系统的中小型应用整合到同一个 TiDB 集群中。即使某个应用的负载增加,也不会影响其他应用的正常运行。而在系统负载较低的时候,繁忙的应用即使超出设定的配额,仍可获得所需系统资源,实现资源的最大化利用。此外,合理利用资源管控特性可以减少集群数量,降低运维难度及管理成本。 在 TiDB v7.1.0 中,该特性增加了基于实际负载和硬件部署来估算系统容量上限的能力,为你进行容量规划提供更准确的参考。这有助于你更好地管理 TiDB 的资源分配,从而满足企业级场景的稳定性需求。 diff --git a/tidb-resource-control.md b/tidb-resource-control.md index b9bfc941abae..f353f903ab52 100644 --- a/tidb-resource-control.md +++ b/tidb-resource-control.md @@ -5,9 +5,9 @@ summary: 介绍如何通过资源管控能力来实现对应用资源消耗的 # 使用资源管控 (Resource Control) 实现资源隔离 -使用资源管控特性,集群管理员可以定义资源组 (Resource Group),通过资源组限定读写的配额。 +使用资源管控特性,集群管理员可以定义资源组 (Resource Group),通过资源组限定配额。 -TiDB 资源管控特性提供了两层资源管理能力,包括在 TiDB 层的流控能力和 TiKV 层的优先级调度的能力。两个能力可以单独或者同时开启,详情请参见[参数组合效果表](#相关参数)。将用户绑定到某个资源组后,TiDB 层会根据用户所绑定资源组设定的读写配额对用户的读写请求做流控,TiKV 层会根据读写配额映射的优先级来对请求做调度。通过流控和调度这两层控制,可以实现应用的资源隔离,满足服务质量 (QoS) 要求。 +TiDB 资源管控特性提供了两层资源管理能力,包括在 TiDB 层的流控能力和 TiKV 层的优先级调度的能力。两个能力可以单独或者同时开启,详情请参见[参数组合效果表](#相关参数)。将用户绑定到某个资源组后,TiDB 层会根据用户所绑定资源组设定的配额对用户的读写请求做流控,TiKV 层会根据配额映射的优先级来对请求做调度。通过流控和调度这两层控制,可以实现应用的资源隔离,满足服务质量 (QoS) 要求。 - TiDB 流控:TiDB 流控使用[令牌桶算法](https://en.wikipedia.org/wiki/Token_bucket) 做流控。如果桶内令牌数不够,而且资源组没有指定 `BURSTABLE` 特性,属于该资源组的请求会等待令牌桶回填令牌并重试,重试可能会超时失败。 - TiKV 调度:你可以为资源组设置绝对优先级 ([`PRIORITY`](/information-schema/information-schema-resource-groups.md#示例)),不同的资源按照 `PRIORITY` 的设置进行调度,`PRIORITY` 高的任务会被优先调度。如果没有设置绝对优先级 (`PRIORITY`),TiKV 会将资源组的 `RU_PER_SEC` 取值映射成各自资源组读写请求的优先级,并基于各自的优先级在存储层使用优先级队列调度处理请求。 @@ -75,7 +75,7 @@ Request Unit (RU) 是 TiDB 对 CPU、IO 等系统资源的统一抽象的单位, - [根据实际负载估算容量](/sql-statements/sql-statement-calibrate-resource.md#根据实际负载估算容量) - [基于硬件部署估算容量](/sql-statements/sql-statement-calibrate-resource.md#基于硬件部署估算容量) -详情请参考 [`CALIBRATE RESOURCE` 预估方式](/sql-statements/sql-statement-calibrate-resource.md#预估方式)。 +可通过 [TiDB Dashboard 资源管控页面](/dashboard/dashboard-resource-manager.md)进行查看。详情请参考 [`CALIBRATE RESOURCE` 预估方式](/sql-statements/sql-statement-calibrate-resource.md#预估方式)。 ### 管理资源组 @@ -83,7 +83,7 @@ Request Unit (RU) 是 TiDB 对 CPU、IO 等系统资源的统一抽象的单位, 你可以通过 [`CREATE RESOURCE GROUP`](/sql-statements/sql-statement-create-resource-group.md) 在集群中创建资源组。 -对于已有的资源组,可以通过 [`ALTER RESOURCE GROUP`](/sql-statements/sql-statement-alter-resource-group.md) 修改资源组的读写配额,对资源组的配额修改会立即生效。 +对于已有的资源组,可以通过 [`ALTER RESOURCE GROUP`](/sql-statements/sql-statement-alter-resource-group.md) 修改资源组的配额,对资源组的配额修改会立即生效。 可以使用 [`DROP RESOURCE GROUP`](/sql-statements/sql-statement-drop-resource-group.md) 删除资源组。 @@ -172,9 +172,11 @@ SELECT /*+ RESOURCE_GROUP(rg1) */ * FROM t limit 10; ## 监控与图表 -TiDB 会定时采集资源管控的运行时信息,并在 Grafana 的 **Resource Control Dashboard** 中提供了相关指标的可视化图表。指标详情参见 [Resource Control 监控指标详解](/grafana-resource-control-dashboard.md) 。 +TiDB 会定时采集资源管控的运行时信息,并在 Grafana 的 **Resource Control Dashboard** 中提供了相关指标的可视化图表,详见 [Resource Control 监控指标详解](/grafana-resource-control-dashboard.md)。 -TiKV 中也记录了来自于不同资源组的请求 QPS,详见 [TiKV监控指标详解](/grafana-tikv-dashboard.md#grpc) +TiKV 中也记录了来自于不同资源组的请求 QPS,详见 [TiKV 监控指标详解](/grafana-tikv-dashboard.md#grpc)。 + +TiDB Dashboard 中可以查看当前 [`RESOURCE_GROUPS`](/information-schema/information-schema-resource-groups.md) 表中资源组的数据。详见 [TiDB Dashboard 资源管控页面](/dashboard/dashboard-resource-manager.md)。 ## 工具兼容性 From b7b8373b61adba751c58eb6eccd5f2f3c9b8daa7 Mon Sep 17 00:00:00 2001 From: D3Hunter Date: Wed, 24 May 2023 09:59:38 +0800 Subject: [PATCH 131/257] lightning: add parameters to make it more stable to import large mount of data (#13958) --- releases/release-6.2.0.md | 4 ++-- .../tidb-lightning-configuration.md | 22 ++++++++++++++++++- ...db-lightning-physical-import-mode-usage.md | 4 +++- .../tidb-lightning-physical-import-mode.md | 9 ++++---- 4 files changed, 31 insertions(+), 8 deletions(-) diff --git a/releases/release-6.2.0.md b/releases/release-6.2.0.md index 416c08dcaf7c..3c385a85a45e 100644 --- a/releases/release-6.2.0.md +++ b/releases/release-6.2.0.md @@ -22,7 +22,7 @@ TiDB 版本:6.2.0-DMR - 引入新的 DDL 并行执行框架,减少 DDL 阻塞,大幅提升执行效率。 - TiKV 支持[自适应调整 CPU 使用率](/tikv-configuration-file.md#后台限流),确保数据库稳定高效运行。 - 支持 [point-in-time recovery (PITR)](/br/backup-and-restore-overview.md),允许恢复备份集群的历史任意时间点的快照。 -- TiDB Lightning 使用 Physical Import Mode [导入时限制调度范围从集群降低到表级别](/tidb-lightning/tidb-lightning-physical-import-mode-usage.md#导入时限制调度范围从集群降低到表级别)。 +- TiDB Lightning 使用 Physical Import Mode [导入时限制调度范围从集群降低到表级别](/tidb-lightning/tidb-lightning-physical-import-mode-usage.md#导入时暂停-pd-调度的范围)。 - Backup & Restore (BR) 支持[恢复用户和权限数据](/br/br-snapshot-guide.md#恢复-mysql-数据库下的表),备份恢复体验更平滑。 - TiCDC 支持[过滤指定类型的 DDL 事件](/ticdc/ticdc-filter.md#event-filter-事件过滤器-从-v620-版本开始引入),解锁更多数据同步场景。 - 事务中支持 [`SAVEPOINT` 机制](/sql-statements/sql-statement-savepoint.md),可以灵活地控制事务内的回退节点。 @@ -212,7 +212,7 @@ TiDB 版本:6.2.0-DMR 此特性无需手动配置,目标 TiDB 集群版本在 v6.1.0 及以上且 TiDB Lightning 在 v6.2.0 及以上时自动生效。 - [用户文档](/tidb-lightning/tidb-lightning-physical-import-mode-usage.md#导入时限制调度范围从集群降低到表级别) [#35148](https://github.com/pingcap/tidb/issues/35148) @[gozssky](https://github.com/gozssky) + [用户文档](/tidb-lightning/tidb-lightning-physical-import-mode-usage.md#导入时暂停-pd-调度的范围) [#35148](https://github.com/pingcap/tidb/issues/35148) @[gozssky](https://github.com/gozssky) * 调整 [TiDB Lightning 在线文档](/tidb-lightning/tidb-lightning-overview.md),使其目录结构更加合理和清晰。同时对文档中关于“后端模式”的描述进行了修改,使用 Physical Import Mode 替代原有 local backend,使用 Logical Import Mode 替代原有 tidb backend ,以降低新用户的理解难度。 diff --git a/tidb-lightning/tidb-lightning-configuration.md b/tidb-lightning/tidb-lightning-configuration.md index e8eac1b2fd78..7d413aab1c12 100644 --- a/tidb-lightning/tidb-lightning-configuration.md +++ b/tidb-lightning/tidb-lightning-configuration.md @@ -145,7 +145,7 @@ addr = "172.16.31.10:8287" # 使用 Physical Import Mode 时,配置 TiDB Lightning 本地临时文件使用的磁盘配额 (disk quota)。当磁盘配额不足时,TiDB Lightning 会暂停读取源数据以及写入临时文件的过程,优先将已经完成排序的 key-value 写入到 TiKV,TiDB Lightning 删除本地临时文件后,再继续导入过程。 # 需要同时配合把 `backend` 设置为 `local` 模式才能生效。 # 默认值为 MaxInt64 字节,即 9223372036854775807 字节。 -# disk-quota = "10GB" +# disk-quota = "10GB" # Physical Import Mode 是否通过 SQL 方式添加索引。默认为 `false`,表示 TiDB Lightning 会将行数据以及索引数据都编码成 KV pairs 后一同导入 TiKV,实现机制和历史版本保持一致。如果设置为 `true`,即 TiDB Lightning 会在导入数据完成后,使用 add index 的 SQL 来添加索引。 # 通过 SQL 方式添加索引的优点是将导入数据与导入索引分开,可以快速导入数据,即使导入数据后,索引添加失败,也不会影响数据的一致性。 @@ -153,6 +153,26 @@ addr = "172.16.31.10:8287" # 在使用 TiDB Lightning 导入多租户的 TiDB cluster 的场景下,指定对应的 key space 名称。默认取值为空字符串,表示 TiDB Lightning 会自动获取导入对应租户的 key space 名称;如果指定了值,则使用指定的 key space 名称来导入。 # keyspace-name = "" + +# Physical Import Mode 下,用于控制 TiDB Lightning 暂停 PD 调度的范围,可选值包括: +# - "table":仅暂停目标表数据所在 Region 的调度。默认值为 "table"。 +# - "global":暂停全局调度。当导入数据到无业务流量的集群时,建议设置为 "global",以避免其他调度的干扰。 +# 该参数自 v7.1.0 版本开始引入。注意:"table" 选项仅适用于 TiDB v6.1.0 及以上版本的目标集群。 +# pause-pd-scheduler-scope = "table" + +# Physical Import Mode 下,用于控制批量 Split Region 时的 Region 个数。每个 TiDB Lightning 实例最多同时 Split Region 的个数为: +# region-split-batch-size * region-split-concurrency * table-concurrency +# 该参数自 v7.1.0 版本开始引入,默认值为 `4096`。 +# region-split-batch-size = 4096 + +# Physical Import Mode 下,用于控制 Split Region 时的并发度。默认值为 CPU 核数。 +# 该参数自 v7.1.0 版本开始引入。 +# region-split-concurrency = + +# Physical Import Mode 下,用于控制 split 和 scatter 操作后等待 Region 上线的重试次数,默认值为 `1800`。重试符合指数回退策略,最大重试间隔为 2 秒。若两次重试之间有任何 Region 上线,该次操作不会被计为重试次数。 +# 该参数自 v7.1.0 版本开始引入。 +# region-check-backoff-limit = 1800 + [mydumper] # 设置文件读取的区块大小,确保该值比数据源的最长字符串长。 read-block-size = "64KiB" # 默认值 diff --git a/tidb-lightning/tidb-lightning-physical-import-mode-usage.md b/tidb-lightning/tidb-lightning-physical-import-mode-usage.md index e3076ed66894..d8b8d8ed928c 100644 --- a/tidb-lightning/tidb-lightning-physical-import-mode-usage.md +++ b/tidb-lightning/tidb-lightning-physical-import-mode-usage.md @@ -130,10 +130,12 @@ mysql> select table_name,index_name,key_data,row_data from conflict_error_v1 lim 根据上述信息人工甄别需要保留的重复数据,手动插回原表即可。 -## 导入时限制调度范围从集群降低到表级别 +## 导入时暂停 PD 调度的范围 自 TiDB Lightning v6.2.0 版本起,TiDB Lightning 提供机制控制导入数据过程对在线业务的影响。TiDB Lightning 不会暂停全局的调度,而是只暂停目标表数据范围所在 region 的调度,降低了对在线业务的影响。 +自 TiDB v7.1.0 版本起,你可以通过 TiDB Lightning 的参数 [`pause-pd-scheduler-scope`](/tidb-lightning/tidb-lightning-configuration.md) 来控制暂停调度的范围。默认为 `"table"`,即只暂停目标表数据所在 Region 的调度。当集群没有业务流量时,建议设置为 `"global"` 以减少来自调度器对导入的干扰。 + > **注意:** > > TiDB Lightning 不支持导入数据到已有业务写入的数据表。 diff --git a/tidb-lightning/tidb-lightning-physical-import-mode.md b/tidb-lightning/tidb-lightning-physical-import-mode.md index 886a684ed10f..0956583a221c 100644 --- a/tidb-lightning/tidb-lightning-physical-import-mode.md +++ b/tidb-lightning/tidb-lightning-physical-import-mode.md @@ -13,10 +13,11 @@ Physical Import Mode 对应的后端模式为 `local`。 ## 原理说明 -1. 在导入数据之前,`tidb-lightning` 会自动将 TiKV 节点切换为“导入模式” (import mode),优化写入效率并停止自动压缩。`tidb-lightning` 会根据 TiDB 集群的版本决定是否停止全局调度。 +1. 在导入数据之前,`tidb-lightning` 会自动将 TiKV 节点切换为“导入模式” (import mode),优化写入效率并停止自动压缩。以下为各版本的 TiDB Lightning 决定暂停调度的策略: - - 当 TiDB 集群版本 >= v6.1.0 且 TiDB Lightning 版本 >= v6.2.0 时,`tidb-lightning` 在向 TiKV 导入数据时,只会暂停目标表数据范围所在 region 的调度,并在目标表导入完成后恢复调度。 - - 当 TiDB 集群版本 < v6.1.0 或 TiDB Lightning 版本 < v6.2.0 时,`tidb-lightning` 会暂停全局调度。 + - 自 v7.1.0 开始,你可以通过 [`pause-pd-scheduler-scope`](/tidb-lightning/tidb-lightning-configuration.md) 来控制是否暂停全局调度。 + - v6.2.0 ~ v7.0.0 版本的 TiDB Lightning 会根据 TiDB 集群的版本决定是否暂停全局调度。当 TiDB 集群版本 >= v6.1.0,只会暂停目标表数据范围所在 Region 的调度,并在目标表导入完成后恢复调度。其他版本则会暂停全局调度。 + - 当 TiDB Lightning 版本 < v6.2.0 时,`tidb-lightning` 会暂停全局调度。 2. `tidb-lightning` 在目标数据库建立表结构,并获取其元数据。 @@ -64,7 +65,7 @@ Physical Import Mode 对应的后端模式为 `local`。 ### 使用限制 -- 请勿直接使用 Physical Import Mode 向已经投入生产的 TiDB 集群导入数据,这将对在线业务产生严重影响。如需向生产集群导入数据,请参考[导入时限制调度范围从集群降低到表级别](/tidb-lightning/tidb-lightning-physical-import-mode-usage.md#导入时限制调度范围从集群降低到表级别)。 +- 请勿直接使用 Physical Import Mode 向已经投入生产的 TiDB 集群导入数据,这将对在线业务产生严重影响。如需向生产集群导入数据,请参考[导入时限制调度范围从集群降低到表级别](/tidb-lightning/tidb-lightning-physical-import-mode-usage.md#导入时暂停-pd-调度的范围)。 - 默认情况下,不应同时启动多个 TiDB Lightning 实例向同一 TiDB 集群导入数据,而应考虑使用[并行导入](/tidb-lightning/tidb-lightning-distributed-import.md)特性。 From 7e6ee996feea5f883b2b3a4f3a7841ca523f74f0 Mon Sep 17 00:00:00 2001 From: YangKeao Date: Wed, 24 May 2023 14:29:38 +0800 Subject: [PATCH 132/257] auth, variables: add description about ldap authentication (#13899) --- security-compatibility-with-mysql.md | 4 +- system-variables.md | 170 ++++++++++++++++++++++++++- 2 files changed, 172 insertions(+), 2 deletions(-) diff --git a/security-compatibility-with-mysql.md b/security-compatibility-with-mysql.md index 014bd1da7034..0ce3e1e33637 100644 --- a/security-compatibility-with-mysql.md +++ b/security-compatibility-with-mysql.md @@ -122,8 +122,10 @@ TiDB 目前支持的身份验证方式可在以下的表格中查找到。服务 | `auth_socket` | 是(5.3.0 版本起) | | `tidb_sm3_password` | 是(6.3.0 版本起) | | `tidb_auth_token` | 是(6.4.0 版本起) | +| `authentication_ldap_sasl` | 是(7.1.0 版本起) | +| `authentication_ldap_simple` | 是(7.1.0 版本起) | | TLS 证书 | 是 | -| LDAP | 否 | +| LDAP | 是(7.1.0 版本起) | | PAM | 否 | | ed25519 (MariaDB) | 否 | | GSSAPI (MariaDB) | 否 | diff --git a/system-variables.md b/system-variables.md index 082a02dbefd0..1b6bab4915b5 100644 --- a/system-variables.md +++ b/system-variables.md @@ -52,6 +52,174 @@ SET GLOBAL tidb_distsql_scan_concurrency = 10; - 默认值:`OFF` - 是否允许在 `INSERT` 语句中显式指定含有 `AUTO_RANDOM` 属性的列的值。 +### `authentication_ldap_sasl_auth_method_name` 从 v7.1.0 版本开始引入 + +- 作用域:GLOBAL +- 是否持久化到集群:是 +- 类型:枚举型 +- 默认值:`SCRAM-SHA-1` +- 可选值:`SCRAM-SHA-1`、`SCRAM-SHA-256`、`GSSAPI` +- LDAP SASL 身份验证中,验证方法的名称。 + +### `authentication_ldap_sasl_bind_base_dn` 从 v7.1.0 版本开始引入 + +- 作用域:GLOBAL +- 是否持久化到集群:是 +- 类型:字符串 +- 默认值:"" +- LDAP SASL 身份验证中,搜索用户的范围。如果创建用户时没有通过 `AS ...` 指定 `dn`,TiDB 会自动在 LDAP Server 的该范围中根据用户名搜索用户 `dn`。例如 `dc=example,dc=org`。 + +### `authentication_ldap_sasl_bind_root_dn` 从 v7.1.0 版本开始引入 + +- 作用域:GLOBAL +- 是否持久化到集群:是 +- 类型:字符串 +- 默认值:"" +- LDAP SASL 身份验证中,TiDB 登录 LDAP Server 搜索用户时使用的 `dn`。 + +### `authentication_ldap_sasl_bind_root_pwd` 从 v7.1.0 版本开始引入 + +- 作用域:GLOBAL +- 是否持久化到集群:是 +- 类型:字符串 +- 默认值:"" +- LDAP SASL 身份验证中,TiDB 登录 LDAP Server 搜索用户时使用的密码。 + +### `authentication_ldap_sasl_ca_path` 从 v7.1.0 版本开始引入 + +- 作用域:GLOBAL +- 是否持久化到集群:是 +- 类型:字符串 +- 默认值:"" +- LDAP SASL 身份验证中,TiDB 对 StartTLS 连接使用的 CA 证书的路径。 + +### `authentication_ldap_sasl_init_pool_size` 从 v7.1.0 版本开始引入 + +- 作用域:GLOBAL +- 是否持久化到集群:是 +- 类型:整数型 +- 默认值:`10` +- 范围:`[1, 32767]` +- LDAP SASL 身份验证中,TiDB 与 LDAP Server 间连接池的初始连接数。 + +### `authentication_ldap_sasl_max_pool_size` 从 v7.1.0 版本开始引入 + +- 作用域:GLOBAL +- 是否持久化到集群:是 +- 类型:整数型 +- 默认值:`1000` +- 范围:`[1, 32767]` +- LDAP SASL 身份验证中,TiDB 与 LDAP Server 间连接池的最大连接数。 + +### `authentication_ldap_sasl_server_host` 从 v7.1.0 版本开始引入 + +- 作用域:GLOBAL +- 是否持久化到集群:是 +- 类型:字符串 +- 默认值:"" +- LDAP SASL 身份验证中,LDAP Server 的主机名或地址。 + +### `authentication_ldap_sasl_server_port` 从 v7.1.0 版本开始引入 + +- 作用域:GLOBAL +- 是否持久化到集群:是 +- 类型:整数型 +- 默认值:`389` +- 范围:`[1, 65535]` +- LDAP SASL 身份验证中,LDAP Server 的 TCP/IP 端口号。 + +### `authentication_ldap_sasl_tls` 从 v7.1.0 版本开始引入 + +- 作用域:GLOBAL +- 是否持久化到集群:是 +- 类型:布尔型 +- 默认值:`OFF` +- LDAP SASL 身份验证中,是否使用 StartTLS 对连接加密。 + +### `authentication_ldap_simple_auth_method_name` 从 v7.1.0 版本开始引入 + +- 作用域:GLOBAL +- 是否持久化到集群:是 +- 类型:枚举型 +- 默认值:`SIMPLE` +- 可选值:`SIMPLE`. +- LDAP simple 身份验证中,验证方法的名称。现在仅支持 `SIMPLE`。 + +### `authentication_ldap_simple_bind_base_dn` 从 v7.1.0 版本开始引入 + +- 作用域:GLOBAL +- 是否持久化到集群:是 +- 类型:字符串 +- 默认值:"" +- LDAP simple 身份验证中,搜索用户的范围。如果创建用户时没有通过 `AS ...` 指定 `dn`,TiDB 会自动在 LDAP Server 的该范围中根据用户名搜索用户 `dn`。例如 `dc=example,dc=org`。 + +### `authentication_ldap_simple_bind_root_dn` 从 v7.1.0 版本开始引入 + +- 作用域:GLOBAL +- 是否持久化到集群:是 +- 类型:字符串 +- 默认值:"" +- LDAP simple 身份验证中,TiDB 登录 LDAP Server 搜索用户时使用的 `dn`。 + +### `authentication_ldap_simple_bind_root_pwd` 从 v7.1.0 版本开始引入 + +- 作用域:GLOBAL +- 是否持久化到集群:是 +- 类型:字符串 +- 默认值:"" +- LDAP simple 身份验证中,TiDB 登录 LDAP Server 搜索用户时使用的密码。 + +### `authentication_ldap_simple_ca_path` 从 v7.1.0 版本开始引入 + +- 作用域:GLOBAL +- 是否持久化到集群:是 +- 类型:字符串 +- 默认值:"" +- LDAP simple 身份验证中,TiDB 对 StartTLS 连接使用的 CA 证书的路径。 + +### `authentication_ldap_simple_init_pool_size` 从 v7.1.0 版本开始引入 + +- 作用域:GLOBAL +- 是否持久化到集群:是 +- 类型:整数型 +- 默认值:`10` +- 范围:`[1, 32767]` +- LDAP simple 身份验证中,TiDB 与 LDAP Server 间连接池的初始连接数。 + +### `authentication_ldap_simple_max_pool_size` 从 v7.1.0 版本开始引入 + +- 作用域:GLOBAL +- 是否持久化到集群:是 +- 类型:整数型 +- 默认值:`1000` +- 范围:`[1, 32767]` +- LDAP simple 身份验证中,TiDB 与 LDAP Server 间连接池的最大连接数。 + +### `authentication_ldap_simple_server_host` 从 v7.1.0 版本开始引入 + +- 作用域:GLOBAL +- 是否持久化到集群:是 +- 类型:字符串 +- 默认值:"" +- LDAP simple 身份验证中,LDAP Server 的主机名或地址。 + +### `authentication_ldap_simple_server_port` 从 v7.1.0 版本开始引入 + +- 作用域:GLOBAL +- 是否持久化到集群:是 +- 类型:整数型 +- 默认值:`389` +- 范围:`[1, 65535]` +- LDAP simple 身份验证中,LDAP Server 的 TCP/IP 端口号。 + +### `authentication_ldap_simple_tls` 从 v7.1.0 版本开始引入 + +- 作用域:GLOBAL +- 是否持久化到集群:是 +- 类型:布尔型 +- 默认值:`OFF` +- LDAP simple 身份验证中,是否使用 StartTLS 对连接加密。 + ### `auto_increment_increment` - 作用域:SESSION | GLOBAL @@ -202,7 +370,7 @@ mysql> SELECT * FROM t1; - 是否持久化到集群:是 - 类型:枚举型 - 默认值:`mysql_native_password` -- 可选值:`mysql_native_password`,`caching_sha2_password`,`tidb_sm3_password`,`tidb_auth_token` +- 可选值:`mysql_native_password`,`caching_sha2_password`,`tidb_sm3_password`,`tidb_auth_token`,`authentication_ldap_sasl` 或 `authentication_ldap_simple`。 - `tidb_auth_token` 认证方式仅用于 TiDB Cloud 内部实现,**不要设置为该值**。 - 服务器和客户端建立连接时,这个变量用于设置服务器对外通告的默认身份验证方式。如要了解该变量的其他可选值,参见[可用的身份验证插件](/security-compatibility-with-mysql.md#可用的身份验证插件)。 - 若要在用户登录时使用 `tidb_sm3_password` 插件,需要使用 [TiDB-JDBC](https://github.com/pingcap/mysql-connector-j/tree/release/8.0-sm3) 进行连接。 From b5fdc00a21fc700f3b489d1475609d22bcb72194 Mon Sep 17 00:00:00 2001 From: Aolin Date: Wed, 24 May 2023 17:51:38 +0800 Subject: [PATCH 133/257] dashboard: fix a render issue (#14043) --- dashboard/dashboard-resource-manager.md | 2 +- system-variables.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/dashboard/dashboard-resource-manager.md b/dashboard/dashboard-resource-manager.md index d585e5c50b17..e7e16b625334 100644 --- a/dashboard/dashboard-resource-manager.md +++ b/dashboard/dashboard-resource-manager.md @@ -45,7 +45,7 @@ summary: 介绍如何使用 TiDB Dashboard 的资源管控页面查看资源管 - `oltp_read_write`:数据读写平衡的负载,根据类似 `sysbench oltp_read_write` 的负载模型预测。 - `oltp_read_only`:数据读取较重的负载,根据类似 `sysbench oltp_read_only` 的负载模型预测。 - ![基于硬件部署估算容量](/media/dashboard/dashboard-resource-manager-calibrate-by-hardware.png) + ![基于硬件部署估算容量](/media/dashboard/dashboard-resource-manager-calibrate-by-hardware.png) 用户资源分组总请求单元 (Total RU of user resource groups) 表示当前除 `default` 用户外的 RU 总量。当该数值小于容量估算值时,系统会发出提醒。系统预定义的 `default` 资源组默认拥有无限用量。当所有用户都属于 `default` 资源组时,资源分配方式与关闭资源管控时相同。 diff --git a/system-variables.md b/system-variables.md index 1b6bab4915b5..2d54a228f3a8 100644 --- a/system-variables.md +++ b/system-variables.md @@ -142,7 +142,7 @@ SET GLOBAL tidb_distsql_scan_concurrency = 10; - 是否持久化到集群:是 - 类型:枚举型 - 默认值:`SIMPLE` -- 可选值:`SIMPLE`. +- 可选值:`SIMPLE` - LDAP simple 身份验证中,验证方法的名称。现在仅支持 `SIMPLE`。 ### `authentication_ldap_simple_bind_base_dn` 从 v7.1.0 版本开始引入 From 7027ca1c426de2ed4a4bdfc7727f976179bb688b Mon Sep 17 00:00:00 2001 From: Lynn Date: Thu, 25 May 2023 12:53:38 +0800 Subject: [PATCH 134/257] *: add smooth upgrade TiDB introduction doc (#14013) --- TOC.md | 1 + faq/upgrade-faq.md | 10 +++++-- smooth-upgrade-tidb.md | 56 ++++++++++++++++++++++++++++++++++++++ upgrade-tidb-using-tiup.md | 8 ++++-- 4 files changed, 70 insertions(+), 5 deletions(-) create mode 100644 smooth-upgrade-tidb.md diff --git a/TOC.md b/TOC.md index 964f496b33ac..a677f04f035f 100644 --- a/TOC.md +++ b/TOC.md @@ -127,6 +127,7 @@ - 升级 TiDB 版本 - [使用 TiUP 升级](/upgrade-tidb-using-tiup.md) - [使用 TiDB Operator](https://docs.pingcap.com/zh/tidb-in-kubernetes/stable/upgrade-a-tidb-cluster) + - [平滑升级 TiDB](/smooth-upgrade-tidb.md) - [TiFlash v6.2 升级帮助](/tiflash-620-upgrade-guide.md) - 扩缩容 - [使用 TiUP(推荐)](/scale-tidb-using-tiup.md) diff --git a/faq/upgrade-faq.md b/faq/upgrade-faq.md index 6f9fde263a22..e9a247e1cd44 100644 --- a/faq/upgrade-faq.md +++ b/faq/upgrade-faq.md @@ -18,9 +18,15 @@ aliases: ['/docs-cn/dev/faq/upgrade-faq/','/docs-cn/dev/faq/upgrade/'] ### 集群在执行 DDL 请求期间可以进行升级操作吗? -集群中有 DDL 语句正在被执行时(通常为 `ADD INDEX` 和列类型变更等耗时较久的 DDL 语句),**请勿进行**升级操作。在升级前,建议使用 [`ADMIN SHOW DDL`](/sql-statements/sql-statement-admin-show-ddl.md) 命令查看集群中是否有正在进行的 DDL Job。如需升级,请等待 DDL 执行完成或使用 [`ADMIN CANCEL DDL`](/sql-statements/sql-statement-admin-cancel-ddl.md) 命令取消该 DDL Job 后再进行升级。 +* 如果升级前 TiDB 的版本低于 v7.1.0: -另外,在升级 TiDB 集群的过程中,**请勿执行** DDL 语句,否则可能会出现行为未定义的问题。 + * 集群中有 DDL 语句正在被执行时(通常为 `ADD INDEX` 和列类型变更等耗时较久的 DDL 语句),**请勿进行**升级操作。在升级前,建议使用 [`ADMIN SHOW DDL`](/sql-statements/sql-statement-admin-show-ddl.md) 命令查看集群中是否有正在进行的 DDL Job。如需升级,请等待 DDL 执行完成或使用 [`ADMIN CANCEL DDL`](/sql-statements/sql-statement-admin-cancel-ddl.md) 命令取消该 DDL Job 后再进行升级。 + + * 在升级 TiDB 集群的过程中,**请勿执行** DDL 语句,否则可能会出现行为未定义的问题。 + +* 如果升级前 TiDB 的版本为 v7.1.0 或更高的版本: + + * 不用遵循限制低版本升级时的限制,即在升级时可以接收用户 DDL 任务。建议参考[平滑升级 TiDB](/smooth-upgrade-tidb.md)。 ### Binary 如何升级? diff --git a/smooth-upgrade-tidb.md b/smooth-upgrade-tidb.md new file mode 100644 index 000000000000..d435d56009d9 --- /dev/null +++ b/smooth-upgrade-tidb.md @@ -0,0 +1,56 @@ +--- +title: 平滑升级 TiDB +summary: 本文介绍支持无需手动取消 DDL 的平滑升级集群功能。 +--- + +# 平滑升级 TiDB + +> **警告:** +> +> 平滑升级目前为实验特性。 + +本文档介绍 TiDB 的平滑升级集群功能,支持无需手动取消 DDL 的操作。 + +从 v7.1.0 起,当将 TiDB 升级至更高的版本时,TiDB 支持平滑升级功能,取消了升级过程中的限制,提供更平滑的升级体验。此功能默认开启,且无开关控制。 + +## 功能简介 + +TiDB 引入平滑升级功能前,对于升级过程中的 DDL 操作有如下限制(可以参考[使用 TiUP 升级 TiDB](/upgrade-tidb-using-tiup.md#使用-tiup-升级-tidb)中警告部分): + +- 在升级过程中执行 DDL 操作,TiDB 可能会出现未定义的行为。 +- 在 DDL 操作执行过程中升级 TiDB,TiDB 可能会出现未定义的行为。 + +引入平滑升级后,TiDB 升级过程不再受上述限制。 + +升级过程中,TiDB 会自动进行以下操作,无需用户干预: + +1. 暂停用户的 DDL 操作。 +2. 执行升级过程中的系统 DDL 操作。 +3. 恢复被暂停的用户的 DDL 操作。 +4. 完成升级。 + +其中,恢复的 DDL job 仍会按升级前的顺序执行。 + +## 使用限制 + +使用平滑升级功能时,需要注意以下限制。 + +### 用户操作限制 + +* 在升级前,如果集群中存在正在处理的 canceling DDL job,即有正在被处理的 DDL job 被用户取消了,由于处于 canceling 状态的 job 无法被 `pause`,TiDB 会尝试重试。如果重试失败,会报错并退出升级。 + +* 在升级过程中,不允许以下操作: + + * 对系统表(`mysql.*`、`information_schema.*`、`performance_schema.*`、`metrics_schema.*`)进行 DDL 操作。 + + * 执行手动取消、暂停、恢复 DDL job 操作:`ADMIN CANCEL/PAUSE/RESUME DDL JOBS job_id [, job_id] ...;`。 + + * 导入数据。 + +### 工具使用限制 + +在升级过程中,不支持使用以下工具: + +* BR:BR 可能会将处于 paused 状态的 DDL 拷贝到 TiDB 中,而此状态的 DDL 不能自动 resume,可能导致后续 DDL 卡住的情况。 + +* DM 和 TiCDC:如果在升级过程中使用 DM 和 TiCDC 向 TiDB 导入 SQL,并且其中包含 DDL 操作,则该导入操作会被阻塞,并可能出现未定义错误。 diff --git a/upgrade-tidb-using-tiup.md b/upgrade-tidb-using-tiup.md index e1914137556f..1d80cf41f918 100644 --- a/upgrade-tidb-using-tiup.md +++ b/upgrade-tidb-using-tiup.md @@ -19,9 +19,11 @@ aliases: ['/docs-cn/dev/upgrade-tidb-using-tiup/','/docs-cn/dev/how-to/upgrade/u > **警告:** > -> - 不支持将 TiFlash 组件从 5.3 之前的老版本在线升级至 5.3 及之后的版本,只能采用停机升级。如果集群中其他组件(如 tidb,tikv)不能停机升级,参考[不停机升级](#不停机升级)中的注意事项。 -> - 在升级 TiDB 集群的过程中,**请勿执行** DDL 语句,否则可能会出现行为未定义的问题。 -> - 集群中有 DDL 语句正在被执行时(通常为 `ADD INDEX` 和列类型变更等耗时较久的 DDL 语句),**请勿进行**升级操作。在升级前,建议使用 [`ADMIN SHOW DDL`](/sql-statements/sql-statement-admin-show-ddl.md) 命令查看集群中是否有正在进行的 DDL Job。如需升级,请等待 DDL 执行完成或使用 [`ADMIN CANCEL DDL`](/sql-statements/sql-statement-admin-cancel-ddl.md) 命令取消该 DDL Job 后再进行升级。 +> 1. 不支持将 TiFlash 组件从 5.3 之前的老版本在线升级至 5.3 及之后的版本,只能采用停机升级。如果集群中其他组件(如 tidb,tikv)不能停机升级,参考[不停机升级](#不停机升级)中的注意事项。 +> 2. 在升级 TiDB 集群的过程中,**请勿执行** DDL 语句,否则可能会出现行为未定义的问题。 +> 3. 集群中有 DDL 语句正在被执行时(通常为 `ADD INDEX` 和列类型变更等耗时较久的 DDL 语句),**请勿进行**升级操作。在升级前,建议使用 [`ADMIN SHOW DDL`](/sql-statements/sql-statement-admin-show-ddl.md) 命令查看集群中是否有正在进行的 DDL Job。如需升级,请等待 DDL 执行完成或使用 [`ADMIN CANCEL DDL`](/sql-statements/sql-statement-admin-cancel-ddl.md) 命令取消该 DDL Job 后再进行升级。 +> +> 从 TiDB v7.1 版本升级至更高的版本时,可以不遵循上面的限制 2 和 3,建议参考[平滑升级 TiDB 的限制](/smooth-upgrade-tidb.md#使用限制)。 > **注意:** > From 27d14c031e27aec4833763e3c7dd70873b0d5da0 Mon Sep 17 00:00:00 2001 From: xixirangrang Date: Thu, 25 May 2023 12:55:40 +0800 Subject: [PATCH 135/257] tiflash: add description about behavior after executing ALTER DATABASE (#14046) --- tiflash/create-tiflash-replicas.md | 18 ++---------------- 1 file changed, 2 insertions(+), 16 deletions(-) diff --git a/tiflash/create-tiflash-replicas.md b/tiflash/create-tiflash-replicas.md index 0bfdd7601341..fcc339f1195b 100644 --- a/tiflash/create-tiflash-replicas.md +++ b/tiflash/create-tiflash-replicas.md @@ -11,8 +11,6 @@ summary: 了解如何构建 TiFlash 副本。 TiFlash 接入 TiKV 集群后,默认不会开始同步数据。可通过 MySQL 客户端向 TiDB 发送 DDL 命令来为特定的表建立 TiFlash 副本: -{{< copyable "sql" >}} - ```sql ALTER TABLE table_name SET TIFLASH REPLICA count; ``` @@ -25,8 +23,6 @@ ALTER TABLE table_name SET TIFLASH REPLICA count; 为表建立 2 个副本: -{{< copyable "sql" >}} - ```sql ALTER TABLE `tpch50`.`lineitem` SET TIFLASH REPLICA 2; ``` @@ -61,8 +57,6 @@ ALTER TABLE `tpch50`.`lineitem` SET TIFLASH REPLICA 0; 可通过如下 SQL 语句查看特定表(通过 WHERE 语句指定,去掉 WHERE 语句则查看所有表)的 TiFlash 副本的状态: -{{< copyable "sql" >}} - ```sql SELECT * FROM information_schema.tiflash_replica WHERE TABLE_SCHEMA = '' and TABLE_NAME = ''; ``` @@ -76,8 +70,6 @@ SELECT * FROM information_schema.tiflash_replica WHERE TABLE_SCHEMA = ' 类似于按表构建 TiFlash 副本的方式,你可以在 MySQL 客户端向 TiDB 发送 DDL 命令来为指定数据库中的所有表建立 TiFlash 副本: -{{< copyable "sql" >}} - ```sql ALTER DATABASE db_name SET TIFLASH REPLICA count; ``` @@ -88,16 +80,12 @@ ALTER DATABASE db_name SET TIFLASH REPLICA count; 执行以下命令可以为 `tpch50` 库中的所有表建立 2 个 TiFlash 副本。 -{{< copyable "sql" >}} - ```sql ALTER DATABASE `tpch50` SET TIFLASH REPLICA 2; ``` 执行以下命令可以删除为 `tpch50` 库建立的 TiFlash 副本: -{{< copyable "sql" >}} - ```sql ALTER DATABASE `tpch50` SET TIFLASH REPLICA 0; ``` @@ -111,22 +99,20 @@ ALTER DATABASE `tpch50` SET TIFLASH REPLICA 0; > - 在命令执行到结束期间,如果在该库下创建表,则**可能**会对这些新增表创建 TiFlash 副本。 > - 在命令执行到结束期间,如果为该库下的表添加索引,则该命令可能陷入等待,直到添加索引完成。 > +> - 该命令执行结束后,在该库中新建的表不会自动创建 TiFlash 副本。 +> > - 该命令会跳过系统表、视图、临时表以及包含了 TiFlash 不支持字符集的表。 ### 查看库同步进度 类似于按表构建,按库构建 TiFlash 副本的命令执行成功,不代表所有表都已同步完成。可以执行下面的 SQL 语句检查数据库中所有已设置 TiFlash Replica 表的同步进度: -{{< copyable "sql" >}} - ```sql SELECT * FROM information_schema.tiflash_replica WHERE TABLE_SCHEMA = ''; ``` 可以执行下面的 SQL 语句检查数据库中尚未设置 TiFlash Replica 的表名: -{{< copyable "sql" >}} - ```sql SELECT TABLE_NAME FROM information_schema.tables where TABLE_SCHEMA = "" and TABLE_NAME not in (SELECT TABLE_NAME FROM information_schema.tiflash_replica where TABLE_SCHEMA = ""); ``` From caa535a5cff9d1db1672b6d1eb4e83a23d85a857 Mon Sep 17 00:00:00 2001 From: Lilian Lee Date: Fri, 26 May 2023 10:19:39 +0800 Subject: [PATCH 136/257] *: update GCP name to Google Cloud (#14041) --- basic-features.md | 2 +- faq/deploy-and-maintain-faq.md | 2 +- releases/release-6.3.0.md | 2 +- releases/release-7.0.0.md | 2 +- tiflash/tiflash-configuration.md | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/basic-features.md b/basic-features.md index 888b14c7c654..d51193fa77ce 100644 --- a/basic-features.md +++ b/basic-features.md @@ -198,7 +198,7 @@ aliases: ['/docs-cn/dev/basic-features/','/docs-cn/dev/experimental-features-4.0 | [数据迁移工具](/migration-overview.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | | [TiDB Binlog](/tidb-binlog/tidb-binlog-overview.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | | [Change data capture (CDC)](/ticdc/ticdc-overview.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| [TiCDC 支持保存数据到存储服务 (S3/NFS/Azure Blob Storage/GCP)](/ticdc/ticdc-sink-to-cloud-storage.md) | Y | E | N | N | N | N | N | N | N | +| [TiCDC 支持保存数据到存储服务 (Amazon S3/GCS/Azure Blob Storage/NFS)](/ticdc/ticdc-sink-to-cloud-storage.md) | Y | E | N | N | N | N | N | N | N | | [TiCDC 支持在两个 TiDB 集群之间进行双向复制](/ticdc/ticdc-bidirectional-replication.md) | Y | Y | N | N | N | N | N | N | N | | [TiCDC OpenAPI v2](/ticdc/ticdc-open-api-v2.md) | Y | N | N | N | N | N | N | N | N | diff --git a/faq/deploy-and-maintain-faq.md b/faq/deploy-and-maintain-faq.md index cc778ec79144..92359454d99e 100644 --- a/faq/deploy-and-maintain-faq.md +++ b/faq/deploy-and-maintain-faq.md @@ -114,6 +114,6 @@ Direct 模式就是把写入请求直接封装成 I/O 指令发到磁盘,这 ## TiDB 支持在公有云上部署吗? -TiDB 支持在 [Google GKE](https://docs.pingcap.com/zh/tidb-in-kubernetes/v1.1/deploy-on-gcp-gke)、[AWS EKS](https://docs.pingcap.com/zh/tidb-in-kubernetes/v1.1/deploy-on-aws-eks) 和[阿里云 ACK](https://docs.pingcap.com/zh/tidb-in-kubernetes/v1.1/deploy-on-alibaba-cloud) 上部署使用。 +TiDB 支持在 [Google Cloud GKE](https://docs.pingcap.com/zh/tidb-in-kubernetes/v1.1/deploy-on-gcp-gke)、[AWS EKS](https://docs.pingcap.com/zh/tidb-in-kubernetes/v1.1/deploy-on-aws-eks) 和[阿里云 ACK](https://docs.pingcap.com/zh/tidb-in-kubernetes/v1.1/deploy-on-alibaba-cloud) 上部署使用。 此外,TiDB 云上部署也已在京东云、UCloud 上线。 diff --git a/releases/release-6.3.0.md b/releases/release-6.3.0.md index 82e079ed5a09..41d96e7a7917 100644 --- a/releases/release-6.3.0.md +++ b/releases/release-6.3.0.md @@ -170,7 +170,7 @@ TiDB 版本:6.3.0-DMR * PITR 支持 [GCS 和 Azure Blob Storage](/br/backup-and-restore-storages.md) 作为备份存储 @[joccau](https://github.com/joccau) - 部署在 GCP 或者 Azure 上的用户,将 TiDB 集群升级至 v6.3.0 就可以使用 PITR 功能。 + 部署在 Google Cloud 或者 Azure 上的用户,将 TiDB 集群升级至 v6.3.0 就可以使用 PITR 功能。 * BR 支持 AWS S3 Object Lock [#13442](https://github.com/tikv/tikv/issues/13442) @[3pointer](https://github.com/3pointer) diff --git a/releases/release-7.0.0.md b/releases/release-7.0.0.md index 06922fcd796c..86c3faa83b1b 100644 --- a/releases/release-7.0.0.md +++ b/releases/release-7.0.0.md @@ -485,7 +485,7 @@ TiDB 版本:7.0.0 + TiDB Data Migration (DM) - - 修复了 DM worker 节点使用 GCP Cloud Storage 时,由于断点续传信息记录过于频繁,达到了 GCP Cloud Storage 的请求频次上限,导致 DM worker 无法把数据写入 GCP Cloud Storage 中,从而导致全量数据加载失败的问题 [#8482](https://github.com/pingcap/tiflow/issues/8482) @[maxshuang](https://github.com/maxshuang) + - 修复了 DM worker 节点使用 Google Cloud Storage 时,由于断点续传信息记录过于频繁,达到了 Google Cloud Storage 的请求频次上限,导致 DM worker 无法把数据写入 Google Cloud Storage 中,从而导致全量数据加载失败的问题 [#8482](https://github.com/pingcap/tiflow/issues/8482) @[maxshuang](https://github.com/maxshuang) - 修复了在多个导入任务同时同步同一个下游的数据,并且都使用了下游元数据表来记录断点续传信息时,所有任务的断点续传信息被写入了同一张元数据表,并且使用了相同的任务 ID 的问题 [#8500](https://github.com/pingcap/tiflow/issues/8500) @[maxshuang](https://github.com/maxshuang) + TiDB Lightning diff --git a/tiflash/tiflash-configuration.md b/tiflash/tiflash-configuration.md index d162ccfa7dd1..09d7edb3d9b7 100644 --- a/tiflash/tiflash-configuration.md +++ b/tiflash/tiflash-configuration.md @@ -95,7 +95,7 @@ delta_index_cache_size = 0 ## I/O 限流功能限制下的读写流量总带宽,单位为 Byte,默认值为 0,即默认关闭 I/O 限流功能。 # max_bytes_per_sec = 0 ## max_read_bytes_per_sec 和 max_write_bytes_per_sec 的含义和 max_bytes_per_sec 类似,分别指 I/O 限流功能限制下的读流量总带宽和写流量总带宽。 - ## 分别用两个配置项控制读写带宽限制,适用于一些读写带宽限制分开计算的云盘,例如 GCP 上的 persistent disk。 + ## 分别用两个配置项控制读写带宽限制,适用于一些读写带宽限制分开计算的云盘,例如 Google Cloud 上的 persistent disk。 ## 当 max_bytes_per_sec 配置不为 0 时,优先使用 max_bytes_per_sec。 # max_read_bytes_per_sec = 0 # max_write_bytes_per_sec = 0 From 1c427a05f7a949ab6e81c5ddc82e5b1a999acbe0 Mon Sep 17 00:00:00 2001 From: tangenta Date: Fri, 26 May 2023 17:01:39 +0800 Subject: [PATCH 137/257] auto-random.md: add description about max allocation times (#14053) --- auto-random.md | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/auto-random.md b/auto-random.md index 299114cd2ab3..f211948f6598 100644 --- a/auto-random.md +++ b/auto-random.md @@ -104,6 +104,24 @@ TiDB 自动分配的 `AUTO_RANDOM(S, R)` 列值共有 64 位: 要查看某张含有 `AUTO_RANDOM` 属性的表的分片位数量,除了 `SHOW CREATE TABLE` 以外,还可以在系统表 `INFORMATION_SCHEMA.TABLES` 中 `TIDB_ROW_ID_SHARDING_INFO` 一列中查到模式为 `PK_AUTO_RANDOM_BITS=x` 的值,其中 `x` 为分片位的数量。 +创建完一张含有 `AUTO_RANDOM` 属性的表后,可以使用 `SHOW WARNINGS` 查看当前表可支持的最大隐式分配的次数: + +```sql +CREATE TABLE t (a BIGINT AUTO_RANDOM, b VARCHAR(255), PRIMARY KEY (a)); +SHOW WARNINGS; +``` + +输出结果如下: + +```sql ++-------+------+---------------------------------------------------------+ +| Level | Code | Message | ++-------+------+---------------------------------------------------------+ +| Note | 1105 | Available implicit allocation times: 288230376151711743 | ++-------+------+---------------------------------------------------------+ +1 row in set (0.00 sec) +``` + ## 使用限制 目前在 TiDB 中使用 `AUTO_RANDOM` 有以下限制: From c955047bb186a6c82c8c6746fa98db18ba7d0d20 Mon Sep 17 00:00:00 2001 From: xzhangxian1008 Date: Fri, 26 May 2023 18:01:41 +0800 Subject: [PATCH 138/257] Fix doc wrong related with `substring` which can be pushed down now (#14054) --- predicate-push-down.md | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/predicate-push-down.md b/predicate-push-down.md index efdf647bc9fd..d822915e07c2 100644 --- a/predicate-push-down.md +++ b/predicate-push-down.md @@ -46,7 +46,7 @@ explain select * from t where a < substring('123', 1, 1); 该查询与示例 1 中的查询生成了完成一样的执行计划,这是因为谓词 `a < substring('123', 1, 1)` 的 `substring` 的入参均为常量,因此可以提前计算,进而简化得到等价的谓词 `a < 1`。进一步的,可以将 `a < 1` 下推至 TiKV 上。 -### 示例 3: 谓词下推到 join 下方 +### 示例 3: 谓词下推到 join 下方 ```sql create table t(id int primary key, a int not null); @@ -73,20 +73,20 @@ explain select * from t join s on t.a = s.a where t.a < 1; ### 示例 4: 存储层不支持的谓词无法下推 ```sql -create table t(id int primary key, a int not null); -desc select * from t where substring('123', a, 1) = '1'; -+-------------------------+---------+-----------+---------------+----------------------------------------+ -| id | estRows | task | access object | operator info | -+-------------------------+---------+-----------+---------------+----------------------------------------+ -| Selection_7 | 2.00 | root | | eq(substring("123", test.t.a, 1), "1") | -| └─TableReader_6 | 2.00 | root | | data:TableFullScan_5 | -| └─TableFullScan_5 | 2.00 | cop[tikv] | table:t | keep order:false, stats:pseudo | -+-------------------------+---------+-----------+---------------+----------------------------------------+ +create table t(id int primary key, a varchar(10) not null); +desc select * from t where truncate(a, " ") = '1'; ++-------------------------+----------+-----------+---------------+---------------------------------------------------+ +| id | estRows | task | access object | operator info | ++-------------------------+----------+-----------+---------------+---------------------------------------------------+ +| Selection_5 | 8000.00 | root | | eq(truncate(cast(test.t.a, double BINARY), 0), 1) | +| └─TableReader_7 | 10000.00 | root | | data:TableFullScan_6 | +| └─TableFullScan_6 | 10000.00 | cop[tikv] | table:t | keep order:false, stats:pseudo | ++-------------------------+----------+-----------+---------------+---------------------------------------------------+ ``` -在该查询中,存在谓词 `substring('123', a, 1) = '1'`。 +在该查询中,存在谓词 `truncate(a, " ") = '1'`。 -从 explain 结果中可以看到,该谓词没有被下推到 TiKV 上进行计算,这是因为 TiKV coprocessor 中没有对 `substring` 内置函数进行支持,因此无法将其下推到 TiKV 上。 +从 explain 结果中可以看到,该谓词没有被下推到 TiKV 上进行计算,这是因为 TiKV coprocessor 中没有对 `truncate` 内置函数进行支持,因此无法将其下推到 TiKV 上。 ### 示例 5: 外连接中内表上的谓词不能下推 From 363ca37ed71571622d7db6e88e04ec32e17f4116 Mon Sep 17 00:00:00 2001 From: Aolin Date: Mon, 29 May 2023 15:00:41 +0800 Subject: [PATCH 139/257] update dispatch.yml for v7.1 (#14067) --- .github/workflows/dispatch.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/dispatch.yml b/.github/workflows/dispatch.yml index fbe9a446d817..8b740a890510 100644 --- a/.github/workflows/dispatch.yml +++ b/.github/workflows/dispatch.yml @@ -6,6 +6,7 @@ on: - ".github/**" branches: - master + - release-7.1 - release-7.0 - release-6.6 - release-6.5 From 6233d15361c7107b761a608b7e3bfb40506fe8ca Mon Sep 17 00:00:00 2001 From: Jay Date: Mon, 29 May 2023 15:24:41 +0800 Subject: [PATCH 140/257] update usage limitation of partitioned-raft-kv (#13688) --- partitioned-raft-kv.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/partitioned-raft-kv.md b/partitioned-raft-kv.md index e53a0c720467..94f596a521f5 100644 --- a/partitioned-raft-kv.md +++ b/partitioned-raft-kv.md @@ -35,7 +35,7 @@ v6.6.0 之前,基于 Raft 的存储引擎,TiKV 使用单个 RocksDB 实例 由于该功能为实验特性,目前有以下限制: -* 暂不支持 TiDB Lightning、TiCDC、BR、Dumping 等数据导入、同步和备份工具。 +* 暂不支持基于 EBS 的快照备份。 +* 暂不支持 Online Unsafe Recovery 和 Titan。 * 暂不支持 tikv-ctl 命令行管理工具。 -* 不支持同时和 TiFlash 使用。 -* 需要在创建集群时启用,不支持在集群创建后开启。 +* 初始化以后不支持开启或者关闭。 From 90013802733c8a569ba90bb2c2038b07e6ca09ef Mon Sep 17 00:00:00 2001 From: Aolin Date: Mon, 29 May 2023 22:02:41 +0800 Subject: [PATCH 141/257] support openEuler 22.03 LTS SP1 x86 (#13967) --- hardware-and-software-requirements.md | 1 + 1 file changed, 1 insertion(+) diff --git a/hardware-and-software-requirements.md b/hardware-and-software-requirements.md index 69e724cb1c13..036b85bc59ce 100644 --- a/hardware-and-software-requirements.md +++ b/hardware-and-software-requirements.md @@ -24,6 +24,7 @@ TiDB 作为一款开源一栈式实时 HTAP 数据库,可以很好地部署和 | Amazon Linux 2 |

| | 麒麟欧拉版 V10 SP1/SP2 |
  • x86_64
  • ARM 64
| | UOS V20 |
  • x86_64
  • ARM 64
| +| openEuler 22.03 LTS SP1 | x86_64 | | macOS Catalina 及以上的版本 |
  • x86_64
  • ARM 64
| | Oracle Enterprise Linux 7.3 及以上的 7.x 版本 | x86_64 | | Ubuntu LTS 18.04 及以上的版本 | x86_64 | From 695df08f4d0558afed92084b7afaa26d7619bb2a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dani=C3=ABl=20van=20Eeden?= Date: Tue, 30 May 2023 04:32:41 +0200 Subject: [PATCH 142/257] Fix pages linking to the old MySQL Internals Manual (#14075) --- best-practices/java-app-best-practices.md | 2 +- develop/dev-guide-connect-to-tidb.md | 2 +- dm/dm-glossary.md | 4 ++-- tidb-configuration-file.md | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/best-practices/java-app-best-practices.md b/best-practices/java-app-best-practices.md index 7c109ba3c7b3..49e4d2bf24d1 100644 --- a/best-practices/java-app-best-practices.md +++ b/best-practices/java-app-best-practices.md @@ -11,7 +11,7 @@ aliases: ['/docs-cn/dev/best-practices/java-app-best-practices/','/docs-cn/dev/r 通常 Java 应用中和数据库相关的常用组件有: -- 网络协议:客户端通过标准 [MySQL 协议](https://dev.mysql.com/doc/internals/en/client-server-protocol.html)和 TiDB 进行网络交互。 +- 网络协议:客户端通过标准 [MySQL 协议](https://dev.mysql.com/doc/dev/mysql-server/latest/PAGE_PROTOCOL.html)和 TiDB 进行网络交互。 - JDBC API 及实现:Java 应用通常使用 [JDBC (Java Database Connectivity)](https://docs.oracle.com/javase/8/docs/technotes/guides/jdbc/) 来访问数据库。JDBC 定义了访问数据库 API,而 JDBC 实现完成标准 API 到 MySQL 协议的转换,常见的 JDBC 实现是 [MySQL Connector/J](https://github.com/mysql/mysql-connector-j),此外有些用户可能使用 [MariaDB Connector/J](https://mariadb.com/kb/en/library/about-mariadb-connector-j/#about-mariadb-connectorj)。 - 数据库连接池:为了避免每次创建连接,通常应用会选择使用数据库连接池来复用连接,JDBC [DataSource](https://docs.oracle.com/javase/8/docs/api/javax/sql/DataSource.html) 定义了连接池 API,开发者可根据实际需求选择使用某种开源连接池实现。 - 数据访问框架:应用通常选择通过数据访问框架 ([MyBatis](http://www.mybatis.org/mybatis-3/zh/index.html), [Hibernate](https://hibernate.org/)) 的封装来进一步简化和管理数据库访问操作。 diff --git a/develop/dev-guide-connect-to-tidb.md b/develop/dev-guide-connect-to-tidb.md index fdaa400c3c74..3c43b49abf40 100644 --- a/develop/dev-guide-connect-to-tidb.md +++ b/develop/dev-guide-connect-to-tidb.md @@ -8,7 +8,7 @@ aliases: ['/zh/tidb/dev/connect-to-tidb'] **TiDB** 高度兼容 **MySQL** 协议,全量的客户端连接参数列表,请参阅 [MySQL Client Options](https://dev.mysql.com/doc/refman/5.7/en/mysql-command-options.html)。 -TiDB 支持 [MySQL 客户端/服务器协议](https://dev.mysql.com/doc/internals/en/client-server-protocol.html)。这使得大多数客户端驱动程序和 ORM 框架可以像连接到 MySQL 一样地连接到 TiDB。 +TiDB 支持 [MySQL 客户端/服务器协议](https://dev.mysql.com/doc/dev/mysql-server/latest/PAGE_PROTOCOL.html)。这使得大多数客户端驱动程序和 ORM 框架可以像连接到 MySQL 一样地连接到 TiDB。 ## MySQL diff --git a/dm/dm-glossary.md b/dm/dm-glossary.md index d7591107b900..fc3599b073fc 100644 --- a/dm/dm-glossary.md +++ b/dm/dm-glossary.md @@ -12,11 +12,11 @@ aliases: ['/docs-cn/tidb-data-migration/dev/glossary/'] ### Binlog -在 TiDB DM 中,Binlog 通常指 MySQL/MariaDB 生成的 binary log 文件,具体请参考 [MySQL Binary Log](https://dev.mysql.com/doc/internals/en/binary-log.html) 与 [MariaDB Binary Log](https://mariadb.com/kb/en/library/binary-log/)。 +在 TiDB DM 中,Binlog 通常指 MySQL/MariaDB 生成的 binary log 文件,具体请参考 [MySQL Binary Log](https://dev.mysql.com/doc/dev/mysql-server/latest/page_protocol_replication.html) 与 [MariaDB Binary Log](https://mariadb.com/kb/en/library/binary-log/)。 ### Binlog event -MySQL/MariaDB 生成的 Binlog 文件中的数据变更信息,具体请参考 [MySQL Binlog Event](https://dev.mysql.com/doc/internals/en/binlog-event.html) 与 [MariaDB Binlog Event](https://mariadb.com/kb/en/library/1-binlog-events/)。 +MySQL/MariaDB 生成的 Binlog 文件中的数据变更信息,具体请参考 [MySQL Binlog Event](https://dev.mysql.com/doc/dev/mysql-server/latest/page_protocol_replication_binlog_event.html) 与 [MariaDB Binlog Event](https://mariadb.com/kb/en/library/1-binlog-events/)。 ### Binlog event filter diff --git a/tidb-configuration-file.md b/tidb-configuration-file.md index f7850eea5b11..6259bd362ab7 100644 --- a/tidb-configuration-file.md +++ b/tidb-configuration-file.md @@ -114,7 +114,7 @@ TiDB 配置文件比命令行参数支持更多的选项。你可以在 [config/ + 用来修改 TiDB 在以下情况下返回的版本号: - 当使用内置函数 `VERSION()` 时。 - - 当与客户端初始连接,TiDB 返回带有服务端版本号的初始握手包时。具体可以查看 MySQL 初始握手包的[描述](https://dev.mysql.com/doc/internals/en/connection-phase-packets.html#packet-Protocol::Handshake)。 + - 当与客户端初始连接,TiDB 返回带有服务端版本号的初始握手包时。具体可以查看 MySQL 初始握手包的[描述](https://dev.mysql.com/doc/dev/mysql-server/latest/page_protocol_connection_phase.html#sect_protocol_connection_phase_initial_handshake)。 + 默认值:"" + 默认情况下,TiDB 版本号格式为:`5.7.${mysql_latest_minor_version}-TiDB-${tidb_version}`。 From edefc17f4085a6df3d918e4362d91332129126af Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=BA=8C=E6=89=8B=E6=8E=89=E5=8C=85=E5=B7=A5=E7=A8=8B?= =?UTF-8?q?=E5=B8=88?= Date: Tue, 30 May 2023 13:32:41 +0800 Subject: [PATCH 143/257] ticdc: add docs for insecure-skip-verify (#14073) --- ticdc/ticdc-sink-to-kafka.md | 1 + 1 file changed, 1 insertion(+) diff --git a/ticdc/ticdc-sink-to-kafka.md b/ticdc/ticdc-sink-to-kafka.md index e21151edf005..b636b6d93190 100644 --- a/ticdc/ticdc-sink-to-kafka.md +++ b/ticdc/ticdc-sink-to-kafka.md @@ -67,6 +67,7 @@ URI 中可配置的的参数如下: | `ca` | 连接下游 Kafka 实例所需的 CA 证书文件路径(可选)。 | | `cert` | 连接下游 Kafka 实例所需的证书文件路径(可选)。 | | `key` | 连接下游 Kafka 实例所需的证书密钥文件路径(可选)。 | +| `insecure-skip-verify` | 连接下游 Kafka 实例时是否跳过证书验证(可选,默认值 `false`)。 | | `sasl-user` | 连接下游 Kafka 实例所需的 SASL/PLAIN 或 SASL/SCRAM 认证的用户名(authcid)(可选)。 | | `sasl-password` | 连接下游 Kafka 实例所需的 SASL/PLAIN 或 SASL/SCRAM 认证的密码(可选)。如有特殊字符,需要用 URL encode 转义。 | | `sasl-mechanism` | 连接下游 Kafka 实例所需的 SASL 认证方式的名称,可选值有 `plain`、`scram-sha-256`、`scram-sha-512` 和 `gssapi`。 | From 41f632d86310d11258ce400b44ba3940add6ae64 Mon Sep 17 00:00:00 2001 From: Lynn Date: Tue, 30 May 2023 16:46:42 +0800 Subject: [PATCH 144/257] *: add a limit for smooth upgrade (#14052) --- smooth-upgrade-tidb.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/smooth-upgrade-tidb.md b/smooth-upgrade-tidb.md index d435d56009d9..a756136ff0b3 100644 --- a/smooth-upgrade-tidb.md +++ b/smooth-upgrade-tidb.md @@ -39,6 +39,8 @@ TiDB 引入平滑升级功能前,对于升级过程中的 DDL 操作有如下 * 在升级前,如果集群中存在正在处理的 canceling DDL job,即有正在被处理的 DDL job 被用户取消了,由于处于 canceling 状态的 job 无法被 `pause`,TiDB 会尝试重试。如果重试失败,会报错并退出升级。 +* 在使用 TiUP 进行升级的场景下,由于 TiUP 升级存在超时时间,如果在升级之前集群中有大量 DDL(超过 300 条)正在处理队列中等待执行,则此次升级可能会失败。 + * 在升级过程中,不允许以下操作: * 对系统表(`mysql.*`、`information_schema.*`、`performance_schema.*`、`metrics_schema.*`)进行 DDL 操作。 From 4de2bdd98b5b9cfca58c8f40f23d65de3be5d307 Mon Sep 17 00:00:00 2001 From: Aolin Date: Tue, 30 May 2023 18:08:42 +0800 Subject: [PATCH 145/257] Revert "Add description on `admin pause ddl jobs` and `admin resume ddl jobs`" (#14078) --- basic-features.md | 1 - ddl-introduction.md | 8 -------- releases/release-7.1.0.md | 15 --------------- smooth-upgrade-tidb.md | 2 +- 4 files changed, 1 insertion(+), 25 deletions(-) diff --git a/basic-features.md b/basic-features.md index d51193fa77ce..cf36a5fe0127 100644 --- a/basic-features.md +++ b/basic-features.md @@ -124,7 +124,6 @@ aliases: ['/docs-cn/dev/basic-features/','/docs-cn/dev/experimental-features-4.0 | [添加索引加速](/system-variables.md#tidb_ddl_enable_fast_reorg-从-v630-版本开始引入) | Y | Y | N | N | N | N | N | N | N | | [元数据锁](/metadata-lock.md) | Y | Y | N | N | N | N | N | N | N | | [`FLASHBACK CLUSTER TO TIMESTAMP`](/sql-statements/sql-statement-flashback-to-timestamp.md) | Y | Y | N | N | N | N | N | N | N | -| [暂停/恢复 DDL](/ddl-introduction.md#ddl-相关的命令介绍) | E | N | N | N | N | N | N | N | N | ## 事务 diff --git a/ddl-introduction.md b/ddl-introduction.md index cc9347b6dad6..40926035ba6d 100644 --- a/ddl-introduction.md +++ b/ddl-introduction.md @@ -178,14 +178,6 @@ absent -> delete only -> write only -> write reorg -> public 取消一个已经执行完成的 DDL 任务会在 `RESULT` 列看到 `DDL Job:90 not found` 的错误,表示该任务已从 DDL 等待队列中被移除。 -- `ADMIN PAUSE DDL JOBS job_id [, job_id]`:用于暂停正在执行的 DDL 任务。执行该命令后,执行 DDL 任务的 SQL 语句体现为正在执行,后台任务暂停执行。(实验特性) - - 只有处于执行中或仍在等待中的 DDL 任务可以暂停,否则会在 `RESULT` 列看到 `Job 3 can't be paused now`。 - -- `ADMIN RESUME DDL JOBS job_id [, job_id]`:用于恢复已被暂停的 DDL 任务。执行该命令后,执行 DDL 任务的 SQL 语句体现为正在执行,后台任务正常执行。(实验特性) - - 你只能对暂停状态的 DDL 任务进行恢复操作,否则会在 `RESULT` 列看到 `Job 3 can't be resumed`。 - ## 常见问题 DDL 语句执行相关的常见问题,参考 [SQL FAQ - DDL 执行](/faq/sql-faq.md#ddl-执行)。 diff --git a/releases/release-7.1.0.md b/releases/release-7.1.0.md index fd3f1f0c0765..3ea233be84b3 100644 --- a/releases/release-7.1.0.md +++ b/releases/release-7.1.0.md @@ -154,21 +154,6 @@ TiDB 版本:7.1.0 (upcoming) 更多信息,请参考[用户文档](/generated-columns.md)。 -### 数据库管理 - -* DDL 任务支持暂停和恢复操作(实验特性)[#18015](https://github.com/pingcap/tidb/issues/18015) @[godouxm](https://github.com/godouxm) - - TiDB v7.1.0 之前的版本中,当 DDL 任务执行期间遇到业务高峰时间点时,为了减少对业务的影响,只能手动取消 DDL 任务。TiDB v7.1.0 引入了 DDL 任务的暂停和恢复功能,你可以在高峰时间点暂停 DDL 任务,等到业务高峰时间结束后再恢复 DDL 任务,从而避免了 DDL 操作对业务负载的影响。 - - 例如,可以通过如下 `ADMIN PAUSE DDL JOBS` 或 `ADMIN RESUME DDL JOBS` 语句暂停或者恢复多个 DDL 任务: - - ```sql - ADMIN PAUSE DDL JOBS 1,2; - ADMIN RESUME DDL JOBS 1,2; - ``` - - 更多信息,请参考[用户文档](/ddl-introduction.md#ddl-相关的命令介绍)。 - ### 可观测性 * 增加优化器诊断信息 [#43122](https://github.com/pingcap/tidb/issues/43122) @[time-and-fate](https://github.com/time-and-fate) diff --git a/smooth-upgrade-tidb.md b/smooth-upgrade-tidb.md index a756136ff0b3..98f3cff758b9 100644 --- a/smooth-upgrade-tidb.md +++ b/smooth-upgrade-tidb.md @@ -45,7 +45,7 @@ TiDB 引入平滑升级功能前,对于升级过程中的 DDL 操作有如下 * 对系统表(`mysql.*`、`information_schema.*`、`performance_schema.*`、`metrics_schema.*`)进行 DDL 操作。 - * 执行手动取消、暂停、恢复 DDL job 操作:`ADMIN CANCEL/PAUSE/RESUME DDL JOBS job_id [, job_id] ...;`。 + * 执行手动取消 DDL job 操作:`ADMIN CANCEL DDL JOBS job_id [, job_id] ...;`。 * 导入数据。 From 8c1c2ecc6190f783d43932159b13a4a705f4cb0e Mon Sep 17 00:00:00 2001 From: Aolin Date: Tue, 30 May 2023 18:38:41 +0800 Subject: [PATCH 146/257] Update cdnfresh.txt for v7.1 (#14072) --- resources/cdnfresh.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/resources/cdnfresh.txt b/resources/cdnfresh.txt index 78156cc79f62..ca595ef8a559 100644 --- a/resources/cdnfresh.txt +++ b/resources/cdnfresh.txt @@ -4,6 +4,8 @@ https://download.pingcap.org/tidb-stable-zh-manual.pdf https://download.pingcap.org/tidb-stable-en-manual.pdf https://download.pingcap.org/tidb-v7.0-zh-manual.pdf https://download.pingcap.org/tidb-v7.0-en-manual.pdf +https://download.pingcap.org/tidb-v6.5-zh-manual.pdf +https://download.pingcap.org/tidb-v6.5-en-manual.pdf https://download.pingcap.org/tidb-v6.6-zh-manual.pdf https://download.pingcap.org/tidb-v6.6-en-manual.pdf https://download.pingcap.org/tidb-v6.4-zh-manual.pdf From c264496a6f7320a43162dfa60a84d6d7fc77af28 Mon Sep 17 00:00:00 2001 From: Aolin Date: Wed, 31 May 2023 00:42:41 +0800 Subject: [PATCH 147/257] update README for v7.1 (#14071) --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index d5e1b71d434c..88b383cb9bd9 100644 --- a/README.md +++ b/README.md @@ -13,6 +13,7 @@ | 文档仓库 branch | 对应 TiDB 文档版本 | |:---------|:----------| | [`master`](https://github.com/pingcap/docs-cn/tree/master) | dev 最新开发版 | +| [`release-7.1`](https://github.com/pingcap/docs-cn/tree/release-7.1) | 7.1 长期支持版 (LTS) | | [`release-7.0`](https://github.com/pingcap/docs-cn/tree/release-7.0) | 7.0 开发里程碑版 (DMR) | | [`release-6.6`](https://github.com/pingcap/docs-cn/tree/release-6.6) | 6.6 开发里程碑版 (DMR) | | [`release-6.5`](https://github.com/pingcap/docs-cn/tree/release-6.5) | 6.5 长期支持版 (LTS) | From 4b0665bd0324668bfdeff9ff0a7d7bd80535d4dc Mon Sep 17 00:00:00 2001 From: xufei Date: Wed, 31 May 2023 15:18:41 +0800 Subject: [PATCH 148/257] Update release notes for release-6.6.0 (#14087) --- releases/release-6.6.0.md | 1 + 1 file changed, 1 insertion(+) diff --git a/releases/release-6.6.0.md b/releases/release-6.6.0.md index 17e5f450e814..00ae3df2143d 100644 --- a/releases/release-6.6.0.md +++ b/releases/release-6.6.0.md @@ -555,6 +555,7 @@ TiDB 版本:6.6.0-[DMR](/releases/versioning.md#开发里程碑版本) - 修复查询 TiFlash 相关的系统表可能会卡住的问题 [#6745](https://github.com/pingcap/tiflash/pull/6745) @[lidezhu](https://github.com/lidezhu) - 修复半连接在计算笛卡尔积时,使用内存过量的问题 [#6730](https://github.com/pingcap/tiflash/issues/6730) @[gengliqi](https://github.com/gengliqi) - 修复对 DECIMAL 数据类型进行除法运算时结果不舍入的问题 [#6393](https://github.com/pingcap/tiflash/issues/6393) @[LittleFall](https://github.com/LittleFall) + - 修复了 TiFlash 查询中由于 `start_ts` 无法唯一标识一个 MPP query 导致 MPP query 可能会被误取消的问题 [#43426](https://github.com/pingcap/tidb/issues/43426) @[hehechen](https://github.com/hehechen) + Tools From f7deadd2066d37971d2631430e51764bb221ae08 Mon Sep 17 00:00:00 2001 From: Ti Chi Robot Date: Wed, 31 May 2023 15:40:41 +0800 Subject: [PATCH 149/257] flashback: add alert msg in flashback statement (#14088) (#14090) --- sql-statements/sql-statement-flashback-to-timestamp.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/sql-statements/sql-statement-flashback-to-timestamp.md b/sql-statements/sql-statement-flashback-to-timestamp.md index 5c36f84388e3..ee2850e617b6 100644 --- a/sql-statements/sql-statement-flashback-to-timestamp.md +++ b/sql-statements/sql-statement-flashback-to-timestamp.md @@ -7,6 +7,12 @@ summary: TiDB 数据库中 FLASHBACK CLUSTER TO TIMESTAMP 的使用概况。 TiDB v6.4.0 引入了 `FLASHBACK CLUSTER TO TIMESTAMP` 语法,其功能是将集群的数据恢复到特定的时间点。 +> **警告:** +> +> 在 TiDB v7.1.0 中使用该功能可能会出现 FLASHBACK 完成后部分 Region 仍处于 FLASHBACK 过程中的问题。请尽量避免在 v7.1.0 中使用该功能。详情可见 [#44292](https://github.com/pingcap/tidb/issues/44292)。 +> +> 如果已经出现该问题,可以使用 [TiDB 快照备份与恢复](/br/br-snapshot-guide.md)功能进行数据恢复。 + > **注意:** > > `FLASHBACK CLUSTER TO TIMESTAMP` 是用最新的时间戳写入特定时间点的旧数据,但不会删除当前数据,所以在使用前请确保集群有足够的存储空间来同时容纳旧数据和当前数据。 From 57f1adad78c40b1f822aded1206a8f43520dcfec Mon Sep 17 00:00:00 2001 From: Aolin Date: Wed, 31 May 2023 16:08:42 +0800 Subject: [PATCH 150/257] releases: add TiDB 7.1.0 release notes (stable version) (#13896) --- TOC.md | 4 +- releases/release-7.1.0.md | 355 ++++++++++++++++++++++++++++++++--- releases/release-notes.md | 4 + releases/release-timeline.md | 1 + 4 files changed, 337 insertions(+), 27 deletions(-) diff --git a/TOC.md b/TOC.md index a677f04f035f..64d7a8c78b90 100644 --- a/TOC.md +++ b/TOC.md @@ -4,7 +4,7 @@ - [文档中心](https://docs.pingcap.com/zh) - 关于 TiDB - [TiDB 简介](/overview.md) - - [TiDB 7.1 (upcoming) Release Notes](/releases/release-7.1.0.md) + - [TiDB 7.1 Release Notes](/releases/release-7.1.0.md) - [功能概览](/basic-features.md) - [与 MySQL 的兼容性](/mysql-compatibility.md) - [使用限制](/tidb-limitations.md) @@ -989,7 +989,7 @@ - [版本发布时间线](/releases/release-timeline.md) - [TiDB 版本规则](/releases/versioning.md) - [TiDB 离线包](/binary-package.md) - - v7.1 (upcoming) + - v7.1 - [7.1.0](/releases/release-7.1.0.md) - v7.0 - [7.0.0-DMR](/releases/release-7.0.0.md) diff --git a/releases/release-7.1.0.md b/releases/release-7.1.0.md index 3ea233be84b3..29f31fe8b13f 100644 --- a/releases/release-7.1.0.md +++ b/releases/release-7.1.0.md @@ -5,13 +5,15 @@ summary: 了解 TiDB 7.1.0 版本的新功能、兼容性变更、改进提升 # TiDB 7.1.0 Release Notes -TiDB 版本:7.1.0 (upcoming) +发版日期:2023 年 5 月 31 日 -> **注意:** -> -> TiDB v7.1.0 尚未正式发布。此 Release Notes 旨在帮助你提前了解即将发布的版本,但其中内容可能会有所调整。本文列出的功能并不保证会包含在最终发布的版本中。 +TiDB 版本:7.1.0 + +试用链接:[快速体验](https://docs.pingcap.com/zh/tidb/v7.1/quick-start-with-tidb) | [生产部署](https://docs.pingcap.com/zh/tidb/v7.1/production-deployment-using-tiup) | [下载离线包](https://cn.pingcap.com/product-community) -在 7.1.0 版本中,你可以获得以下关键特性: +TiDB 7.1.0 为长期支持版本 (Long-Term Support Release, LTS)。 + +相比于前一个 LTS(即 6.5.0 版本),7.1.0 版本包含 [6.6.0-DMR](/releases/release-6.6.0.md) 和 [7.0.0-DMR](/releases/release-7.0.0.md) 中已发布的新功能、提升改进和错误修复,并引入了以下关键特性: @@ -23,28 +25,58 @@ TiDB 版本:7.1.0 (upcoming) - - - + + + + + + + + + + + + + + + - - + + + - - - - + + + - - + + - + + + + + + + + + + + + + +
可扩展性与性能会话级别非 Prepare 语句执行计划缓存 (GA)支持在会话级别自动重用执行计划缓存,减少查询计划时间,缩短相同 SQL 查询的时间,而无需事先手动准备 Prepare Statement 语句。可扩展性与性能TiFlash 支持存储计算分离和 S3 共享存储(实验特性,从 v7.0.0 开始引入)TiFlash 增加云原生架构的支持作为可选项: +
    +
  • 支持存算分离架构,提升 HTAP 资源的弹性能力。
  • +
  • 支持基于 S3 的存储引擎,以更低的成本提供共享存储。
  • +
+
TiKV 支持批量聚合数据请求(从 v6.6.0 开始引入)TiDB 支持将发送到相同 TiKV 实例的数据请求部分合并,减少子任务的数量和 RPC 请求的开销。在数据离散分布且 gRPC 线程池资源紧张的情况下,批量化请求能够提升性能超 50%。
基于负载的副本读取在读热点场景中,TiDB 可以将热点 TiKV 节点的读请求转发到副本。该功能有效地打散了读热点并优化了集群资源的利用。你可以通过调整系统变量 tidb_load_based_replica_read_threshold 控制基于负载的副本读取的触发阈值。
TiKV 支持分区 Raft KV 存储引擎 (实验特性)TiKV 引入新一代存储引擎分区 Raft KV,通过每个数据 Region 独享 RocksDB 实例,可将集群的存储能力从 TB 级扩展到 PB 级,并提供更稳定的写入延迟和更强大的扩容能力。
基于负载的副本读取在读热点场景中,TiDB 可以将热点 TiKV 节点的读请求转发到副本。该功能有效地打散了读热点并优化了集群资源的利用。你可以通过调整系统变量 tidb_load_based_replica_read_threshold 控制基于负载的副本读取的触发阈值。稳定性与高可用资源管控 (GA)支持基于资源组的资源管控,为同一集群中的不同工作负载分配并隔离资源。该功能显著提升了多应用集群的稳定性,并为多租户奠定了基础。在 v7.1.0 中,资源管控引入了根据实际负载或硬件部署估算集群容量的能力。
稳定性与高可用资源管控 (GA)支持基于资源组的资源管控,将数据库用户映射到对应的资源组中,并根据实际需求设置每个资源组的配额。
TiFlash 支持数据落盘(从 v7.0.0 开始引入)TiFlash 支持将中间结果落盘,以缓解数据密集型操作(如聚合、排序和 Hash Join)中的 OOM 问题。
SQL多值索引 (GA)SQL多值索引 (GA) 引入 MySQL 兼容的多值索引,增强 JSON 类型,提升 TiDB 对 MySQL 8.0 的兼容性。该功能提升了对多值列进行成员检查的效率。
生成列 (GA)行级 TTL(从 v7.0.0 开始 GA)支持通过后台任务自动删除超过生命周期 (Time to live) 的数据,并以此来自动管理数据规模并提高性能。
生成列 (GA) 生成列 (Generated Columns) 的值是通过实时计算列定义中的 SQL 表达式得到的。该功能将一些应用逻辑推向数据库层,从而提升查询效率。
安全LDAP 身份认证TiDB 支持与 MySQL 8.0 兼容的 LDAP 身份认证。
增强数据库审计功能(企业版TiDB 企业版增强了数据库审计功能,通过更细粒度的事件过滤控制、更友好的过滤条件设置方式、新增的 JSON 文件输出格式、审计日志的生命周期管理,大幅提升了系统的审计能力。
@@ -52,6 +84,16 @@ TiDB 版本:7.1.0 (upcoming) ### 性能 +* 增强分区 Raft KV 存储引擎(实验特性)[#11515](https://github.com/tikv/tikv/issues/11515) [#12842](https://github.com/tikv/tikv/issues/12842) @[busyjay](https://github.com/busyjay) @[tonyxuqqi](https://github.com/tonyxuqqi) @[tabokie](https://github.com/tabokie) @[bufferflies](https://github.com/bufferflies) @[5kbpers](https://github.com/5kbpers) @[SpadeA-Tang](https://github.com/SpadeA-Tang) @[nolouch](https://github.com/nolouch) + + TiDB v6.6.0 引入了分区 Raft KV 存储引擎作为实验特性,该引擎使用多个 RocksDB 实例存储 TiKV 的 Region 数据,每个 Region 的数据都独立存储在单独的 RocksDB 实例中。分区 Raft KV 能够更好地控制 RocksDB 实例的文件数和层级,实现 Region 间数据操作的物理隔离,并支持平稳管理更多的数据。与原 TiKV 存储引擎相比,使用分区 Raft KV 引擎在相同硬件条件和读写混合场景下,可以实现大约两倍的写入吞吐并缩短大约 4/5 的弹性扩展时间。 + + 在 TiDB v7.1.0 中,分区 Raft KV 引擎与 TiFlash 兼容,并支持 TiDB Lightning、BR 和 TiCDC 等工具。 + + 该功能目前是实验特性,不推荐在生产环境中使用。目前仅支持在新集群中使用新引擎,暂不支持从原 TiKV 存储引擎直接升级到该引擎。 + + 更多信息,请参考[用户文档](/partitioned-raft-kv.md)。 + * TiFlash 查询支持延迟物化功能 (GA) [#5829](https://github.com/pingcap/tiflash/issues/5829) @[Lloyd-Pottiger](https://github.com/Lloyd-Pottiger) 在 v7.0.0 中,TiFlash 引入了延迟物化实验特性,用于优化查询性能。该特性默认关闭(系统变量 [`tidb_opt_enable_late_materialization`](/system-variables.md#tidb_opt_enable_late_materialization-从-v700-版本开始引入) 默认为 `OFF`)。当 `SELECT` 语句中包含过滤条件(`WHERE` 子句)时,TiFlash 默认会先读取该查询所需列的全部数据,然后再根据查询条件对数据进行过滤、聚合等计算任务。开启该特性后,TiFlash 支持下推部分过滤条件到 TableScan 算子,即先扫描过滤条件相关的列数据,过滤得到符合条件的行后,再扫描这些行的其他列数据,继续后续计算,从而减少 IO 扫描和数据处理的计算量。 @@ -74,16 +116,30 @@ TiDB 版本:7.1.0 (upcoming) 更多信息,请参考[用户文档](/troubleshoot-hot-spot-issues.md#打散读热点)。 -* 支持缓存非 Prepare 语句的执行计划 (GA) [#36598](https://github.com/pingcap/tidb/issues/36598) @[qw4990](https://github.com/qw4990) +* 增强缓存非 Prepare 语句执行计划的能力(实验特性)[#36598](https://github.com/pingcap/tidb/issues/36598) @[qw4990](https://github.com/qw4990) - TiDB v7.0.0 引入了非 Prepare 语句的执行计划缓存作为实验特性,以提升在线交易场景的并发处理能力。该功能在 v7.1.0 正式 GA 并默认打开,支持缓存更多模式的 SQL。 + TiDB v7.0.0 引入了非 Prepare 语句的执行计划缓存作为实验特性,以提升在线交易场景的并发处理能力。在 v7.1.0 中,TiDB 继续增强非 Prepare 语句执行计划,支持缓存更多模式的 SQL。 为了提升内存利用率,TiDB v7.1.0 将非 Prepare 与 Prepare 语句的缓存池合并。你可以通过系统变量 [`tidb_session_plan_cache_size`](/system-variables.md#tidb_session_plan_cache_size-从-v710-版本开始引入) 设置缓存大小。原有的系统变量 [`tidb_prepared_plan_cache_size`](/system-variables.md#tidb_prepared_plan_cache_size-从-v610-版本开始引入) 和 [`tidb_non_prepared_plan_cache_size`](/system-variables.md#tidb_non_prepared_plan_cache_size) 被废弃。 - 为保持向前兼容,从旧版本升级到 v7.1.0 时,缓存池大小 `tidb_session_plan_cache_size` 的值与 `tidb_prepared_plan_cache_size` 保持一致,[`tidb_enable_non_prepared_plan_cache`](/system-variables.md#tidb_enable_non_prepared_plan_cache) 保持升级前的设置。经过性能测试后,你可通过 `tidb_enable_non_prepared_plan_cache` 开启非 Parepare 语句的执行计划缓存功能。对于新创建的 v7.1.0 集群,非 Parepare 语句的缓存功能默认打开。 + 为了保持向前兼容,从旧版本升级到 v7.1.0 时,缓存池大小 `tidb_session_plan_cache_size` 的值与 `tidb_prepared_plan_cache_size` 保持一致,[`tidb_enable_non_prepared_plan_cache`](/system-variables.md#tidb_enable_non_prepared_plan_cache) 保持升级前的设置。经过性能测试后,你可通过 `tidb_enable_non_prepared_plan_cache` 开启非 Parepare 语句的执行计划缓存功能。 + + 非 Prepare 语句执行计划缓存默认不支持 DML 语句,若要启用支持,你可以将 [`tidb_enable_non_prepared_plan_cache_for_dml`](/system-variables.md#tidb_enable_non_prepared_plan_cache_for_dml-从-v710-版本开始引入) 系统变量设置为 `ON`。 更多信息,请参考[用户文档](/sql-non-prepared-plan-cache.md)。 +* DDL 支持分布式并行执行框架(实验特性)[#41495](https://github.com/pingcap/tidb/issues/41495) @[benjamin2037](https://github.com/benjamin2037) + + TiDB v7.1.0 之前的版本中,在同一时间只有一个 TiDB 节点能够担任 DDL Owner 并执行 DDL 任务。从 TiDB v7.1.0 开始,在新的分布式并行执行框架下,多个 TiDB 节点可以并行执行同一项 DDL 任务,从而更好地利用 TiDB 集群的资源,大幅提升 DDL 的性能。此外,你还可以通过增加 TiDB 节点来线性提升 DDL 的性能。需要注意的是,该特性是实验性特性,目前仅支持 `ADD INDEX` 操作。 + + 如果要使用分布式并行执行框架,只需将 [`tidb_enable_dist_task`](/system-variables.md#tidb_enable_dist_task-从-v710-版本开始引入) 的值设置为 `ON`: + + ```sql + SET GLOBAL tidb_enable_dist_task = ON; + ``` + + 更多信息,请参考[用户文档](/tidb-distributed-execution-framework.md)。 + ### 稳定性 * 资源管控成为正式功能 (GA) [#38825](https://github.com/pingcap/tidb/issues/38825) @[nolouch](https://github.com/nolouch) @[BornChanger](https://github.com/BornChanger) @[glorv](https://github.com/glorv) @[tiancaiamao](https://github.com/tiancaiamao) @[Connor1996](https://github.com/Connor1996) @[JmPotato](https://github.com/JmPotato) @[hnes](https://github.com/hnes) @[CabinfeverB](https://github.com/CabinfeverB) @[HuSharp](https://github.com/HuSharp) @@ -94,6 +150,8 @@ TiDB 版本:7.1.0 (upcoming) 在 TiDB v7.1.0 中,该特性增加了基于实际负载和硬件部署来估算系统容量上限的能力,为你进行容量规划提供更准确的参考。这有助于你更好地管理 TiDB 的资源分配,从而满足企业级场景的稳定性需求。 + 为了更好的用户体验,TiDB Dashboard 增加了[资源管控的管理页面](/dashboard/dashboard-resource-manager.md)。你可以在该页面查看资源组配置,并通过可视化的方式进行容量预估,便于合理配置资源。 + 更多信息,请参考[用户文档](/tidb-resource-control.md)。 * 支持 Fast Online DDL 的检查点机制,提升容错性和自动恢复能力 [#42164](https://github.com/pingcap/tidb/issues/42164) @[tangenta](https://github.com/tangenta) @@ -112,10 +170,35 @@ TiDB 版本:7.1.0 (upcoming) * 优化统计信息缓存加载策略 [#42160](https://github.com/pingcap/tidb/issues/42160) @[xuyifangreeneyes](https://github.com/xuyifangreeneyes) - 开启统计信息同步加载后,TiDB 可以大幅减少启动时必须载入的统计信息的数量,从而提升启动过程中统计信息的加载速度。该特性提升了 TiDB 在复杂运行环境下的稳定性,并降低了部分 TiDB 节点重启对整体服务的影响。 + TiDB v7.1.0 引入了轻量级的统计信息初始化功能作为实验特性。轻量级的统计信息初始化可以大幅减少启动时必须加载的统计信息的数量,从而提升启动过程中统计信息的加载速度。该功能提升了 TiDB 在复杂运行环境下的稳定性,并降低了部分 TiDB 节点重启对整体服务的影响。你可以通过修改 TiDB 配置参数 [`lite-init-stats`](/tidb-configuration-file.md#lite-init-stats-从-v710-版本开始引入) 为 `true` 来开启该特性。 + + 在 TiDB 启动阶段,如果在初始统计信息加载完成之前执行 SQL,可能会产生不合理的执行计划,进而造成性能问题。为了避免这种情况,TiDB v7.1.0 引入了配置项 [`force-init-stats`](/tidb-configuration-file.md#force-init-stats-从-v710-版本开始引入)。你可以控制 TiDB 是否在统计信息初始化完成后再对外提供服务。该配置项默认关闭。 更多信息,请参考[用户文档](/statistics.md#统计信息的加载)。 +* TiCDC 支持单行数据正确性校验功能 [#8718](https://github.com/pingcap/tiflow/issues/8718) [#42747](https://github.com/pingcap/tidb/issues/42747) @[3AceShowHand](https://github.com/3AceShowHand) @[zyguan](https://github.com/zyguan) + + 从 v7.1.0 开始,TiCDC 引入了单行数据正确性校验功能。该功能基于 Checksum 算法对单行数据的正确性进行校验,可以校验一行数据从 TiDB 写入、通过 TiCDC 同步,到写入 Kafka 集群的过程中是否出现错误。TiCDC 数据正确性校验功能仅支持下游是 Kafka 的 Changefeed,目前支持 Avro 协议。 + + 更多信息,请参考[用户文档](/ticdc/ticdc-integrity-check.md)。 + +* TiCDC 优化 DDL 同步操作 [#8686](https://github.com/pingcap/tiflow/issues/8686) @[hi-rustin](https://github.com/hi-rustin) + + 在 v7.1.0 之前,当用户在一个大表上进行 DDL 操作时,如果 DDL 操作影响该表中的所有行(例如添加或删除列),TiCDC 的同步延迟会显著增加。从 v7.1.0 开始,TiCDC 对此进行了优化,减轻 DDL 操作对下游延迟的影响。 + + 更多信息,请参考[用户文档](/ticdc/ticdc-faq.md#ticdc-是否会将有损-ddl-产生的数据变更同步到下游)。 + +* 提升 TiDB Lightning 导入 TiB 级别数据时的稳定性 [#43510](https://github.com/pingcap/tidb/issues/43510) [#43657](https://github.com/pingcap/tidb/issues/43657) @[D3Hunter](https://github.com/D3Hunter) @[lance6716](https://github.com/lance6716) + + 从 v7.1.0 开始,TiDB Lightning 增加了四个配置项,可以提升在导入 TiB 级数据时的稳定性。 + + - `tikv-importer.region-split-batch-size` 用于控制批量 split Region 时的 Region 个数,默认值为 `4096`。 + - `tikv-importer.region-split-concurrency` 用于控制 Split Region 时的并发度,默认值为 CPU 核心数。 + - `tikv-importer.region-check-backoff-limit` 用于控制 split 和 scatter 操作后等待 Region 上线的重试次数,默认值为 `1800`。重试符合指数回退策略,最大重试间隔为 2 秒。若两次重试之间有任何 Region 上线,该次操作不会被计为重试次数。 + - `tikv-importer.pause-pd-scheduler-scope` 控制 TiDB Lightning 暂停 PD 调度的范围。默认值为 `"table"`,可选值为 `"table"` 和 `"global"`。对于 TiDB v6.1.0 之前的版本,只能配置 `"global"` 选项,即导入数据过程中暂停全局调度。从 v6.1.0 开始,支持 `"table"` 选项,表示仅暂停目标表数据范围所在 Region 的调度。建议在数据量较大的场景将该配置项设置为 `"global"`,以提升稳定性。 + + 更多信息,请参考[用户文档](/tidb-lightning/tidb-lightning-configuration.md)。 + ### SQL 功能 * 支持通过 `INSERT INTO SELECT` 语句保存 TiFlash 查询结果 (GA) [#37515](https://github.com/pingcap/tidb/issues/37515) @[gengliqi](https://github.com/gengliqi) @@ -154,6 +237,16 @@ TiDB 版本:7.1.0 (upcoming) 更多信息,请参考[用户文档](/generated-columns.md)。 +### 数据库管理 + +* 支持无需手动取消 DDL 的平滑升级集群功能 [#39751](https://github.com/pingcap/tidb/issues/39751) @[zimulala](https://github.com/zimulala) + + 在 TiDB v7.1.0 之前的版本中,升级集群时需要先手动取消正在运行或排队的 DDL 任务,并在升级完成后再手动添加这些任务。 + + 为了提供更平滑的升级体验,TiDB v7.1.0 引入了自动暂停和恢复 DDL 任务的功能。从 v7.1.0 开始,你在升级集群前无需手动取消 DDL 任务。系统会自动暂停正在执行或排队的用户 DDL 任务,等待整个集群完成滚动升级后再自动恢复这些任务,让你可以更加轻松地升级 TiDB 集群。 + + 更多信息,请参考[用户文档](/smooth-upgrade-tidb.md)。 + ### 可观测性 * 增加优化器诊断信息 [#43122](https://github.com/pingcap/tidb/issues/43122) @[time-and-fate](https://github.com/time-and-fate) @@ -172,6 +265,26 @@ TiDB 版本:7.1.0 (upcoming) 从 v7.1.0 起,TiFlash 在向 TiDB 提供 [`INFORMATION_SCHEMA.TIFLASH_TABLES`](/information-schema/information-schema-tiflash-tables.md) 和 [`INFORMATION_SCHEMA.TIFLASH_SEGMENTS`](/information-schema/information-schema-tiflash-segments.md) 系统表的查询服务时,不再使用 HTTP 端口,而是使用 gRPC 端口,从而避免 HTTP 服务的安全风险。 +* 支持 LDAP 身份认证 [#43580](https://github.com/pingcap/tidb/issues/43580) @[YangKeao](https://github.com/YangKeao) + + 从 v7.1.0 起,TiDB 支持 LDAP 身份认证,并提供了两种认证插件:`authentication_ldap_sasl` 和 `authentication_ldap_simple`。 + + 更多信息,请参考[用户文档](/security-compatibility-with-mysql.md)。 + +* 增强数据库审计功能(企业版) + + 在 v7.1.0 中,TiDB 企业版增强了数据库审计功能,大幅提升了能力范围,改善了使用体验,以满足企业对数据库安全合规的需要: + + - 引入“过滤器” (Filter) 与“规则” (Rule) 的概念,提供了更细分的审计事件定义,并支持更细粒度的审计设置。 + - 支持 JSON 格式的规则定义,提供了更加友好的设置方式。 + - 新增自动日志轮替 (Log Rotation) 和空间管理功能,支持保存时间和日志大小两个维度的设置。 + - 支持输出 TEXT 和 JSON 两种格式的审计日志,便于集成第三方工具。 + - 支持日志内容脱敏,可以替换所有字面值以增强安全性。 + + 数据库审计是 TiDB 企业版的重要功能之一,为企业提供了强大的监管和审计工具,以保证数据安全和合规性。TiDB 企业版的数据库审计功能可以帮助企业管理人员追踪数据库操作的来源和影响,确保数据不被非法窃取或篡改。同时,数据库审计还可以帮助企业遵守各种法规和合规要求,确保企业在法律和道德方面的合规性。该功能对企业信息安全具有非常重要的应用价值。 + + 该功能为企业版特性,要获取数据库审计功能及其文档,请在 [TiDB 产品页面](https://pingcap.com/zh/product/#SelectProduct)**企业版**区域点击**立即咨询**联系 PingCAP。 + ## 兼容性变更 > **注意:** @@ -184,6 +297,10 @@ TiDB 版本:7.1.0 (upcoming) 如果你已经将 TiFlash 升级到 v7.1.0,那么在升级 TiDB 到 v7.1.0 的过程中,TiDB 无法读取 TiFlash 系统表([`INFORMATION_SCHEMA.TIFLASH_TABLES`](/information-schema/information-schema-tiflash-tables.md) 和 [`INFORMATION_SCHEMA.TIFLASH_SEGMENTS`](/information-schema/information-schema-tiflash-segments.md))。 +* TiDB v6.2.0 ~ v7.0.0 版本的 TiDB Lightning 会根据 TiDB 集群的版本决定是否暂停全局调度。当 TiDB 集群版本 >= v6.1.0 时,TiDB Lightning 只会暂停目标表数据范围所在 Region 的调度,并在目标表导入完成后恢复调度。其他版本的 TiDB Lightning 则会暂停全局调度。自 TiDB v7.1.0 开始,你可以通过 [`pause-pd-scheduler-scope`](/tidb-lightning/tidb-lightning-configuration.md) 来控制是否暂停全局调度,默认暂停目标表数据范围所在 Region 的调度。如果目标集群版本低于 v6.1.0 则报错,此时将参数取值改为 `"global"` 后重试即可。 + +* 在 TiDB v7.1.0 中使用 [`FLASHBACK CLUSTER TO TIMESTAMP`](/sql-statements/sql-statement-flashback-to-timestamp.md) 功能可能会出现 FLASHBACK 完成后部分 Region 仍处于 FLASHBACK 过程中的问题。请尽量避免在 v7.1.0 中使用该功能。详情可见 [#44292](https://github.com/pingcap/tidb/issues/44292)。如果已经出现该问题,可以使用 [TiDB 快照备份与恢复](/br/br-snapshot-guide.md)功能进行数据恢复。 + ### 系统变量 | 变量名 | 修改类型 | 描述 | @@ -192,11 +309,32 @@ TiDB 版本:7.1.0 (upcoming) | [`tidb_non_prepared_plan_cache_size`](/system-variables.md#tidb_non_prepared_plan_cache_size) | 废弃 | 从 v7.1.0 起,该变量被废弃,你可以使用 [`tidb_session_plan_cache_size`](/system-variables.md#tidb_session_plan_cache_size-从-v710-版本开始引入) 控制 Plan Cache 最多能够缓存的计划数量。 | | [`tidb_prepared_plan_cache_size`](/system-variables.md#tidb_prepared_plan_cache_size-从-v610-版本开始引入) | 废弃 | 从 v7.1.0 起,该变量被废弃,你可以使用 [`tidb_session_plan_cache_size`](/system-variables.md#tidb_session_plan_cache_size-从-v710-版本开始引入) 控制 Plan Cache 最多能够缓存的计划数量。 | | `tidb_ddl_distribute_reorg` | 删除 | 重命名为 [`tidb_enable_dist_task`](/system-variables.md#tidb_enable_dist_task-从-v710-版本开始引入)。 | -| [`tidb_enable_non_prepared_plan_cache`](/system-variables.md#tidb_enable_non_prepared_plan_cache) | 修改 | 经进一步的测试后,该变量默认值从 `OFF` 修改为 `ON`,表示默认开启非 Prepare 语句执行计划缓存。 | +| [`default_authentication_plugin`](/system-variables.md#default_authentication_plugin) | 修改 | 扩展可选值范围:增加 `authentication_ldap_sasl` 和 `authentication_ldap_simple`。 | | [`tidb_load_based_replica_read_threshold`](/system-variables.md#tidb_load_based_replica_read_threshold-从-v700-版本开始引入) | 修改 | 该变量从 v7.1.0 开始生效,用于设置基于负载的 replica read 的触发阈值。经进一步的测试后,该变量默认值从 `"0s"` 修改为 `"1s"`。 | | [`tidb_opt_enable_late_materialization`](/system-variables.md#tidb_opt_enable_late_materialization-从-v700-版本开始引入) | 修改 | 默认值从 `OFF` 修改为 `ON`,代表 [TiFlash 延迟物化](/tiflash/tiflash-late-materialization.md)功能默认开启。 | +| [`authentication_ldap_sasl_auth_method_name`](/system-variables.md#authentication_ldap_sasl_auth_method_name-从-v710-版本开始引入) | 新增 | 在 LDAP SASL 身份验证中,验证方法的名称。 | +| [`authentication_ldap_sasl_bind_base_dn`](/system-variables.md#authentication_ldap_sasl_bind_base_dn-从-v710-版本开始引入) | 新增 | 在 LDAP SASL 身份验证中,搜索用户的范围。如果创建用户时没有通过 `AS ...` 指定 `dn`,TiDB 会自动在 LDAP Server 的该范围中根据用户名搜索用户 `dn`。 | +| [`authentication_ldap_sasl_bind_root_dn`](/system-variables.md#authentication_ldap_sasl_bind_root_dn-从-v710-版本开始引入) | 新增 | 在 LDAP SASL 身份验证中,TiDB 登录 LDAP Server 搜索用户时使用的 `dn`。 | +| [`authentication_ldap_sasl_bind_root_pwd`](/system-variables.md#authentication_ldap_sasl_bind_root_pwd-从-v710-版本开始引入) | 新增 | 在 LDAP SASL 身份验证中,TiDB 登录 LDAP Server 搜索用户时使用的密码。 | +| [`authentication_ldap_sasl_ca_path`](/system-variables.md#authentication_ldap_sasl_ca_path-从-v710-版本开始引入) | 新增 | 在 LDAP SASL 身份验证中,TiDB 对 StartTLS 连接使用的 CA 证书的路径。 | +| [`authentication_ldap_sasl_init_pool_size`](/system-variables.md#authentication_ldap_sasl_init_pool_size-从-v710-版本开始引入) | 新增 | 在 LDAP SASL 身份验证中,TiDB 与 LDAP Server 间连接池的初始连接数。 | +| [`authentication_ldap_sasl_max_pool_size`](/system-variables.md#authentication_ldap_sasl_max_pool_size-从-v710-版本开始引入) | 新增 | 在 LDAP SASL 身份验证中,TiDB 与 LDAP Server 间连接池的最大连接数。 | +| [`authentication_ldap_sasl_server_host`](/system-variables.md#authentication_ldap_sasl_server_host-从-v710-版本开始引入) | 新增 | 在 LDAP SASL 身份验证中,LDAP Server 的主机名或地址。 | +| [`authentication_ldap_sasl_server_port`](/system-variables.md#authentication_ldap_sasl_server_port-从-v710-版本开始引入) | 新增 | 在 LDAP SASL 身份验证中,LDAP Server 的 TCP/IP 端口号。 | +| [`authentication_ldap_sasl_tls`](/system-variables.md#authentication_ldap_sasl_tls-从-v710-版本开始引入) | 新增 | 在 LDAP SASL 身份验证中,是否使用 StartTLS 对连接加密。 | +| [`authentication_ldap_simple_auth_method_name`](/system-variables.md#authentication_ldap_simple_auth_method_name-从-v710-版本开始引入) | 新增 | 在 LDAP simple 身份验证中,验证方法的名称。现在仅支持 `SIMPLE`。 | +| [`authentication_ldap_simple_bind_base_dn`](/system-variables.md#authentication_ldap_simple_bind_base_dn-从-v710-版本开始引入) | 新增 | 在 LDAP simple 身份验证中,搜索用户的范围。如果创建用户时没有通过 `AS ...` 指定 `dn`,TiDB 会自动在 LDAP Server 的该范围中根据用户名搜索用户 `dn`。 | +| [`authentication_ldap_simple_bind_root_dn`](/system-variables.md#authentication_ldap_simple_bind_root_dn-从-v710-版本开始引入) | 新增 | 在 LDAP simple 身份验证中,TiDB 登录 LDAP Server 搜索用户时使用的 `dn`。 | +| [`authentication_ldap_simple_bind_root_pwd`](/system-variables.md#authentication_ldap_simple_bind_root_pwd-从-v710-版本开始引入) | 新增 | 在 LDAP simple 身份验证中,TiDB 登录 LDAP Server 搜索用户时使用的密码。 | +| [`authentication_ldap_simple_ca_path`](/system-variables.md#authentication_ldap_simple_ca_path-从-v710-版本开始引入) | 新增 | 在 LDAP simple 身份验证中,TiDB 对 StartTLS 连接使用的 CA 证书的路径。 | +| [`authentication_ldap_simple_init_pool_size`](/system-variables.md#authentication_ldap_simple_init_pool_size-从-v710-版本开始引入) | 新增 | 在 LDAP simple 身份验证中,TiDB 与 LDAP Server 间连接池的初始连接数。 | +| [`authentication_ldap_simple_max_pool_size`](/system-variables.md#authentication_ldap_simple_max_pool_size-从-v710-版本开始引入) | 新增 | 在 LDAP simple 身份验证中,TiDB 与 LDAP Server 间连接池的最大连接数。 | +| [`authentication_ldap_simple_server_host`](/system-variables.md#authentication_ldap_simple_server_host-从-v710-版本开始引入) | 新增 | 在 LDAP simple 身份验证中,LDAP Server 的主机名或地址。 | +| [`authentication_ldap_simple_server_port`](/system-variables.md#authentication_ldap_simple_server_port-从-v710-版本开始引入) | 新增 | 在 LDAP simple 身份验证中,LDAP Server 的 TCP/IP 端口号。 | +| [`authentication_ldap_simple_tls`](/system-variables.md#authentication_ldap_simple_tls-从-v710-版本开始引入) | 新增 | 在 LDAP simple 身份验证中,是否使用 StartTLS 对连接加密。 | | [`tidb_enable_dist_task`](/system-variables.md#tidb_enable_dist_task-从-v710-版本开始引入) | 新增 | 控制是否开启分布式执行框架。开启分布式执行后,DDL、Import 等支持的后端任务将会由集群中多个 TiDB 节点共同完成。该变量由 `tidb_ddl_distribute_reorg` 改名而来。| | [`tidb_enable_non_prepared_plan_cache_for_dml`](/system-variables.md#tidb_enable_non_prepared_plan_cache_for_dml-从-v710-版本开始引入) | 新增 | 控制非 Prepare 语句执行计划缓存是否支持 DML 语句。 | +| [`tidb_enable_row_level_checksum`](/system-variables.md#tidb_enable_row_level_checksum-从-v710-版本开始引入) | 新增 | 控制是否开启 TiCDC 单行数据正确性校验。| | [`tidb_opt_fix_control`](/system-variables.md#tidb_opt_fix_control-从-v710-版本开始引入) | 新增 | 通过设置该变量,你可以更细粒度地控制优化器的行为,并且避免集群升级后优化器行为变化导致的性能回退。 | | [`tidb_plan_cache_invalidation_on_fresh_stats`](/system-variables.md#tidb_plan_cache_invalidation_on_fresh_stats-从-v710-版本开始引入) | 新增 | 控制当某张表上的统计信息更新后,与该表相关的 Plan Cache 是否自动失效。 | | [`tidb_plan_cache_max_plan_size`](/system-variables.md#tidb_plan_cache_max_plan_size-从-v710-版本开始引入) | 新增 | 控制可以缓存的 Prepare 或非 Prepare 语句执行计划的最大大小。 | @@ -218,23 +356,190 @@ TiDB 版本:7.1.0 (upcoming) | PD | [`store-limit-version`](/pd-configuration-file.md#store-limit-version-从-v710-版本开始引入) | 新增 | 用于设置 store limit 工作模式。可选值为 `"v1"` 和 `"v2"`。 | | PD | [`schedule.enable-diagnostic`](/pd-configuration-file.md#enable-diagnostic-从-v630-版本开始引入) | 修改 | 默认值从 `false` 修改为 `true`,默认打开调度器的诊断功能。 | | TiFlash | `http_port` | 删除 | 废弃 TiFlash HTTP 服务端口(默认 `8123`)。 | +| TiDB Lightning | [`tikv-importer.pause-pd-scheduler-scope`](/tidb-lightning/tidb-lightning-configuration.md) | 新增 | 用于控制 TiDB Lightning 暂停 PD 调度的范围。默认值为 `"table"`,可选值为 `"global"` 和 `"table"`。 | +| TiDB Lightning | [`tikv-importer.region-check-backoff-limit`](/tidb-lightning/tidb-lightning-configuration.md) | 新增 | 用于控制 split 和 scatter 操作后等待 Region 上线的重试次数,默认值为 `1800`。重试符合指数回退策略,最大重试间隔为 2 秒。若两次重试之间有任何 Region 上线,该次操作不会被计为重试次数。 | +| TiDB Lightning | [`tikv-importer.region-split-batch-size`](/tidb-lightning/tidb-lightning-configuration.md) | 新增 | 用于控制一个 batch 中执行 split 和 scatter 操作的最大 Region 数量,默认值为 `4096`。 | +| TiDB Lightning | [`tikv-importer.region-split-concurrency`](/tidb-lightning/tidb-lightning-configuration.md) | 新增 | 用于控制 Split Region 时的并发度,默认值为 CPU 核心数。 | +| TiCDC | [`insecure-skip-verify`](/ticdc/ticdc-sink-to-kafka.md) | 新增 | 用于控制在同步数据到 Kafka 的场景下,启用 TLS 时是否设置认证算法。 | +| TiCDC | [`integrity.corruption-handle-level`](/ticdc/ticdc-changefeed-config.md#ticdc-changefeed-配置文件说明) | 新增 | 用于控制当单行数据的 Checksum 校验失败时,Changefeed 打印错误行数据相关日志的级别。默认值为 `"warn"`,可选值为 `"warn"` 和 `"error"`。 | +| TiCDC | [`integrity.integrity-check-level`](/ticdc/ticdc-changefeed-config.md#ticdc-changefeed-配置文件说明) | 新增 | 用于控制是否开启单行数据的 Checksum 校验功能,默认值为 `"none"`,即不开启。 | | TiCDC | [`sink.enable-partition-separator`](/ticdc/ticdc-changefeed-config.md#ticdc-changefeed-配置文件说明) | 修改 | 默认值从 `false` 修改为 `true`,代表默认会将表中各个分区的数据分不同的目录来存储。建议保持该配置项为 `true` 以避免同步分区表到存储服务时可能丢数据的问题。 | ## 改进提升 ++ TiDB + + - 在 `SHOW INDEX` 结果的 Cardinality 列中展示统计信息中对应列的不同值的数量 [#42227](https://github.com/pingcap/tidb/issues/42227) @[winoros](https://github.com/winoros) + - 使用 `SQL_NO_CACHE` 以避免 TTL Scan 查询对 TiKV block cache 造成影响 [#43206](https://github.com/pingcap/tidb/issues/43206) @[lcwangchao](https://github.com/lcwangchao) + - 改进 `MAX_EXECUTION_TIME` 相关错误信息使之与 MySQL 兼容 [#43031](https://github.com/pingcap/tidb/issues/43031) @[dveeden](https://github.com/dveeden) + - 在 IndexLookUp 中支持对分区表使用 MergeSort 算子 [#26166](https://github.com/pingcap/tidb/issues/26166) @[Defined2014](https://github.com/Defined2014) + - 改进 `caching_sha2_password` 使之与 MySQL 兼容 [#43576](https://github.com/pingcap/tidb/issues/43576) @[asjdf](https://github.com/asjdf) + ++ TiKV + + - 降低使用分区 Raft KV 时 Split 对写 QPS 的影响 [#14447](https://github.com/tikv/tikv/issues/14447) @[SpadeA-Tang](https://github.com/SpadeA-Tang) + - 优化使用分区 Raft KV 时 Snapshot 占用的空间 [#14581](https://github.com/tikv/tikv/issues/14581) @[bufferflies](https://github.com/bufferflies) + - 为 TiKV 处理请求的各个阶段提供更详细的时间信息 [#12362](https://github.com/tikv/tikv/issues/12362) @[cfzjywxk](https://github.com/cfzjywxk) + - 在日志备份中使用 PD 作为元数据存储 [#13867](https://github.com/tikv/tikv/issues/13867) @[YuJuncen](https://github.com/YuJuncen) + ++ PD + + - 新增基于 snapshot 执行细节来自动调整 store limit 大小的控制器。将 `store-limit-version` 设置为 `v2` 即可开启该控制器,开启后,用户无需手动调整 `store limit` 配置来控制扩缩容的速度 [#6147](https://github.com/tikv/pd/issues/6147) @[bufferflies](https://github.com/bufferflies) + - 新增历史负载信息,避免了存储引擎为 raft-kv2 时,热点调度器对不稳定负载所在的 Region 进行频繁调度 [#6297](https://github.com/tikv/pd/issues/6297) @[bufferflies](https://github.com/bufferflies) + - 新增 leader 健康检查机制,当 etcd leader 所在的 PD server 无法当选 leader 时,主动切换 etcd leader 来保证 PD leader 可用 [#6403](https://github.com/tikv/pd/issues/6403) @[nolouch](https://github.com/nolouch) + + TiFlash - 提升 TiFlash 在存算分离架构下的性能和稳定性 [#6882](https://github.com/pingcap/tiflash/issues/6882) @[JaySon-Huang](https://github.com/JaySon-Huang) @[breezewish](https://github.com/breezewish) @[JinheLin](https://github.com/JinheLin) - 支持在 Semi Join 或 Anti Semi Join 中,通过选择较小的表作为 Build 端来优化查询性能 [#7280](https://github.com/pingcap/tiflash/issues/7280) @[yibin87](https://github.com/yibin87) + - 提升默认参数下 BR 和 TiDB Lightning 向 TiFlash 导入数据的性能 [#7272](https://github.com/pingcap/tiflash/issues/7272) @[breezewish](https://github.com/breezewish) + ++ Tools + + + Backup & Restore (BR) + + - 支持在备份日志时修改 TiKV 配置项 `log-backup.max-flush-interval` [#14433](https://github.com/tikv/tikv/issues/14433) @[joccau](https://github.com/joccau) + + + TiCDC + + - 优化同步数据到对象存储的场景下发生 DDL 事件时的目录结构 [#8890](https://github.com/pingcap/tiflow/issues/8890) @[CharlesCheung96](https://github.com/CharlesCheung96) + - 优化 TiCDC 在同步任务失败时对上游 GC TLS 的设置方法 [#8403](https://github.com/pingcap/tiflow/issues/8403) @[charleszheng44](https://github.com/charleszheng44) + - 支持同步到 Kafka-on-Pulsar 下游 [#8892](https://github.com/pingcap/tiflow/issues/8892) @[hi-rustin](https://github.com/hi-rustin) + - 在将数据同步到 Kafka 时,支持 open-protocol 协议在数据发生变更后只同步有变更的列 [#8706](https://github.com/pingcap/tiflow/issues/8706) @[sdojjy](https://github.com/sdojjy) + - 优化 TiCDC 在下游出现故障等场景中的错误处理方式 [#8657](https://github.com/pingcap/tiflow/issues/8657) @[hicqu](https://github.com/hicqu) + - 增加一个配置项 `insecure-skip-verify`,控制在同步数据到 Kafka 的场景下启用 TLS 时是否设置认证算法 [#8867](https://github.com/pingcap/tiflow/issues/8867) @[hi-rustin](https://github.com/hi-rustin) + + + TiDB Lightning + + - 将关于 Region 分布不均的 Precheck 项的严重级别从 `Critical` 调整为 `Warn`,以避免阻塞用户导入数据 [#42836](https://github.com/pingcap/tidb/issues/42836) @[okJiang](https://github.com/okJiang) + - 在导入数据期间遇到 `unknown RPC` 错误时,增加了重试机制 [#43291](https://github.com/pingcap/tidb/issues/43291) @[D3Hunter](https://github.com/D3Hunter) + - 增强 Region Job 的重试机制 [#43682](https://github.com/pingcap/tidb/issues/43682) @[lance6716](https://github.com/lance6716) + +## 错误修复 + ++ TiDB + + - 修复重组分区后没有提示手动 `ANALYZE TABLE` 的问题 [#42183](https://github.com/pingcap/tidb/issues/42183) @[CbcWestwolf](https://github.com/CbcWestwolf) + - 修复对于执行中的 `DROP TABLE` 操作,`ADMIN SHOW DDL JOBS` 的结果中缺少表名的问题 [#42268](https://github.com/pingcap/tidb/issues/42268) @[tiancaiamao](https://github.com/tiancaiamao) + - 修复 `Ignore Event Per Minute` 和 `Stats Cache LRU Cost` 图表在 Grafana 监控面板中有时不可见的问题 [#42562](https://github.com/pingcap/tidb/issues/42562) @[pingandb](https://github.com/pingandb) + - 修复查询表 `INFORMATION_SCHEMA.COLUMNS` 时,`ORDINAL_POSITION` 列返回结果错误的问题 [#43379](https://github.com/pingcap/tidb/issues/43379) @[bb7133](https://github.com/bb7133) + - 修复权限表中一些列大小写敏感的问题 [#41048](https://github.com/pingcap/tidb/issues/41048) @[bb7133](https://github.com/bb7133) + - 修复缓存表执行新增列操作后,新增列值为 `NULL` 而非列的默认值的问题 [#42928](https://github.com/pingcap/tidb/issues/42928) @[lqs](https://github.com/lqs) + - 修复在谓词下推的情况下 CTE 结果错误的问题 [#43645](https://github.com/pingcap/tidb/issues/43645) @[winoros](https://github.com/winoros) + - 修复分区特别多并且带有 TiFlash 副本的分区表在执行 `TRUNCATE TABLE` 时,出现写冲突导致 DDL 重试的问题 [#42940](https://github.com/pingcap/tidb/issues/42940) @[mjonss](https://github.com/mjonss) + - 修复在创建分区表时使用 `SUBPARTITION` 没有警告提醒的问题 [#41198](https://github.com/pingcap/tidb/issues/41198) [#41200](https://github.com/pingcap/tidb/issues/41200) @[mjonss](https://github.com/mjonss) + - 修复生成列在处理值溢出问题时与 MySQL 不兼容的问题 [#40066](https://github.com/pingcap/tidb/issues/40066) @[jiyfhust](https://github.com/jiyfhust) + - 修复 `REORGANIZE PARTITION` 不能与其他 DDL 操作并发的问题 [#42442](https://github.com/pingcap/tidb/issues/42442) @[bb7133](https://github.com/bb7133) + - 修复在取消 DDL 的重组分区任务后可能导致后续其他 DDL 报错的问题 [#42448](https://github.com/pingcap/tidb/issues/42448) @[lcwangchao](https://github.com/lcwangchao) + - 修复某些情况下删除操作的断言不正确的问题 [#42426](https://github.com/pingcap/tidb/issues/42426) @[tiancaiamao](https://github.com/tiancaiamao) + - 修复读取 cgroup 信息出错导致 TiDB Server 无法启动的问题,报错信息为 "can't read file memory.stat from cgroup v1: open /sys/memory.stat no such file or directory" [#42659](https://github.com/pingcap/tidb/issues/42659) @[hawkingrei](https://github.com/hawkingrei) + - 修复在包含全局索引的分区表上更新分区键数据时报 `Duplicate Key` 错误的问题 [#42312](https://github.com/pingcap/tidb/issues/42312) @[L-maple](https://github.com/L-maple) + - 修复 TTL 监控面板中 `Scan Worker Time By Phase` 图表不显示数据的问题 [#42515](https://github.com/pingcap/tidb/issues/42515) @[lcwangchao](https://github.com/lcwangchao) + - 修复在包含全局索引的分区表上进行某些查询时返回错误结果的问题 [#41991](https://github.com/pingcap/tidb/issues/41991) [#42065](https://github.com/pingcap/tidb/issues/42065) @[L-maple](https://github.com/L-maple) + - 修复在重组分区表的过程中会显示错误日志的问题 [#42180](https://github.com/pingcap/tidb/issues/42180) @[mjonss](https://github.com/mjonss) + - 修复 `INFORMATION_SCHEMA.DDL_JOBS` 表中 `QUERY` 列的数据长度可能超出列定义的问题 [#42440](https://github.com/pingcap/tidb/issues/42440) @[tiancaiamao](https://github.com/tiancaiamao) + - 修复表 `INFORMATION_SCHEMA.CLUSTER_HARDWARE` 在容器中可能显示错误的值的问题 [#42851](https://github.com/pingcap/tidb/issues/42851) @[hawkingrei](https://github.com/hawkingrei) + - 修复通过 `ORDER BY` + `LIMIT` 的方式查询分区表时,返回结果错误的问题 [#43158](https://github.com/pingcap/tidb/issues/43158) @[Defined2014](https://github.com/Defined2014) + - 修复可能出现多个使用 ingest 的方式的 DDL 任务同时运行的问题 [#42903](https://github.com/pingcap/tidb/issues/42903) @[tangenta](https://github.com/tangenta) + - 修复查询分区表时使用 `Limit` 返回错误值的问题 [#24636](https://github.com/pingcap/tidb/issues/24636) @[winoros](https://github.com/winoros) + - 修复 IPv6 环境下显示错误的 TiDB 地址的问题 [#43260](https://github.com/pingcap/tidb/issues/43260) @[nexustar](https://github.com/nexustar) + - 修复系统变量 `tidb_enable_tiflash_read_for_write_stmt` 和 `tidb_enable_exchange_partition` 显示错误的值的问题 [#43281](https://github.com/pingcap/tidb/issues/43281) @[gengliqi](https://github.com/gengliqi) + - 修复代理协议在处理某些错误数据时报错 `Header read timeout` 的问题 [#43205](https://github.com/pingcap/tidb/issues/43205) @[blacktear23](https://github.com/blacktear23) + - 修复当 `tidb_scatter_region` 变量设置为开启时,对某个分区进行 TRUNCATE 操作后没有自动分裂 Region 的问题 [#43174](https://github.com/pingcap/tidb/issues/43174) [#43028](https://github.com/pingcap/tidb/issues/43028) @[jiyfhust](https://github.com/jiyfhust) + - 在具有生成列的表上增加检查,并对不支持的列的 DDL 操作报错 [#38988](https://github.com/pingcap/tidb/issues/38988) [#24321](https://github.com/pingcap/tidb/issues/24321) @[tiancaiamao](https://github.com/tiancaiamao) + - 修复在某些类型转换出错的情况下报错信息不对的问题 [#41730](https://github.com/pingcap/tidb/issues/41730) @[hawkingrei](https://github.com/hawkingrei) + - 修复 TiDB 节点在正常 shutdown 后,在此节点上触发的 DDL 任务会被取消的问题 [#43854](https://github.com/pingcap/tidb/issues/43854) @[zimulala](https://github.com/zimulala) + - 修复当 PD 成员地址发生变化时,为 `AUTO_INCREMENT` 列分配 ID 会被长时间阻塞的问题 [#42643](https://github.com/pingcap/tidb/issues/42643) @[tiancaiamao](https://github.com/tiancaiamao) + - 修复执行 DDL 期间报 `GC lifetime is shorter than transaction duration` 错误的问题 [#40074](https://github.com/pingcap/tidb/issues/40074) @[tangenta](https://github.com/tangenta) + - 修复元数据锁非预期地阻塞 DDL 执行的问题 [#43755](https://github.com/pingcap/tidb/issues/43755) @[wjhuang2016](https://github.com/wjhuang2016) + - 修复 IPv6 环境下的集群无法查询部分系统视图的问题 [#43286](https://github.com/pingcap/tidb/issues/43286) @[Defined2014](https://github.com/Defined2014) + - 修复动态裁剪模式下内连接表时找不到分区的问题 [#43686](https://github.com/pingcap/tidb/issues/43686) @[mjonss](https://github.com/mjonss) + - 修复 analyze 表时报语法错误的问题 [#43392](https://github.com/pingcap/tidb/issues/43392) @[guo-shaoge](https://github.com/guo-shaoge) + - 修复在重命名表期间 TiCDC 可能丢失部分行变更的问题 [#43338](https://github.com/pingcap/tidb/issues/43338) @[tangenta](https://github.com/tangenta) + - 修复在客户端使用游标读导致 TiDB server 崩溃的问题 [#38116](https://github.com/pingcap/tidb/issues/38116) @[YangKeao](https://github.com/YangKeao) + - 修复 `ADMIN SHOW DDL JOBS LIMIT` 返回错误结果的问题 [#42298](https://github.com/pingcap/tidb/issues/42298) @[CbcWestwolf](https://github.com/CbcWestwolf) + - 修复使用 `UNION` 查询联合视图和临时表时 TiDB panic 的问题 [#42563](https://github.com/pingcap/tidb/issues/42563) @[lcwangchao](https://github.com/lcwangchao) + - 修复在一个事务中提交多条语句时重命名表不生效的问题 [#39664](https://github.com/pingcap/tidb/issues/39664) @[tiancaiamao](https://github.com/tiancaiamao) + - 修复时间转换时 Prepared Plan Cache 与 Non-Prepared Plan Cache 的行为不兼容性的问题 [#42439](https://github.com/pingcap/tidb/issues/42439) @[qw4990](https://github.com/qw4990) + - 修复 Plan Cache 导致 Decimal 类型的结果出错的问题 [#43311](https://github.com/pingcap/tidb/issues/43311) @[qw4990](https://github.com/qw4990) + - 修复 NAAJ (null-aware anti join) 中错误的类型检查导致 TiDB panic 的问题 [#42459](https://github.com/pingcap/tidb/issues/42459) @[AilinKid](https://github.com/AilinKid) + - 修复 RC 隔离级别下悲观事务中执行失败的 DML 可能导致数据索引不一致的问题 [#43294](https://github.com/pingcap/tidb/issues/43294) @[ekexium](https://github.com/ekexium) + - 修复在一些极端情况下,悲观事务的第一条语句发生重试时,对该事务进行 resolve lock 可能影响事务正确性的问题 [#42937](https://github.com/pingcap/tidb/issues/42937) @[MyonKeminta](https://github.com/MyonKeminta) + - 修复在一些罕见的情况下,悲观事务的残留悲观锁在 GC resolve lock 时可能影响数据正确性的问题 [#43243](https://github.com/pingcap/tidb/issues/43243) @[MyonKeminta](https://github.com/MyonKeminta) + - 修复从 `LOCK` 转换为 `PUT` 的优化导致特定查询返回重复数据的问题 [#28011](https://github.com/pingcap/tidb/issues/28011) @[zyguan](https://github.com/zyguan) + - 修复当数据未变更时唯一索引的加锁行为与数据发生变更时不一致的问题 [#36438](https://github.com/pingcap/tidb/issues/36438) @[zyguan](https://github.com/zyguan) + ++ TiKV + + - 修复在启用 `tidb_pessimistic_txn_fair_locking` 时,在某些极端情况下,RPC 失败重试导致的过期请求可能在 Resolve Lock 时影响数据正确性的问题 [#14551](https://github.com/tikv/tikv/issues/14551) @[MyonKeminta](https://github.com/MyonKeminta) + - 修复在启用 `tidb_pessimistic_txn_fair_locking` 时,在某些极端情况下,RPC 失败重试导致的过期请求可能会造成事务冲突被忽略,从而影响事务一致性的问题 [#14311](https://github.com/tikv/tikv/issues/14311) @[MyonKeminta](https://github.com/MyonKeminta) + - 修复加密 Key ID 冲突会导致旧 Key 被删除的问题 [#14585](https://github.com/tikv/tikv/issues/14585) @[tabokie](https://github.com/tabokie) + - 修复集群从较低版本升级到 v6.5 或更高版本时,由于累计的 Lock 记录可能导致性能下降到问题 [#14780](https://github.com/tikv/tikv/issues/14780) @[MyonKeminta](https://github.com/MyonKeminta) + - 修复 PITR 恢复过程中出现 `raft entry is too large` 的问题 [#14313](https://github.com/tikv/tikv/issues/14313) @[YuJuncen](https://github.com/YuJuncen) + - 修复 PITR 恢复过程中由于 `log_batch` 超过 2 GB 导致 TiKV panic 的问题 [#13848](https://github.com/tikv/tikv/issues/13848) @[YuJuncen](https://github.com/YuJuncen) + ++ PD + + - 修复 TiKV panic 后,PD 监控面板 `low space store` 数量异常的问题 [#6252](https://github.com/tikv/pd/issues/6252) @[HuSharp](https://github.com/HuSharp) + - 修复在 PD leader 切换后 Region Health 监控数据被删除的问题 [#6366](https://github.com/tikv/pd/issues/6366) @[iosmanthus](https://github.com/iosmanthus) + - 修复 Rule checker 无法修复 label 为 `schedule=deny` 的不健康 Region 的问题 [#6426](https://github.com/tikv/pd/issues/6426) @[nolouch](https://github.com/nolouch) + - 修复 TiKV 或 TiFlash 重启后部分已有 label 丢失的问题 [#6467](https://github.com/tikv/pd/issues/6467) @[JmPotato](https://github.com/JmPotato) + - 修复复制模式存在 learner 节点时可能无法切换复制状态的问题 [#14704](https://github.com/tikv/tikv/issues/14704) @[nolouch](https://github.com/nolouch) + ++ TiFlash + + - 修复开启延迟物化 (Late Materialization) 后查询 `TIMESTAMP` 或者 `TIME` 类型的数据报错的问题 [#7455](https://github.com/pingcap/tiflash/issues/7455) @[Lloyd-Pottiger](https://github.com/Lloyd-Pottiger) + - 修复大的更新事务可能会导致 TiFlash 反复报错重启的问题 [#7316](https://github.com/pingcap/tiflash/issues/7316) @[JaySon-Huang](https://github.com/JaySon-Huang) + ++ Tools + + + Backup & Restore (BR) + + - 修复集群中 TiKV 出现宕机导致备份速度降低的问题 [#42973](https://github.com/pingcap/tidb/issues/42973) @[YuJuncen](https://github.com/YuJuncen) + - 修复某些情况下备份失败会导致错误信息不准确的问题 [#43236](https://github.com/pingcap/tidb/issues/43236) @[YuJuncen](https://github.com/YuJuncen) + + + TiCDC + + - 修复 TiCDC 的时区设置问题 [#8798](https://github.com/pingcap/tiflow/issues/8798) @[hi-rustin](https://github.com/hi-rustin) + - 修复 PD 地址或 leader 出现故障时 TiCDC 不能自动恢复的问题 [#8812](https://github.com/pingcap/tiflow/issues/8812) [#8877](https://github.com/pingcap/tiflow/issues/8877) @[asddongmen](https://github.com/asddongmen) + - 修复上游 TiKV 节点 crash 时 checkpoint lag 上升的问题 [#8858](https://github.com/pingcap/tiflow/issues/8858) @[hicqu](https://github.com/hicqu) + - 修复当同步数据到对象存储时上游的 `EXCHANGE PARTITION` 操作没有正常同步到下游的问题 [#8914](https://github.com/pingcap/tiflow/issues/8914) @[CharlesCheung96](https://github.com/CharlesCheung96) + - 修复在某些特殊场景下 sorter 组件内存使用过多导致 OOM 的问题 [#8974](https://github.com/pingcap/tiflow/issues/8974) @[hicqu](https://github.com/hicqu) + - 修复下游 Kafka 滚动重启时 TiCDC 节点发生 panic 的问题 [#9023](https://github.com/pingcap/tiflow/issues/9023) @[asddongmen](https://github.com/asddongmen) + + + TiDB Data Migration (DM) + + - 修复数据同步过程中,latin1 字符集数据可能损坏的问题 [#7028](https://github.com/pingcap/tiflow/issues/7028) @[lance6716](https://github.com/lance6716) + + + TiDB Dumpling + + - 修复 `UNSIGNED INTEGER` 类型的主键无法用于拆分 Chunk 的问题 [#42620](https://github.com/pingcap/tidb/issues/42620) @[lichunzhu](https://github.com/lichunzhu) + - 修复错误设置 `--output-file-template` 可能导致 TiDB Dumpling panic 的问题 [#42391](https://github.com/pingcap/tidb/issues/42391) @[lichunzhu](https://github.com/lichunzhu) + + + TiDB Binlog + + - 修复当遇到失败的 DDL 语句时可能报错的问题 [#1228](https://github.com/pingcap/tidb-binlog/issues/1228) @[okJiang](https://github.com/okJiang) + + + TiDB Lightning + + - 修复导入性能退化的问题 [#42456](https://github.com/pingcap/tidb/issues/42456) @[lance6716](https://github.com/lance6716) + - 修复大数据量导入时报 `write to tikv with no leader returned` 错误的问题 [#43055](https://github.com/pingcap/tidb/issues/43055) @[lance6716](https://github.com/lance6716) + - 修复导入期间输出过多 `keys within region is empty, skip doIngest` 日志的问题 [#43197](https://github.com/pingcap/tidb/issues/43197) @[D3Hunter](https://github.com/D3Hunter) + - 修复 Range 部分写入时可能出现 panic 的问题 [#43363](https://github.com/pingcap/tidb/issues/43363) @[lance6716](https://github.com/lance6716) + - 修复宽表导入时可能出现 OOM 的问题 [#43728](https://github.com/pingcap/tidb/issues/43728) @[D3Hunter](https://github.com/D3Hunter) + - 修复 TiDB Lightning Grafana 面板缺失数据的问题 [#43357](https://github.com/pingcap/tidb/issues/43357) @[lichunzhu](https://github.com/lichunzhu) + - 修复未正确设置 `keyspace-name` 导致数据导入失败的问题 [#43684](https://github.com/pingcap/tidb/issues/43684) @[zeminzhou](https://github.com/zeminzhou) + - 修复当 Range 部分写入时,在某些情况下会跳过数据导入的问题 [#43768](https://github.com/pingcap/tidb/issues/43768) @[lance6716](https://github.com/lance6716) -+ TiCDC +## 性能测试 - - TiCDC 过滤了由有损 DDL 语句导致的数据变更,避免发送无效数据变更 [#43227](https://github.com/pingcap/tidb/issues/43227) @[hi-rustin](https://github.com/hi-rustin) +如需了解 TiDB v7.1.0 的性能表现,你可以参考 TiDB Cloud Dedicated 集群的 [TPC-C 性能测试报告](https://docs.pingcap/tidbcloud/v7.1.0-performance-benchmarking-with-tpcc)(英文版)。 ## 贡献者 感谢来自 TiDB 社区的贡献者们: +- [blacktear23](https://github.com/blacktear23) - [ethercflow](https://github.com/ethercflow) - [hihihuhu](https://github.com/hihihuhu) - [jiyfhust](https://github.com/jiyfhust) @@ -242,4 +547,4 @@ TiDB 版本:7.1.0 (upcoming) - [lqs](https://github.com/lqs) - [pingandb](https://github.com/pingandb) - [yorkhellen](https://github.com/yorkhellen) -- [yujiarista](https://github.com/yujiarista) +- [yujiarista](https://github.com/yujiarista)(首次贡献者) diff --git a/releases/release-notes.md b/releases/release-notes.md index f306143477d1..3a6ed98eb008 100644 --- a/releases/release-notes.md +++ b/releases/release-notes.md @@ -7,6 +7,10 @@ aliases: ['/docs-cn/dev/releases/release-notes/','/docs-cn/dev/releases/rn/'] TiDB 历史版本发布声明如下: +## 7.1 + +- [7.1.0](/releases/release-7.1.0.md): 2023-05-31 + ## 7.0 - [7.0.0-DMR](/releases/release-7.0.0.md): 2023-03-30 diff --git a/releases/release-timeline.md b/releases/release-timeline.md index 978d7a925828..566d4bace297 100644 --- a/releases/release-timeline.md +++ b/releases/release-timeline.md @@ -9,6 +9,7 @@ summary: 了解 TiDB 的版本发布时间线。 | 版本 | 发布日期 | | :--- | :--- | +| [7.1.0](/releases/release-7.1.0.md) | 2023-05-31 | | [6.5.2](/releases/release-6.5.2.md) | 2023-04-21 | | [6.1.6](/releases/release-6.1.6.md) | 2023-04-12 | | [7.0.0-DMR](/releases/release-7.0.0.md) | 2023-03-30 | From a2cfbd86c5a867bbc62cd4c84ece41fcdee39753 Mon Sep 17 00:00:00 2001 From: Aolin Date: Wed, 31 May 2023 16:10:41 +0800 Subject: [PATCH 151/257] basic features: update v7.1 features (#13918) --- basic-features.md | 29 ++++++++++++++++------------- 1 file changed, 16 insertions(+), 13 deletions(-) diff --git a/basic-features.md b/basic-features.md index cf36a5fe0127..6461f6f7d350 100644 --- a/basic-features.md +++ b/basic-features.md @@ -20,7 +20,7 @@ aliases: ['/docs-cn/dev/basic-features/','/docs-cn/dev/experimental-features-4.0 ## 数据类型,函数和操作符 -| 数据类型,函数,操作符 | 7.1 (upcoming) | 6.5 | 6.1 | 5.4 | 5.3 | 5.2 | 5.1 | 5.0 | 4.0 | +| 数据类型,函数,操作符 | 7.1 | 6.5 | 6.1 | 5.4 | 5.3 | 5.2 | 5.1 | 5.0 | 4.0 | |---|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:| | [数值类型](/data-type-numeric.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | | [日期和时间类型](/data-type-date-and-time.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | @@ -44,7 +44,7 @@ aliases: ['/docs-cn/dev/basic-features/','/docs-cn/dev/experimental-features-4.0 ## 索引和约束 -| 索引和约束 | 7.1 (upcoming) | 6.5 | 6.1 | 5.4 | 5.3 | 5.2 | 5.1 | 5.0 | 4.0 | +| 索引和约束 | 7.1 | 6.5 | 6.1 | 5.4 | 5.3 | 5.2 | 5.1 | 5.0 | 4.0 | |---|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:| | [表达式索引](/sql-statements/sql-statement-create-index.md#表达式索引) [^2] | Y | Y | E | E | E | E | E | E | E | | [列式存储 (TiFlash)](/tiflash/tiflash-overview.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | @@ -64,7 +64,7 @@ aliases: ['/docs-cn/dev/basic-features/','/docs-cn/dev/experimental-features-4.0 ## SQL 语句 -| SQL 语句 [^3] | 7.1 (upcoming) | 6.5 | 6.1 | 5.4 | 5.3 | 5.2 | 5.1 | 5.0 | 4.0 | +| SQL 语句 [^3] | 7.1 | 6.5 | 6.1 | 5.4 | 5.3 | 5.2 | 5.1 | 5.0 | 4.0 | |---|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:| | `SELECT`,`INSERT`,`UPDATE`,`DELETE`,`REPLACE` | Y | Y | Y | Y | Y | Y | Y | Y | Y | | `INSERT ON DUPLICATE KEY UPDATE` | Y | Y | Y | Y | Y | Y | Y | Y | Y | @@ -88,10 +88,10 @@ aliases: ['/docs-cn/dev/basic-features/','/docs-cn/dev/experimental-features-4.0 ## 高级 SQL 功能 -| 高级 SQL 功能 | 7.1 (upcoming) | 6.5 | 6.1 | 5.4 | 5.3 | 5.2 | 5.1 | 5.0 | 4.0 | +| 高级 SQL 功能 | 7.1 | 6.5 | 6.1 | 5.4 | 5.3 | 5.2 | 5.1 | 5.0 | 4.0 | |---|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:| | [Prepare 语句执行计划缓存](/sql-prepared-plan-cache.md) | Y | Y | Y | Y | Y | E | E | E | E | -| [非 Prepare 语句执行计划缓存](/sql-non-prepared-plan-cache.md) | Y | N | N | N | N | N | N | N | N | +| [非 Prepare 语句执行计划缓存](/sql-non-prepared-plan-cache.md) | E | N | N | N | N | N | N | N | N | | [执行计划管理 (SPM)](/sql-plan-management.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | | [根据历史执行计划创建绑定](/sql-plan-management.md#根据历史执行计划创建绑定) | Y | E | N | N | N | N | N | N | N | | [下推计算结果缓存 (Coprocessor Cache)](/coprocessor-cache.md) | Y | Y | Y | Y | Y | Y | Y | Y | E | @@ -107,7 +107,7 @@ aliases: ['/docs-cn/dev/basic-features/','/docs-cn/dev/experimental-features-4.0 ## 数据定义语言 (DDL) -| 数据定义语言 (DDL) | 7.1 (upcoming) | 6.5 | 6.1 | 5.4 | 5.3 | 5.2 | 5.1 | 5.0 | 4.0 | +| 数据定义语言 (DDL) | 7.1 | 6.5 | 6.1 | 5.4 | 5.3 | 5.2 | 5.1 | 5.0 | 4.0 | |---|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:| | `CREATE`,`DROP`,`ALTER`,`RENAME`,`TRUNCATE` | Y | Y | Y | Y | Y | Y | Y | Y | Y | | [生成列](/generated-columns.md) | Y | E | E | E | E | E | E | E | E | @@ -127,7 +127,7 @@ aliases: ['/docs-cn/dev/basic-features/','/docs-cn/dev/experimental-features-4.0 ## 事务 -| 事务 | 7.1 (upcoming) | 6.5 | 6.1 | 5.4 | 5.3 | 5.2 | 5.1 | 5.0 | 4.0 | +| 事务 | 7.1 | 6.5 | 6.1 | 5.4 | 5.3 | 5.2 | 5.1 | 5.0 | 4.0 | |---|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:| | [Async commit](/system-variables.md#tidb_enable_async_commit-从-v50-版本开始引入) | Y | Y | Y | Y | Y | Y | Y | Y | N | | [1PC](/system-variables.md#tidb_enable_1pc-从-v50-版本开始引入) | Y | Y | Y | Y | Y | Y | Y | Y | N | @@ -139,7 +139,7 @@ aliases: ['/docs-cn/dev/basic-features/','/docs-cn/dev/experimental-features-4.0 ## 分区 -| 分区 | 7.1 (upcoming) | 6.5 | 6.1 | 5.4 | 5.3 | 5.2 | 5.1 | 5.0 | 4.0 | +| 分区 | 7.1 | 6.5 | 6.1 | 5.4 | 5.3 | 5.2 | 5.1 | 5.0 | 4.0 | |---|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:| | [Range 分区](/partitioned-table.md#range-分区) | Y | Y | Y | Y | Y | Y | Y | Y | Y | | [Hash 分区](/partitioned-table.md#hash-分区) | Y | Y | Y | Y | Y | Y | Y | Y | Y | @@ -155,7 +155,7 @@ aliases: ['/docs-cn/dev/basic-features/','/docs-cn/dev/experimental-features-4.0 ## 统计信息 -| 统计信息 | 7.1 (upcoming) | 6.5 | 6.1 | 5.4 | 5.3 | 5.2 | 5.1 | 5.0 | 4.0 | +| 统计信息 | 7.1 | 6.5 | 6.1 | 5.4 | 5.3 | 5.2 | 5.1 | 5.0 | 4.0 | |---|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:| | [CM-Sketch](/statistics.md) | 默认关闭 | 默认关闭 | 默认关闭 | 默认关闭 | 默认关闭 | Y | Y | Y | Y | | [直方图](/statistics.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | @@ -168,10 +168,11 @@ aliases: ['/docs-cn/dev/basic-features/','/docs-cn/dev/experimental-features-4.0 | [限制统计信息的内存使用量](/statistics.md#统计信息收集的内存限制) | E | E | E | N | N | N | N | N | N | | [随机采样约 10000 行数据来快速构建统计信息](/system-variables.md#tidb_enable_fast_analyze) | E | E | E | E | E | E | E | E | E | | [锁定统计信息](/statistics.md#锁定统计信息) | E | E | N | N | N | N | N | N | N | +| [轻量级统计信息初始化](/statistics.md#统计信息的加载) | E | N | N | N | N | N | N | N | N | ## 安全 -| 安全 | 7.1 (upcoming) | 6.5 | 6.1 | 5.4 | 5.3 | 5.2 | 5.1 | 5.0 | 4.0 | +| 安全 | 7.1 | 6.5 | 6.1 | 5.4 | 5.3 | 5.2 | 5.1 | 5.0 | 4.0 | |---|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:| | [传输层加密 (TLS)](/enable-tls-between-clients-and-servers.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | | [静态加密 (TDE)](/encryption-at-rest.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | @@ -180,6 +181,8 @@ aliases: ['/docs-cn/dev/basic-features/','/docs-cn/dev/experimental-features-4.0 | [`caching_sha2_password` 认证](/system-variables.md#default_authentication_plugin) | Y | Y | Y | Y | Y | Y | N | N | N | | [`tidb_sm3_password` 认证](/system-variables.md#default_authentication_plugin) | Y | Y | N | N | N | N | N | N | N | | [`tidb_auth_token` 认证](/system-variables.md#default_authentication_plugin) | Y | Y | N | N | N | N | N | N | N | +| [`authentication_ldap_sasl` 认证](/system-variables.md#default_authentication_plugin) | Y | N | N | N | N | N | N | N | N | +| [`authentication_ldap_simple` 认证](/system-variables.md#default_authentication_plugin) | Y | N | N | N | N | N | N | N | N | | [密码管理](/password-management.md) | Y | Y | N | N | N | N | N | N | N | | [与 MySQL 兼容的 `GRANT` 权限管理](/privilege-management.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | | [动态权限](/privilege-management.md#动态权限) | Y | Y | Y | Y | Y | Y | Y | N | N | @@ -188,7 +191,7 @@ aliases: ['/docs-cn/dev/basic-features/','/docs-cn/dev/experimental-features-4.0 ## 数据导入和导出 -| 数据导入和导出 | 7.1 (upcoming) | 6.5 | 6.1 | 5.4 | 5.3 | 5.2 | 5.1 | 5.0 | 4.0 | +| 数据导入和导出 | 7.1 | 6.5 | 6.1 | 5.4 | 5.3 | 5.2 | 5.1 | 5.0 | 4.0 | |---|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:| | [快速导入 (TiDB Lightning)](/tidb-lightning/tidb-lightning-overview.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | | mydumper 逻辑导出 | 已废弃 | 已废弃 | 已废弃 | 已废弃 | 已废弃 | 已废弃 | 已废弃 | 已废弃 | 已废弃 | @@ -203,7 +206,7 @@ aliases: ['/docs-cn/dev/basic-features/','/docs-cn/dev/experimental-features-4.0 ## 管理,可视化和工具 -| 管理,可视化和工具 | 7.1 (upcoming) | 6.5 | 6.1 | 5.4 | 5.3 | 5.2 | 5.1 | 5.0 | 4.0 | +| 管理,可视化和工具 | 7.1 | 6.5 | 6.1 | 5.4 | 5.3 | 5.2 | 5.1 | 5.0 | 4.0 | |---|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:| | [TiDB Dashboard 图形化展示](/dashboard/dashboard-intro.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | | [TiDB Dashboard 持续性能分析功能](/dashboard/continuous-profiling.md) | Y | Y | Y | E | E | N | N | N | N | @@ -240,7 +243,7 @@ aliases: ['/docs-cn/dev/basic-features/','/docs-cn/dev/experimental-features-4.0 [^3]: TiDB 支持的完整 SQL 列表,见[语句参考](/sql-statements/sql-statement-select.md)。 -[^4]: 从 [TiDB v6.4.0](/releases/release-6.4.0.md) 开始,支持[高性能、全局单调递增的 `AUTO_INCREMENT` 列](/auto-increment.md#mysql-兼容模式) +[^4]: 从 [TiDB v6.4.0](/releases/release-6.4.0.md) 开始,支持[高性能、全局单调递增的 `AUTO_INCREMENT` 列](/auto-increment.md#mysql-兼容模式)。 [^5]: 对于 [TiDB v7.0.0](/releases/release-7.0.0.md),新增参数 `FIELDS DEFINED NULL BY` 以及新增支持从 S3 和 GCS 导入数据,均为实验特性。 From c391c223b419bca0c69afb803c546e347d4bfc28 Mon Sep 17 00:00:00 2001 From: Aolin Date: Wed, 31 May 2023 16:12:41 +0800 Subject: [PATCH 152/257] bump tool versions for v7.1 (#14063) --- br/backup-and-restore-use-cases.md | 6 +++--- dm/quick-start-create-task.md | 2 +- pd-control.md | 2 +- ticdc/deploy-ticdc.md | 2 +- tidb-binlog/get-started-with-tidb-binlog.md | 2 +- 5 files changed, 7 insertions(+), 7 deletions(-) diff --git a/br/backup-and-restore-use-cases.md b/br/backup-and-restore-use-cases.md index 444fc3beecf6..955e1b3f08d5 100644 --- a/br/backup-and-restore-use-cases.md +++ b/br/backup-and-restore-use-cases.md @@ -17,7 +17,7 @@ aliases: ['/docs-cn/dev/br/backup-and-restore-use-cases/','/docs-cn/dev/referenc ## 部署 TiDB 集群和 br 命令行工具 -使用 PITR 功能,需要部署 v6.2.0 或以上版本的 TiDB 集群,并且更新 br 命令行工具到与 TiDB 集群相同的版本,本文假设使用的是 v7.0.0 版本。 +使用 PITR 功能,需要部署 v6.2.0 或以上版本的 TiDB 集群,并且更新 br 命令行工具到与 TiDB 集群相同的版本,本文假设使用的是 v7.1.0 版本。 下表介绍了在 TiDB 集群中使用日志备份功能的推荐配置。 @@ -44,13 +44,13 @@ aliases: ['/docs-cn/dev/br/backup-and-restore-use-cases/','/docs-cn/dev/referenc - 安装: ```shell - tiup install br:v7.0.0 + tiup install br:v7.1.0 ``` - 升级: ```shell - tiup update br:v7.0.0 + tiup update br:v7.1.0 ``` ## 配置备份存储 (Amazon S3) diff --git a/dm/quick-start-create-task.md b/dm/quick-start-create-task.md index 5f0e2fba298d..4794fd5e1cb7 100644 --- a/dm/quick-start-create-task.md +++ b/dm/quick-start-create-task.md @@ -69,7 +69,7 @@ docker run --rm --name mysql-3307 -p 3307:3307 -e MYSQL_ALLOW_EMPTY_PASSWORD=tru {{< copyable "shell-regular" >}} ```bash -wget https://download.pingcap.org/tidb-community-server-v7.0.0-linux-amd64.tar.gz +wget https://download.pingcap.org/tidb-community-server-v7.1.0-linux-amd64.tar.gz tar -xzvf tidb-latest-linux-amd64.tar.gz mv tidb-latest-linux-amd64/bin/tidb-server ./ ./tidb-server -P 4000 --store mocktikv --log-file "./tidb.log" & diff --git a/pd-control.md b/pd-control.md index 633ca481ad77..a45918bd2200 100644 --- a/pd-control.md +++ b/pd-control.md @@ -28,7 +28,7 @@ PD Control 是 PD 的命令行工具,用于获取集群状态信息和调整 > **注意:** > -> 下载链接中的 `{version}` 为 TiDB 的版本号。例如,amd64 架构的 `v7.0.0` 版本的下载链接为 `https://download.pingcap.org/tidb-community-server-v7.0.0-linux-amd64.tar.gz`。 +> 下载链接中的 `{version}` 为 TiDB 的版本号。例如,amd64 架构的 `v7.1.0` 版本的下载链接为 `https://download.pingcap.org/tidb-community-server-v7.1.0-linux-amd64.tar.gz`。 ### 源码编译 diff --git a/ticdc/deploy-ticdc.md b/ticdc/deploy-ticdc.md index 1d3358cf6a0a..fed9f67956fb 100644 --- a/ticdc/deploy-ticdc.md +++ b/ticdc/deploy-ticdc.md @@ -95,7 +95,7 @@ tiup cluster upgrade --transfer-timeout 600 > **注意:** > -> 命令中的 `` 需要替换为集群名字,`` 需要替换为目标版本号,例如 v7.0.0。 +> 命令中的 `` 需要替换为集群名字,`` 需要替换为目标版本号,例如 v7.1.0。 ### 升级的注意事项 diff --git a/tidb-binlog/get-started-with-tidb-binlog.md b/tidb-binlog/get-started-with-tidb-binlog.md index f6d77905c368..d22191703a76 100644 --- a/tidb-binlog/get-started-with-tidb-binlog.md +++ b/tidb-binlog/get-started-with-tidb-binlog.md @@ -47,7 +47,7 @@ sudo yum install -y mariadb-server {{< copyable "shell-regular" >}} ```bash -curl -LO https://download.pingcap.org/tidb-community-server-v7.0.0-linux-amd64.tar.gz | tar xzf - && +curl -LO https://download.pingcap.org/tidb-community-server-v7.1.0-linux-amd64.tar.gz | tar xzf - && cd tidb-latest-linux-amd64 ``` From 61a36a43705fc3a6a84519fb955580a2ad15e73f Mon Sep 17 00:00:00 2001 From: nexustar Date: Wed, 31 May 2023 16:14:41 +0800 Subject: [PATCH 153/257] bump tidb version on tiup docs (#14077) --- production-deployment-using-tiup.md | 4 +-- quick-start-with-tidb.md | 8 +++--- scale-tidb-using-tiup.md | 2 +- tiup/tiup-cluster.md | 26 ++++++++++---------- tiup/tiup-component-cluster-deploy.md | 2 +- tiup/tiup-component-cluster-patch.md | 2 +- tiup/tiup-component-management.md | 12 ++++----- tiup/tiup-mirror.md | 6 ++--- tiup/tiup-playground.md | 2 +- upgrade-tidb-using-tiup.md | 35 ++++++++++++--------------- 10 files changed, 47 insertions(+), 52 deletions(-) diff --git a/production-deployment-using-tiup.md b/production-deployment-using-tiup.md index 7449663f2e1f..44431628419f 100644 --- a/production-deployment-using-tiup.md +++ b/production-deployment-using-tiup.md @@ -341,13 +341,13 @@ alertmanager_servers: {{< copyable "shell-regular" >}} ```shell - tiup cluster deploy tidb-test v7.0.0 ./topology.yaml --user root [-p] [-i /home/root/.ssh/gcp_rsa] + tiup cluster deploy tidb-test v7.1.0 ./topology.yaml --user root [-p] [-i /home/root/.ssh/gcp_rsa] ``` 以上部署示例中: - `tidb-test` 为部署的集群名称。 -- `v7.0.0` 为部署的集群版本,可以通过执行 `tiup list tidb` 来查看 TiUP 支持的最新可用版本。 +- `v7.1.0` 为部署的集群版本,可以通过执行 `tiup list tidb` 来查看 TiUP 支持的最新可用版本。 - 初始化配置文件为 `topology.yaml`。 - `--user root` 表示通过 root 用户登录到目标主机完成集群部署,该用户需要有 ssh 到目标机器的权限,并且在目标机器有 sudo 权限。也可以用其他有 ssh 和 sudo 权限的用户完成部署。 - [-i] 及 [-p] 为可选项,如果已经配置免密登录目标机,则不需填写。否则选择其一即可,[-i] 为可登录到目标机的 root 用户(或 --user 指定的其他用户)的私钥,也可使用 [-p] 交互式输入该用户的密码。 diff --git a/quick-start-with-tidb.md b/quick-start-with-tidb.md index 1e74696445b8..e20ecd7c55cb 100644 --- a/quick-start-with-tidb.md +++ b/quick-start-with-tidb.md @@ -81,10 +81,10 @@ TiDB 是一个分布式系统。最基础的 TiDB 测试集群通常由 2 个 Ti {{< copyable "shell-regular" >}} ```shell - tiup playground v7.0.0 --db 2 --pd 3 --kv 3 + tiup playground v7.1.0 --db 2 --pd 3 --kv 3 ``` - 上述命令会在本地下载并启动某个版本的集群(例如 v7.0.0)。最新版本可以通过执行 `tiup list tidb` 来查看。运行结果将显示集群的访问方式: + 上述命令会在本地下载并启动某个版本的集群(例如 v7.1.0)。最新版本可以通过执行 `tiup list tidb` 来查看。运行结果将显示集群的访问方式: ```log CLUSTER START SUCCESSFULLY, Enjoy it ^-^ @@ -198,10 +198,10 @@ TiDB 是一个分布式系统。最基础的 TiDB 测试集群通常由 2 个 Ti {{< copyable "shell-regular" >}} ```shell - tiup playground v7.0.0 --db 2 --pd 3 --kv 3 + tiup playground v7.1.0 --db 2 --pd 3 --kv 3 ``` - 上述命令会在本地下载并启动某个版本的集群(例如 v7.0.0)。最新版本可以通过执行 `tiup list tidb` 来查看。运行结果将显示集群的访问方式: + 上述命令会在本地下载并启动某个版本的集群(例如 v7.1.0)。最新版本可以通过执行 `tiup list tidb` 来查看。运行结果将显示集群的访问方式: ```log CLUSTER START SUCCESSFULLY, Enjoy it ^-^ diff --git a/scale-tidb-using-tiup.md b/scale-tidb-using-tiup.md index 0add05f27736..e170b6d0275a 100644 --- a/scale-tidb-using-tiup.md +++ b/scale-tidb-using-tiup.md @@ -280,7 +280,7 @@ Starting /root/.tiup/components/cluster/v1.11.3/cluster display TiDB Cluster: -TiDB Version: v7.0.0 +TiDB Version: v7.1.0 ID Role Host Ports Status Data Dir Deploy Dir diff --git a/tiup/tiup-cluster.md b/tiup/tiup-cluster.md index be80fe5eedee..baa93f8d8bbe 100644 --- a/tiup/tiup-cluster.md +++ b/tiup/tiup-cluster.md @@ -118,12 +118,12 @@ tidb_servers: ... ``` -假如我们想要使用 TiDB 的 v7.0.0 版本,集群名字为 `prod-cluster`,则执行以下命令: +假如我们想要使用 TiDB 的 v7.1.0 版本,集群名字为 `prod-cluster`,则执行以下命令: {{< copyable "shell-regular" >}} ```shell -tiup cluster deploy -p prod-cluster v7.0.0 /tmp/topology.yaml +tiup cluster deploy -p prod-cluster v7.1.0 /tmp/topology.yaml ``` 执行过程中会再次确认拓扑结构并提示输入目标机器上的 root 密码(-p 表示使用密码): @@ -131,7 +131,7 @@ tiup cluster deploy -p prod-cluster v7.0.0 /tmp/topology.yaml ```bash Please confirm your topology: TiDB Cluster: prod-cluster -TiDB Version: v7.0.0 +TiDB Version: v7.1.0 Type Host Ports OS/Arch Directories ---- ---- ----- ------- ----------- pd 172.16.5.134 2379/2380 linux/x86_64 deploy/pd-2379,data/pd-2379 @@ -174,7 +174,7 @@ tiup cluster list Starting /root/.tiup/components/cluster/v1.11.3/cluster list Name User Version Path PrivateKey ---- ---- ------- ---- ---------- -prod-cluster tidb v7.0.0 /root/.tiup/storage/cluster/clusters/prod-cluster /root/.tiup/storage/cluster/clusters/prod-cluster/ssh/id_rsa +prod-cluster tidb v7.1.0 /root/.tiup/storage/cluster/clusters/prod-cluster /root/.tiup/storage/cluster/clusters/prod-cluster/ssh/id_rsa ``` ## 启动集群 @@ -202,7 +202,7 @@ tiup cluster display prod-cluster ``` Starting /root/.tiup/components/cluster/v1.11.3/cluster display prod-cluster TiDB Cluster: prod-cluster -TiDB Version: v7.0.0 +TiDB Version: v7.1.0 ID Role Host Ports OS/Arch Status Data Dir Deploy Dir -- ---- ---- ----- ------- ------ -------- ---------- 172.16.5.134:3000 grafana 172.16.5.134 3000 linux/x86_64 Up - deploy/grafana-3000 @@ -270,7 +270,7 @@ tiup cluster display prod-cluster ``` Starting /root/.tiup/components/cluster/v1.11.3/cluster display prod-cluster TiDB Cluster: prod-cluster -TiDB Version: v7.0.0 +TiDB Version: v7.1.0 ID Role Host Ports OS/Arch Status Data Dir Deploy Dir -- ---- ---- ----- ------- ------ -------- ---------- 172.16.5.134:3000 grafana 172.16.5.134 3000 linux/x86_64 Up - deploy/grafana-3000 @@ -370,12 +370,12 @@ Global Flags: -y, --yes 跳过所有的确认步骤 ``` -例如,把集群升级到 v7.0.0 的命令为: +例如,把集群升级到 v7.1.0 的命令为: {{< copyable "shell-regular" >}} ```bash -tiup cluster upgrade tidb-test v7.0.0 +tiup cluster upgrade tidb-test v7.1.0 ``` ## 更新配置 @@ -555,11 +555,11 @@ tiup cluster audit Starting component `cluster`: /home/tidb/.tiup/components/cluster/v1.11.3/cluster audit ID Time Command -- ---- ------- -4BLhr0 2022-03-29T23:55:09+08:00 /home/tidb/.tiup/components/cluster/v1.11.3/cluster deploy test v7.0.0 /tmp/topology.yaml -4BKWjF 2022-03-029T23:36:57+08:00 /home/tidb/.tiup/components/cluster/v1.11.3/cluster deploy test v7.0.0 /tmp/topology.yaml -4BKVwH 2022-03-29T23:02:08+08:00 /home/tidb/.tiup/components/cluster/v1.11.3/cluster deploy test v7.0.0 /tmp/topology.yaml -4BKKH1 2022-03-29T16:39:04+08:00 /home/tidb/.tiup/components/cluster/v1.11.3/cluster destroy test -4BKKDx 2022-03-29T16:36:57+08:00 /home/tidb/.tiup/components/cluster/v1.11.3/cluster deploy test v7.0.0 /tmp/topology.yaml +4BLhr0 2023-05-31T23:55:09+08:00 /home/tidb/.tiup/components/cluster/v1.11.3/cluster deploy test v7.1.0 /tmp/topology.yaml +4BKWjF 2023-05-31T23:36:57+08:00 /home/tidb/.tiup/components/cluster/v1.11.3/cluster deploy test v7.1.0 /tmp/topology.yaml +4BKVwH 2023-05-31T23:02:08+08:00 /home/tidb/.tiup/components/cluster/v1.11.3/cluster deploy test v7.1.0 /tmp/topology.yaml +4BKKH1 2023-05-31T16:39:04+08:00 /home/tidb/.tiup/components/cluster/v1.11.3/cluster destroy test +4BKKDx 2023-05-31T16:36:57+08:00 /home/tidb/.tiup/components/cluster/v1.11.3/cluster deploy test v7.1.0 /tmp/topology.yaml ``` 第一列为 audit-id,如果想看某个命令的执行日志,则传入这个 audit-id: diff --git a/tiup/tiup-component-cluster-deploy.md b/tiup/tiup-component-cluster-deploy.md index ccca9aba1d29..67d0585179f5 100644 --- a/tiup/tiup-component-cluster-deploy.md +++ b/tiup/tiup-component-cluster-deploy.md @@ -13,7 +13,7 @@ tiup cluster deploy [flags] ``` - `` 表示新集群的名字,不能和现有集群同名 -- `` 为要部署的 TiDB 集群版本号,如 `v7.0.0` +- `` 为要部署的 TiDB 集群版本号,如 `v7.1.0` - `` 为事先编写好的[拓扑文件](/tiup/tiup-cluster-topology-reference.md) ## 选项 diff --git a/tiup/tiup-component-cluster-patch.md b/tiup/tiup-component-cluster-patch.md index 22fde155ade3..55e1ee2e0547 100644 --- a/tiup/tiup-component-cluster-patch.md +++ b/tiup/tiup-component-cluster-patch.md @@ -28,7 +28,7 @@ tiup cluster patch [flags] 1. 确定以下变量的值: - `${component}`:需要替换的组件名(例如 `tidb`、`tikv`、`pd`)。 - - `${version}`:组件的版本(例如 `v7.0.0`、`v6.5.1`)。 + - `${version}`:组件的版本(例如 `v7.1.0`、`v6.5.1`)。 - `${os}`:操作系统 (`linux`)。 - `${arch}`:组件运行的平台 (`amd64`、`arm64`)。 2. 下载当前的组件包: diff --git a/tiup/tiup-component-management.md b/tiup/tiup-component-management.md index bd31b167f84b..aa9c3a75c48c 100644 --- a/tiup/tiup-component-management.md +++ b/tiup/tiup-component-management.md @@ -69,12 +69,12 @@ tiup install tidb tiup install tidb:nightly ``` -示例三:使用 TiUP 安装 v7.0.0 版本的 TiKV +示例三:使用 TiUP 安装 v7.1.0 版本的 TiKV {{< copyable "shell-regular" >}} ```shell -tiup install tikv:v7.0.0 +tiup install tikv:v7.1.0 ``` ## 升级组件 @@ -127,12 +127,12 @@ Flags: 如果想要多次启动同一个组件并复用之前的工作目录,就可以在启动时用 `--tag` 指定相同的名字。指定 tag 后,在实例终止时就*不会自动删除*工作目录,方便下次启动时复用。 -示例一:运行 v7.0.0 版本的 TiDB +示例一:运行 v7.1.0 版本的 TiDB {{< copyable "shell-regular" >}} ```shell -tiup tidb:v7.0.0 +tiup tidb:v7.1.0 ``` 示例二:指定 tag 运行 TiKV @@ -218,12 +218,12 @@ component 为要卸载的组件名称,version 为要卸载的版本,这两 - 若省略版本,加 `--all` 表示卸载该组件所有版本 - 若版本和组件都省略,则加 `--all` 表示卸载所有组件及其所有版本 -示例一:卸载 v7.0.0 版本的 TiDB +示例一:卸载 v7.1.0 版本的 TiDB {{< copyable "shell-regular" >}} ```shell -tiup uninstall tidb:v7.0.0 +tiup uninstall tidb:v7.1.0 ``` 示例二:卸载所有版本的 TiKV diff --git a/tiup/tiup-mirror.md b/tiup/tiup-mirror.md index 01a549b4140a..c9cd9401fe25 100644 --- a/tiup/tiup-mirror.md +++ b/tiup/tiup-mirror.md @@ -86,9 +86,9 @@ tiup mirror clone [global-version] [flags] 如果只想克隆某个组件的某一个版本而不是所有版本,则使用 `--=` 来限定,例如: - - 只想克隆 TiDB 的 v7.0.0 版本,则执行 `tiup mirror clone --tidb v7.0.0` - - 只想克隆 TiDB 的 v7.0.0 版本,以及 TiKV 的所有版本,则执行 `tiup mirror clone --tidb v7.0.0 --tikv all` - - 克隆一个集群的所有组件的 v7.0.0 版本,则执行 `tiup mirror clone v7.0.0` + - 只想克隆 TiDB 的 v7.1.0 版本,则执行 `tiup mirror clone --tidb v7.1.0` + - 只想克隆 TiDB 的 v7.1.0 版本,以及 TiKV 的所有版本,则执行 `tiup mirror clone --tidb v7.1.0 --tikv all` + - 克隆一个集群的所有组件的 v7.1.0 版本,则执行 `tiup mirror clone v7.1.0` 克隆完成后,签名密钥会自动设置。 diff --git a/tiup/tiup-playground.md b/tiup/tiup-playground.md index 566e50569ae6..613123f1b22b 100644 --- a/tiup/tiup-playground.md +++ b/tiup/tiup-playground.md @@ -19,7 +19,7 @@ tiup playground ${version} [flags] - 因为该命令没有指定 playground 的版本,TiUP 会先查找已安装的 playground 的最新版本,假设已安装的 playground 最新版为 v1.11.3,则该命令相当于 tiup playground:v1.11.3 - 如果 playground 从未安装过任何版本的 TiDB/TiKV/PD 组件,TiUP 会先安装这些组件的最新稳定版,然后再启动运行这些组件的实例 -- 因为该命令没有指定 TiDB/PD/TiKV 各组件的版本,默认情况下,它会使用各组件的最新发布版本,假设当前为 v7.0.0,则该命令相当于 tiup playground:1.11.3 v7.0.0 +- 因为该命令没有指定 TiDB/PD/TiKV 各组件的版本,默认情况下,它会使用各组件的最新发布版本,假设当前为 v7.1.0,则该命令相当于 tiup playground:1.11.3 v7.1.0 - 因为该命令也没有指定各组件的个数,默认情况下,它会启动由 1 个 TiDB、1 个 TiKV、1 个 PD 和 1 个 TiFlash 实例构成的最小化集群 - 在依次启动完各个 TiDB 组件后,playground 会提醒集群启动成功,并告诉你一些有用的信息,譬如如何通过 MySQL 客户端连接集群、如何访问 [TiDB Dashboard](/dashboard/dashboard-intro.md) 等 diff --git a/upgrade-tidb-using-tiup.md b/upgrade-tidb-using-tiup.md index 1d80cf41f918..a529fd31181c 100644 --- a/upgrade-tidb-using-tiup.md +++ b/upgrade-tidb-using-tiup.md @@ -7,15 +7,10 @@ aliases: ['/docs-cn/dev/upgrade-tidb-using-tiup/','/docs-cn/dev/how-to/upgrade/u 本文档适用于以下升级路径: -- 使用 TiUP 从 TiDB 4.0 版本升级至 TiDB 7.0。 -- 使用 TiUP 从 TiDB 5.0-5.4 版本升级至 TiDB 7.0。 -- 使用 TiUP 从 TiDB 6.0 版本升级至 TiDB 7.0。 -- 使用 TiUP 从 TiDB 6.1 版本升级至 TiDB 7.0。 -- 使用 TiUP 从 TiDB 6.2 版本升级至 TiDB 7.0。 -- 使用 TiUP 从 TiDB 6.3 版本升级至 TiDB 7.0。 -- 使用 TiUP 从 TiDB 6.4 版本升级至 TiDB 7.0。 -- 使用 TiUP 从 TiDB 6.5 版本升级至 TiDB 7.0。 -- 使用 TiUP 从 TiDB 6.6 版本升级至 TiDB 7.0。 +- 使用 TiUP 从 TiDB 4.0 版本升级至 TiDB 7.1。 +- 使用 TiUP 从 TiDB 5.0-5.4 版本升级至 TiDB 7.1。 +- 使用 TiUP 从 TiDB 6.0-6.6 版本升级至 TiDB 7.1。 +- 使用 TiUP 从 TiDB 7.0 版本升级至 TiDB 7.1。 > **警告:** > @@ -27,17 +22,17 @@ aliases: ['/docs-cn/dev/upgrade-tidb-using-tiup/','/docs-cn/dev/how-to/upgrade/u > **注意:** > -> 如果原集群是 3.0 或 3.1 或更早的版本,不支持直接升级到 7.0.0 及后续修订版本。你需要先从早期版本升级到 4.0 后,再从 4.0 升级到 7.0.0 及后续修订版本。 +> 如果原集群是 3.0 或 3.1 或更早的版本,不支持直接升级到 v7.1.0 及后续修订版本。你需要先从早期版本升级到 4.0 后,再从 4.0 升级到 v7.1.0 及后续修订版本。 ## 1. 升级兼容性说明 - TiDB 目前暂不支持版本降级或升级后回退。 -- 使用 TiDB Ansible 管理的 4.0 版本集群,需要先按照 [4.0 版本文档的说明](https://docs.pingcap.com/zh/tidb/v4.0/upgrade-tidb-using-tiup)将集群导入到 TiUP (`tiup cluster`) 管理后,再按本文档说明升级到 7.0.0 版本。 -- 若要将 3.0 之前的版本升级至 7.0.0 版本: +- 使用 TiDB Ansible 管理的 4.0 版本集群,需要先按照 [4.0 版本文档的说明](https://docs.pingcap.com/zh/tidb/v4.0/upgrade-tidb-using-tiup)将集群导入到 TiUP (`tiup cluster`) 管理后,再按本文档说明升级到 v7.1.0 版本。 +- 若要将 v3.0 之前的版本升级至 v7.1.0 版本: 1. 首先[通过 TiDB Ansible 升级到 3.0 版本](https://docs.pingcap.com/zh/tidb/v3.0/upgrade-tidb-using-ansible)。 2. 然后按照 [4.0 版本文档的说明](https://docs.pingcap.com/zh/tidb/v4.0/upgrade-tidb-using-tiup),使用 TiUP (`tiup cluster`) 将 TiDB Ansible 配置导入。 - 3. 将集群升级至 4.0 版本。 - 4. 按本文档说明将集群升级到 7.0.0 版本。 + 3. 将集群升级至 v4.0 版本。 + 4. 按本文档说明将集群升级到 v7.1.0 版本。 - 支持 TiDB Binlog,TiCDC,TiFlash 等组件版本的升级。 - 将 v6.3.0 之前的 TiFlash 升级至 v6.3.0 及之后的版本时,需要特别注意:在 Linux AMD64 架构的硬件平台部署 TiFlash 时,CPU 必须支持 AVX2 指令集。而在 Linux ARM64 架构的硬件平台部署 TiFlash 时,CPU 必须支持 ARMv8 架构。具体请参考 [6.3.0 版本 Release Notes](/releases/release-6.3.0.md#其他) 中的描述。 - 具体不同版本的兼容性说明,请查看各个版本的 [Release Note](/releases/release-notes.md)。请根据各个版本的 Release Note 的兼容性更改调整集群的配置。 @@ -49,7 +44,7 @@ aliases: ['/docs-cn/dev/upgrade-tidb-using-tiup/','/docs-cn/dev/how-to/upgrade/u ### 2.1 查阅兼容性变更 -查阅 TiDB v7.0.0 release notes 中的[兼容性变更](/releases/release-7.0.0.md#兼容性变更)。如果有任何变更影响到了你的升级,请采取相应的措施。 +查阅 TiDB v7.1.0 release notes 中的[兼容性变更](/releases/release-7.1.0.md#兼容性变更)。如果有任何变更影响到了你的升级,请采取相应的措施。 ### 2.2 升级 TiUP 或更新 TiUP 离线镜像 @@ -142,7 +137,7 @@ tiup update cluster > **注意:** > -> 升级到 7.0.0 版本前,请确认已在 4.0 修改的参数在 7.0.0 版本中是兼容的,可参考 [TiKV 配置文件描述](/tikv-configuration-file.md)。 +> 升级到 v7.1.0 版本前,请确认已在 4.0 修改的参数在 v7.1.0 版本中是兼容的,可参考 [TiKV 配置文件描述](/tikv-configuration-file.md)。 ### 2.4 检查当前集群的健康状况 @@ -179,12 +174,12 @@ tiup cluster check --cluster tiup cluster upgrade ``` -以升级到 7.0.0 版本为例: +以升级到 v7.1.0 版本为例: {{< copyable "shell-regular" >}} ``` -tiup cluster upgrade v7.0.0 +tiup cluster upgrade v7.1.0 ``` > **注意:** @@ -237,7 +232,7 @@ tiup cluster display ``` Cluster type: tidb Cluster name: -Cluster version: v7.0.0 +Cluster version: v7.1.0 ``` ## 4. 升级 FAQ @@ -283,5 +278,5 @@ tiup cluster upgrade --force {{< copyable "" >}} ``` -tiup install ctl:v7.0.0 +tiup install ctl:v7.1.0 ``` From 60f077fbfb2a059f38d0200d956b25424b486355 Mon Sep 17 00:00:00 2001 From: Aolin Date: Wed, 31 May 2023 19:28:42 +0800 Subject: [PATCH 154/257] update installation package for v7.0.0 (#14098) --- releases/release-7.0.0.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/releases/release-7.0.0.md b/releases/release-7.0.0.md index 86c3faa83b1b..a680c4a7be93 100644 --- a/releases/release-7.0.0.md +++ b/releases/release-7.0.0.md @@ -9,7 +9,7 @@ summary: 了解 TiDB 7.0.0 版本的新功能、兼容性变更、改进提升 TiDB 版本:7.0.0 -试用链接:[快速体验](https://docs.pingcap.com/zh/tidb/v7.0/quick-start-with-tidb) | [下载离线包](https://cn.pingcap.com/product-community/) +试用链接:[快速体验](https://docs.pingcap.com/zh/tidb/v7.0/quick-start-with-tidb) | [下载离线包](https://cn.pingcap.com/product-community/?version=v7.0.0-DMR#version-list) 在 7.0.0 版本中,你可以获得以下关键特性: From a4b1e955ac788d3ea153fd0576c59bf8f72baa15 Mon Sep 17 00:00:00 2001 From: Aolin Date: Thu, 1 Jun 2023 09:50:42 +0800 Subject: [PATCH 155/257] release notes: fix broken link (#14102) --- releases/release-7.1.0.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/releases/release-7.1.0.md b/releases/release-7.1.0.md index 29f31fe8b13f..9ec84a7cc0a3 100644 --- a/releases/release-7.1.0.md +++ b/releases/release-7.1.0.md @@ -533,7 +533,7 @@ TiDB 7.1.0 为长期支持版本 (Long-Term Support Release, LTS)。 ## 性能测试 -如需了解 TiDB v7.1.0 的性能表现,你可以参考 TiDB Cloud Dedicated 集群的 [TPC-C 性能测试报告](https://docs.pingcap/tidbcloud/v7.1.0-performance-benchmarking-with-tpcc)(英文版)。 +如需了解 TiDB v7.1.0 的性能表现,你可以参考 TiDB Cloud Dedicated 集群的 [TPC-C 性能测试报告](https://docs.pingcap.com/tidbcloud/v7.1.0-performance-benchmarking-with-tpcc)(英文版)。 ## 贡献者 From b9cbb24b6c7ecb5b9ee378eb392ca8aac0723043 Mon Sep 17 00:00:00 2001 From: dcswinner01 Date: Thu, 1 Jun 2023 10:54:42 +0800 Subject: [PATCH 156/257] Update system-variables.md (#14106) --- system-variables.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/system-variables.md b/system-variables.md index 2d54a228f3a8..00d2d44bd90b 100644 --- a/system-variables.md +++ b/system-variables.md @@ -728,7 +728,7 @@ mysql> SHOW GLOBAL VARIABLES LIKE 'max_prepared_stmt_count'; - 默认值:`OFF` - 这个变量用于控制表是否必须有主键。启用该变量后,如果在没有主键的情况下创建或修改表,将返回错误。 - 该功能基于 MySQL 8.0 的特性 [`sql_require_primary_key`](https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_sql_require_primary_key)。 -- 强烈推荐在使用 TiCDC 时启用改变量,因为同步数据变更至 MySQL sink 时要求表必须有主键。 +- 强烈推荐在使用 TiCDC 时启用该变量,因为同步数据变更至 MySQL sink 时要求表必须有主键。 ### `sql_select_limit` 从 v4.0.2 版本开始引入 From 962d9aaf6d1f4ca8ffe7b41ee859c7bc399ca5ad Mon Sep 17 00:00:00 2001 From: xixirangrang Date: Thu, 1 Jun 2023 11:52:42 +0800 Subject: [PATCH 157/257] sql: add more descriptions about create table parameters (#14089) --- auto-increment.md | 2 ++ auto-random.md | 2 ++ 2 files changed, 4 insertions(+) diff --git a/auto-increment.md b/auto-increment.md index 1bcaba9f6d78..1e971ee4de72 100644 --- a/auto-increment.md +++ b/auto-increment.md @@ -12,6 +12,8 @@ aliases: ['/docs-cn/dev/auto-increment/'] > > 使用 `AUTO_INCREMENT` 可能会给生产环境带热点问题,因此推荐使用 [`AUTO_RANDOM`](/auto-random.md) 代替。详情请参考 [TiDB 热点问题处理](/troubleshoot-hot-spot-issues.md#tidb-热点问题处理)。 +在 [`CREATE TABLE`](/sql-statements/sql-statement-create-table.md) 语句中也可以使用 `AUTO_INCREMENT` 参数来指定自增字段的初始值。 + ## 基本概念 `AUTO_INCREMENT` 是用于自动填充缺省列值的列属性。当 `INSERT` 语句没有指定 `AUTO_INCREMENT` 列的具体值时,系统会自动地为该列分配一个值。 diff --git a/auto-random.md b/auto-random.md index f211948f6598..a4678d181266 100644 --- a/auto-random.md +++ b/auto-random.md @@ -12,6 +12,8 @@ aliases: ['/docs-cn/dev/auto-random/','/docs-cn/dev/reference/sql/attributes/aut 关于如何在高并发写入场景下调优 TiDB,请参阅 [TiDB 高并发写入场景最佳实践](/best-practices/high-concurrency-best-practices.md)。 +在 [`CREATE TABLE`](/sql-statements/sql-statement-create-table.md) 语句中的 `AUTO_RANDOM_BASE` 参数,也可以用来指定 `AUTO_RANDOM` 自增部分的初始值,该参数可以被认为属于内部接口的一部分,对于用户而言请忽略。 + ## 基本概念 `AUTO_RANDOM` 是应用在 `BIGINT` 类型列的属性,用于列值的自动分配。其自动分配的值满足**随机性**和**唯一性**。 From 5646dd60b6856dbcedb3943985e9d975f1c2006c Mon Sep 17 00:00:00 2001 From: Aolin Date: Thu, 1 Jun 2023 14:12:42 +0800 Subject: [PATCH 158/257] release note: update configuration item (#14104) --- releases/release-7.1.0.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/releases/release-7.1.0.md b/releases/release-7.1.0.md index 9ec84a7cc0a3..0f4ca4961d64 100644 --- a/releases/release-7.1.0.md +++ b/releases/release-7.1.0.md @@ -345,11 +345,11 @@ TiDB 7.1.0 为长期支持版本 (Long-Term Support Release, LTS)。 | 配置文件 | 配置项 | 修改类型 | 描述 | | -------- | -------- | -------- | -------- | -| TiDB | [`force-init-stats`](/tidb-configuration-file.md#force-init-stats-从-v710-版本开始引入) | 新增 | 用于控制 TiDB 启动时是否在统计信息初始化完成后再对外提供服务。 | -| TiDB | [`lite-init-stats`](/tidb-configuration-file.md#lite-init-stats-从-v710-版本开始引入) | 新增 | 用于控制 TiDB 启动时是否采用轻量级的统计信息初始化。 | -| TiDB | [`timeout`](/tidb-configuration-file.md#timeout-从-v710-版本开始引入) | 新增 | 用于控制 TiDB 写日志操作的超时时间,当磁盘故障导致日志无法写入时,该配置可以让 TiDB 进程崩溃而不是卡死。默认值为 `0`,即不设定超时时间。 | -| TiKV | [`optimize-filters-for-memory`](/tikv-configuration-file.md#optimize-filters-for-memory-从-v710-版本开始引入) | 新增 | 控制是否生成能够最小化内存碎片的 Bloom/Ribbon filter。 | -| TiKV | [`ribbon-filter-above-level`](/tikv-configuration-file.md#ribbon-filter-above-level-从-v710-版本开始引入) | 新增 | 控制是否对于大于等于该值的 level 使用 Ribbon filter,对于小于该值的 level,使用非 block-based bloom filter。 | +| TiDB | [`performance.force-init-stats`](/tidb-configuration-file.md#force-init-stats-从-v710-版本开始引入) | 新增 | 用于控制 TiDB 启动时是否在统计信息初始化完成后再对外提供服务。 | +| TiDB | [`performance.lite-init-stats`](/tidb-configuration-file.md#lite-init-stats-从-v710-版本开始引入) | 新增 | 用于控制 TiDB 启动时是否采用轻量级的统计信息初始化。 | +| TiDB | [`log.timeout`](/tidb-configuration-file.md#timeout-从-v710-版本开始引入) | 新增 | 用于控制 TiDB 写日志操作的超时时间,当磁盘故障导致日志无法写入时,该配置可以让 TiDB 进程崩溃而不是卡死。默认值为 `0`,即不设定超时时间。 | +| TiKV | [rocksdb.\[defaultcf\|writecf\|lockcf\].optimize-filters-for-memory](/tikv-configuration-file.md#optimize-filters-for-memory-从-v710-版本开始引入) | 新增 | 控制是否生成能够最小化内存碎片的 Bloom/Ribbon filter。 | +| TiKV | [rocksdb.\[defaultcf\|writecf\|lockcf\].ribbon-filter-above-level](/tikv-configuration-file.md#ribbon-filter-above-level-从-v710-版本开始引入) | 新增 | 控制是否对于大于等于该值的 level 使用 Ribbon filter,对于小于该值的 level,使用非 block-based bloom filter。 | | TiKV | [`split.byte-threshold`](/tikv-configuration-file.md#byte-threshold-从-v50-版本开始引入) | 修改 | 当 [`region-split-size`](/tikv-configuration-file.md#region-split-size) 大于等于 4 GB 时,默认值从 `30MiB` 修改为 `100MiB`。 | | TiKV | [`split.qps-threshold`](/tikv-configuration-file.md#qps-threshold) | 修改 | 当 [`region-split-size`](/tikv-configuration-file.md#region-split-size) 大于等于 4 GB 时,默认值从 `3000` 修改为 `7000`。 | | TiKV | [`split.region-cpu-overload-threshold-ratio`](/tikv-configuration-file.md#region-cpu-overload-threshold-ratio-从-v620-版本开始引入) | 修改 | 当 [`region-split-size`](/tikv-configuration-file.md#region-split-size) 大于等于 4 GB 时,默认值从 `0.25` 修改为 `0.75`。 | From 648829ed019a2da5c650467a158163581abc72d1 Mon Sep 17 00:00:00 2001 From: xixirangrang Date: Thu, 1 Jun 2023 15:20:42 +0800 Subject: [PATCH 159/257] lightning: change english names to chinese (#14107) --- TOC.md | 4 +- dm/task-configuration-file-full.md | 4 +- migration-tools.md | 4 +- releases/release-6.2.0.md | 6 +-- releases/release-6.6.0.md | 10 ++--- releases/release-7.0.0.md | 6 +-- tidb-lightning/deploy-tidb-lightning.md | 4 +- .../tidb-lightning-command-line-full.md | 2 +- .../tidb-lightning-configuration.md | 42 +++++++++---------- .../tidb-lightning-distributed-import.md | 8 ++-- .../tidb-lightning-error-resolution.md | 2 +- tidb-lightning/tidb-lightning-faq.md | 2 +- ...idb-lightning-logical-import-mode-usage.md | 2 +- .../tidb-lightning-logical-import-mode.md | 2 +- tidb-lightning/tidb-lightning-overview.md | 4 +- ...db-lightning-physical-import-mode-usage.md | 18 ++++---- .../tidb-lightning-physical-import-mode.md | 16 +++---- 17 files changed, 68 insertions(+), 68 deletions(-) diff --git a/TOC.md b/TOC.md index 64d7a8c78b90..f72d4b42279d 100644 --- a/TOC.md +++ b/TOC.md @@ -490,13 +490,13 @@ - [SQL](/tidb-lightning/tidb-lightning-data-source.md#sql) - [Parquet](/tidb-lightning/tidb-lightning-data-source.md#parquet) - [自定义文件匹配](/tidb-lightning/tidb-lightning-data-source.md#自定义文件匹配) - - Physical Import Mode + - 物理导入模式 - [概述](/tidb-lightning/tidb-lightning-physical-import-mode.md) - [必要条件及限制](/tidb-lightning/tidb-lightning-physical-import-mode.md#必要条件及限制) - [配置及使用](/tidb-lightning/tidb-lightning-physical-import-mode-usage.md) - [冲突检测](/tidb-lightning/tidb-lightning-physical-import-mode-usage.md#冲突数据检测) - [性能调优](/tidb-lightning/tidb-lightning-physical-import-mode-usage.md#性能调优) - - Logical Import Mode + - 逻辑导入模式 - [概述](/tidb-lightning/tidb-lightning-logical-import-mode.md) - [必要条件及限制](/tidb-lightning/tidb-lightning-logical-import-mode.md#必要条件) - [配置及使用](/tidb-lightning/tidb-lightning-logical-import-mode-usage.md) diff --git a/dm/task-configuration-file-full.md b/dm/task-configuration-file-full.md index b1177b0c9b06..c1abf0d50f63 100644 --- a/dm/task-configuration-file-full.md +++ b/dm/task-configuration-file-full.md @@ -155,9 +155,9 @@ loaders: # load 处理单元的运行配置参数 # - "off"。表示导入完成后不进行 ANALYZE 操作。 # ANALYZE 只影响统计数据,在大部分场景下建议不开启 ANALYZE。 analyze: "off" - # Physical Import Mode 向 TiKV 写入 KV 数据的并发度。当 dm-worker 和 TiKV 网络传输速度超过万兆时,可适当增加这个值。 + # 物理导入模式向 TiKV 写入 KV 数据的并发度。当 dm-worker 和 TiKV 网络传输速度超过万兆时,可适当增加这个值。 # range-concurrency: 16 - # Physical Import Mode 向 TiKV 发送 KV 数据时是否启用压缩。目前仅支持 Gzip 压缩算法,可填写 "gzip" 或 "gz"。默认不启用压缩。 + # 物理导入模式向 TiKV 发送 KV 数据时是否启用压缩。目前仅支持 Gzip 压缩算法,可填写 "gzip" 或 "gz"。默认不启用压缩。 # compress-kv-pairs: "" # PD server 的地址,填一个即可。该值为空时,默认使用 TiDB 查询到的 PD 地址信息。 # pd-addr: "192.168.0.1:2379" diff --git a/migration-tools.md b/migration-tools.md index 3cf714643211..20918f133b5e 100644 --- a/migration-tools.md +++ b/migration-tools.md @@ -16,7 +16,7 @@ TiDB 提供了丰富的数据迁移相关的工具,用于全量迁移、增量 | **上游** | MySQL,MariaDB,Aurora | | **下游** | TiDB | | **主要优势** |
  • 一体化的数据迁移任务管理工具,支持全量迁移和增量同步
  • 支持对表与操作进行过滤
  • 支持分库分表的合并迁移
| -| **使用限制** | 数据导入速度与 TiDB Lightning 的 [Logical Import Mode](/tidb-lightning/tidb-lightning-logical-import-mode.md) 大致相同,而比TiDB Lightning 的 [Physical Import Mode](/tidb-lightning/tidb-lightning-physical-import-mode.md) 低很多。建议用于 1 TB 以内的存量数据迁移。 | +| **使用限制** | 数据导入速度与 TiDB Lightning 的[逻辑导入模式](/tidb-lightning/tidb-lightning-logical-import-mode.md)大致相同,而比 TiDB Lightning 的[物理导入模式](/tidb-lightning/tidb-lightning-physical-import-mode.md)低很多。建议用于 1 TB 以内的存量数据迁移。 | ## [TiDB Lightning](/tidb-lightning/tidb-lightning-overview.md) @@ -25,7 +25,7 @@ TiDB 提供了丰富的数据迁移相关的工具,用于全量迁移、增量 | **上游(输入源文件)** |
  • Dumpling 输出的文件
  • 从 Amazon Aurora 或 Apache Hive 导出的 Parquet 文件
  • CSV 文件
  • 从本地盘或 Amazon S3 云盘读取数据
| | **下游** | TiDB | | **主要优势** |
  • 支持快速导入大量数据,实现快速初始化 TiDB 集群的指定表
  • 支持断点续传
  • 支持数据过滤
| -| **使用限制** |
  • 如果使用 [Physical Import Mode](/tidb-lightning/tidb-lightning-physical-import-mode.md) 进行数据导入,TiDB Lightning 运行后,TiDB 集群将无法正常对外提供服务。
  • 如果你不希望 TiDB 集群的对外服务受到影响,可以参考 TiDB Lightning [Logical Import Mode](/tidb-lightning/tidb-lightning-logical-import-mode.md) 中的硬件需求与部署方式进行数据导入。
| +| **使用限制** |
  • 如果使用[物理导入模式](/tidb-lightning/tidb-lightning-physical-import-mode.md)进行数据导入,TiDB Lightning 运行后,TiDB 集群将无法正常对外提供服务。
  • 如果你不希望 TiDB 集群的对外服务受到影响,可以参考 TiDB Lightning [逻辑导入模式](/tidb-lightning/tidb-lightning-logical-import-mode.md)中的硬件需求与部署方式进行数据导入。
| ## [Dumpling](/dumpling-overview.md) diff --git a/releases/release-6.2.0.md b/releases/release-6.2.0.md index 3c385a85a45e..017977ea91e2 100644 --- a/releases/release-6.2.0.md +++ b/releases/release-6.2.0.md @@ -22,7 +22,7 @@ TiDB 版本:6.2.0-DMR - 引入新的 DDL 并行执行框架,减少 DDL 阻塞,大幅提升执行效率。 - TiKV 支持[自适应调整 CPU 使用率](/tikv-configuration-file.md#后台限流),确保数据库稳定高效运行。 - 支持 [point-in-time recovery (PITR)](/br/backup-and-restore-overview.md),允许恢复备份集群的历史任意时间点的快照。 -- TiDB Lightning 使用 Physical Import Mode [导入时限制调度范围从集群降低到表级别](/tidb-lightning/tidb-lightning-physical-import-mode-usage.md#导入时暂停-pd-调度的范围)。 +- TiDB Lightning 使用物理导入模式[导入时限制调度范围从集群降低到表级别](/tidb-lightning/tidb-lightning-physical-import-mode-usage.md#导入时暂停-pd-调度的范围)。 - Backup & Restore (BR) 支持[恢复用户和权限数据](/br/br-snapshot-guide.md#恢复-mysql-数据库下的表),备份恢复体验更平滑。 - TiCDC 支持[过滤指定类型的 DDL 事件](/ticdc/ticdc-filter.md#event-filter-事件过滤器-从-v620-版本开始引入),解锁更多数据同步场景。 - 事务中支持 [`SAVEPOINT` 机制](/sql-statements/sql-statement-savepoint.md),可以灵活地控制事务内的回退节点。 @@ -204,7 +204,7 @@ TiDB 版本:6.2.0-DMR [用户文档](/tidb-lightning/tidb-lightning-physical-import-mode-usage.md#磁盘资源配额-从-v620-版本开始引入) [#446](https://github.com/pingcap/tidb-lightning/issues/446) @[buchuitoudegou](https://github.com/buchuitoudegou) -* TiDB Lightning 支持使用 Physical Import Mode 导入数据到生产集群 +* TiDB Lightning 支持使用物理导入模式导入数据到生产集群 TiDB Lightning 原有的物理导入模式 (backend='local') 对目标集群影响较大,例如导入过程将停止 PD 调度等,因此仅适用于目标集群初次导入数据。 @@ -214,7 +214,7 @@ TiDB 版本:6.2.0-DMR [用户文档](/tidb-lightning/tidb-lightning-physical-import-mode-usage.md#导入时暂停-pd-调度的范围) [#35148](https://github.com/pingcap/tidb/issues/35148) @[gozssky](https://github.com/gozssky) -* 调整 [TiDB Lightning 在线文档](/tidb-lightning/tidb-lightning-overview.md),使其目录结构更加合理和清晰。同时对文档中关于“后端模式”的描述进行了修改,使用 Physical Import Mode 替代原有 local backend,使用 Logical Import Mode 替代原有 tidb backend ,以降低新用户的理解难度。 +* 调整 [TiDB Lightning 在线文档](/tidb-lightning/tidb-lightning-overview.md),使其目录结构更加合理和清晰。同时对文档中关于“后端模式”的描述进行了修改,使用物理导入模式替代原有 local backend,使用 Logical Import Mode 替代原有 tidb backend ,以降低新用户的理解难度。 ### 数据共享与订阅 diff --git a/releases/release-6.6.0.md b/releases/release-6.6.0.md index 00ae3df2143d..4dde2f762ff1 100644 --- a/releases/release-6.6.0.md +++ b/releases/release-6.6.0.md @@ -202,9 +202,9 @@ TiDB 版本:6.6.0-[DMR](/releases/versioning.md#开发里程碑版本) 更多信息,请参考[用户文档](/tidb-configuration-file.md#initialize-sql-file-从-v660-版本开始引入)。 -- TiDB Data Migration (DM) 集成了 TiDB Lightning 的 Physical Import Mode(实验特性)@[lance6716](https://github.com/lance6716) +- TiDB Data Migration (DM) 集成了 TiDB Lightning 的物理导入模式(实验特性)@[lance6716](https://github.com/lance6716) - 在 v6.6.0 版本中,DM 的全量迁移能力集成了 TiDB Lightning 的 Physical Import Mode,使得 DM 全量数据迁移的性能最高可提升 10 倍,大大缩短了大数据量场景下的迁移时间。在 v6.6.0 以前,数据量较多的场景下,需要单独配置 TiDB Lightning 的 Physical Import Mode 任务来进行快速的全量数据迁移,再用 DM 来进行增量数据迁移,配置较为复杂。从 v6.6.0 起,在迁移大数据量的场景,无需再配置 TiDB Lightning 的任务,使用一个 DM 任务即可完成。 + 在 v6.6.0 版本中,DM 的全量迁移能力集成了 TiDB Lightning 的物理导入模式,使得 DM 全量数据迁移的性能最高可提升 10 倍,大大缩短了大数据量场景下的迁移时间。在 v6.6.0 以前,数据量较多的场景下,需要单独配置 TiDB Lightning 的物理导入模式任务来进行快速的全量数据迁移,再用 DM 来进行增量数据迁移,配置较为复杂。从 v6.6.0 起,在迁移大数据量的场景,无需再配置 TiDB Lightning 的任务,使用一个 DM 任务即可完成。 更多信息,请参考[用户文档](/dm/dm-precheck.md#physical-import-检查项)。 @@ -381,7 +381,7 @@ TiDB 版本:6.6.0-[DMR](/releases/versioning.md#开发里程碑版本) | PD | [`enable-telemetry`](/pd-configuration-file.md#enable-telemetry) | 修改 | 从 v6.6.0 起,该配置项的默认值由 `true` 改为 `false`,表示默认关闭 TiDB Dasboard 的遥测功能。 | | TiFlash | [`profile.default.max_memory_usage_for_all_queries`](/tiflash/tiflash-configuration.md#配置文件-tiflashtoml) | 修改 | 表示所有查询过程中,节点对中间数据的内存限制。自 v6.6.0 起默认值由 `0` 改为 `0.8`,表示节点占总内存的 80%。 | | TiCDC | [`consistent.storage`](/ticdc/ticdc-sink-to-mysql.md#使用前提) | 修改 | redo log 备份文件的地址,除了 NFS,支持的 `scheme` 新增了 GCS 和 Azure。 | -| DM | [`import-mode`](/dm/task-configuration-file-full.md) | 修改 | 该配置项的可选值由 `"sql"` 和 `"loader"` 变更为 `"logical"` 和 `"physical"`。默认值为 `"logical"`,即使用 TiDB Lightning 的 Logical Import Mode 进行导入。 | +| DM | [`import-mode`](/dm/task-configuration-file-full.md) | 修改 | 该配置项的可选值由 `"sql"` 和 `"loader"` 变更为 `"logical"` 和 `"physical"`。默认值为 `"logical"`,即使用 TiDB Lightning 的逻辑导入模式进行导入。 | | TiDB | [`initialize-sql-file`](/tidb-configuration-file.md#initialize-sql-file-从-v660-版本开始引入) | 新增 | 用于指定 TiDB 集群初次启动时执行的 SQL 脚本。默认值为空。 | | TiDB | [`tidb_stmt_summary_enable_persistent`](/tidb-configuration-file.md#tidb_stmt_summary_enable_persistent-从-v660-版本开始引入) | 新增 | 用于控制是否开启 statements summary 持久化。默认值为 `false`,即不开启该功能。 | | TiDB | [`tidb_stmt_summary_file_max_backups`](/tidb-configuration-file.md#tidb_stmt_summary_file_max_backups-从-v660-版本开始引入) | 新增 | 当开启了 statements summary 持久化时,该配置用于限制持久化数据文件最大数量,默认值为 `0`,表示不限制文件数量。 | @@ -397,7 +397,7 @@ TiDB 版本:6.6.0-[DMR](/releases/versioning.md#开发里程碑版本) | PD | [`pd-server.server-memory-limit`](/pd-configuration-file.md#server-memory-limit-从-v660-版本开始引入) | 新增 | PD 实例的内存限制比例。`0` 表示不设内存限制。 | | PD | [`pd-server.server-memory-limit-gc-trigger`](/pd-configuration-file.md#server-memory-limit-gc-trigger-从-v660-版本开始引入) | 新增 | PD 尝试触发 GC 的阈值比例。默认值为 `0.7`。 | | TiCDC | [`scheduler.region-per-span`](/ticdc/ticdc-changefeed-config.md#ticdc-changefeed-配置文件说明) | 新增 | 该配置项用于将表按 Region 个数划分成多个同步范围,这些范围可由多个 TiCDC 节点同步,默认值为 `50000`。 | -| TiDB Lightning | [`compress-kv-pairs`](/tidb-lightning/tidb-lightning-configuration.md#tidb-lightning-任务配置) | 新增 | 该配置项控制 Physical Import Mode 向 TiKV 发送 KV 时是否启用压缩,默认值为空,表示不启用压缩。 | +| TiDB Lightning | [`compress-kv-pairs`](/tidb-lightning/tidb-lightning-configuration.md#tidb-lightning-任务配置) | 新增 | 该配置项控制物理导入模式向 TiKV 发送 KV 时是否启用压缩,默认值为空,表示不启用压缩。 | | DM | [`checksum-physical`](/dm/task-configuration-file-full.md) | 新增 | 该配置项控制 Physical Import 在导入完成一张表后,对每一个表执行 `ADMIN CHECKSUM TABLE ` 进行数据校验。默认值为 `"required"`,表示导入完成后进行数据校验,如果校验失败会暂停任务,需要你手动处理。| | DM | [`disk-quota-physical`](/dm/task-configuration-file-full.md) | 新增 | 该配置项设置了磁盘的空间限制,对应 TiDB Lightning 的 [`disk-quota` 配置](/tidb-lightning/tidb-lightning-physical-import-mode-usage.md#磁盘资源配额-从-v620-版本开始引入)。| | DM | [`on-duplicate-logical`](/dm/task-configuration-file-full.md) | 新增 | 该配置项控制 Logical Import 针对冲突数据的解决方式。默认值为 `"replace"`,表示用最新数据替代已有数据。 | @@ -476,7 +476,7 @@ TiDB 版本:6.6.0-[DMR](/releases/versioning.md#开发里程碑版本) + TiDB Lightning - - Physical Import Mode 支持 Keyspace [#40531](https://github.com/pingcap/tidb/issues/40531) @[iosmanthus](https://github.com/iosmanthus) + - 物理导入模式支持 Keyspace [#40531](https://github.com/pingcap/tidb/issues/40531) @[iosmanthus](https://github.com/iosmanthus) - 支持通过 `lightning.max-error` 设置最大冲突个数 [#40743](https://github.com/pingcap/tidb/issues/40743) @[dsdashun](https://github.com/dsdashun) - 支持导入带有 BOM header 的 CSV 数据文件 [#40744](https://github.com/pingcap/tidb/issues/40744) @[dsdashun](https://github.com/dsdashun) - 优化遇到 TiKV 限流错误时的处理逻辑,改为尝试其他空闲的 Region [#40205](https://github.com/pingcap/tidb/issues/40205) @[lance6716](https://github.com/lance6716) diff --git a/releases/release-7.0.0.md b/releases/release-7.0.0.md index a680c4a7be93..81dfcbfe49ce 100644 --- a/releases/release-7.0.0.md +++ b/releases/release-7.0.0.md @@ -370,7 +370,7 @@ TiDB 版本:7.0.0 | TiFlash | [`storage.s3.secret_access_key`](/tiflash/tiflash-disaggregated-and-s3.md) | 新增 | 访问 S3 的 SECRET_ACCESS_KEY。 | | TiFlash | [`storage.remote.cache.dir`](/tiflash/tiflash-disaggregated-and-s3.md) | 新增 | TiFlash Compute Node 的本地数据缓存目录。 | | TiFlash | [`storage.remote.cache.capacity`](/tiflash/tiflash-disaggregated-and-s3.md) | 新增 | TiFlash Compute Node 的本地数据缓存目录的大小。 | -| TiDB Lightning | [`add-index-by-sql`](/tidb-lightning/tidb-lightning-configuration.md#tidb-lightning-任务配置) | 新增 | 控制 Physical Import Mode 是否通过 SQL 方式添加索引。默认为 `false`,表示 TiDB Lightning 会将行数据以及索引数据都编码成 KV pairs 后一同导入 TiKV,实现机制和历史版本保持一致。通过 SQL 方式添加索引的优点是将导入数据与导入索引分开,可以快速导入数据,即使导入数据后,索引添加失败,也不会影响数据的一致性。 | +| TiDB Lightning | [`add-index-by-sql`](/tidb-lightning/tidb-lightning-configuration.md#tidb-lightning-任务配置) | 新增 | 控制物理导入模式是否通过 SQL 方式添加索引。默认为 `false`,表示 TiDB Lightning 会将行数据以及索引数据都编码成 KV pairs 后一同导入 TiKV,实现机制和历史版本保持一致。通过 SQL 方式添加索引的优点是将导入数据与导入索引分开,可以快速导入数据,即使导入数据后,索引添加失败,也不会影响数据的一致性。 | | TiCDC | [`enable-table-across-nodes`](/ticdc/ticdc-changefeed-config.md#ticdc-changefeed-配置文件说明) | 新增 | 将表按 Region 个数划分成多个同步范围,这些范围可由多个 TiCDC 节点同步。 | | TiCDC | [`region-threshold`](/ticdc/ticdc-changefeed-config.md#ticdc-changefeed-配置文件说明) | 新增 | 开启了 `enable-table-across-nodes` 后,该功能只对 Region 个数大于 `region-threshold` 值的表生效。 | | DM | [`analyze`](/dm/task-configuration-file-full.md#完整配置文件示例) | 新增 | 配置是否在 CHECKSUM 结束后对所有表逐个执行 `ANALYZE TABLE
` 操作,可配置 `"required"`/`"optional"`/`"off"`。默认为 `"optional"`。| @@ -490,8 +490,8 @@ TiDB 版本:7.0.0 + TiDB Lightning - - 修复了当使用 Physical Import Mode 导入数据时,如果目标表的复合主键中存在 `auto_random` 列,但源数据中没有指定该列的值,TiDB Lightning 不能为 `auto_random` 列自动生成数据的问题 [#41454](https://github.com/pingcap/tidb/issues/41454) @[D3Hunter](https://github.com/D3Hunter) - - 修复了当使用 TiDB Lightning 的 Logical Import Mode 导入数据时,由于目标集群用户没有 `CONFIG` 权限导致导入失败的问题 [#41915](https://github.com/pingcap/tidb/issues/41915) @[lichunzhu](https://github.com/lichunzhu) + - 修复了当使用物理导入模式导入数据时,如果目标表的复合主键中存在 `auto_random` 列,但源数据中没有指定该列的值,TiDB Lightning 不能为 `auto_random` 列自动生成数据的问题 [#41454](https://github.com/pingcap/tidb/issues/41454) @[D3Hunter](https://github.com/D3Hunter) + - 修复了当使用 TiDB Lightning 的逻辑导入模式导入数据时,由于目标集群用户没有 `CONFIG` 权限导致导入失败的问题 [#41915](https://github.com/pingcap/tidb/issues/41915) @[lichunzhu](https://github.com/lichunzhu) ## 贡献者 diff --git a/tidb-lightning/deploy-tidb-lightning.md b/tidb-lightning/deploy-tidb-lightning.md index 0584d6b1c150..706be30ee866 100644 --- a/tidb-lightning/deploy-tidb-lightning.md +++ b/tidb-lightning/deploy-tidb-lightning.md @@ -8,8 +8,8 @@ aliases: ['/docs-cn/dev/tidb-lightning/deploy-tidb-lightning/','/docs-cn/dev/ref 本文主要介绍 TiDB Lightning 进行数据导入的硬件需求,以及手动部署 TiDB Lightning 的方式。Lightning 不同的导入模式,其硬件要求有所不同,请先阅读: -- [Physical Import Mode 必要条件及限制](/tidb-lightning/tidb-lightning-physical-import-mode.md#必要条件及限制) -- [Logical Import Mode 必要条件及限制](/tidb-lightning/tidb-lightning-logical-import-mode.md#必要条件) +- [物理导入模式必要条件及限制](/tidb-lightning/tidb-lightning-physical-import-mode.md#必要条件及限制) +- [逻辑导入模式必要条件及限制](/tidb-lightning/tidb-lightning-logical-import-mode.md#必要条件) ## 使用 TiUP 联网部署(推荐) diff --git a/tidb-lightning/tidb-lightning-command-line-full.md b/tidb-lightning/tidb-lightning-command-line-full.md index 858eb9bd4bf1..14d040ca7e2d 100644 --- a/tidb-lightning/tidb-lightning-command-line-full.md +++ b/tidb-lightning/tidb-lightning-command-line-full.md @@ -20,7 +20,7 @@ summary: 使用命令行配置 TiDB Lightning。 | -d *directory* | 读取数据的本地目录或[外部存储 URI](/br/backup-and-restore-storages.md#uri-格式) | `mydumper.data-source-dir` | | -L *level* | 日志的等级: debug、info、warn、error 或 fatal (默认为 info) | `lightning.log-level` | | -f *rule* | [表库过滤的规则](/table-filter.md) (可多次指定) | `mydumper.filter` | -| --backend [*backend*](/tidb-lightning/tidb-lightning-overview.md) | 选择导入的模式:`local`为 [Physical Import Mode](/tidb-lightning/tidb-lightning-physical-import-mode.md),`tidb`为 [Logical Import Mode](/tidb-lightning/tidb-lightning-logical-import-mode.md) | `tikv-importer.backend` | +| --backend [*backend*](/tidb-lightning/tidb-lightning-overview.md) | 选择导入的模式:`local` 为[物理导入模式](/tidb-lightning/tidb-lightning-physical-import-mode.md),`tidb` 为[逻辑导入模式](/tidb-lightning/tidb-lightning-logical-import-mode.md) | `tikv-importer.backend` | | --log-file *file* | 日志文件路径(默认值为 `/tmp/lightning.log.{timestamp}`,设置为 '-' 表示日志输出到终端) | `lightning.log-file` | | --status-addr *ip:port* | TiDB Lightning 服务器的监听地址 | `lightning.status-port` | | --importer *host:port* | TiKV Importer 的地址 | `tikv-importer.addr` | diff --git a/tidb-lightning/tidb-lightning-configuration.md b/tidb-lightning/tidb-lightning-configuration.md index 7d413aab1c12..32b9b7281ef3 100644 --- a/tidb-lightning/tidb-lightning-configuration.md +++ b/tidb-lightning/tidb-lightning-configuration.md @@ -111,65 +111,65 @@ driver = "file" # keep-after-success = false [tikv-importer] -# "local":Physical Import Mode,默认使用。适用于 TB 级以上大数据量,但导入期间下游 TiDB 无法对外提供服务。 -# "tidb":Logical Import Mode。TB 级以下数据量可以采用,下游 TiDB 可正常提供服务。 +# "local":物理导入模式(Physical Import Mode),默认使用。适用于 TB 级以上大数据量,但导入期间下游 TiDB 无法对外提供服务。 +# "tidb":逻辑导入模式 (Logical Import Mode)。TB 级以下数据量可以采用,下游 TiDB 可正常提供服务。 # backend = "local" -# 是否允许启动多个 TiDB Lightning 实例(**physical import mode**)并行导入到一个或多个目标表。默认取值为 false。注意,这个参数**不是用于增量导入数据**,仅限目标表为空的场景使用。 -# 多个 TiDB Lightning 实例(physical import mode)同时导入一张表时,此开关必须设置为 true。但前提是目标表不能存在数据,即所有的数据都只能是由 TiDB Lightning 导入。 +# 是否允许启动多个 TiDB Lightning 实例(物理导入模式)并行导入到一个或多个目标表。默认取值为 false。注意,这个参数**不是用于增量导入数据**,仅限目标表为空的场景使用。 +# 多个 TiDB Lightning 实例(物理导入模式)同时导入一张表时,此开关必须设置为 true。但前提是目标表不能存在数据,即所有的数据都只能是由 TiDB Lightning 导入。 # incremental-import = false # 当后端是 “importer” 时,tikv-importer 的监听地址(需改为实际地址)。 addr = "172.16.31.10:8287" -# Logical Import Mode 插入冲突数据时执行的操作。关于冲突检测详细信息请查阅:https://docs.pingcap.com/zh/tidb/dev/tidb-lightning-logical-import-mode-usage#冲突数据检测 +# 逻辑导入模式插入冲突数据时执行的操作。关于冲突检测详细信息请查阅:https://docs.pingcap.com/zh/tidb/dev/tidb-lightning-logical-import-mode-usage#冲突数据检测 # - replace:新数据替代已有数据 # - ignore:保留已有数据,忽略新数据 # - error:中止导入并报错 # on-duplicate = "replace" -# Physical Import Mode 设置是否检测和解决重复的记录(唯一键冲突)。 +# 物理导入模式设置是否检测和解决重复的记录(唯一键冲突)。 # 目前支持三种解决方法: # - record: 数据写入目标表后,将目标表中重复记录添加到目标 TiDB 中的 `lightning_task_info.conflict_error_v1` 表中。注意,该方法要求目标 TiKV 的版本为 v5.2.0 或更新版本。如果版本过低,则会启用下面的 'none' 模式。 # - none: 不检测重复记录。该模式是三种模式中性能最佳的,但是如果数据源存在重复记录,会导致 TiDB 中出现数据不一致的情况。 # - remove: 记录所有目标表中的重复记录,和 'record' 模式相似。但是会删除目标表所有的重复记录,以确保目标 TiDB 中的数据状态保持一致。 # duplicate-resolution = 'none' -# Physical Import Mode 一次请求中发送的 KV 数量。 +# 物理导入模式一次请求中发送的 KV 数量。 # send-kv-pairs = 32768 -# Physical Import Mode 向 TiKV 发送 KV 时是否启用压缩。目前只支持 Gzip 压缩算法,可填写 "gzip" 或者 "gz"。默认不启用压缩。 +# 物理导入模式向 TiKV 发送 KV 时是否启用压缩。目前只支持 Gzip 压缩算法,可填写 "gzip" 或者 "gz"。默认不启用压缩。 # compress-kv-pairs = "" -# Physical Import Mode 本地进行 KV 排序的路径。如果磁盘性能较低(如使用机械盘),建议设置成与 `data-source-dir` 不同的磁盘,这样可有效提升导入性能。 +# 物理导入模式本地进行 KV 排序的路径。如果磁盘性能较低(如使用机械盘),建议设置成与 `data-source-dir` 不同的磁盘,这样可有效提升导入性能。 # sorted-kv-dir = "" -# Physical Import Mode TiKV 写入 KV 数据的并发度。当 TiDB Lightning 和 TiKV 直接网络传输速度超过万兆的时候,可以适当增加这个值。 +# 物理导入模式TiKV 写入 KV 数据的并发度。当 TiDB Lightning 和 TiKV 直接网络传输速度超过万兆的时候,可以适当增加这个值。 # range-concurrency = 16 -# Physical Import Mode 限制 TiDB Lightning 向每个 TiKV 节点写入的带宽大小,默认为 0,表示不限制。 +# 物理导入模式限制 TiDB Lightning 向每个 TiKV 节点写入的带宽大小,默认为 0,表示不限制。 # store-write-bwlimit = "128MiB" -# 使用 Physical Import Mode 时,配置 TiDB Lightning 本地临时文件使用的磁盘配额 (disk quota)。当磁盘配额不足时,TiDB Lightning 会暂停读取源数据以及写入临时文件的过程,优先将已经完成排序的 key-value 写入到 TiKV,TiDB Lightning 删除本地临时文件后,再继续导入过程。 +# 使用物理导入模式时,配置 TiDB Lightning 本地临时文件使用的磁盘配额 (disk quota)。当磁盘配额不足时,TiDB Lightning 会暂停读取源数据以及写入临时文件的过程,优先将已经完成排序的 key-value 写入到 TiKV,TiDB Lightning 删除本地临时文件后,再继续导入过程。 # 需要同时配合把 `backend` 设置为 `local` 模式才能生效。 # 默认值为 MaxInt64 字节,即 9223372036854775807 字节。 # disk-quota = "10GB" -# Physical Import Mode 是否通过 SQL 方式添加索引。默认为 `false`,表示 TiDB Lightning 会将行数据以及索引数据都编码成 KV pairs 后一同导入 TiKV,实现机制和历史版本保持一致。如果设置为 `true`,即 TiDB Lightning 会在导入数据完成后,使用 add index 的 SQL 来添加索引。 +# 物理导入模式是否通过 SQL 方式添加索引。默认为 `false`,表示 TiDB Lightning 会将行数据以及索引数据都编码成 KV pairs 后一同导入 TiKV,实现机制和历史版本保持一致。如果设置为 `true`,即 TiDB Lightning 会在导入数据完成后,使用 add index 的 SQL 来添加索引。 # 通过 SQL 方式添加索引的优点是将导入数据与导入索引分开,可以快速导入数据,即使导入数据后,索引添加失败,也不会影响数据的一致性。 # add-index-by-sql = false # 在使用 TiDB Lightning 导入多租户的 TiDB cluster 的场景下,指定对应的 key space 名称。默认取值为空字符串,表示 TiDB Lightning 会自动获取导入对应租户的 key space 名称;如果指定了值,则使用指定的 key space 名称来导入。 # keyspace-name = "" -# Physical Import Mode 下,用于控制 TiDB Lightning 暂停 PD 调度的范围,可选值包括: +# 物理导入模式下,用于控制 TiDB Lightning 暂停 PD 调度的范围,可选值包括: # - "table":仅暂停目标表数据所在 Region 的调度。默认值为 "table"。 # - "global":暂停全局调度。当导入数据到无业务流量的集群时,建议设置为 "global",以避免其他调度的干扰。 # 该参数自 v7.1.0 版本开始引入。注意:"table" 选项仅适用于 TiDB v6.1.0 及以上版本的目标集群。 # pause-pd-scheduler-scope = "table" -# Physical Import Mode 下,用于控制批量 Split Region 时的 Region 个数。每个 TiDB Lightning 实例最多同时 Split Region 的个数为: +# 物理导入模式下,用于控制批量 Split Region 时的 Region 个数。每个 TiDB Lightning 实例最多同时 Split Region 的个数为: # region-split-batch-size * region-split-concurrency * table-concurrency # 该参数自 v7.1.0 版本开始引入,默认值为 `4096`。 # region-split-batch-size = 4096 -# Physical Import Mode 下,用于控制 Split Region 时的并发度。默认值为 CPU 核数。 +# 物理导入模式下,用于控制 Split Region 时的并发度。默认值为 CPU 核数。 # 该参数自 v7.1.0 版本开始引入。 # region-split-concurrency = -# Physical Import Mode 下,用于控制 split 和 scatter 操作后等待 Region 上线的重试次数,默认值为 `1800`。重试符合指数回退策略,最大重试间隔为 2 秒。若两次重试之间有任何 Region 上线,该次操作不会被计为重试次数。 +# 物理导入模式下,用于控制 split 和 scatter 操作后等待 Region 上线的重试次数,默认值为 `1800`。重试符合指数回退策略,最大重试间隔为 2 秒。若两次重试之间有任何 Region 上线,该次操作不会被计为重试次数。 # 该参数自 v7.1.0 版本开始引入。 # region-check-backoff-limit = 1800 @@ -309,10 +309,10 @@ max-allowed-packet = 67_108_864 # 此服务的私钥。默认为 `security.key-path` 的副本 # key-path = "/path/to/lightning.key" -# 对于 Physical Import Mode,数据导入完成后,TiDB Lightning 可以自动执行 Checksum 和 Analyze 操作。 +# 对于物理导入模式,数据导入完成后,TiDB Lightning 可以自动执行 Checksum 和 Analyze 操作。 # 在生产环境中,建议总是开启 Checksum 和 Analyze。 # 执行的顺序为:Checksum -> Analyze。 -# 注意:对于 Logical Import Mode, 无须执行这两个阶段,因此在实际运行时总是会直接跳过。 +# 注意:对于逻辑导入模式, 无须执行这两个阶段,因此在实际运行时总是会直接跳过。 [post-restore] # 配置是否在导入完成后对每一个表执行 `ADMIN CHECKSUM TABLE
` 操作来验证数据的完整性。 # 可选的配置项: @@ -338,7 +338,7 @@ switch-mode = "5m" # 在日志中打印导入进度的持续时间。 log-progress = "5m" -# 使用 Physical Import Mode 时,检查本地磁盘配额的时间间隔,默认为 60 秒。 +# 使用物理导入模式时,检查本地磁盘配额的时间间隔,默认为 60 秒。 # check-disk-quota = "60s" ``` @@ -355,7 +355,7 @@ log-progress = "5m" | -d *directory* | 读取数据的本地目录或[外部存储 URI](/br/backup-and-restore-storages.md#uri-格式) | `mydumper.data-source-dir` | | -L *level* | 日志的等级: debug、info、warn、error 或 fatal (默认为 info) | `lightning.log-level` | | -f *rule* | [表库过滤的规则](/table-filter.md) (可多次指定) | `mydumper.filter` | -| --backend [*backend*](/tidb-lightning/tidb-lightning-overview.md) | 选择导入的模式:`local`为 Physical Import Mode,`tidb`为 Logical Import Mode | `local` | +| --backend [*backend*](/tidb-lightning/tidb-lightning-overview.md) | 选择导入的模式:`local` 为物理导入模式,`tidb` 为逻辑导入模式 | `local` | | --log-file *file* | 日志文件路径(默认值为 `/tmp/lightning.log.{timestamp}`,设置为 '-' 表示日志输出到终端) | `lightning.log-file` | | --status-addr *ip:port* | TiDB Lightning 服务器的监听地址 | `lightning.status-port` | | --importer *host:port* | TiKV Importer 的地址 | `tikv-importer.addr` | diff --git a/tidb-lightning/tidb-lightning-distributed-import.md b/tidb-lightning/tidb-lightning-distributed-import.md index f5ad0ac52c7b..1858ac5b68d6 100644 --- a/tidb-lightning/tidb-lightning-distributed-import.md +++ b/tidb-lightning/tidb-lightning-distributed-import.md @@ -5,7 +5,7 @@ summary: 本文档介绍了 TiDB Lightning 并行导入的概念、使用场景 # TiDB Lightning 并行导入 -TiDB Lightning 的 [Physical Import Mode](/tidb-lightning/tidb-lightning-physical-import-mode.md) 从 v5.3.0 版本开始支持单表或多表数据的并行导入。通过支持同步启动多个实例,并行导入不同的单表或多表的不同数据,使 TiDB Lightning 具备水平扩展的能力,可大大降低导入大量数据所需的时间。 +TiDB Lightning 的[物理导入模式 (Physical Import Mode)](/tidb-lightning/tidb-lightning-physical-import-mode.md) 从 v5.3.0 版本开始支持单表或多表数据的并行导入。通过支持同步启动多个实例,并行导入不同的单表或多表的不同数据,使 TiDB Lightning 具备水平扩展的能力,可大大降低导入大量数据所需的时间。 在技术实现上,TiDB Lightning 通过在目标 TiDB 中记录各个实例以及每个导入表导入数据的元信息,协调不同实例的 Row ID 分配范围、全局 Checksum 的记录和 TiKV 及 PD 的配置变更与恢复。 @@ -33,7 +33,7 @@ TiDB Lightning 并行导入可以用于以下场景: ### 解决主键或者唯一索引的冲突 -在使用 [Physical Import Mode](/tidb-lightning/tidb-lightning-physical-import-mode.md) 并行导入时,需要确保多个 TiDB Lightning 的数据源之间,以及它们和 TiDB 的目标表中的数据没有主键或者唯一索引的冲突,并且导入的目标表不能有其他应用进行数据写入。否则,TiDB Lightning 将无法保证导入结果的正确性,并且导入完成后相关的数据表将处于数据索引不一致的状态。 +在使用[物理导入模式](/tidb-lightning/tidb-lightning-physical-import-mode.md)并行导入时,需要确保多个 TiDB Lightning 的数据源之间,以及它们和 TiDB 的目标表中的数据没有主键或者唯一索引的冲突,并且导入的目标表不能有其他应用进行数据写入。否则,TiDB Lightning 将无法保证导入结果的正确性,并且导入完成后相关的数据表将处于数据索引不一致的状态。 ### 导入性能优化 @@ -96,8 +96,8 @@ data-source-dir = "/path/to/source-dir" # 是否允许向已存在数据的表导入数据。默认值为 false。 # 当使用并行导入模式时,由于多个 TiDB Lightning 实例同时导入一张表,因此此开关必须设置为 true。 incremental-import = true -# "local":Physical Import Mode,默认使用。适用于 TB 级以上大数据量,但导入期间下游 TiDB 无法对外提供服务。 -# "tidb":Logical Import Mode。TB 级以下数据量也可以采用,下游 TiDB 可正常提供服务。 +# "local":物理导入模式,默认使用。适用于 TB 级以上大数据量,但导入期间下游 TiDB 无法对外提供服务。 +# "tidb":逻辑导入模式。TB 级以下数据量也可以采用,下游 TiDB 可正常提供服务。 backend = "local" # 设置本地排序数据的路径 diff --git a/tidb-lightning/tidb-lightning-error-resolution.md b/tidb-lightning/tidb-lightning-error-resolution.md index c6b9b057ddba..a0cd4dbc7180 100644 --- a/tidb-lightning/tidb-lightning-error-resolution.md +++ b/tidb-lightning/tidb-lightning-error-resolution.md @@ -43,7 +43,7 @@ max-error = 0 * 原始 CSV、SQL 或者 Parquet 文件中的语法错误,例如未闭合的引号 * I/O、网络、或系统权限错误 -在 Physical Import Mode 下,唯一键/主键的冲突是单独处理的。相关内容将在接下来的章节进行介绍。 +在物理导入模式下,唯一键/主键的冲突是单独处理的。相关内容将在接下来的章节进行介绍。 ## 错误报告 diff --git a/tidb-lightning/tidb-lightning-faq.md b/tidb-lightning/tidb-lightning-faq.md index 5b9e47435e2f..ef1e97cbd39e 100644 --- a/tidb-lightning/tidb-lightning-faq.md +++ b/tidb-lightning/tidb-lightning-faq.md @@ -110,7 +110,7 @@ sql-mode = "" 使用 TiDB Lightning 的 SST Mode 建议配置万兆网卡。 -千兆网卡的总带宽只有 120 MB/s,而且需要与整个 TiKV 集群共享。在使用 TiDB Lightning Physical Import Mode 导入时,极易用尽所有带宽,继而因 PD 无法联络集群使集群断连。 +千兆网卡的总带宽只有 120 MB/s,而且需要与整个 TiKV 集群共享。在使用 TiDB Lightning 物理导入模式导入时,极易用尽所有带宽,继而因 PD 无法联络集群使集群断连。 ## 为什么 TiDB Lightning 需要在 TiKV 集群预留这么多空间? diff --git a/tidb-lightning/tidb-lightning-logical-import-mode-usage.md b/tidb-lightning/tidb-lightning-logical-import-mode-usage.md index 7525af3e4b98..a3c399c380f1 100644 --- a/tidb-lightning/tidb-lightning-logical-import-mode-usage.md +++ b/tidb-lightning/tidb-lightning-logical-import-mode-usage.md @@ -65,7 +65,7 @@ TiDB Lightning 的完整配置文件可参考[完整配置及命令行参数](/t - TiDB Lightning 的 Logical Import Mode 性能很大程度上取决于目标 TiDB 集群的写入性能,当遇到性能瓶颈时可参考 TiDB 相关[性能优化文档](/best-practices/high-concurrency-best-practices.md)。 -- 如果发现目标 TiDB 集群的的写入尚未达到瓶颈,可以考虑增加 Lightning 配置中 `region-concurrency` 的值。`region-concurrency` 默认值为 CPU 核数,其含义在 Physical Import Mode 和 Logical Import Mode 下有所不同,Logical Import Mode 的 `region-concurrency` 表示写入并发数。配置示例: +- 如果发现目标 TiDB 集群的的写入尚未达到瓶颈,可以考虑增加 Lightning 配置中 `region-concurrency` 的值。`region-concurrency` 默认值为 CPU 核数,其含义在物理导入模式和逻辑导入模式下有所不同,逻辑导入模式的 `region-concurrency` 表示写入并发数。配置示例: ```toml [lightning] diff --git a/tidb-lightning/tidb-lightning-logical-import-mode.md b/tidb-lightning/tidb-lightning-logical-import-mode.md index ae5771ea95d8..1c3b9eca4440 100644 --- a/tidb-lightning/tidb-lightning-logical-import-mode.md +++ b/tidb-lightning/tidb-lightning-logical-import-mode.md @@ -23,4 +23,4 @@ Logical Import Mode 对应的后端模式为 `tidb`。 ## 使用限制 -使用多个 TiDB Lightning 向同一目标导入时,请勿混用不同的 backend,即不可同时使用 Physical Import Mode 和 Logical Import Mode 导入同一 TiDB 集群。 +使用多个 TiDB Lightning 向同一目标导入时,请勿混用不同的 backend,即不可同时使用物理导入模式和逻辑导入模式导入同一 TiDB 集群。 diff --git a/tidb-lightning/tidb-lightning-overview.md b/tidb-lightning/tidb-lightning-overview.md index c64a246b8ac6..4959935cf06f 100644 --- a/tidb-lightning/tidb-lightning-overview.md +++ b/tidb-lightning/tidb-lightning-overview.md @@ -30,11 +30,11 @@ TiDB Lightning 支持从以下位置读取: TiDB Lightning 目前支持两种导入方式,通过 `backend` 配置区分。不同的模式决定 TiDB Lightning 如何将数据导入到目标 TiDB 集群。 -- [Physical Import Mode](/tidb-lightning/tidb-lightning-physical-import-mode.md):TiDB Lightning 首先将数据编码成键值对并排序存储在本地临时目录,然后将这些键值对上传到各个 TiKV 节点,最后调用 TiKV Ingest 接口将数据插入到 TiKV 的 RocksDB 中。如果用于初始化导入,请优先考虑使用 Physical Import Mode,其拥有较高的导入速度。Physical Import Mode 对应的后端模式为 `local`。 +- [物理导入模式](/tidb-lightning/tidb-lightning-physical-import-mode.md):TiDB Lightning 首先将数据编码成键值对并排序存储在本地临时目录,然后将这些键值对上传到各个 TiKV 节点,最后调用 TiKV Ingest 接口将数据插入到 TiKV 的 RocksDB 中。如果用于初始化导入,请优先考虑使用物理导入模式,其拥有较高的导入速度。物理导入模式对应的后端模式为 `local`。 - [Logical Import Mode](/tidb-lightning/tidb-lightning-logical-import-mode.md):TiDB Lightning 先将数据编码成 SQL,然后直接运行这些 SQL 语句进行数据导入。如果需要导入的集群为生产环境线上集群,或需要导入的目标表中已包含有数据,则应使用 Logical Import Mode。Logical Import Mode 对应的后端模式为 `tidb`。 -| 导入模式 | Physical Import Mode | Logical Import Mode | +| 导入模式 | 物理导入模式 | 逻辑导入模式 | |:---|:---|:---| | 后端 | `local` | `tidb` | | 速度 | 快 (100 ~ 500 GiB/小时) | 慢 (10 ~ 50 GiB/小时) | diff --git a/tidb-lightning/tidb-lightning-physical-import-mode-usage.md b/tidb-lightning/tidb-lightning-physical-import-mode-usage.md index d8b8d8ed928c..3e5d32462f99 100644 --- a/tidb-lightning/tidb-lightning-physical-import-mode-usage.md +++ b/tidb-lightning/tidb-lightning-physical-import-mode-usage.md @@ -1,15 +1,15 @@ --- -title: 使用 Physical Import Mode -summary: 了解如何使用 TiDB Lightning 的 Physical Import Mode。 +title: 使用物理导入模式 +summary: 了解如何使用 TiDB Lightning 的物理导入模式。 --- -# 使用 Physical Import Mode +# 使用物理导入模式 -本文档介绍如何编写 [Physical Import Mode](/tidb-lightning/tidb-lightning-physical-import-mode.md) 的配置文件,如何进行性能调优、使用磁盘资源配额等内容。 +本文档介绍如何编写[物理导入模式 (Physical Import Mode)](/tidb-lightning/tidb-lightning-physical-import-mode.md) 的配置文件,如何进行性能调优、使用磁盘资源配额等内容。 ## 配置及使用 -可以通过以下配置文件使用 Physical Import Mode 执行数据导入: +可以通过以下配置文件使用物理导入模式执行数据导入: ```toml [lightning] @@ -28,7 +28,7 @@ check-requirements = true data-source-dir = "/data/my_database" [tikv-importer] -# 导入模式配置,设为 local 即使用 Physical Import Mode +# 导入模式配置,设为 local 即使用物理导入模式 backend = "local" # 冲突数据处理方式 @@ -40,7 +40,7 @@ sorted-kv-dir = "./some-dir" # 限制 TiDB Lightning 向每个 TiKV 节点写入的带宽大小,默认为 0,表示不限制。 # store-write-bwlimit = "128MiB" -# Physical Import Mode 是否通过 SQL 方式添加索引。默认为 `false`,表示 TiDB Lightning 会将行数据以及索引数据都编码成 KV pairs 后一同导入 TiKV,实现机制和历史版本保持一致。如果设置为 `true`,即 TiDB Lightning 会导完数据后,再使用 add index 的 SQL 来添加索引。 +# 物理导入模式是否通过 SQL 方式添加索引。默认为 `false`,表示 TiDB Lightning 会将行数据以及索引数据都编码成 KV pairs 后一同导入 TiKV,实现机制和历史版本保持一致。如果设置为 `true`,即 TiDB Lightning 会导完数据后,再使用 add index 的 SQL 来添加索引。 # 通过 SQL 方式添加索引的优点是将导入数据与导入索引分开,可以快速导入数据,即使导入数据后,索引添加失败,也不会影响数据的一致性。 # add-index-by-sql = false @@ -176,12 +176,12 @@ switch-mode = '0' ## 性能调优 -**提高 Lightning Physical Import Mode 导入性能最直接有效的方法:** +**提高 Lightning 物理导入模式导入性能最直接有效的方法:** - **升级 Lightning 所在节点的硬件,尤其重要的是 CPU 和 sorted-key-dir 所在存储设备的性能。** - **使用[并行导入](/tidb-lightning/tidb-lightning-distributed-import.md)特性实现水平扩展。** -当然,Lightning 也提供了部分并发相关配置以影响 Physical Import Mode 的导入性能。但是从长期实践的经验总结来看,以下四个配置项一般保持默认值即可,调整其数值并不会带来显著的性能提升,可作为了解内容阅读。 +当然,Lightning 也提供了部分并发相关配置以影响物理导入模式的导入性能。但是从长期实践的经验总结来看,以下四个配置项一般保持默认值即可,调整其数值并不会带来显著的性能提升,可作为了解内容阅读。 ``` [lightning] diff --git a/tidb-lightning/tidb-lightning-physical-import-mode.md b/tidb-lightning/tidb-lightning-physical-import-mode.md index 0956583a221c..428eb4a1bda3 100644 --- a/tidb-lightning/tidb-lightning-physical-import-mode.md +++ b/tidb-lightning/tidb-lightning-physical-import-mode.md @@ -1,15 +1,15 @@ --- -title: Physical Import Mode -summary: 了解 TiDB Lightning 的 Physical Import Mode。 +title: 物理导入模式 +summary: 了解 TiDB Lightning 的物理导入模式。 --- -# Physical Import Mode 简介 +# 物理导入模式简介 -Physical Import Mode 是 TiDB Lightning 支持的一种数据导入方式。Physical Import Mode 不经过 SQL 接口,而是直接将数据以键值对的形式插入 TiKV 节点,是一种高效、快速的导入模式。使用 Physical Import Mode 时,单个 Lightning 实例可导入的数据量为 10 TiB,理论上导入的数据量可以随着 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)功能可以导入的数据量达 20 TiB。 使用前请务必自行阅读[必要条件及限制](/tidb-lightning/tidb-lightning-physical-import-mode.md#必要条件及限制)。 -Physical Import Mode 对应的后端模式为 `local`。 +物理导入模式对应的后端模式为 `local`。 ## 原理说明 @@ -65,11 +65,11 @@ Physical Import Mode 对应的后端模式为 `local`。 ### 使用限制 -- 请勿直接使用 Physical Import Mode 向已经投入生产的 TiDB 集群导入数据,这将对在线业务产生严重影响。如需向生产集群导入数据,请参考[导入时限制调度范围从集群降低到表级别](/tidb-lightning/tidb-lightning-physical-import-mode-usage.md#导入时暂停-pd-调度的范围)。 +- 请勿直接使用物理导入模式向已经投入生产的 TiDB 集群导入数据,这将对在线业务产生严重影响。如需向生产集群导入数据,请参考[导入时限制调度范围从集群降低到表级别](/tidb-lightning/tidb-lightning-physical-import-mode-usage.md#导入时暂停-pd-调度的范围)。 - 默认情况下,不应同时启动多个 TiDB Lightning 实例向同一 TiDB 集群导入数据,而应考虑使用[并行导入](/tidb-lightning/tidb-lightning-distributed-import.md)特性。 -- 使用多个 TiDB Lightning 向同一目标导入时,请勿混用不同的 backend,即不可同时使用 Physical Import Mode 和 Logical Import Mode 导入同一 TiDB 集群。 +- 使用多个 TiDB Lightning 向同一目标导入时,请勿混用不同的 backend,即不可同时使用物理导入模式和逻辑导入模式导入同一 TiDB 集群。 - 在导入数据的过程中,请勿在目标表进行写操作,否则会导致导入失败或数据不一致。导入期间也不建议进行读操作,因为读取的数据可能不一致。请在导入操作完成后再进行读写操作。 @@ -87,4 +87,4 @@ Physical Import Mode 对应的后端模式为 `local`。 - TiDB Lightning 与 TiCDC 一起使用时需要注意: - - TiCDC 无法捕获 Physical Import Mode 插入的数据。 \ No newline at end of file + - TiCDC 无法捕获物理导入模式插入的数据。 \ No newline at end of file From f9f2abdd610a299572d769e5eaebb9ae98ee87c8 Mon Sep 17 00:00:00 2001 From: Cheese Date: Thu, 1 Jun 2023 09:32:42 +0000 Subject: [PATCH 160/257] fix: jdbc 3.0.33 fixed some bugs, recommend the latest version (#14119) --- develop/dev-guide-choose-driver-or-orm.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/develop/dev-guide-choose-driver-or-orm.md b/develop/dev-guide-choose-driver-or-orm.md index 02207f869621..0d3f368fc903 100644 --- a/develop/dev-guide-choose-driver-or-orm.md +++ b/develop/dev-guide-choose-driver-or-orm.md @@ -28,7 +28,7 @@ TiDB 兼容 MySQL 的协议,但存在部分与 MySQL 不兼容或有差异的 支持等级:**Full** -按照 [MySQL 文档](https://dev.mysql.com/doc/connector-j/8.0/en/)中的说明下载并配置 Java JDBC 驱动程序即可使用。对于 TiDB v6.3.0 及以上版本,建议使用 MySQL Connector/J 8.0.29 及以上版本。 +按照 [MySQL 文档](https://dev.mysql.com/doc/connector-j/8.0/en/)中的说明下载并配置 Java JDBC 驱动程序即可使用。对于 TiDB v6.3.0 及以上版本,建议使用 MySQL Connector/J 8.0.33 及以上版本。 > **建议:** > From e89814132d150c02b5931dc077ffdf6efa6707e3 Mon Sep 17 00:00:00 2001 From: dongmen <20351731+asddongmen@users.noreply.github.com> Date: Thu, 1 Jun 2023 18:00:42 +0800 Subject: [PATCH 161/257] ticdc: add a faq for ticdc (#14018) --- ticdc/ticdc-faq.md | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/ticdc/ticdc-faq.md b/ticdc/ticdc-faq.md index f3591c0a31df..6723b051ccfd 100644 --- a/ticdc/ticdc-faq.md +++ b/ticdc/ticdc-faq.md @@ -354,3 +354,33 @@ UPDATE t SET a="3" WHERE a="2"; ### 对于非有效索引列的更新事件和有效索引列的更新事件同时包含新值和旧值时,Cloud Storage Sink 的 CSV 格式无法正确输出旧值 因为 CSV 文件的列数是固定的,当一个事件既有新值也有旧值时,无法正确输出旧值。如果需要输出旧值,建议使用 Canal-JSON 格式。 + +## 为什么通过 TiDB Operator 部署的 TiCDC 集群无法使用 cdc cli 命令进行操作? + +因为通过 TiDB Operator 部署的 TiCDC 集群的默认端口号为 8301, 而 cdc cli 命令默认连接的 cdc 服务器的端口号是 8300。在使用 cdc cli 操作 TiCDC 集群时,你需要显式地指定 `--server` 参数,如下: + +```shell +./cdc cli changefeed list --server "127.0.0.1:8301" +[ + { + "id": "4k-table", + "namespace": "default", + "summary": { + "state": "stopped", + "tso": 441832628003799353, + "checkpoint": "2023-05-30 22:41:57.910", + "error": null + } + }, + { + "id": "big-table", + "namespace": "default", + "summary": { + "state": "normal", + "tso": 441872834546892882, + "checkpoint": "2023-06-01 17:18:13.700", + "error": null + } + } +] +``` \ No newline at end of file From afd5c486f16ef8fe03003c7887244eb83c658d90 Mon Sep 17 00:00:00 2001 From: Aolin Date: Fri, 2 Jun 2023 10:06:42 +0800 Subject: [PATCH 162/257] bump version for v7.1 (#14121) --- dm/maintain-dm-using-tiup.md | 2 +- information-schema/information-schema-tidb-servers-info.md | 4 ++-- post-installation-check.md | 2 +- quick-start-with-tidb.md | 2 +- system-variables.md | 2 +- ticdc/deploy-ticdc.md | 2 +- ticdc/ticdc-open-api-v2.md | 2 +- tidb-monitoring-api.md | 2 +- tiflash/create-tiflash-replicas.md | 4 ++-- tiup/tiup-cluster.md | 4 ++-- tiup/tiup-component-cluster-patch.md | 2 +- tiup/tiup-component-cluster-upgrade.md | 2 +- tiup/tiup-component-dm-upgrade.md | 2 +- upgrade-tidb-using-tiup.md | 4 ++-- 14 files changed, 18 insertions(+), 18 deletions(-) diff --git a/dm/maintain-dm-using-tiup.md b/dm/maintain-dm-using-tiup.md index e69fe3e8a2d4..e0eaac6c8f53 100644 --- a/dm/maintain-dm-using-tiup.md +++ b/dm/maintain-dm-using-tiup.md @@ -390,7 +390,7 @@ tiup dmctl --master-addr master1:8261 operate-source create /tmp/source1.yml 此时可以通过命令行参数 `--native-ssh` 启用系统自带命令行: -- 部署集群:`tiup dm deploy --native-ssh`,其中 `` 为集群名称,`` 为 DM 集群版本(例如 `v6.5.0`),`` 为拓扑文件路径 +- 部署集群:`tiup dm deploy --native-ssh`,其中 `` 为集群名称,`` 为 DM 集群版本(例如 `v7.1.0`),`` 为拓扑文件路径 - 启动集群:`tiup dm start --native-ssh` - 升级集群:`tiup dm upgrade ... --native-ssh` diff --git a/information-schema/information-schema-tidb-servers-info.md b/information-schema/information-schema-tidb-servers-info.md index 5e20c88f7e62..4b2c49eeca0e 100644 --- a/information-schema/information-schema-tidb-servers-info.md +++ b/information-schema/information-schema-tidb-servers-info.md @@ -46,8 +46,8 @@ SELECT * FROM TIDB_SERVERS_INFO\G PORT: 4000 STATUS_PORT: 10080 LEASE: 45s - VERSION: 5.7.25-TiDB-v6.5.0 - GIT_HASH: 827d8ff2d22ac4c93ae1b841b79d468211e1d393 + VERSION: 5.7.25-TiDB-v7.1.0 + GIT_HASH: 635a4362235e8a3c0043542e629532e3c7bb2756 BINLOG_STATUS: Off LABELS: 1 row in set (0.006 sec) diff --git a/post-installation-check.md b/post-installation-check.md index a481825fbe3d..5736621be245 100644 --- a/post-installation-check.md +++ b/post-installation-check.md @@ -63,7 +63,7 @@ mysql -u root -h ${tidb_server_host_IP_address} -P 4000 ```sql Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 3 -Server version: 5.7.25-TiDB-v5.0.0 TiDB Server (Apache License 2.0) Community Edition, MySQL 5.7 compatible +Server version: 5.7.25-TiDB-v7.1.0 TiDB Server (Apache License 2.0) Community Edition, MySQL 5.7 compatible Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved. diff --git a/quick-start-with-tidb.md b/quick-start-with-tidb.md index e20ecd7c55cb..04811f96e5c0 100644 --- a/quick-start-with-tidb.md +++ b/quick-start-with-tidb.md @@ -432,7 +432,7 @@ TiDB 是一个分布式系统。最基础的 TiDB 测试集群通常由 2 个 Ti ``` - 参数 `` 表示设置集群名称 - - 参数 `` 表示设置集群版本,例如 `v6.5.0`。可以通过 `tiup list tidb` 命令来查看当前支持部署的 TiDB 版本 + - 参数 `` 表示设置集群版本,例如 `v7.1.0`。可以通过 `tiup list tidb` 命令来查看当前支持部署的 TiDB 版本 - 参数 `-p` 表示在连接目标机器时使用密码登录 > **注意:** diff --git a/system-variables.md b/system-variables.md index 00d2d44bd90b..a5fe7b980af7 100644 --- a/system-variables.md +++ b/system-variables.md @@ -4312,7 +4312,7 @@ Query OK, 0 rows affected, 1 warning (0.00 sec) - 作用域:NONE - 默认值:`5.7.25-TiDB-(tidb version)` -- 这个变量的值是 MySQL 的版本和 TiDB 的版本,例如 '5.7.25-TiDB-v4.0.0-beta.2-716-g25e003253'。 +- 这个变量的值是 MySQL 的版本和 TiDB 的版本,例如 '5.7.25-TiDB-v7.1.0'。 ### `version_comment` diff --git a/ticdc/deploy-ticdc.md b/ticdc/deploy-ticdc.md index fed9f67956fb..060d8fbfc4e2 100644 --- a/ticdc/deploy-ticdc.md +++ b/ticdc/deploy-ticdc.md @@ -152,7 +152,7 @@ tiup cluster upgrade --transfer-timeout 600 ## 使用 TiCDC 命令行工具来查看集群状态 -执行以下命令来查看 TiCDC 集群运行状态,注意需要将 `v` 替换为 TiCDC 集群版本,例如 `v6.5.0`: +执行以下命令来查看 TiCDC 集群运行状态,注意需要将 `v` 替换为 TiCDC 集群版本,例如 `v7.1.0`: ```shell tiup ctl:v cdc capture list --server=http://10.0.10.25:8300 diff --git a/ticdc/ticdc-open-api-v2.md b/ticdc/ticdc-open-api-v2.md index 8cda309088db..74989712f4c9 100644 --- a/ticdc/ticdc-open-api-v2.md +++ b/ticdc/ticdc-open-api-v2.md @@ -90,7 +90,7 @@ curl -X GET http://127.0.0.1:8300/api/v2/status ```json { - "version": "v7.0.0-master-dirty", + "version": "v7.1.0", "git_hash": "10413bded1bdb2850aa6d7b94eb375102e9c44dc", "id": "d2912e63-3349-447c-90ba-72a4e04b5e9e", "pid": 1447, diff --git a/tidb-monitoring-api.md b/tidb-monitoring-api.md index eb6605d5230f..529eaa4d5a34 100644 --- a/tidb-monitoring-api.md +++ b/tidb-monitoring-api.md @@ -32,7 +32,7 @@ curl http://127.0.0.1:10080/status ``` { connections: 0, # 当前 TiDB Server 上的客户端连接数 - version: "5.7.25-TiDB-v4.0.0-rc-141-g7267747ae", # TiDB 版本号 + version: "5.7.25-TiDB-v7.1.0", # TiDB 版本号 git_hash: "7267747ae0ec624dffc3fdedb00f1ed36e10284b" # TiDB 当前代码的 Git Hash } ``` diff --git a/tiflash/create-tiflash-replicas.md b/tiflash/create-tiflash-replicas.md index fcc339f1195b..93ccfccd2d7d 100644 --- a/tiflash/create-tiflash-replicas.md +++ b/tiflash/create-tiflash-replicas.md @@ -139,10 +139,10 @@ SELECT TABLE_NAME FROM information_schema.tables where TABLE_SCHEMA = " tiup ctl:v pd -u http://:2379 store limit all engine tiflash 60 add-peer ``` - > 上述命令中,需要将 `v` 替换为该集群版本,例如 `v6.5.0`,`:2379` 替换为任一 PD 节点的地址。替换后样例为: + > 上述命令中,需要将 `v` 替换为该集群版本,例如 `v7.1.0`,`:2379` 替换为任一 PD 节点的地址。替换后样例为: > > ```shell - > tiup ctl:v6.1.1 pd -u http://192.168.1.4:2379 store limit all engine tiflash 60 add-peer + > tiup ctl:v7.1.0 pd -u http://192.168.1.4:2379 store limit all engine tiflash 60 add-peer > ``` 执行完毕后,几分钟内,你将观察到 TiFlash 节点的 CPU 及磁盘 IO 资源占用显著提升,TiFlash 将更快地创建副本。同时,TiKV 节点的 CPU 及磁盘 IO 资源占用也将有所上升。 diff --git a/tiup/tiup-cluster.md b/tiup/tiup-cluster.md index baa93f8d8bbe..4a30f5f4ac04 100644 --- a/tiup/tiup-cluster.md +++ b/tiup/tiup-cluster.md @@ -61,7 +61,7 @@ Flags: tiup cluster deploy [flags] ``` -该命令需要提供集群的名字、集群使用的 TiDB 版本(例如 `v6.5.0`),以及一个集群的拓扑文件。 +该命令需要提供集群的名字、集群使用的 TiDB 版本(例如 `v7.1.0`),以及一个集群的拓扑文件。 拓扑文件的编写可参考[示例](https://github.com/pingcap/tiup/blob/master/embed/examples/cluster/topology.example.yaml)。以一个最简单的拓扑为例,将下列文件保存为 `/tmp/topology.yaml`: @@ -673,7 +673,7 @@ tiup cluster check --cluster 此时可以通过命令行参数 `--ssh=system` 启用系统自带命令行: -- 部署集群:`tiup cluster deploy --ssh=system`,其中 `` 为集群名称,`` 为 TiDB 集群版本(例如 `v6.5.0`),`` 为拓扑文件路径 +- 部署集群:`tiup cluster deploy --ssh=system`,其中 `` 为集群名称,`` 为 TiDB 集群版本(例如 `v7.1.0`),`` 为拓扑文件路径 - 启动集群:`tiup cluster start --ssh=system` - 升级集群:`tiup cluster upgrade ... --ssh=system` diff --git a/tiup/tiup-component-cluster-patch.md b/tiup/tiup-component-cluster-patch.md index 55e1ee2e0547..703138ec7fa2 100644 --- a/tiup/tiup-component-cluster-patch.md +++ b/tiup/tiup-component-cluster-patch.md @@ -28,7 +28,7 @@ tiup cluster patch [flags] 1. 确定以下变量的值: - `${component}`:需要替换的组件名(例如 `tidb`、`tikv`、`pd`)。 - - `${version}`:组件的版本(例如 `v7.1.0`、`v6.5.1`)。 + - `${version}`:组件的版本(例如 `v7.1.0`、`v6.5.2`)。 - `${os}`:操作系统 (`linux`)。 - `${arch}`:组件运行的平台 (`amd64`、`arm64`)。 2. 下载当前的组件包: diff --git a/tiup/tiup-component-cluster-upgrade.md b/tiup/tiup-component-cluster-upgrade.md index 4a9ece1b79a6..485d0ad3491c 100644 --- a/tiup/tiup-component-cluster-upgrade.md +++ b/tiup/tiup-component-cluster-upgrade.md @@ -13,7 +13,7 @@ tiup cluster upgrade [flags] ``` - `` 为要操作的集群名字,如果忘记集群名字可通过[集群列表](/tiup/tiup-component-cluster-list.md)查看。 -- `` 为要升级到的目标版本,例如 `v6.5.0`。目前仅允许升级到比当前集群更高的版本,不允许升级到比当前集群更低的版本,即不允许降级。同时也不允许升级成 nightly 版本 +- `` 为要升级到的目标版本,例如 `v7.1.0`。目前仅允许升级到比当前集群更高的版本,不允许升级到比当前集群更低的版本,即不允许降级。同时也不允许升级成 nightly 版本。 ## 选项 diff --git a/tiup/tiup-component-dm-upgrade.md b/tiup/tiup-component-dm-upgrade.md index 438c4a06a2e4..c0f689efe554 100644 --- a/tiup/tiup-component-dm-upgrade.md +++ b/tiup/tiup-component-dm-upgrade.md @@ -13,7 +13,7 @@ tiup dm upgrade [flags] ``` - `` 为要操作的集群名字,如果忘记集群名字可查看[集群列表](/tiup/tiup-component-dm-list.md)。 -- `` 为要升级到的目标版本,例如 `v6.5.0`。目前仅允许升级到比当前集群更高的版本,不允许升级到比当前集群更低的版本,即不允许降级。同时也不允许升级成 nightly 版本 +- `` 为要升级到的目标版本,例如 `v7.1.0`。目前仅允许升级到比当前集群更高的版本,不允许升级到比当前集群更低的版本,即不允许降级。同时也不允许升级成 nightly 版本。 ## 选项 diff --git a/upgrade-tidb-using-tiup.md b/upgrade-tidb-using-tiup.md index a529fd31181c..39e5313cc351 100644 --- a/upgrade-tidb-using-tiup.md +++ b/upgrade-tidb-using-tiup.md @@ -203,7 +203,7 @@ tiup cluster upgrade v7.1.0 tiup cluster stop ``` -之后通过 `upgrade` 命令添加 `--offline` 参数来进行停机升级,其中 `` 为集群名,`` 为升级的目标版本,例如 `v6.5.0`。 +之后通过 `upgrade` 命令添加 `--offline` 参数来进行停机升级,其中 `` 为集群名,`` 为升级的目标版本,例如 `v7.1.0`。 {{< copyable "shell-regular" >}} @@ -263,7 +263,7 @@ Cluster version: v7.1.0 ### 4.2 升级过程中 evict leader 等待时间过长,如何跳过该步骤快速升级 -可以指定 `--force`,升级时会跳过 `PD transfer leader` 和 `TiKV evict leader` 过程,直接重启并升级版本,对线上运行的集群性能影响较大。命令如下,其中 `` 为升级的目标版本,例如 `v6.5.0`: +可以指定 `--force`,升级时会跳过 `PD transfer leader` 和 `TiKV evict leader` 过程,直接重启并升级版本,对线上运行的集群性能影响较大。命令如下,其中 `` 为升级的目标版本,例如 `v7.1.0`: {{< copyable "shell-regular" >}} From 824b67b2cc413f0a417f7903012f9372462682e1 Mon Sep 17 00:00:00 2001 From: Grace Cai Date: Fri, 2 Jun 2023 12:02:42 +0800 Subject: [PATCH 163/257] tidb: rename products (#14062) --- TOC.md | 2 +- br/backup-and-restore-overview.md | 2 +- develop/dev-guide-build-cluster-in-cloud.md | 22 ++++++++-------- develop/dev-guide-create-database.md | 2 +- develop/dev-guide-create-secondary-indexes.md | 2 +- develop/dev-guide-create-table.md | 4 +-- develop/dev-guide-delete-data.md | 2 +- develop/dev-guide-insert-data.md | 2 +- develop/dev-guide-proxysql-integration.md | 2 +- .../dev-guide-sample-application-django.md | 8 +++--- .../dev-guide-sample-application-golang.md | 10 +++---- develop/dev-guide-sample-application-java.md | 14 +++++----- .../dev-guide-sample-application-python.md | 26 +++++++++---------- ...ev-guide-sample-application-spring-boot.md | 6 ++--- develop/dev-guide-tidb-crud-sql.md | 2 +- develop/dev-guide-update-data.md | 2 +- ecosystem-tool-user-guide.md | 4 +-- releases/release-5.2.0.md | 4 +-- releases/release-6.0.0-dmr.md | 2 +- releases/release-7.0.0.md | 2 +- releases/release-7.1.0.md | 2 +- tidb-in-kubernetes.md | 2 +- tidb-operator-overview.md | 2 +- tiflash-performance-tuning-methods.md | 2 +- time-to-live.md | 2 +- tiunimanager/tiunimanager-release-1.0.0.md | 2 +- 26 files changed, 66 insertions(+), 66 deletions(-) diff --git a/TOC.md b/TOC.md index f72d4b42279d..c4919e8151ef 100644 --- a/TOC.md +++ b/TOC.md @@ -17,7 +17,7 @@ - 应用开发 - [概览](/develop/dev-guide-overview.md) - 快速开始 - - [使用 TiDB Cloud (Serverless Tier) 构建 TiDB 集群](/develop/dev-guide-build-cluster-in-cloud.md) + - [使用 TiDB Serverless 构建 TiDB 集群](/develop/dev-guide-build-cluster-in-cloud.md) - [使用 TiDB 的增删改查 SQL](/develop/dev-guide-tidb-crud-sql.md) - 示例程序 - [Golang](/develop/dev-guide-sample-application-golang.md) diff --git a/br/backup-and-restore-overview.md b/br/backup-and-restore-overview.md index 95134b7620e2..c9ca876b7c32 100644 --- a/br/backup-and-restore-overview.md +++ b/br/backup-and-restore-overview.md @@ -45,7 +45,7 @@ TiDB 备份恢复功能可以用于满足以下业务的需求: ## 功能使用 -根据 TiDB 部署方式的不同,使用备份恢复功能的方式也不同。本文主要介绍在 On-Premise 物理部署方式下,如何使用 br 命令行工具进行 TiDB 的备份和恢复。 +根据 TiDB 部署方式的不同,使用备份恢复功能的方式也不同。本文主要介绍在本地部署方式下,如何使用 br 命令行工具进行 TiDB 的备份和恢复。 其它 TiDB 的部署方式的备份恢复功能使用,可以参考: diff --git a/develop/dev-guide-build-cluster-in-cloud.md b/develop/dev-guide-build-cluster-in-cloud.md index 785286497ff0..14663eaa9357 100644 --- a/develop/dev-guide-build-cluster-in-cloud.md +++ b/develop/dev-guide-build-cluster-in-cloud.md @@ -1,30 +1,30 @@ --- -title: 使用 TiDB Cloud (Serverless Tier) 构建 TiDB 集群 -summary: 使用 TiDB Cloud (Serverless Tier) 构建 TiDB 集群,并连接 TiDB Cloud 集群。 +title: 使用 TiDB Serverless 构建 TiDB 集群 +summary: 使用 TiDB Serverless 构建 TiDB 集群,并连接 TiDB Serverless 集群。 aliases: ['/zh/tidb/dev/build-cluster-in-cloud'] --- -# 使用 TiDB Cloud (Serverless Tier) 构建 TiDB 集群 +# 使用 TiDB Serverless 构建 TiDB 集群 -本章节将介绍如何以最快的方式开始使用 TiDB。你将使用 [TiDB Cloud](https://en.pingcap.com/tidb-cloud) 创建并启动一个 Serverless Tier 集群,使用 TiDB SQL 客户端,插入数据。随后将从示例程序读取出数据。 +本章节将介绍如何以最快的方式开始使用 TiDB。你将使用 [TiDB Cloud](https://en.pingcap.com/tidb-cloud) 创建并启动一个 TiDB Serverless 集群,使用 TiDB SQL 客户端,插入数据。随后将从示例程序读取出数据。 若你需要在本地计算机上启动 TiDB,请参阅[本地启动 TiDB](/quick-start-with-tidb.md)。 -## 第 1 步:创建 Serverless Tier 集群 +## 第 1 步:创建 TiDB Serverless 集群 1. 如果你还未拥有 TiDB Cloud 账号,请先在此[注册](https://tidbcloud.com/free-trial)。 2. 使用你的 TiDB Cloud 账号[登录](https://tidbcloud.com/)。 登录后,默认进入 [**Clusters**](https://tidbcloud.com/console/clusters) 页面。 -3. 对于新注册的用户,TiDB Cloud 会自动为你创建一个 Serverless Tier 集群 `Cluster0`。你可以使用这个默认集群进行后续操作,也可以自行创建一个新的 Serverless Tier 集群。 +3. 对于新注册的用户,TiDB Cloud 会自动为你创建一个 TiDB Serverless 集群 `Cluster0`。你可以使用这个默认集群进行后续操作,也可以自行创建一个新的 TiDB Serverless 集群。 - 如果你想创建一个新的 Serverless Tier 集群,请进行以下操作: + 如果你想创建一个新的 TiDB Serverless 集群,请进行以下操作: 1. 点击 **Create Cluster**。 - 2. **Create Cluster** 页面默认选择 **Serverless Tier**。你可以根据需要修改集群名称、选择可用区,然后点击 **Create**。你的 Serverless Tier 集群将于 30 秒后创建完毕。 + 2. **Create Cluster** 页面默认选择 **Serverless**。你可以根据需要修改集群名称、选择可用区,然后点击 **Create**。你的 TiDB Serverless 集群将于 30 秒后创建完毕。 4. 点击目标集群名称,进入集群概览页面,然后点击右上角的 **Connect** 按钮,弹出连接对话框。 @@ -34,7 +34,7 @@ aliases: ['/zh/tidb/dev/build-cluster-in-cloud'] > **注意:** > - > 在连接到 [Serverless Tier](https://docs.pingcap.com/tidbcloud/select-cluster-tier#serverless-tier) 集群时,你需要给用户名加上前缀并使用单引号包裹用户名。你可以在 [TiDB Cloud 用户名前缀](https://docs.pingcap.com/tidbcloud/select-cluster-tier#user-name-prefix) 中获得更多信息。 + > 在连接到 [TiDB Serverless](https://docs.pingcap.com/tidbcloud/select-cluster-tier#tidb-serverless-beta) 集群时,你需要给用户名加上前缀并使用单引号包裹用户名。你可以在 [TiDB Cloud 用户名前缀](https://docs.pingcap.com/tidbcloud/select-cluster-tier#user-name-prefix) 中获得更多信息。 ## 第 2 步:连接到集群 @@ -117,8 +117,8 @@ aliases: ['/zh/tidb/dev/build-cluster-in-cloud'] > **注意:** > -> - 在连接 Serverless Tier 集群时,[必须使用 TLS 连接](https://docs.pingcap.com/tidbcloud/secure-connections-to-serverless-tier-clusters)。 -> - 如果你在连接时遇到问题,可阅读 [TiDB Cloud Serverless Tier 集群安全连接](https://docs.pingcap.com/tidbcloud/secure-connections-to-serverless-tier-clusters) 来获得更多信息。 +> - 在连接 TiDB Serverless 集群时,[必须使用 TLS 连接](https://docs.pingcap.com/tidbcloud/secure-connections-to-serverless-tier-clusters)。 +> - 如果你在连接时遇到问题,可阅读 [TiDB Serverless 集群安全连接](https://docs.pingcap.com/tidbcloud/secure-connections-to-serverless-tier-clusters) 来获得更多信息。 3. 填写密码,完成登录。 diff --git a/develop/dev-guide-create-database.md b/develop/dev-guide-create-database.md index 489cf5242b7b..637f8bce2b44 100644 --- a/develop/dev-guide-create-database.md +++ b/develop/dev-guide-create-database.md @@ -16,7 +16,7 @@ aliases: ['/zh/tidb/dev/create-database'] 在阅读本页面之前,你需要准备以下事项: -- [使用 TiDB Cloud (Serverless Tier) 构建 TiDB 集群](/develop/dev-guide-build-cluster-in-cloud.md)。 +- [使用 TiDB Serverless 构建 TiDB 集群](/develop/dev-guide-build-cluster-in-cloud.md)。 - 阅读[数据库模式概览](/develop/dev-guide-schema-design-overview.md)。 ## 什么是数据库 diff --git a/develop/dev-guide-create-secondary-indexes.md b/develop/dev-guide-create-secondary-indexes.md index 420369bc21c9..ff13825529c9 100644 --- a/develop/dev-guide-create-secondary-indexes.md +++ b/develop/dev-guide-create-secondary-indexes.md @@ -12,7 +12,7 @@ aliases: ['/zh/tidb/dev/create-secondary-indexes'] 在阅读本页面之前,你需要准备以下事项: -- [使用 TiDB Cloud (Serverless Tier) 构建 TiDB 集群](/develop/dev-guide-build-cluster-in-cloud.md)。 +- [使用 TiDB Serverless 构建 TiDB 集群](/develop/dev-guide-build-cluster-in-cloud.md)。 - 阅读[数据库模式概览](/develop/dev-guide-schema-design-overview.md)。 - [创建一个数据库](/develop/dev-guide-create-database.md)。 - [创建表](/develop/dev-guide-create-table.md)。 diff --git a/develop/dev-guide-create-table.md b/develop/dev-guide-create-table.md index c80501a94a15..4f6cedf57e8d 100644 --- a/develop/dev-guide-create-table.md +++ b/develop/dev-guide-create-table.md @@ -16,7 +16,7 @@ aliases: ['/zh/tidb/dev/create-table'] 在阅读本页面之前,你需要准备以下事项: -- [使用 TiDB Cloud (Serverless Tier) 构建 TiDB 集群](/develop/dev-guide-build-cluster-in-cloud.md)。 +- [使用 TiDB Serverless 构建 TiDB 集群](/develop/dev-guide-build-cluster-in-cloud.md)。 - 阅读[数据库模式概览](/develop/dev-guide-schema-design-overview.md)。 - [创建一个数据库](/develop/dev-guide-create-database.md)。 @@ -263,7 +263,7 @@ ALTER TABLE `bookshop`.`ratings` SET TIFLASH REPLICA 1; > **注意:** > -> 如果你的集群,不包含 TiFlash 节点,此 SQL 语句将会报错:`1105 - the tiflash replica count: 1 should be less than the total tiflash server count: 0` 你可以[使用 TiDB Cloud (Serverless Tier) 构建 TiDB 集群](/develop/dev-guide-build-cluster-in-cloud.md#第-1-步创建-serverless-tier-集群) 来创建一个含有 TiFlash 的集群。 +> 如果你的集群,不包含 TiFlash 节点,此 SQL 语句将会报错:`1105 - the tiflash replica count: 1 should be less than the total tiflash server count: 0` 你可以[使用 TiDB Serverless 构建 TiDB 集群](/develop/dev-guide-build-cluster-in-cloud.md#第-1-步创建-tidb-serverless-集群) 来创建一个含有 TiFlash 的集群。 随后正常进行查询即可: diff --git a/develop/dev-guide-delete-data.md b/develop/dev-guide-delete-data.md index b2dfffb5c094..8a8a2a494bf3 100644 --- a/develop/dev-guide-delete-data.md +++ b/develop/dev-guide-delete-data.md @@ -12,7 +12,7 @@ aliases: ['/zh/tidb/dev/delete-data'] 在阅读本页面之前,你需要准备以下事项: -- [使用 TiDB Cloud (Serverless Tier) 构建 TiDB 集群](/develop/dev-guide-build-cluster-in-cloud.md)。 +- [使用 TiDB Serverless 构建 TiDB 集群](/develop/dev-guide-build-cluster-in-cloud.md)。 - 阅读[数据库模式概览](/develop/dev-guide-schema-design-overview.md),并[创建数据库](/develop/dev-guide-create-database.md)、[创建表](/develop/dev-guide-create-table.md)、[创建二级索引](/develop/dev-guide-create-secondary-indexes.md)。 - 需先[插入数据](/develop/dev-guide-insert-data.md)才可删除。 diff --git a/develop/dev-guide-insert-data.md b/develop/dev-guide-insert-data.md index d6b055317fad..7006c641fb61 100644 --- a/develop/dev-guide-insert-data.md +++ b/develop/dev-guide-insert-data.md @@ -14,7 +14,7 @@ aliases: ['/zh/tidb/dev/insert-data'] 在阅读本页面之前,你需要准备以下事项: -- [使用 TiDB Cloud (Serverless Tier) 构建 TiDB 集群](/develop/dev-guide-build-cluster-in-cloud.md)。 +- [使用 TiDB Serverless 构建 TiDB 集群](/develop/dev-guide-build-cluster-in-cloud.md)。 - 阅读[数据库模式概览](/develop/dev-guide-schema-design-overview.md),并[创建数据库](/develop/dev-guide-create-database.md)、[创建表](/develop/dev-guide-create-table.md)、[创建二级索引](/develop/dev-guide-create-secondary-indexes.md)。 ## 插入行 diff --git a/develop/dev-guide-proxysql-integration.md b/develop/dev-guide-proxysql-integration.md index 5b3590f540ff..ee884a4a4c88 100644 --- a/develop/dev-guide-proxysql-integration.md +++ b/develop/dev-guide-proxysql-integration.md @@ -20,7 +20,7 @@ summary: 介绍 TiDB 与 ProxySQL 集成的方法。
-请参考[使用 TiDB Cloud (Serverless Tier) 构建 TiDB 集群](/develop/dev-guide-build-cluster-in-cloud.md)。 +请参考[使用 TiDB Serverless 构建 TiDB 集群](/develop/dev-guide-build-cluster-in-cloud.md)。
diff --git a/develop/dev-guide-sample-application-django.md b/develop/dev-guide-sample-application-django.md index 3a783cf5d055..f1b55a50e8a0 100644 --- a/develop/dev-guide-sample-application-django.md +++ b/develop/dev-guide-sample-application-django.md @@ -29,7 +29,7 @@ summary: 给出一个 Django 构建 TiDB 应用程序示例。
-[创建 Serverless Tier 集群](/develop/dev-guide-build-cluster-in-cloud.md#第-1-步创建-serverless-tier-集群)。 +[创建 TiDB Serverless 集群](/develop/dev-guide-build-cluster-in-cloud.md#第-1-步创建-tidb-serverless-集群)。
@@ -72,7 +72,7 @@ summary: 给出一个 Django 构建 TiDB 应用程序示例。 ### 第 4 步第 1 部分:TiDB Cloud 更改参数 -若你使用 TiDB Cloud Serverless Tier 集群,更改 `example_project/settings.py` 中的 `DATABASES` 参数: +若你使用 TiDB Serverless 集群,更改 `example_project/settings.py` 中的 `DATABASES` 参数: ```python DATABASES = { @@ -87,9 +87,9 @@ DATABASES = { } ``` -另外,由于 TiDB Cloud Serverless Tier 需要使用 SSL 连接。因此,需要提供 CA 证书路径。你可以在 [TiDB Cloud Serverless Tier 安全连接文档](https://docs.pingcap.com/tidbcloud/secure-connections-to-serverless-tier-clusters#where-is-the-ca-root-path-on-my-system) 中查看不同操作系统的 CA 证书路径。 +另外,由于 TiDB Serverless 需要使用 SSL 连接。因此,需要提供 CA 证书路径。你可以在 [TiDB Serverless 安全连接文档](https://docs.pingcap.com/tidbcloud/secure-connections-to-serverless-tier-clusters#where-is-the-ca-root-path-on-my-system) 中查看不同操作系统的 CA 证书路径。 -若你设定的密码为 `123456`,而且从 TiDB Cloud Serverless Tier 集群面板中得到的连接信息为: +若你设定的密码为 `123456`,而且从 TiDB Serverless 集群面板中得到的连接信息为: - Endpoint: `xxx.tidbcloud.com` - Port: `4000` diff --git a/develop/dev-guide-sample-application-golang.md b/develop/dev-guide-sample-application-golang.md index dad286442e49..2e2066422f79 100644 --- a/develop/dev-guide-sample-application-golang.md +++ b/develop/dev-guide-sample-application-golang.md @@ -22,7 +22,7 @@ summary: 给出一个 TiDB 和 Golang 的简单 CRUD 应用程序示例。
-[创建 Serverless Tier 集群](/develop/dev-guide-build-cluster-in-cloud.md#第-1-步创建-serverless-tier-集群)。 +[创建 TiDB Serverless 集群](/develop/dev-guide-build-cluster-in-cloud.md#第-1-步创建-tidb-serverless-集群)。
@@ -750,13 +750,13 @@ mysql --host 127.0.0.1 --port 4000 -u root -若你使用 TiDB Cloud Serverless Tier 集群,更改 `gorm.go` 内 `dsn` 参数值: +若你使用 TiDB Serverless 集群,更改 `gorm.go` 内 `dsn` 参数值: ```go dsn := "root:@tcp(127.0.0.1:4000)/test?charset=utf8mb4" ``` -若你设定的密码为 `123456`,而且从 TiDB Cloud Serverless Tier 集群面板中得到的连接信息为: +若你设定的密码为 `123456`,而且从 TiDB Serverless 集群面板中得到的连接信息为: - Endpoint: `xxx.tidbcloud.com` - Port: `4000` @@ -777,13 +777,13 @@ dsn := "2aEp24QWEDLqRFs.root:123456@tcp(xxx.tidbcloud.com:4000)/test?charset=utf
-若你使用 TiDB Cloud Serverless Tier 集群,更改 `sqldriver.go` 内 `dsn` 参数的值: +若你使用 TiDB Serverless 集群,更改 `sqldriver.go` 内 `dsn` 参数的值: ```go dsn := "root:@tcp(127.0.0.1:4000)/test?charset=utf8mb4" ``` -若你设定的密码为 `123456`,而且从 TiDB Cloud Serverless Tier 集群面板中得到的连接信息为: +若你设定的密码为 `123456`,而且从 TiDB Serverless 集群面板中得到的连接信息为: - Endpoint: `xxx.tidbcloud.com` - Port: `4000` diff --git a/develop/dev-guide-sample-application-java.md b/develop/dev-guide-sample-application-java.md index ffc787ebc2fd..a02361be8439 100644 --- a/develop/dev-guide-sample-application-java.md +++ b/develop/dev-guide-sample-application-java.md @@ -32,7 +32,7 @@ aliases: ['/zh/tidb/dev/sample-application-java']
-[创建 Serverless Tier 集群](/develop/dev-guide-build-cluster-in-cloud.md#第-1-步创建-serverless-tier-集群)。 +[创建 TiDB Serverless 集群](/develop/dev-guide-build-cluster-in-cloud.md#第-1-步创建-tidb-serverless-集群)。
@@ -1463,7 +1463,7 @@ mysql --host 127.0.0.1 --port 4000 -u root -若你使用 TiDB Cloud Serverless Tier 集群,更改 `mybatis-config.xml` 内关于 `dataSource.url`、`dataSource.username`、`dataSource.password` 的参数: +若你使用 TiDB Serverless 集群,更改 `mybatis-config.xml` 内关于 `dataSource.url`、`dataSource.username`、`dataSource.password` 的参数: ```xml @@ -1506,7 +1506,7 @@ mysql --host 127.0.0.1 --port 4000 -u root ``` -若你设定的密码为 `123456`,而且从 TiDB Cloud Serverless Tier 集群面板中得到的连接信息为: +若你设定的密码为 `123456`,而且从 TiDB Serverless 集群面板中得到的连接信息为: - Endpoint: `xxx.tidbcloud.com` - Port: `4000` @@ -1538,7 +1538,7 @@ mysql --host 127.0.0.1 --port 4000 -u root -若你使用 TiDB Cloud Serverless Tier 集群,更改 `hibernate.cfg.xml` 内关于 `hibernate.connection.url`、`hibernate.connection.username`、`hibernate.connection.password` 的参数: +若你使用 TiDB Serverless 集群,更改 `hibernate.cfg.xml` 内关于 `hibernate.connection.url`、`hibernate.connection.username`、`hibernate.connection.password` 的参数: ```xml @@ -1566,7 +1566,7 @@ mysql --host 127.0.0.1 --port 4000 -u root ``` -若你设定的密码为 `123456`,而且从 TiDB Cloud Serverless Tier 集群面板中得到的连接信息为: +若你设定的密码为 `123456`,而且从 TiDB Serverless 集群面板中得到的连接信息为: - Endpoint: `xxx.tidbcloud.com` - Port: `4000` @@ -1604,7 +1604,7 @@ mysql --host 127.0.0.1 --port 4000 -u root -若你使用 TiDB Cloud Serverless Tier 集群,更改 `JDBCExample.java` 内关于 Host、Port、User、Password 的参数: +若你使用 TiDB Serverless 集群,更改 `JDBCExample.java` 内关于 Host、Port、User、Password 的参数: ```java mysqlDataSource.setServerName("localhost"); @@ -1614,7 +1614,7 @@ mysqlDataSource.setUser("root"); mysqlDataSource.setPassword(""); ``` -若你设定的密码为 `123456`,而且从 TiDB Cloud Serverless Tier 集群面板中得到的连接信息为: +若你设定的密码为 `123456`,而且从 TiDB Serverless 集群面板中得到的连接信息为: - Endpoint: `xxx.tidbcloud.com` - Port: `4000` diff --git a/develop/dev-guide-sample-application-python.md b/develop/dev-guide-sample-application-python.md index a97557506be2..a77ae2761d54 100644 --- a/develop/dev-guide-sample-application-python.md +++ b/develop/dev-guide-sample-application-python.md @@ -22,7 +22,7 @@ summary: 给出一个 TiDB 和 Python 的简单 CRUD 应用程序示例。
-[创建 Serverless Tier 集群](/develop/dev-guide-build-cluster-in-cloud.md#第-1-步创建-serverless-tier-集群)。 +[创建 TiDB Serverless 集群](/develop/dev-guide-build-cluster-in-cloud.md#第-1-步创建-tidb-serverless-集群)。
@@ -835,7 +835,7 @@ mycli --host 127.0.0.1 --port 4000 -u root --no-warn < player_init.sql ### 第 3 步第 2 部分:TiDB Cloud 更改参数 -若你使用了 TiDB Cloud Serverless Tier 集群,此处需使用系统本地的 CA 证书,并将证书路径记为 `` 以供后续指代。请参考以下系统相关的证书路径地址: +若你使用了 TiDB Serverless 集群,此处需使用系统本地的 CA 证书,并将证书路径记为 `` 以供后续指代。请参考以下系统相关的证书路径地址: @@ -865,19 +865,19 @@ mycli --host 127.0.0.1 --port 4000 -u root --no-warn < player_init.sql -若设置后仍有证书错误,请查阅 [TiDB Cloud Serverless Tier 安全连接文档](https://docs.pingcap.com/tidbcloud/secure-connections-to-serverless-tier-clusters)。 +若设置后仍有证书错误,请查阅 [TiDB Serverless 安全连接文档](https://docs.pingcap.com/tidbcloud/secure-connections-to-serverless-tier-clusters)。
-若你使用 TiDB Cloud Serverless Tier 集群,更改 `sqlalchemy_example.py` 内 `create_engine` 函数的入参: +若你使用 TiDB Serverless 集群,更改 `sqlalchemy_example.py` 内 `create_engine` 函数的入参: ```python engine = create_engine('mysql://root:@127.0.0.1:4000/test') ``` -若你设定的密码为 `123456`,而且从 TiDB Cloud Serverless Tier 集群面板中得到的连接信息为: +若你设定的密码为 `123456`,而且从 TiDB Serverless 集群面板中得到的连接信息为: - Endpoint: `xxx.tidbcloud.com` - Port: `4000` @@ -898,13 +898,13 @@ engine = create_engine('mysql://2aEp24QWEDLqRFs.root:123456@xxx.tidbcloud.com:40
-若你使用 TiDB Cloud Serverless Tier 集群,更改 `peewee_example.py` 内 `connect` 函数的入参: +若你使用 TiDB Serverless 集群,更改 `peewee_example.py` 内 `connect` 函数的入参: ```python db = connect('mysql://root:@127.0.0.1:4000/test') ``` -若你设定的密码为 `123456`,而且从 TiDB Cloud Serverless Tier 集群面板中得到的连接信息为: +若你设定的密码为 `123456`,而且从 TiDB Serverless 集群面板中得到的连接信息为: - Endpoint: `xxx.tidbcloud.com` - Port: `4000` @@ -932,7 +932,7 @@ db = connect('mysql://root:@127.0.0.1:4000/test')
-若你使用 TiDB Cloud Serverless Tier 集群,更改 `mysqlclient_example.py` 内 `get_connection` 函数: +若你使用 TiDB Serverless 集群,更改 `mysqlclient_example.py` 内 `get_connection` 函数: ```python def get_connection(autocommit: bool = True) -> MySQLdb.Connection: @@ -946,7 +946,7 @@ def get_connection(autocommit: bool = True) -> MySQLdb.Connection: ) ``` -若你设定的密码为 `123456`,而且从 TiDB Cloud Serverless Tier 集群面板中得到的连接信息为: +若你设定的密码为 `123456`,而且从 TiDB Serverless 集群面板中得到的连接信息为: - Endpoint: `xxx.tidbcloud.com` - Port: `4000` @@ -974,7 +974,7 @@ def get_connection(autocommit: bool = True) -> MySQLdb.Connection:
-若你使用 TiDB Cloud Serverless Tier 集群,更改 `pymysql_example.py` 内 `get_connection` 函数: +若你使用 TiDB Serverless 集群,更改 `pymysql_example.py` 内 `get_connection` 函数: ```python def get_connection(autocommit: bool = False) -> Connection: @@ -987,7 +987,7 @@ def get_connection(autocommit: bool = False) -> Connection: autocommit=autocommit) ``` -若你设定的密码为 `123456`,而且从 TiDB Cloud Serverless Tier 集群面板中得到的连接信息为: +若你设定的密码为 `123456`,而且从 TiDB Serverless 集群面板中得到的连接信息为: - Endpoint: `xxx.tidbcloud.com` - Port: `4000` @@ -1013,7 +1013,7 @@ def get_connection(autocommit: bool = False) -> Connection:
-若你使用 TiDB Cloud Serverless Tier 集群,更改 `mysql_connector_python_example.py` 内 `get_connection` 函数: +若你使用 TiDB Serverless 集群,更改 `mysql_connector_python_example.py` 内 `get_connection` 函数: ```python def get_connection(autocommit: bool = True) -> MySQLConnection: @@ -1026,7 +1026,7 @@ def get_connection(autocommit: bool = True) -> MySQLConnection: return connection ``` -若你设定的密码为 `123456`,而且从 TiDB Cloud Serverless Tier 集群面板中得到的连接信息为: +若你设定的密码为 `123456`,而且从 TiDB Serverless 集群面板中得到的连接信息为: - Endpoint: `xxx.tidbcloud.com` - Port: `4000` diff --git a/develop/dev-guide-sample-application-spring-boot.md b/develop/dev-guide-sample-application-spring-boot.md index f16d9fbe07fe..67d13834e58d 100644 --- a/develop/dev-guide-sample-application-spring-boot.md +++ b/develop/dev-guide-sample-application-spring-boot.md @@ -31,7 +31,7 @@ aliases: ['/zh/tidb/dev/sample-application-spring-boot']
-[创建 Serverless Tier 集群](/develop/dev-guide-build-cluster-in-cloud.md#第-1-步创建-serverless-tier-集群)。 +[创建 TiDB Serverless 集群](/develop/dev-guide-build-cluster-in-cloud.md#第-1-步创建-tidb-serverless-集群)。
@@ -118,7 +118,7 @@ aliases: ['/zh/tidb/dev/sample-application-spring-boot'] ### 第 5 步第 1 部分:TiDB Cloud 更改参数 -若你使用 TiDB Cloud Serverless Tier 集群,更改 `application.yml`(位于 `src/main/resources` 内)关于 `spring.datasource.url`、`spring.datasource.username`、`spring.datasource.password` 的参数: +若你使用 TiDB Serverless 集群,更改 `application.yml`(位于 `src/main/resources` 内)关于 `spring.datasource.url`、`spring.datasource.username`、`spring.datasource.password` 的参数: ```yaml spring: @@ -134,7 +134,7 @@ spring: ddl-auto: create-drop ``` -若你设定的密码为 `123456`,而且从 TiDB Cloud Serverless Tier 集群面板中得到的连接信息为: +若你设定的密码为 `123456`,而且从 TiDB Serverless 集群面板中得到的连接信息为: - Endpoint: `xxx.tidbcloud.com` - Port: `4000` diff --git a/develop/dev-guide-tidb-crud-sql.md b/develop/dev-guide-tidb-crud-sql.md index d847b296a21b..b0be1c1519ad 100644 --- a/develop/dev-guide-tidb-crud-sql.md +++ b/develop/dev-guide-tidb-crud-sql.md @@ -10,7 +10,7 @@ aliases: ['/zh/tidb/dev/tidb-crud-sql'] ## 在开始之前 -请确保你已经连接到 TiDB 集群,若未连接,请参考[使用 TiDB Cloud (Serverless Tier) 构建 TiDB 集群](/develop/dev-guide-build-cluster-in-cloud.md#第-1-步创建-serverless-tier-集群)来创建一个 Serverless Tier 集群。 +请确保你已经连接到 TiDB 集群,若未连接,请参考[使用 TiDB Serverless 构建 TiDB 集群](/develop/dev-guide-build-cluster-in-cloud.md#第-1-步创建-tidb-serverless-集群)来创建一个 TiDB Serverless 集群。 ## 基本 SQL 操作 diff --git a/develop/dev-guide-update-data.md b/develop/dev-guide-update-data.md index 044d11d4f449..2f743dfbecd1 100644 --- a/develop/dev-guide-update-data.md +++ b/develop/dev-guide-update-data.md @@ -15,7 +15,7 @@ aliases: ['/zh/tidb/dev/update-data'] 在阅读本页面之前,你需要准备以下事项: -- [使用 TiDB Cloud (Serverless Tier) 构建 TiDB 集群](/develop/dev-guide-build-cluster-in-cloud.md) +- [使用 TiDB Serverless 构建 TiDB 集群](/develop/dev-guide-build-cluster-in-cloud.md) - 阅读[数据库模式概览](/develop/dev-guide-schema-design-overview.md),并[创建数据库](/develop/dev-guide-create-database.md)、[创建表](/develop/dev-guide-create-table.md)、[创建二级索引](/develop/dev-guide-create-secondary-indexes.md) - 若需使用 `UPDATE` 语句更新数据,需先[插入数据](/develop/dev-guide-insert-data.md) diff --git a/ecosystem-tool-user-guide.md b/ecosystem-tool-user-guide.md index 9056c8f7cd31..8c61b105e86c 100644 --- a/ecosystem-tool-user-guide.md +++ b/ecosystem-tool-user-guide.md @@ -28,7 +28,7 @@ TiDB 提供了 TiUP、TiDB Operator 和 TiUniManager 三种部署运维工具, #### TiUniManager -[TiUniManager](/tiunimanager/tiunimanager-overview.md) 是一款以 TiDB 数据库为核心的数据库管理平台,帮助用户在私有部署 (on-premises) 或公有云环境中管理 TiDB 集群。 +[TiUniManager](/tiunimanager/tiunimanager-overview.md) 是一款以 TiDB 数据库为核心的数据库管理平台,帮助用户在本地部署环境或公有云环境中管理 TiDB 集群。 TiUniManager 不仅提供对 TiDB 集群的全生命周期的可视化管理,也同时一站式提供 TiDB 数据库参数管理、数据库版本升级、克隆集群、主备集群切换、数据导入导出、数据同步、数据备份恢复服务,能有效提高 TiDB 集群运维效率,降低企业运维成本。 @@ -40,7 +40,7 @@ TiUniManager 不仅提供对 TiDB 集群的全生命周期的可视化管理, ### 在 Kubernetes 上部署运维 TiDB - TiDB Operator -[TiDB Operator](https://docs.pingcap.com/zh/tidb-in-kubernetes/stable) 是 Kubernetes 上的 TiDB 集群自动运维系统,提供包括部署、升级、扩缩容、备份恢复、配置变更的 TiDB 全生命周期管理。借助 TiDB Operator,TiDB 可以无缝运行在公有云或私有部署的 Kubernetes 集群上。 +[TiDB Operator](https://docs.pingcap.com/zh/tidb-in-kubernetes/stable) 是 Kubernetes 上的 TiDB 集群自动运维系统,提供包括部署、升级、扩缩容、备份恢复、配置变更的 TiDB 全生命周期管理。借助 TiDB Operator,TiDB 可以无缝运行在公有云或自托管的 Kubernetes 集群上。 基本信息: diff --git a/releases/release-5.2.0.md b/releases/release-5.2.0.md index c941b074a54f..bb8ee9cd20f7 100644 --- a/releases/release-5.2.0.md +++ b/releases/release-5.2.0.md @@ -20,7 +20,7 @@ TiDB 版本:5.2.0 - 新增 TiFlash I/O 限流功能,提升 TiFlash 读写稳定性。 - 为 TiKV 引入新的流控机制代替之前的 RocksDB write stall 流控机制,提升 TiKV 流控稳定性。 - 简化 Data Migration (DM) 工具运维,降低运维管理的成本。 -- TiCDC 支持 HTTP 协议 OpenAPI 对 TiCDC 任务进行管理,在 Kubernetes 以及 On-Premises 环境下提供更友好的运维方式。(实验特性) +- TiCDC 支持 HTTP 协议 OpenAPI 对 TiCDC 任务进行管理,在 Kubernetes 以及本地部署环境下提供更友好的运维方式。(实验特性) ## 兼容性更改 @@ -161,7 +161,7 @@ TiDB 版本:5.2.0 ### TiDB 数据共享订阅 -TiCDC 支持 HTTP 协议 OpenAPI 对 TiCDC 任务进行管理,在 Kubernetes 以及 On-Premises 环境下提供更友好的运维方式。(实验特性) +TiCDC 支持 HTTP 协议 OpenAPI 对 TiCDC 任务进行管理,在 Kubernetes 以及本地部署环境下提供更友好的运维方式。(实验特性) [#2411](https://github.com/pingcap/tiflow/issues/2411) diff --git a/releases/release-6.0.0-dmr.md b/releases/release-6.0.0-dmr.md index 52f4058da5f4..8d0bd0010ae3 100644 --- a/releases/release-6.0.0-dmr.md +++ b/releases/release-6.0.0-dmr.md @@ -264,7 +264,7 @@ v6.0.0 是 DMR 版本,版本名称为 6.0.0-DMR。 - 企业级数据库管理平台 TiDB Enterprise Manager - TiDB Enterprise Manager 是一款以 TiDB 数据库为核心的企业级数据库管理平台,帮助用户在私有部署 (on-premises) 或公有云环境中管理 TiDB 集群。 + TiDB Enterprise Manager 是一款以 TiDB 数据库为核心的企业级数据库管理平台,帮助用户在本地部署环境或公有云环境中管理 TiDB 集群。 TiDB Enterprise Manager 不仅为 TiDB 集群提供全生命周期的可视化管理,也同时一站式提供 TiDB 数据库的参数管理、数据库版本升级、克隆集群、主备集群切换、数据导入导出、数据同步、数据备份恢复服务,能有效提高 TiDB 集群运维效率,降低企业运维成本。 diff --git a/releases/release-7.0.0.md b/releases/release-7.0.0.md index 81dfcbfe49ce..c6bb8eabf0f5 100644 --- a/releases/release-7.0.0.md +++ b/releases/release-7.0.0.md @@ -248,7 +248,7 @@ TiDB 版本:7.0.0 * [DBeaver](https://dbeaver.io/) v23.0.1 默认支持 TiDB [#17396](https://github.com/dbeaver/dbeaver/issues/17396) @[Icemap](https://github.com/Icemap) - 提供独立的 TiDB 模块、Icon 和标识。 - - 默认配置支持 [TiDB Cloud Serverless Tier](https://docs.pingcap.com/tidbcloud/select-cluster-tier#serverless-tier-beta),你可以更方便地连接 Serverless Tier。 + - 默认配置支持 [TiDB Serverless](https://docs.pingcap.com/tidbcloud/select-cluster-tier#tidb-serverless-beta),你可以更方便地连接 TiDB Serverless。 - 支持识别 TiDB 版本,从而显示或隐藏外键 Tab。 - 支持 Explain SQL 计划显示。 - 支持 TiDB 语法高亮,如 `PESSIMISTIC`、`OPTIMISTIC`、`AUTO_RANDOM`、`PLACEMENT`、`POLICY`、`REORGANIZE`、`EXCHANGE`、`CACHE`、`NONCLUSTERED`、`CLUSTERED` 等。 diff --git a/releases/release-7.1.0.md b/releases/release-7.1.0.md index 0f4ca4961d64..6f07de946f1c 100644 --- a/releases/release-7.1.0.md +++ b/releases/release-7.1.0.md @@ -533,7 +533,7 @@ TiDB 7.1.0 为长期支持版本 (Long-Term Support Release, LTS)。 ## 性能测试 -如需了解 TiDB v7.1.0 的性能表现,你可以参考 TiDB Cloud Dedicated 集群的 [TPC-C 性能测试报告](https://docs.pingcap.com/tidbcloud/v7.1.0-performance-benchmarking-with-tpcc)(英文版)。 +如需了解 TiDB v7.1.0 的性能表现,你可以参考 TiDB Dedicated 集群的 [TPC-C 性能测试报告](https://docs.pingcap.com/tidbcloud/v7.1.0-performance-benchmarking-with-tpcc)(英文版)。 ## 贡献者 diff --git a/tidb-in-kubernetes.md b/tidb-in-kubernetes.md index 1d57bcefcd5a..9dd20b4e3235 100644 --- a/tidb-in-kubernetes.md +++ b/tidb-in-kubernetes.md @@ -5,7 +5,7 @@ summary: 了解如何在 Kubernetes 上部署 TiDB # 在 Kubernetes 上部署 TiDB -你可以使用 [TiDB Operator](https://github.com/pingcap/tidb-operator) 在 Kubernetes 上部署 TiDB。TiDB Operator 是 Kubernetes 上的 TiDB 集群自动运维系统,提供包括部署、升级、扩缩容、备份恢复、配置变更的 TiDB 全生命周期管理。借助 TiDB Operator,TiDB 可以无缝运行在公有云或私有部署的 Kubernetes 集群上。 +你可以使用 [TiDB Operator](https://github.com/pingcap/tidb-operator) 在 Kubernetes 上部署 TiDB。TiDB Operator 是 Kubernetes 上的 TiDB 集群自动运维系统,提供包括部署、升级、扩缩容、备份恢复、配置变更的 TiDB 全生命周期管理。借助 TiDB Operator,TiDB 可以无缝运行在公有云或自托管的 Kubernetes 集群上。 TiDB Operator 的文档目前独立于 TiDB 文档。要查看如何在 Kubernetes 上部署 TiDB 的详细步骤,请参阅对应版本的 TiDB Operator 文档: diff --git a/tidb-operator-overview.md b/tidb-operator-overview.md index c602b5c4c3c3..8335ba7b2928 100644 --- a/tidb-operator-overview.md +++ b/tidb-operator-overview.md @@ -5,7 +5,7 @@ summary: 了解 Kubernetes 上的 TiDB 集群自动部署运维工具 TiDB Opera # TiDB Operator -[TiDB Operator](https://github.com/pingcap/tidb-operator) 是 Kubernetes 上的 TiDB 集群自动运维系统,提供包括部署、升级、扩缩容、备份恢复、配置变更的 TiDB 全生命周期管理。借助 TiDB Operator,TiDB 可以无缝运行在公有云或私有部署的 Kubernetes 集群上。 +[TiDB Operator](https://github.com/pingcap/tidb-operator) 是 Kubernetes 上的 TiDB 集群自动运维系统,提供包括部署、升级、扩缩容、备份恢复、配置变更的 TiDB 全生命周期管理。借助 TiDB Operator,TiDB 可以无缝运行在公有云或自托管的 Kubernetes 集群上。 TiDB Operator 的文档目前独立于 TiDB 文档,文档名称为 **TiDB on Kubernetes 用户文档**。要访问 TiDB Operator 的文档,请点击以下链接: diff --git a/tiflash-performance-tuning-methods.md b/tiflash-performance-tuning-methods.md index ac500597c623..3d0359b1870e 100644 --- a/tiflash-performance-tuning-methods.md +++ b/tiflash-performance-tuning-methods.md @@ -98,7 +98,7 @@ summary: 本文介绍了 Performance Overview 面板中 TiFlash 部分,帮助 你可以通过 `(Read flow + Write flow) ÷ 总的 Write Throughput By Instance` 计算出整个 TiFlash 集群的写放大倍数。 -示例 1 :[CH-benCHmark 负载](/benchmark/benchmark-tidb-using-ch.md) OP 环境 Raft 和 IO 指标 +示例 1 :[CH-benCHmark 负载](/benchmark/benchmark-tidb-using-ch.md)本地部署环境 Raft 和 IO 指标 如下图所示,该 TiFlash 集群的 Raft Wait Index 和 Raft Batch Read Index 99 分位数较高,分别为 3.24 秒和 753 毫秒。这是因为该集群的 TiFlash 负载较高,数据同步存在延迟。 diff --git a/time-to-live.md b/time-to-live.md index 2a9651e5dcf4..df3ca73c6bd8 100644 --- a/time-to-live.md +++ b/time-to-live.md @@ -238,7 +238,7 @@ TTL 功能能够与 TiDB 的迁移、备份、恢复工具一同使用。 * 具有 TTL 属性的表不支持作为外键约束的主表被其他表引用。 * 不保证所有过期数据立即被删除,过期数据被删除的时间取决于后台清理任务的调度周期和调度窗口。 * 对于使用[聚簇索引](/clustered-indexes.md)的表,如果主键的类型不是整数类型或二进制字符串类型,TTL 任务将无法被拆分成多个子任务。这将导致 TTL 任务只能在一个 TiDB 节点上按顺序执行。如果表中的数据量较大,TTL 任务的执行可能会变得缓慢。 -* TTL 无法在 TiDB Cloud [Serverless Tier](https://docs.pingcap.com/tidbcloud/select-cluster-tier#serverless-tier-beta) 集群上使用。 +* TTL 无法在 [TiDB Serverless](https://docs.pingcap.com/tidbcloud/select-cluster-tier#tidb-serverless-beta) 集群上使用。 ## 常见问题 diff --git a/tiunimanager/tiunimanager-release-1.0.0.md b/tiunimanager/tiunimanager-release-1.0.0.md index 3ebb1bf74077..3717ee0dd850 100644 --- a/tiunimanager/tiunimanager-release-1.0.0.md +++ b/tiunimanager/tiunimanager-release-1.0.0.md @@ -14,7 +14,7 @@ TiDB Enterprise Manager 版本:1.0.0 > - TiDB Enterprise Manager v1.0.0 未开源。若要获取 v1.0.0 的安装包或相关支持,请联系 TiUniManager 团队。 > - 自 v1.0.2 起,TiDB Enterprise Manager 正式更名为 TiUniManager。 -TiDB Enterprise Manager 是一款以 TiDB 数据库为核心的数据库管理平台,帮助用户在私有部署 (on-premises) 或公有云环境中管理 TiDB 集群。 +TiDB Enterprise Manager 是一款以 TiDB 数据库为核心的数据库管理平台,帮助用户在本地部署环境或公有云环境中管理 TiDB 集群。 TiDB Enterprise Manager 不仅提供对 TiDB 集群的全生命周期的可视化管理,也同时一站式提供 TiDB 数据库参数管理、数据库版本升级、克隆集群、主备集群切换、数据导入导出、数据同步、数据备份恢复服务,能有效提高 TiDB 集群运维效率,降低企业运维成本。 From 1a8cc7fa4acd0cfc5ae141eda39bd3a8ecfa8c01 Mon Sep 17 00:00:00 2001 From: xixirangrang Date: Fri, 2 Jun 2023 12:30:43 +0800 Subject: [PATCH 164/257] lightning: refine comment format in the config file (#14134) --- .../tidb-lightning-configuration.md | 40 +++++++++++++------ tidb-limitations.md | 2 +- 2 files changed, 29 insertions(+), 13 deletions(-) diff --git a/tidb-lightning/tidb-lightning-configuration.md b/tidb-lightning/tidb-lightning-configuration.md index 32b9b7281ef3..c28fd2384f11 100644 --- a/tidb-lightning/tidb-lightning-configuration.md +++ b/tidb-lightning/tidb-lightning-configuration.md @@ -114,8 +114,10 @@ driver = "file" # "local":物理导入模式(Physical Import Mode),默认使用。适用于 TB 级以上大数据量,但导入期间下游 TiDB 无法对外提供服务。 # "tidb":逻辑导入模式 (Logical Import Mode)。TB 级以下数据量可以采用,下游 TiDB 可正常提供服务。 # backend = "local" -# 是否允许启动多个 TiDB Lightning 实例(物理导入模式)并行导入到一个或多个目标表。默认取值为 false。注意,这个参数**不是用于增量导入数据**,仅限目标表为空的场景使用。 -# 多个 TiDB Lightning 实例(物理导入模式)同时导入一张表时,此开关必须设置为 true。但前提是目标表不能存在数据,即所有的数据都只能是由 TiDB Lightning 导入。 +# 是否允许启动多个 TiDB Lightning 实例(物理导入模式)并行导入数据到一个或多个目标表。默认取值为 false。 +# 注意,该参数**不是用于增量导入数据**,仅限目标表为空的场景使用。 +# 多个 TiDB Lightning 实例(物理导入模式)同时导入一张表时,此开关必须设置为 true。 +# 但前提是目标表不能存在数据,即所有的数据都只能是由 TiDB Lightning 导入。 # incremental-import = false # 当后端是 “importer” 时,tikv-importer 的监听地址(需改为实际地址)。 addr = "172.16.31.10:8287" @@ -127,7 +129,8 @@ addr = "172.16.31.10:8287" # 物理导入模式设置是否检测和解决重复的记录(唯一键冲突)。 # 目前支持三种解决方法: -# - record: 数据写入目标表后,将目标表中重复记录添加到目标 TiDB 中的 `lightning_task_info.conflict_error_v1` 表中。注意,该方法要求目标 TiKV 的版本为 v5.2.0 或更新版本。如果版本过低,则会启用下面的 'none' 模式。 +# - record: 数据写入目标表后,将目标表中重复记录添加到目标 TiDB 中的 `lightning_task_info.conflict_error_v1` 表中。 +# 注意,该方法要求目标 TiKV 的版本为 v5.2.0 或更新版本。如果版本过低,则会启用下面的 'none' 模式。 # - none: 不检测重复记录。该模式是三种模式中性能最佳的,但是如果数据源存在重复记录,会导致 TiDB 中出现数据不一致的情况。 # - remove: 记录所有目标表中的重复记录,和 'record' 模式相似。但是会删除目标表所有的重复记录,以确保目标 TiDB 中的数据状态保持一致。 # duplicate-resolution = 'none' @@ -142,16 +145,22 @@ addr = "172.16.31.10:8287" # 物理导入模式限制 TiDB Lightning 向每个 TiKV 节点写入的带宽大小,默认为 0,表示不限制。 # store-write-bwlimit = "128MiB" -# 使用物理导入模式时,配置 TiDB Lightning 本地临时文件使用的磁盘配额 (disk quota)。当磁盘配额不足时,TiDB Lightning 会暂停读取源数据以及写入临时文件的过程,优先将已经完成排序的 key-value 写入到 TiKV,TiDB Lightning 删除本地临时文件后,再继续导入过程。 +# 使用物理导入模式时,配置 TiDB Lightning 本地临时文件使用的磁盘配额 (disk quota)。 +# 当磁盘配额不足时,TiDB Lightning 会暂停读取源数据以及写入临时文件的过程, +# 优先将已经完成排序的 key-value 写入到 TiKV,TiDB Lightning 删除本地临时文件后,再继续导入过程。 # 需要同时配合把 `backend` 设置为 `local` 模式才能生效。 # 默认值为 MaxInt64 字节,即 9223372036854775807 字节。 # disk-quota = "10GB" -# 物理导入模式是否通过 SQL 方式添加索引。默认为 `false`,表示 TiDB Lightning 会将行数据以及索引数据都编码成 KV pairs 后一同导入 TiKV,实现机制和历史版本保持一致。如果设置为 `true`,即 TiDB Lightning 会在导入数据完成后,使用 add index 的 SQL 来添加索引。 +# 物理导入模式是否通过 SQL 方式添加索引。 +# 默认为 `false`,表示 TiDB Lightning 会将行数据以及索引数据都编码成 KV pairs 后一同导入 TiKV,实现机制和历史版本保持一致。 +# 如果设置为 `true`,即 TiDB Lightning 会在导入数据完成后,使用 add index 的 SQL 来添加索引。 # 通过 SQL 方式添加索引的优点是将导入数据与导入索引分开,可以快速导入数据,即使导入数据后,索引添加失败,也不会影响数据的一致性。 # add-index-by-sql = false -# 在使用 TiDB Lightning 导入多租户的 TiDB cluster 的场景下,指定对应的 key space 名称。默认取值为空字符串,表示 TiDB Lightning 会自动获取导入对应租户的 key space 名称;如果指定了值,则使用指定的 key space 名称来导入。 +# 在使用 TiDB Lightning 导入多租户的 TiDB cluster 的场景下,指定对应的 key space 名称。 +# 默认取值为空字符串,表示 TiDB Lightning 会自动获取导入对应租户的 key space 名称; +# 如果指定了值,则使用指定的 key space 名称来导入。 # keyspace-name = "" # 物理导入模式下,用于控制 TiDB Lightning 暂停 PD 调度的范围,可选值包括: @@ -160,7 +169,8 @@ addr = "172.16.31.10:8287" # 该参数自 v7.1.0 版本开始引入。注意:"table" 选项仅适用于 TiDB v6.1.0 及以上版本的目标集群。 # pause-pd-scheduler-scope = "table" -# 物理导入模式下,用于控制批量 Split Region 时的 Region 个数。每个 TiDB Lightning 实例最多同时 Split Region 的个数为: +# 物理导入模式下,用于控制批量 Split Region 时的 Region 个数。 +# 每个 TiDB Lightning 实例最多同时 Split Region 的个数为: # region-split-batch-size * region-split-concurrency * table-concurrency # 该参数自 v7.1.0 版本开始引入,默认值为 `4096`。 # region-split-batch-size = 4096 @@ -169,7 +179,9 @@ addr = "172.16.31.10:8287" # 该参数自 v7.1.0 版本开始引入。 # region-split-concurrency = -# 物理导入模式下,用于控制 split 和 scatter 操作后等待 Region 上线的重试次数,默认值为 `1800`。重试符合指数回退策略,最大重试间隔为 2 秒。若两次重试之间有任何 Region 上线,该次操作不会被计为重试次数。 +# 物理导入模式下,用于控制 split 和 scatter 操作后等待 Region 上线的重试次数,默认值为 `1800`。 +# 重试符合指数回退策略,最大重试间隔为 2 秒。 +# 若两次重试之间有任何 Region 上线,该次操作不会被计为重试次数。 # 该参数自 v7.1.0 版本开始引入。 # region-check-backoff-limit = 1800 @@ -221,7 +233,8 @@ data-invalid-char-replace = "\uFFFD" # 为保证数据安全而非追求处理速度,默认值为 false。 strict-format = false -# 如果 strict-format = true,TiDB Lightning 会将 CSV 大文件分割为多个文件块进行并行处理。max-region-size 是分割后每个文件块的最大大小。 +# 如果 strict-format = true,TiDB Lightning 会将 CSV 大文件分割为多个文件块进行并行处理。 +# max-region-size 是分割后每个文件块的最大大小。 # max-region-size = "256MiB" # 默认值 # 只导入与该通配符规则相匹配的表。详情见相应章节。 @@ -236,11 +249,14 @@ delimiter = '"' # 行尾定界字符,支持一个或多个字符。设置为空(默认值)表示 "\n"(换行)和 "\r\n" (回车+换行),均表示行尾。 terminator = "" # CSV 文件是否包含表头。 -# 如果 header = true,将把首行的内容作为表头处理,不作为数据导入。如果设置为 false,首行也作为 CSV 数据导入,此时请确保 CSV 文件的列顺序与目标表的列顺序一致,否则可能会导致数据差异。 +# 如果 header = true,将把首行的内容作为表头处理,不作为数据导入。如果设置为 false,首行也作为 CSV 数据导入, +# 此时请确保 CSV 文件的列顺序与目标表的列顺序一致,否则可能会导致数据差异。 header = true # CSV 表头是否匹配目标表的表结构。 -# 默认为 true,表示在导入数据时,会根据 CSV 表头的字段名去匹配目标表对应的列名,这样即使 CSV 文件和目标表列的顺序不一致也能按照对应的列名进行导入。 -# 如果 CSV 表头中的字段名和目标表的列名不匹配(例如,CSV 表头中的某些字段名在目标表中可能找不到对应的同名列)但列的顺序是一致的,请将该配置设置为 false。 +# 默认为 true,表示在导入数据时,会根据 CSV 表头的字段名去匹配目标表对应的列名, +# 这样即使 CSV 文件和目标表列的顺序不一致也能按照对应的列名进行导入。 +# 如果 CSV 表头中的字段名和目标表的列名不匹配(例如,CSV 表头中的某些字段名在目标表中可能找不到对应的同名列)但列的顺序是一致的, +# 请将该配置设置为 false。 # 这时,在导入的时候,会直接忽略 CSV 表头的内容,以避免导入错误。在这种情况下,直接把 CSV 数据按照目标表列的顺序导入。 # 因此,如果列的顺序不一致,请手动调整一致后再导入,否则可能会导致数据差异。 # 注意:只有在 header = true 时,该参数才会生效。如果 header = false ,表示 CSV 文件没有表头,此时不需要考虑相关列名匹配的问题。 diff --git a/tidb-limitations.md b/tidb-limitations.md index 3b7582c0ba8b..eb8c2141dd19 100644 --- a/tidb-limitations.md +++ b/tidb-limitations.md @@ -20,7 +20,7 @@ aliases: ['/docs-cn/dev/tidb-limitations/'] ## Databases、Tables、Views、Connections 总个数限制 -| 标识符类型 | 最大个数 | +| 类型 | 最大个数 | |:----------|:----------| | Databases | unlimited | | Tables | unlimited | From 4679f96c99d59eb84a1ec28aae31b07130b62cb3 Mon Sep 17 00:00:00 2001 From: xixirangrang Date: Mon, 5 Jun 2023 16:39:40 +0800 Subject: [PATCH 165/257] lightning: change english names to chinese (#14148) --- br/backup-and-restore-overview.md | 2 +- dm/dm-precheck.md | 16 ++++++++-------- dm/task-configuration-file-full.md | 16 ++++++++-------- ecosystem-tool-user-guide.md | 4 ++-- faq/backup-and-restore-faq.md | 6 +++--- migrate-large-mysql-to-tidb.md | 2 +- releases/release-6.2.0.md | 2 +- releases/release-6.6.0.md | 10 +++++----- releases/release-7.0.0.md | 2 +- .../tidb-lightning-distributed-import.md | 6 +++--- tidb-lightning/tidb-lightning-glossary.md | 4 ++-- ...tidb-lightning-logical-import-mode-usage.md | 18 +++++++++--------- .../tidb-lightning-logical-import-mode.md | 12 ++++++------ tidb-lightning/tidb-lightning-overview.md | 2 +- ...idb-lightning-physical-import-mode-usage.md | 2 +- tidb-lightning/tidb-lightning-prechecks.md | 4 ++-- tidb-lightning/tidb-lightning-requirements.md | 4 ++-- 17 files changed, 56 insertions(+), 56 deletions(-) diff --git a/br/backup-and-restore-overview.md b/br/backup-and-restore-overview.md index c9ca876b7c32..fefdc2b51da7 100644 --- a/br/backup-and-restore-overview.md +++ b/br/backup-and-restore-overview.md @@ -117,7 +117,7 @@ TiDB 支持将数据备份到 Amazon S3、Google Cloud Storage (GCS)、Azure Blo | 聚簇索引 | [#565](https://github.com/pingcap/br/issues/565) | 确保恢复时集群的 `tidb_enable_clustered_index` 全局变量和备份时一致,否则会导致数据不一致的问题,例如 `default not found` 和数据索引不一致。 | | New collation | [#352](https://github.com/pingcap/br/issues/352) | 确保恢复时集群的 `new_collations_enabled_on_first_bootstrap` 变量值和备份时的一致,否则会导致数据索引不一致和 checksum 通不过。更多信息,请参考 [FAQ - BR 为什么会报 `new_collations_enabled_on_first_bootstrap` 不匹配?](/faq/backup-and-restore-faq.md#恢复时为什么会报-new_collations_enabled_on_first_bootstrap-不匹配)。 | | 全局临时表 | | 确保使用 BR v5.3.0 及以上版本进行备份和恢复,否则会导致全局临时表的表定义错误。 | -| TiDB Lightning Physical Import| |上游数据库使用 TiDB Lightning Physical 方式导入的数据,无法作为数据日志备份下来。推荐在数据导入后执行一次全量备份,细节参考[上游数据库使用 TiDB Lightning Physical 方式导入数据的恢复](/faq/backup-and-restore-faq.md#上游数据库使用-tidb-lightning-physical-方式导入数据时为什么无法使用日志备份功能)。| +| TiDB Lightning 物理导入模式| |上游数据库使用 TiDB Lightning 物理导入模式导入的数据,无法作为数据日志备份下来。推荐在数据导入后执行一次全量备份,细节参考[上游数据库使用 TiDB Lightning 物理导入模式导入数据的恢复](/faq/backup-and-restore-faq.md#上游数据库使用-tidb-lightning-物理导入模式导入数据时为什么无法使用日志备份功能)。| ### 版本间兼容性 diff --git a/dm/dm-precheck.md b/dm/dm-precheck.md index f21e8007a0fa..35e106cfbf45 100644 --- a/dm/dm-precheck.md +++ b/dm/dm-precheck.md @@ -88,22 +88,22 @@ tiup dmctl check-task ./task.yaml * 分表中自增主键检查 - 分表存在自增主键时返回警告。如果存在自增主键冲突,请参照[自增主键冲突处理](/dm/shard-merge-best-practices.md#自增主键冲突处理)解决。 - + #### Physical Import 检查项 -在任务配置中使用 `import-mode: "physical"` 后,会增加如下的前置检查项以保证 [Physical Import](/tidb-lightning/tidb-lightning-physical-import-mode.md) 正常运行。如果参照提示后仍然难以完成这些前置检查,你可以尝试使用 [Logical Import](/tidb-lightning/tidb-lightning-logical-import-mode.md) 进行导入。 +在任务配置中使用 `import-mode: "physical"` 后,会增加如下的前置检查项以保证[物理导入模式](/tidb-lightning/tidb-lightning-physical-import-mode.md)正常运行。如果参照提示后仍然难以完成这些前置检查,你可以尝试使用[逻辑导入模式](/tidb-lightning/tidb-lightning-logical-import-mode.md)进行导入。 * 下游数据库中的空 Region - 如果空 Region 的数量大于 `max(1000, 表的数量 * 3)`,即大于“1000”和“3 倍表数量”二者中的较大者,前置检查会向用户返回警告。可以调整 PD 相关参数加快空 Region 的合并速度,并等待空 Region 数量下降以解除警告。参见 [PD 调度策略最佳实践 - Region Merge 速度慢](/best-practices/pd-scheduling-best-practices.md#region-merge-速度慢) - + * 下游数据库中的 Region 分布 - 统计不同的 TiKV 上的 Region 数目。假设 Region 数最少的 TiKV 节点上拥有 `a` 个 Region,Region 数最多的 TiKV 节点上拥有 `b` 个 Region,如果 a/b 小于 0.75,则前置检查会向用户返回警告。可以调整 PD 相关参数加快 Region 调度速度,并等待 Region 数目变化以解除警告。参见 [PD 调度策略最佳实践 - Leader/Region 分布不均衡](/best-practices/pd-scheduling-best-practices.md#leaderregion-分布不均衡) * 下游数据库 TiDB、PD、TiKV 组件的版本 - - Physical Import 需要调用 TiDB、PD、TiKV 接口,如果版本不符合要求,会返回错误。 + - 物理导入模式需要调用 TiDB、PD、TiKV 接口,如果版本不符合要求,会返回错误。 * 下游数据库的剩余空间 @@ -111,7 +111,7 @@ tiup dmctl check-task ./task.yaml * 下游数据库是否在运行与 Physical Import 不兼容的任务 - - 目前 Physical Import 不兼容 [TiCDC](/ticdc/ticdc-overview.md)、[PITR](/br/br-pitr-guide.md) 任务,如果发现下游数据库正在运行这些任务,前置检查会返回错误。 + - 目前物理导入模式不兼容 [TiCDC](/ticdc/ticdc-overview.md)、[PITR](/br/br-pitr-guide.md) 任务,如果发现下游数据库正在运行这些任务,前置检查会返回错误。 ### 增量数据迁移检查项 @@ -154,11 +154,11 @@ tiup dmctl check-task ./task.yaml |schema_of_shard_tables|检查上游 MySQL 多实例分库分表的表结构一致性| |auto_increment_ID|检查上游 MySQL 多实例分库分表的自增主键冲突| |online_ddl|检查上游是否处于 [Online-DDL](/dm/feature-online-ddl.md) 过程中| -|empty_region|Physical Import 检查空 Region 的数目| -|region_distribution|Physical Import 检查 Region 的分布| +|empty_region|物理导入模式检查空 Region 的数目| +|region_distribution|物理导入模式检查 Region 的分布| |downstream_version|检查下游数据库 TiDB、PD、TiKV 的版本| |free_space|检查下游数据库的剩余空间| -|downstream_mutex_features|检查下游数据库是否存在与 Physical Import 不兼容的任务| +|downstream_mutex_features|检查下游数据库是否存在与物理导入模式不兼容的任务| > **注意:** > diff --git a/dm/task-configuration-file-full.md b/dm/task-configuration-file-full.md index c1abf0d50f63..713697506c59 100644 --- a/dm/task-configuration-file-full.md +++ b/dm/task-configuration-file-full.md @@ -119,31 +119,31 @@ loaders: # load 处理单元的运行配置参数 dir: "./dumped_data" # 全量阶段数据导入的模式。可以设置为如下几种模式: - # - "logical"(默认)。使用 TiDB Lightning logical import 进行导入。文档:https://docs.pingcap.com/zh/tidb/stable/tidb-lightning-logical-import-mode - # - "physical"。使用 TiDB Lightning physical import 进行导入。文档:https://docs.pingcap.com/zh/tidb/stable/tidb-lightning-physical-import-mode + # - "logical"(默认)。使用 TiDB Lightning 逻辑导入模式进行导入。文档:https://docs.pingcap.com/zh/tidb/stable/tidb-lightning-logical-import-mode + # - "physical"。使用 TiDB Lightning 物理导入模式进行导入。文档:https://docs.pingcap.com/zh/tidb/stable/tidb-lightning-physical-import-mode # 当前 "physical" 为实验特性,不建议在生产环境中使用。 import-mode: "logical" - # logical import 针对冲突数据的解决方式: + # 逻辑导入模式针对冲突数据的解决方式: # - "replace"(默认值)。表示用最新数据替代已有数据。 # - "ignore"。保留已有数据,忽略新数据。 # - "error"。插入重复数据时报错并停止同步任务。 on-duplicate-logical: "replace" - # physical import 针对冲突数据的解决方式: - # - "none"(默认)。对应 TiDB Lightning physical import 冲突数据检测的 "none" 选项 + # 物理导入模式针对冲突数据的解决方式: + # - "none"(默认)。对应 TiDB Lightning 物理导入模式冲突数据检测的 "none" 选项 # (https://docs.pingcap.com/zh/tidb/stable/tidb-lightning-physical-import-mode-usage#冲突数据检测), # 表示遇到冲突数据时不进行处理。该模式性能最佳,但下游数据库会遇到数据索引不一致的问题。 - # - "manual"。对应 TiDB Lightning physical import 冲突数据检测的 "remove" 选项 + # - "manual"。对应 TiDB Lightning 物理导入模式冲突数据检测的 "remove" 选项 # (https://docs.pingcap.com/zh/tidb/stable/tidb-lightning-physical-import-mode-usage#冲突数据检测)。 # 在遇到冲突数据时将所有相互冲突的数据删除,并记录在 ${meta-schema}_${name}.conflict_error_v1 表中。 # 在本配置文件中,会记录在 dm_meta_test.conflict_error_v1 表中。全量导入阶段结束后,任务 # 会暂停并提示用户查询这张表并按照文档进行手动处理。使用 resume-task 命令让任务恢复运行并 # 进入到增量同步阶段。 on-duplicate-physical: "none" - # physical import 用作本地排序的目录位置,该选项的默认值与 dir 配置项一致。具体说明可以参见 TiDB Lightning 对存储空间的需求:https://docs.pingcap.com/zh/tidb/stable/tidb-lightning-physical-import-mode#运行环境需求 + # 物理导入模式用作本地排序的目录位置,该选项的默认值与 dir 配置项一致。具体说明可以参见 TiDB Lightning 对存储空间的需求:https://docs.pingcap.com/zh/tidb/stable/tidb-lightning-physical-import-mode#运行环境需求 sorting-dir-physical: "./dumped_data" # 磁盘空间限制,对应 TiDB Lightning disk-quota 配置。具体说明参见文档:https://docs.pingcap.com/zh/tidb/stable/tidb-lightning-physical-import-mode-usage#磁盘资源配额-从-v620-版本开始引入 disk-quota-physical: "0" - # physical import 在导入完成一张表后,对每一个表执行 `ADMIN CHECKSUM TABLE
` 进行数据校验的配置: + # 物理导入模式在导入完成一张表后,对每一个表执行 `ADMIN CHECKSUM TABLE
` 进行数据校验的配置: # - "required"(默认值)。表示导入完成后进行数据校验,如果校验失败会让任务暂停,需要用户手动处理。 # - "optional"。表示导入完成后进行数据校验,如果校验失败会打印 warn 日志,任务不会暂停。 # - "off"。表示导入完成后不进行数据校验。 diff --git a/ecosystem-tool-user-guide.md b/ecosystem-tool-user-guide.md index 8c61b105e86c..84ba5f3b9539 100644 --- a/ecosystem-tool-user-guide.md +++ b/ecosystem-tool-user-guide.md @@ -96,8 +96,8 @@ TiUniManager 不仅提供对 TiDB 集群的全生命周期的可视化管理, 使用 TiDB Lightning 导入数据到 TiDB 时,有以下模式: -- `Physical Import Mode` 模式:TiDB Lightning 将数据解析为有序的键值对,并直接将其导入 TiKV。这种模式一般用于导入大量的数据(TB 级别)到新集群,但在数据导入过程中集群无法提供正常的服务。 -- `Logical Import Mode` 模式:以 TiDB/MySQL 作为后端,这种模式相比 `Physical Import Mode`,导入速度较慢,但是可以在线导入,同时也支持将数据导入到 MySQL。 +- [物理导入模式](/tidb-lightning/tidb-lightning-physical-import-mode.md):TiDB Lightning 将数据解析为有序的键值对,并直接将其导入 TiKV。这种模式一般用于导入大量的数据(TB 级别)到新集群,但在数据导入过程中集群无法提供正常的服务。 +- [逻辑导入模式](/tidb-lightning/tidb-lightning-logical-import-mode.md):以 TiDB/MySQL 作为后端,这种模式相比物理导入模式,导入速度较慢,但是可以在线导入,同时也支持将数据导入到 MySQL。 基本信息: diff --git a/faq/backup-and-restore-faq.md b/faq/backup-and-restore-faq.md index 773dc2750a0e..559241498f74 100644 --- a/faq/backup-and-restore-faq.md +++ b/faq/backup-and-restore-faq.md @@ -37,11 +37,11 @@ TiKV 支持[动态配置](/tikv-control.md#动态修改-tikv-的配置)自动调 在大多数情况下,因为 flashback 具有更短的 RPO(接近零)和 RTO,flashback 比 PITR 更适合由于人为错误导致的数据错误场景。但当集群完全不可用时,flashback 集群功能也无法运行,此时 PITR 是恢复集群的唯一方案。因此,相比于 flashback,虽然 PITR 的 RPO(最长 5 分钟)和 RTO 时间较长,但 PITR 是制定数据库灾难恢复策略时必须考虑的数据安全基础。 -### 上游数据库使用 TiDB Lightning Physical 方式导入数据时,为什么无法使用日志备份功能? +### 上游数据库使用 TiDB Lightning 物理导入模式导入数据时,为什么无法使用日志备份功能? -目前日志备份功能还没有完全适配 TiDB Lightning,导致 TiDB Lightning Physical 方式导入的数据无法备份到日志中。 +目前日志备份功能还没有完全适配 TiDB Lightning,导致 TiDB Lightning 物理导入模式导入的数据无法备份到日志中。 -在创建日志备份任务的上游集群中,请尽量避免使用 TiDB Lightning Physical 方式导入数据。可以选择使用 TiDB Lightning Logical 方式导入数据。若确实需要使用 Physical 导入方式,可在导入完成之后做一次快照备份操作,这样,PITR 就可以恢复到快照备份之后的时间点。 +在创建日志备份任务的上游集群中,请尽量避免使用 TiDB Lightning 物理导入模式导入数据。可以选择使用 TiDB Lightning 逻辑导入模式导入数据。若确实需要使用物理导入模式,可在导入完成之后做一次快照备份操作,这样,PITR 就可以恢复到快照备份之后的时间点。 ### 索引加速功能为什么与 PITR 功能不兼容? diff --git a/migrate-large-mysql-to-tidb.md b/migrate-large-mysql-to-tidb.md index af28f4e356e6..fe8e8974479b 100644 --- a/migrate-large-mysql-to-tidb.md +++ b/migrate-large-mysql-to-tidb.md @@ -7,7 +7,7 @@ summary: 介绍如何从大数据量 MySQL 迁移数据到 TiDB。 通常数据量较低时,使用 DM 进行迁移较为简单,可直接完成全量+持续增量迁移工作。但当数据量较大时,DM 较低的数据导入速度 (30~50 GiB/h) 可能令整个迁移周期过长。本文所称“大数据量”通常指 TiB 级别以上。 -因此,本文档介绍使用 Dumpling 和 TiDB Lightning 进行全量数据迁移,其本地导入 (local backend) 模式导入速度可达每小时 500 GiB。完成全量数据迁移后,再使用 DM 完成增量数据迁移。 +因此,本文档介绍如何使用 Dumpling 和 TiDB Lightning 进行全量数据迁移,其[物理导入模式](/tidb-lightning/tidb-lightning-physical-import-mode.md)导入速度可达每小时 500 GiB。完成全量数据迁移后,再使用 DM 完成增量数据迁移。 ## 前提条件 diff --git a/releases/release-6.2.0.md b/releases/release-6.2.0.md index 017977ea91e2..c341633e884c 100644 --- a/releases/release-6.2.0.md +++ b/releases/release-6.2.0.md @@ -214,7 +214,7 @@ TiDB 版本:6.2.0-DMR [用户文档](/tidb-lightning/tidb-lightning-physical-import-mode-usage.md#导入时暂停-pd-调度的范围) [#35148](https://github.com/pingcap/tidb/issues/35148) @[gozssky](https://github.com/gozssky) -* 调整 [TiDB Lightning 在线文档](/tidb-lightning/tidb-lightning-overview.md),使其目录结构更加合理和清晰。同时对文档中关于“后端模式”的描述进行了修改,使用物理导入模式替代原有 local backend,使用 Logical Import Mode 替代原有 tidb backend ,以降低新用户的理解难度。 +* 调整 [TiDB Lightning 在线文档](/tidb-lightning/tidb-lightning-overview.md),使其目录结构更加合理和清晰。同时对文档中关于“后端模式”的描述进行了修改,使用物理导入模式替代原有 `local` 后端模式,使用逻辑导入模式替代原有 `tidb` 后端模式,以降低新用户的理解难度。 ### 数据共享与订阅 diff --git a/releases/release-6.6.0.md b/releases/release-6.6.0.md index 4dde2f762ff1..882cec047100 100644 --- a/releases/release-6.6.0.md +++ b/releases/release-6.6.0.md @@ -56,7 +56,7 @@ TiDB 版本:6.6.0-[DMR](/releases/versioning.md#开发里程碑版本) - +
数据库管理与可观测性
DM 集成物理导入模式(实验特性)TiDB Data Migration (DM) 集成 TiDB Lightning 的 Physical Import 模式,提升 DM 全量数据迁移时的性能,大数据量场景下的迁移时间最多可提升 10 倍。TiDB Data Migration (DM) 集成 TiDB Lightning 的物理导入模式模式,提升 DM 全量数据迁移时的性能,大数据量场景下的迁移时间最多可提升 10 倍。
@@ -398,11 +398,11 @@ TiDB 版本:6.6.0-[DMR](/releases/versioning.md#开发里程碑版本) | PD | [`pd-server.server-memory-limit-gc-trigger`](/pd-configuration-file.md#server-memory-limit-gc-trigger-从-v660-版本开始引入) | 新增 | PD 尝试触发 GC 的阈值比例。默认值为 `0.7`。 | | TiCDC | [`scheduler.region-per-span`](/ticdc/ticdc-changefeed-config.md#ticdc-changefeed-配置文件说明) | 新增 | 该配置项用于将表按 Region 个数划分成多个同步范围,这些范围可由多个 TiCDC 节点同步,默认值为 `50000`。 | | TiDB Lightning | [`compress-kv-pairs`](/tidb-lightning/tidb-lightning-configuration.md#tidb-lightning-任务配置) | 新增 | 该配置项控制物理导入模式向 TiKV 发送 KV 时是否启用压缩,默认值为空,表示不启用压缩。 | -| DM | [`checksum-physical`](/dm/task-configuration-file-full.md) | 新增 | 该配置项控制 Physical Import 在导入完成一张表后,对每一个表执行 `ADMIN CHECKSUM TABLE ` 进行数据校验。默认值为 `"required"`,表示导入完成后进行数据校验,如果校验失败会暂停任务,需要你手动处理。| +| DM | [`checksum-physical`](/dm/task-configuration-file-full.md) | 新增 | 该配置项控制物理导入模式在导入完成一张表后,对每一个表执行 `ADMIN CHECKSUM TABLE
` 进行数据校验。默认值为 `"required"`,表示导入完成后进行数据校验,如果校验失败会暂停任务,需要你手动处理。| | DM | [`disk-quota-physical`](/dm/task-configuration-file-full.md) | 新增 | 该配置项设置了磁盘的空间限制,对应 TiDB Lightning 的 [`disk-quota` 配置](/tidb-lightning/tidb-lightning-physical-import-mode-usage.md#磁盘资源配额-从-v620-版本开始引入)。| -| DM | [`on-duplicate-logical`](/dm/task-configuration-file-full.md) | 新增 | 该配置项控制 Logical Import 针对冲突数据的解决方式。默认值为 `"replace"`,表示用最新数据替代已有数据。 | -| DM | [`on-duplicate-physical`](/dm/task-configuration-file-full.md) | 新增 | 该配置项控制 Physical Import 针对冲突数据的解决方式。默认值为 `"none"`,表示遇到冲突数据时不进行处理。该模式性能最佳,但下游数据库会出现数据索引不一致的问题。 | -| DM | [`sorting-dir-physical`](/dm/task-configuration-file-full.md) | 新增 | 该配置项控制 Physical Import 用作本地排序的目录位置,该选项的默认值与 `dir` 配置项一致。 | +| DM | [`on-duplicate-logical`](/dm/task-configuration-file-full.md) | 新增 | 该配置项控制物理导入模式针对冲突数据的解决方式。默认值为 `"replace"`,表示用最新数据替代已有数据。 | +| DM | [`on-duplicate-physical`](/dm/task-configuration-file-full.md) | 新增 | 该配置项控制物理导入模式针对冲突数据的解决方式。默认值为 `"none"`,表示遇到冲突数据时不进行处理。该模式性能最佳,但下游数据库会出现数据索引不一致的问题。 | +| DM | [`sorting-dir-physical`](/dm/task-configuration-file-full.md) | 新增 | 该配置项控制物理导入模式用作本地排序的目录位置,该选项的默认值与 `dir` 配置项一致。 | | sync-diff-inspector | [`skip-non-existing-table`](/sync-diff-inspector/sync-diff-inspector-overview.md#配置文件说明) | 新增 | 当下游数据库的表在上游不存在时,该配置项决定是否跳过对上下游数据库表数量不一致场景的校验。 | | TiSpark | [`spark.tispark.replica_read`](/tispark-overview.md#tispark-配置) | 新增 | 控制读取副本的类型,可选值为 `leader`、`follower`、`learner`。 | | TiSpark | [`spark.tispark.replica_read.label`](/tispark-overview.md#tispark-配置) | 新增 | 设置目标 TiKV 节点的标签。 | diff --git a/releases/release-7.0.0.md b/releases/release-7.0.0.md index c6bb8eabf0f5..418cf915c52e 100644 --- a/releases/release-7.0.0.md +++ b/releases/release-7.0.0.md @@ -376,7 +376,7 @@ TiDB 版本:7.0.0 | DM | [`analyze`](/dm/task-configuration-file-full.md#完整配置文件示例) | 新增 | 配置是否在 CHECKSUM 结束后对所有表逐个执行 `ANALYZE TABLE
` 操作,可配置 `"required"`/`"optional"`/`"off"`。默认为 `"optional"`。| | DM | [`range-concurrency`](/dm/task-configuration-file-full.md#完整配置文件示例) | 新增 | 配置 dm-worker 向 TiKV 写入 KV 数据的并发数。 | | DM | [`compress-kv-pairs`](/dm/task-configuration-file-full.md#完整配置文件示例) | 新增 | 配置 dm-worker 向 TiKV 发送 KV 数据时是否启用压缩,可配置 `"gzip"`,默认为空表示不压缩。 | -| DM | [`pd-addr`](/dm/task-configuration-file-full.md#完整配置文件示例) | 新增 | 配置 Physical Import 时连接下游 PD server 的地址,填一个或多个均可。配置项为空时,默认使用 TiDB 中查询到的 PD 地址信息。 | +| DM | [`pd-addr`](/dm/task-configuration-file-full.md#完整配置文件示例) | 新增 | 配置物理导入模式时连接下游 PD server 的地址,填一个或多个均可。配置项为空时,默认使用 TiDB 中查询到的 PD 地址信息。 | ## 改进提升 diff --git a/tidb-lightning/tidb-lightning-distributed-import.md b/tidb-lightning/tidb-lightning-distributed-import.md index 1858ac5b68d6..edc423bb3071 100644 --- a/tidb-lightning/tidb-lightning-distributed-import.md +++ b/tidb-lightning/tidb-lightning-distributed-import.md @@ -5,7 +5,7 @@ summary: 本文档介绍了 TiDB Lightning 并行导入的概念、使用场景 # TiDB Lightning 并行导入 -TiDB Lightning 的[物理导入模式 (Physical Import Mode)](/tidb-lightning/tidb-lightning-physical-import-mode.md) 从 v5.3.0 版本开始支持单表或多表数据的并行导入。通过支持同步启动多个实例,并行导入不同的单表或多表的不同数据,使 TiDB Lightning 具备水平扩展的能力,可大大降低导入大量数据所需的时间。 +TiDB Lightning 的[物理导入模式](/tidb-lightning/tidb-lightning-physical-import-mode.md) 从 v5.3.0 版本开始支持单表或多表数据的并行导入。通过支持同步启动多个实例,并行导入不同的单表或多表的不同数据,使 TiDB Lightning 具备水平扩展的能力,可大大降低导入大量数据所需的时间。 在技术实现上,TiDB Lightning 通过在目标 TiDB 中记录各个实例以及每个导入表导入数据的元信息,协调不同实例的 Row ID 分配范围、全局 Checksum 的记录和 TiKV 及 PD 的配置变更与恢复。 @@ -18,9 +18,9 @@ TiDB Lightning 并行导入可以用于以下场景: > > - 并行导入只支持初始化 TiDB 的空表,不支持导入数据到已有业务写入的数据表,否则可能会导致数据不一致的情况。 > -> - 并行导入一般用于 Physical Import 模式,需要设置 `incremental-import = true` +> - 并行导入一般用于物理导入模式,需要设置 `incremental-import = true`。 > -> - 并行导入一般用于 Physical Import 模式;虽然也能用于 Logical Import 模式,但是一般不会带来明显的性能提升。 +> - 并行导入一般用于物理导入模式;虽然也能用于逻辑导入模式,但是一般不会带来明显的性能提升。 ## 使用说明 diff --git a/tidb-lightning/tidb-lightning-glossary.md b/tidb-lightning/tidb-lightning-glossary.md index 7a3ad677d4ee..cca0d7d1dd64 100644 --- a/tidb-lightning/tidb-lightning-glossary.md +++ b/tidb-lightning/tidb-lightning-glossary.md @@ -16,13 +16,13 @@ aliases: ['/docs-cn/dev/tidb-lightning/tidb-lightning-glossary/','/docs-cn/dev/r 统计信息分析。指重建 TiDB 表中的统计信息,即运行 [`ANALYZE TABLE`](/sql-statements/sql-statement-analyze-table.md) 语句。 -因为 TiDB Lightning local backend 直接导入数据到 TiKV,统计信息不会自动更新,所以 TiDB Lightning 在导入后显式地分析每个表。如果不需要该操作,可以将 `post-restore.analyze` 设置为 `false`。 +因为 TiDB Lightning 物理导入模式直接导入数据到 TiKV,统计信息不会自动更新,所以 TiDB Lightning 在导入后显式地分析每个表。如果不需要该操作,可以将 `post-restore.analyze` 设置为 `false`。 ### `AUTO_INCREMENT_ID` 用于为自增列分配默认值的自增 ID 计数器。每张表都有一个相关联的 `AUTO_INCREMENT_ID` 计数器。在 TiDB 中,该计数器还用于分配行 ID。 -因为 TiDB Lightning local backend 直接导入数据到 TiKV,`AUTO_INCREMENT_ID` 计数器不会自动更新,所以 TiDB Lightning 显式地将 `AUTO_INCREMENT_ID` 改为一个有效值。即使表中没有自增列,这步仍是会执行。 +因为 TiDB Lightning 物理导入模式直接导入数据到 TiKV,`AUTO_INCREMENT_ID` 计数器不会自动更新,所以 TiDB Lightning 显式地将 `AUTO_INCREMENT_ID` 改为一个有效值。即使表中没有自增列,这步仍是会执行。 diff --git a/tidb-lightning/tidb-lightning-logical-import-mode-usage.md b/tidb-lightning/tidb-lightning-logical-import-mode-usage.md index a3c399c380f1..586236568702 100644 --- a/tidb-lightning/tidb-lightning-logical-import-mode-usage.md +++ b/tidb-lightning/tidb-lightning-logical-import-mode-usage.md @@ -1,15 +1,15 @@ --- -title: 使用 Logical Import Mode -summary: 了解在 TiDB Lightning 的 Logical Import Mode 下,如何编写数据导入任务的配置文件,如何进行性能调优等。 +title: 使用逻辑导入模式 +summary: 了解在 TiDB Lightning 的逻辑导入模式下,如何编写数据导入任务的配置文件,如何进行性能调优等。 --- -# 使用 Logical Import Mode +# 使用逻辑导入模式 -本文档介绍如何编写 [Logical Import Mode](/tidb-lightning/tidb-lightning-logical-import-mode.md) 的配置文件,如何进行性能调优等内容。 +本文档介绍如何编写[逻辑导入模式](/tidb-lightning/tidb-lightning-logical-import-mode.md)的配置文件,如何进行性能调优等内容。 ## 配置及使用 -可以通过以下配置文件使用 Logical Import Mode 执行数据导入: +可以通过以下配置文件使用逻辑导入模式执行数据导入: ```toml [lightning] @@ -28,10 +28,10 @@ check-requirements = true data-source-dir = "/data/my_database" [tikv-importer] -# 导入模式配置,设为 tidb 即使用 Logical Import Mode +# 导入模式配置,设为 tidb 即使用逻辑导入模式 backend = "tidb" -# Logical Import Mode 插入重复数据时执行的操作。 +# 逻辑导入模式插入重复数据时执行的操作。 # - replace:新数据替代已有数据 # - ignore:保留已有数据,忽略新数据 # - error:中止导入并报错 @@ -53,7 +53,7 @@ TiDB Lightning 的完整配置文件可参考[完整配置及命令行参数](/t ## 冲突数据检测 -冲突数据,即两条或两条以上的记录存在主键或唯一键列数据重复的情况。当数据源中的记录存在冲突数据,将导致该表真实总行数和使用唯一索引查询的总行数不一致的情况。TiDB Lightning 的 Logical Import Mode 通过 `on-duplicate` 配置冲突数据检测的策略,TiDB Lightning 根据策略使用不同的 SQL 语句进行插入。 +冲突数据,即两条或两条以上的记录存在主键或唯一键列数据重复的情况。当数据源中的记录存在冲突数据,将导致该表真实总行数和使用唯一索引查询的总行数不一致的情况。TiDB Lightning 的逻辑导入模式通过 `on-duplicate` 配置冲突数据检测的策略,TiDB Lightning 根据策略使用不同的 SQL 语句进行插入。 | 策略 | 冲突时默认行为 | 对应 SQL 语句 | |:---|:---|:---| @@ -63,7 +63,7 @@ TiDB Lightning 的完整配置文件可参考[完整配置及命令行参数](/t ## 性能调优 -- TiDB Lightning 的 Logical Import Mode 性能很大程度上取决于目标 TiDB 集群的写入性能,当遇到性能瓶颈时可参考 TiDB 相关[性能优化文档](/best-practices/high-concurrency-best-practices.md)。 +- TiDB Lightning 的逻辑导入模式性能很大程度上取决于目标 TiDB 集群的写入性能,当遇到性能瓶颈时可参考 TiDB 相关[性能优化文档](/best-practices/high-concurrency-best-practices.md)。 - 如果发现目标 TiDB 集群的的写入尚未达到瓶颈,可以考虑增加 Lightning 配置中 `region-concurrency` 的值。`region-concurrency` 默认值为 CPU 核数,其含义在物理导入模式和逻辑导入模式下有所不同,逻辑导入模式的 `region-concurrency` 表示写入并发数。配置示例: diff --git a/tidb-lightning/tidb-lightning-logical-import-mode.md b/tidb-lightning/tidb-lightning-logical-import-mode.md index 1c3b9eca4440..73b6fb3635c2 100644 --- a/tidb-lightning/tidb-lightning-logical-import-mode.md +++ b/tidb-lightning/tidb-lightning-logical-import-mode.md @@ -1,13 +1,13 @@ --- -title: Logical Import Mode -summary: 了解 TiDB Lightning 的 Logical Import Mode。 +title: 逻辑导入模式简介 +summary: 了解 TiDB Lightning 的逻辑导入模式 (Logical Import Mode)。 --- -# Logical Import Mode 简介 +# 逻辑导入模式简介 -Logical Import Mode 是 TiDB Lightning 支持的一种数据导入方式。在 Logical Import Mode 下,TiDB Lightning 先将数据编码成 SQL,然后直接运行这些 SQL 语句进行数据导入。对于已有数据、对外提供服务的 TiDB 集群,推荐使用 Logical Import Mode 导入数据。Logical Import Mode 的行为与正常执行 SQL 并无差异,可保证 ACID。 +逻辑导入模式 (Logical Import Mode) 是 TiDB Lightning 支持的一种数据导入方式。在逻辑导入模式下,TiDB Lightning 先将数据编码成 SQL,然后直接运行这些 SQL 语句进行数据导入。对于已有数据、对外提供服务的 TiDB 集群,推荐使用逻辑导入模式导入数据。逻辑导入模式的行为与正常执行 SQL 并无差异,可保证 ACID。 -Logical Import Mode 对应的后端模式为 `tidb`。 +逻辑导入模式对应的后端模式为 `tidb`。 ## 必要条件 @@ -17,7 +17,7 @@ Logical Import Mode 对应的后端模式为 `tidb`。 **内存和 CPU**: -建议使用 4 核以上的 CPU 和 8 GiB 以上内存以获得更好的性能。根据长期的实践经验,Lightning 的 Logical Import Mode 没有显著(5 GiB 以上)的内存占用,但上调 `region-concurrency` 默认值将导致内存量增加。 +建议使用 4 核以上的 CPU 和 8 GiB 以上内存以获得更好的性能。根据长期的实践经验,TiDB Lightning 的逻辑导入模式没有显著(5 GiB 以上)的内存占用,但上调 `region-concurrency` 默认值将导致内存量增加。 **网络**:建议使用 1 Gbps 或 10 Gbps 以太网卡。 diff --git a/tidb-lightning/tidb-lightning-overview.md b/tidb-lightning/tidb-lightning-overview.md index 4959935cf06f..a05868224f5d 100644 --- a/tidb-lightning/tidb-lightning-overview.md +++ b/tidb-lightning/tidb-lightning-overview.md @@ -32,7 +32,7 @@ TiDB Lightning 目前支持两种导入方式,通过 `backend` 配置区分。 - [物理导入模式](/tidb-lightning/tidb-lightning-physical-import-mode.md):TiDB Lightning 首先将数据编码成键值对并排序存储在本地临时目录,然后将这些键值对上传到各个 TiKV 节点,最后调用 TiKV Ingest 接口将数据插入到 TiKV 的 RocksDB 中。如果用于初始化导入,请优先考虑使用物理导入模式,其拥有较高的导入速度。物理导入模式对应的后端模式为 `local`。 -- [Logical Import Mode](/tidb-lightning/tidb-lightning-logical-import-mode.md):TiDB Lightning 先将数据编码成 SQL,然后直接运行这些 SQL 语句进行数据导入。如果需要导入的集群为生产环境线上集群,或需要导入的目标表中已包含有数据,则应使用 Logical Import Mode。Logical Import Mode 对应的后端模式为 `tidb`。 +- [逻辑导入模式](/tidb-lightning/tidb-lightning-logical-import-mode.md):TiDB Lightning 先将数据编码成 SQL,然后直接运行这些 SQL 语句进行数据导入。如果需要导入的集群为生产环境线上集群,或需要导入的目标表中已包含有数据,则应使用逻辑导入模式。逻辑导入模式对应的后端模式为 `tidb`。 | 导入模式 | 物理导入模式 | 逻辑导入模式 | |:---|:---|:---| diff --git a/tidb-lightning/tidb-lightning-physical-import-mode-usage.md b/tidb-lightning/tidb-lightning-physical-import-mode-usage.md index 3e5d32462f99..cf99144e845e 100644 --- a/tidb-lightning/tidb-lightning-physical-import-mode-usage.md +++ b/tidb-lightning/tidb-lightning-physical-import-mode-usage.md @@ -5,7 +5,7 @@ summary: 了解如何使用 TiDB Lightning 的物理导入模式。 # 使用物理导入模式 -本文档介绍如何编写[物理导入模式 (Physical Import Mode)](/tidb-lightning/tidb-lightning-physical-import-mode.md) 的配置文件,如何进行性能调优、使用磁盘资源配额等内容。 +本文档介绍如何编写[物理导入模式](/tidb-lightning/tidb-lightning-physical-import-mode.md) 的配置文件,如何进行性能调优、使用磁盘资源配额等内容。 ## 配置及使用 diff --git a/tidb-lightning/tidb-lightning-prechecks.md b/tidb-lightning/tidb-lightning-prechecks.md index 4df18c1a5e64..8df903a7cfaf 100644 --- a/tidb-lightning/tidb-lightning-prechecks.md +++ b/tidb-lightning/tidb-lightning-prechecks.md @@ -11,9 +11,9 @@ summary: 本文档介绍了 TiDB Lightning 前置检查功能,确保 TiDB Ligh | 检查项 | 支持版本 | 解释 | | ---- | --- | ---- | -| 集群版本/状态是否正常| >= 5.3.0 | 检查配置中集群是否可以连接,Physical Import Mode 还会检查 TiKV/PD/TiFlash 版本是否支持。| +| 集群版本/状态是否正常| >= 5.3.0 | 检查配置中集群是否可以连接,物理导入模式还会检查 TiKV/PD/TiFlash 版本是否支持。| | 是否有权限读取数据 | >= 5.3.0 | 检查当从云存储(Amazon S3)读取数据的时候,是否有对应的权限,确保不会因权限缺失导致导入中断。| -| 导入空间是否足够 | >= 5.3.0 | 检查 TiKV 集群是否有足够空间导入数据。检查时会对数据源进行采样,通过采样结果预估索引大小占比。由于估算中考虑了索引,因此可能会出现尽管数据源大小低于本地盘可用空间,但依然无法通过检测的情况。Physical Import Mode 因为需要在本地进行外部排序,所以还会检查本地存储是否足够。有关 TiKV 集群空间和本地存储(即 `sort-kv-dir` 配置)空间大小的详细说明,参考 [TiDB Lightning 下游数据库所需空间](/tidb-lightning/tidb-lightning-requirements.md#目标数据库所需空间)和 [TiDB Lightning 运行时资源要求](/tidb-lightning/tidb-lightning-physical-import-mode.md#运行环境需求)| +| 导入空间是否足够 | >= 5.3.0 | 检查 TiKV 集群是否有足够空间导入数据。检查时会对数据源进行采样,通过采样结果预估索引大小占比。由于估算中考虑了索引,因此可能会出现尽管数据源大小低于本地盘可用空间,但依然无法通过检测的情况。物理导入模式因为需要在本地进行外部排序,所以还会检查本地存储是否足够。有关 TiKV 集群空间和本地存储(即 `sort-kv-dir` 配置)空间大小的详细说明,参考 [TiDB Lightning 下游数据库所需空间](/tidb-lightning/tidb-lightning-requirements.md#目标数据库所需空间)和 [TiDB Lightning 运行时资源要求](/tidb-lightning/tidb-lightning-physical-import-mode.md#运行环境需求)| | Region 分布状态 | >= 5.3.0 | 检查 TiKV 集群的 Region 分布是否均匀,以及是否存在大量空 region,如果空 Region 的数量大于 `max(1000, 表的数量 * 3)`,即大于 "1000" 和 "3 倍表数量"二者中的较大者,TiDB Lightning 无法执行导入。 | | 数据文件是否有大 CSV 文件 | >= 5.3.0 | 当备份文件中出现大于 10 GiB 的 CSV 文件且无法进行自动切分 (StrictFormat=false) 的时候,会导致导入性能下降。该检查的目的是提醒用户确保数据格式的情况下,开启自动切分 CSV 功能。 | | 是否可以从断点恢复 | >= 5.3.0 | 该检查是确保断点恢复过程中,不会出现对源文件和数据库中 schema 进行修改,导致导入错误数据的情况。| diff --git a/tidb-lightning/tidb-lightning-requirements.md b/tidb-lightning/tidb-lightning-requirements.md index 11d46943d272..d1defe6c9bb8 100644 --- a/tidb-lightning/tidb-lightning-requirements.md +++ b/tidb-lightning/tidb-lightning-requirements.md @@ -33,13 +33,13 @@ TiDB Lightning 导入数据时,根据导入方式和启用特性等,需要 - + - + From a0974c467f0948343090ba86f9eb79a53c9d0d5d Mon Sep 17 00:00:00 2001 From: Frank945946 <108602632+Frank945946@users.noreply.github.com> Date: Mon, 5 Jun 2023 16:47:41 +0800 Subject: [PATCH 166/257] Update tidb-lightning-physical-import-mode.md (#14151) --- tidb-lightning/tidb-lightning-physical-import-mode.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tidb-lightning/tidb-lightning-physical-import-mode.md b/tidb-lightning/tidb-lightning-physical-import-mode.md index 428eb4a1bda3..41838c5b7b9f 100644 --- a/tidb-lightning/tidb-lightning-physical-import-mode.md +++ b/tidb-lightning/tidb-lightning-physical-import-mode.md @@ -21,7 +21,7 @@ summary: 了解 TiDB Lightning 的物理导入模式。 2. `tidb-lightning` 在目标数据库建立表结构,并获取其元数据。 - 如果将 `add-index-by-sql` 设置为 `true`,`tidb-lightning` 会使用 SQL 接口添加索引,并且会在导入数据前移除目标表的所有次级索引。 + 如果将 `add-index-by-sql` 设置为 `true`,`tidb-lightning` 会使用 SQL 接口添加索引,并且会在导入数据前移除目标表的所有次级索引。默认值为 `false`,和历史版本保持一致。 3. 每张表都会被分割为多个连续的**区块**,这样来自大表 (200 GB+) 的数据就可以多个并发导入。 @@ -87,4 +87,4 @@ summary: 了解 TiDB Lightning 的物理导入模式。 - TiDB Lightning 与 TiCDC 一起使用时需要注意: - - TiCDC 无法捕获物理导入模式插入的数据。 \ No newline at end of file + - TiCDC 无法捕获物理导入模式插入的数据。 From 5daeb79bae8ede542a48a0787aa95485df688df3 Mon Sep 17 00:00:00 2001 From: Aolin Date: Mon, 5 Jun 2023 18:15:41 +0800 Subject: [PATCH 167/257] remove experimental note in tidb_enable_resource_control (#14157) --- system-variables.md | 4 ---- 1 file changed, 4 deletions(-) diff --git a/system-variables.md b/system-variables.md index a5fe7b980af7..3e713637fdbf 100644 --- a/system-variables.md +++ b/system-variables.md @@ -1857,10 +1857,6 @@ MPP 是 TiFlash 引擎提供的分布式计算框架,允许节点之间的数 ### `tidb_enable_resource_control` 从 v6.6.0 版本开始引入 -> **警告:** -> -> [资源管控](/tidb-resource-control.md) 目前为实验性特性,此变量定义可能在之后发生变化或者删除。 - - 作用域:GLOBAL - 是否持久化到集群:是 - 默认值:`ON` From f655857e6817d68112e7159b008c466ae3d0afba Mon Sep 17 00:00:00 2001 From: Aolin Date: Tue, 6 Jun 2023 09:51:41 +0800 Subject: [PATCH 168/257] fix broken links in release notes (#14159) --- releases/release-6.1.6.md | 2 +- releases/release-6.5.2.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/releases/release-6.1.6.md b/releases/release-6.1.6.md index 549cad24bdaf..dcc3bafe336f 100644 --- a/releases/release-6.1.6.md +++ b/releases/release-6.1.6.md @@ -81,7 +81,7 @@ TiDB 版本:6.1.6 + TiCDC - - 修复同步数据时由于 `UPDATE` 和 `INSERT` 语句乱序可能导致 `Duplicate entry` 错误的问题 [#8597](https://github.com/pingcap/tiflow/issues/8597) @[sdojjy](https://github.com/sojjy) + - 修复同步数据时由于 `UPDATE` 和 `INSERT` 语句乱序可能导致 `Duplicate entry` 错误的问题 [#8597](https://github.com/pingcap/tiflow/issues/8597) @[sdojjy](https://github.com/sdojjy) - 修复由于 PD 和 TiCDC 之间的网络隔离引起 TiCDC 程序异常退出的问题 [#8562](https://github.com/pingcap/tiflow/issues/8562) @[overvenus](https://github.com/overvenus) - 修复下游为 TiDB 或 MySQL 时,无主键且非空唯一索引所在列指定了 CHARACTER SET 同步时可能会出现数据不一致的问题 [#8420](https://github.com/pingcap/tiflow/issues/8420) @[zhaoxinyu](https://github.com/zhaoxinyu) - 修复 `db sorter` 使用内存时未受 `cgroup memory limit` 限制的问题 [#8588](https://github.com/pingcap/tiflow/issues/8588) @[amyangfei](https://github.com/amyangfei) diff --git a/releases/release-6.5.2.md b/releases/release-6.5.2.md index ee778ba92d41..e42f5383e2bf 100644 --- a/releases/release-6.5.2.md +++ b/releases/release-6.5.2.md @@ -102,7 +102,7 @@ TiDB 版本:6.5.2 - 修复在部分场景中 `cgroup` 的内存限制不生效问题 [#8588](https://github.com/pingcap/tiflow/issues/8588) @[amyangfei](https://github.com/amyangfei) - 修复 Redo log 在 apply 时,特殊情况下出现数据丢失的问题 [#8591](https://github.com/pingcap/tiflow/issues/8591) @[CharlesCheung96](https://github.com/CharlesCheung96) - 修复 `db sorter` 使用内存时未受 `cgroup memory limit` 限制的问题 [#8588](https://github.com/pingcap/tiflow/issues/8588) @[amyangfei](https://github.com/amyangfei) - - 修复同步数据时由于 `UPDATE` 和 `INSERT` 语句乱序可能导致 `Duplicate entry` 错误的问题 [#8597](https://github.com/pingcap/tiflow/issues/8597) @[sdojjy](https://github.com/sojjy) + - 修复同步数据时由于 `UPDATE` 和 `INSERT` 语句乱序可能导致 `Duplicate entry` 错误的问题 [#8597](https://github.com/pingcap/tiflow/issues/8597) @[sdojjy](https://github.com/sdojjy) - 修复由于 PD 和 TiCDC 之间的网络隔离引起 TiCDC 程序异常退出的问题 [#8562](https://github.com/pingcap/tiflow/issues/8562) @[overvenus](https://github.com/overvenus) - 修复了 Kubernetes 上不能平滑升级 (graceful upgrade) TiCDC 集群的问题 [#8484](https://github.com/pingcap/tiflow/issues/8484) @[overvenus](https://github.com/overvenus) - 修复了当所有 Kafka server 不可访问时会导致 TiCDC server panic 的问题 [#8523](https://github.com/pingcap/tiflow/issues/8523) @[3AceShowHand](https://github.com/3AceShowHand) From 4c4f3f020f37ec260dd6bab28d37531fc06875cb Mon Sep 17 00:00:00 2001 From: Frank945946 <108602632+Frank945946@users.noreply.github.com> Date: Tue, 6 Jun 2023 10:13:40 +0800 Subject: [PATCH 169/257] Update tidb-lightning-physical-import-mode.md (#14153) --- 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 41838c5b7b9f..c54171af4e79 100644 --- a/tidb-lightning/tidb-lightning-physical-import-mode.md +++ b/tidb-lightning/tidb-lightning-physical-import-mode.md @@ -71,7 +71,7 @@ summary: 了解 TiDB Lightning 的物理导入模式。 - 使用多个 TiDB Lightning 向同一目标导入时,请勿混用不同的 backend,即不可同时使用物理导入模式和逻辑导入模式导入同一 TiDB 集群。 -- 在导入数据的过程中,请勿在目标表进行写操作,否则会导致导入失败或数据不一致。导入期间也不建议进行读操作,因为读取的数据可能不一致。请在导入操作完成后再进行读写操作。 +- 在导入数据的过程中,请勿在目标表进行 DDL 和 DML 操作,否则会导致导入失败或数据不一致。导入期间也不建议进行读操作,因为读取的数据可能不一致。请在导入操作完成后再进行读写操作。 - 单个 Lightning 进程导入单表不应超过 10 TB。使用并行导入时,Lightning 实例不应超过 10 个。 From 1f14acde6055419b227b5cbeb8ae88c90b48954b Mon Sep 17 00:00:00 2001 From: Aolin Date: Tue, 6 Jun 2023 20:35:42 +0800 Subject: [PATCH 170/257] release notes: add v7.1 sysbench performance test report (#14169) --- releases/release-7.1.0.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/releases/release-7.1.0.md b/releases/release-7.1.0.md index 6f07de946f1c..9bf4fbd88250 100644 --- a/releases/release-7.1.0.md +++ b/releases/release-7.1.0.md @@ -533,7 +533,7 @@ TiDB 7.1.0 为长期支持版本 (Long-Term Support Release, LTS)。 ## 性能测试 -如需了解 TiDB v7.1.0 的性能表现,你可以参考 TiDB Dedicated 集群的 [TPC-C 性能测试报告](https://docs.pingcap.com/tidbcloud/v7.1.0-performance-benchmarking-with-tpcc)(英文版)。 +如需了解 TiDB v7.1.0 的性能表现,你可以参考 TiDB Dedicated 集群的 [TPC-C 性能测试报告](https://docs.pingcap.com/tidbcloud/v7.1.0-performance-benchmarking-with-tpcc)和 [Sysbench 性能测试报告](https://docs.pingcap.com/tidbcloud/v7.1.0-performance-benchmarking-with-sysbench)(英文版)。 ## 贡献者 From 8fbef13dd06ab4cb963cb8655416e0a523f004f5 Mon Sep 17 00:00:00 2001 From: Jianyuan Jiang Date: Wed, 7 Jun 2023 16:45:43 +0800 Subject: [PATCH 171/257] Modify ticdc 7.1 release note (#14173) --- releases/release-7.1.0.md | 1 + ticdc/ticdc-changefeed-config.md | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/releases/release-7.1.0.md b/releases/release-7.1.0.md index 9bf4fbd88250..e3a92048dd07 100644 --- a/releases/release-7.1.0.md +++ b/releases/release-7.1.0.md @@ -361,6 +361,7 @@ TiDB 7.1.0 为长期支持版本 (Long-Term Support Release, LTS)。 | TiDB Lightning | [`tikv-importer.region-split-batch-size`](/tidb-lightning/tidb-lightning-configuration.md) | 新增 | 用于控制一个 batch 中执行 split 和 scatter 操作的最大 Region 数量,默认值为 `4096`。 | | TiDB Lightning | [`tikv-importer.region-split-concurrency`](/tidb-lightning/tidb-lightning-configuration.md) | 新增 | 用于控制 Split Region 时的并发度,默认值为 CPU 核心数。 | | TiCDC | [`insecure-skip-verify`](/ticdc/ticdc-sink-to-kafka.md) | 新增 | 用于控制在同步数据到 Kafka 的场景下,启用 TLS 时是否设置认证算法。 | +| TiCDC | [`sink.only-output-updated-columns`](/ticdc/ticdc-changefeed-config.md#ticdc-changefeed-配置文件说明) | 新增 | 用于控制是否是否只向下游同步有内容更新的列,默认值为 `false`。 | | TiCDC | [`integrity.corruption-handle-level`](/ticdc/ticdc-changefeed-config.md#ticdc-changefeed-配置文件说明) | 新增 | 用于控制当单行数据的 Checksum 校验失败时,Changefeed 打印错误行数据相关日志的级别。默认值为 `"warn"`,可选值为 `"warn"` 和 `"error"`。 | | TiCDC | [`integrity.integrity-check-level`](/ticdc/ticdc-changefeed-config.md#ticdc-changefeed-配置文件说明) | 新增 | 用于控制是否开启单行数据的 Checksum 校验功能,默认值为 `"none"`,即不开启。 | | TiCDC | [`sink.enable-partition-separator`](/ticdc/ticdc-changefeed-config.md#ticdc-changefeed-配置文件说明) | 修改 | 默认值从 `false` 修改为 `true`,代表默认会将表中各个分区的数据分不同的目录来存储。建议保持该配置项为 `true` 以避免同步分区表到存储服务时可能丢数据的问题。 | diff --git a/ticdc/ticdc-changefeed-config.md b/ticdc/ticdc-changefeed-config.md index c984b28abf60..90a9cb9b07da 100644 --- a/ticdc/ticdc-changefeed-config.md +++ b/ticdc/ticdc-changefeed-config.md @@ -162,7 +162,7 @@ enable-partition-separator = true # 注意:该参数只有当下游为消息队列时,才会生效。 # enable-kafka-sink-v2 = false -# 是否只向下游同步有内容更新的列。 +# 是否只向下游同步有内容更新的列。从 v7.1.0 开始支持。 # 默认值为 false。 # 注意:该参数只有当下游为消息队列,并且使用 Open Protocol 或 Canal-JSON 时,才会生效。 # only-output-updated-columns = false From 1638ab692346c925875ed299b08dc9318b73ac1a Mon Sep 17 00:00:00 2001 From: Jianyuan Jiang Date: Thu, 8 Jun 2023 15:21:42 +0800 Subject: [PATCH 172/257] update ticdc alert rule (#14027) --- ticdc/ticdc-alert-rules.md | 22 ++++------------------ 1 file changed, 4 insertions(+), 18 deletions(-) diff --git a/ticdc/ticdc-alert-rules.md b/ticdc/ticdc-alert-rules.md index a7909b426425..7fc1943e2474 100644 --- a/ticdc/ticdc-alert-rules.md +++ b/ticdc/ticdc-alert-rules.md @@ -15,7 +15,7 @@ summary: 了解 TiCDC 集群监控报警规则以及处理方法。 * 报警规则: - (time() - ticdc_processor_checkpoint_ts / 1000) > 600 + (time() - ticdc_owner_checkpoint_ts / 1000) > 600 * 规则描述: @@ -29,7 +29,7 @@ summary: 了解 TiCDC 集群监控报警规则以及处理方法。 * 报警规则: - (time() - ticdc_processor_resolved_ts / 1000) > 300 + (time() - ticdc_owner_resolved_ts / 1000) > 300 * 规则描述: @@ -71,25 +71,11 @@ summary: 了解 TiCDC 集群监控报警规则以及处理方法。 收集 TiCDC 日志,定位原因。 -### `ticdc_mounter_unmarshal_and_mount_time_more_than_1s` +### `cdc_sink_flush_duration_time_more_than_10s` * 报警规则: - `histogram_quantile(0.9, rate(ticdc_mounter_unmarshal_and_mount_bucket[1m])) * 1000 > 1000` - -* 规则描述: - - TiCDC 某一同步任务解码变更数据的耗时超过 1 秒。 - -* 处理方法: - - 收集 TiCDC 日志,定位原因。 - -### `cdc_sink_execute_duration_time_more_than_10s` - -* 报警规则: - - `histogram_quantile(0.9, rate(ticdc_sink_txn_exec_duration_bucket[1m])) > 10` + `histogram_quantile(0.9, rate(ticdc_sink_txn_worker_flush_duration[1m])) > 10` * 规则描述: From 71c96ce7a259a956c5132070b4504ca75e10b5fb Mon Sep 17 00:00:00 2001 From: lhy1024 Date: Mon, 12 Jun 2023 10:49:05 +0800 Subject: [PATCH 173/257] tikv,pd: add config of min-resolved-ts (#14160) --- pd-configuration-file.md | 11 +++++++++++ tikv-configuration-file.md | 6 +++--- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/pd-configuration-file.md b/pd-configuration-file.md index d7c3188cb7bf..68032ec10fb0 100644 --- a/pd-configuration-file.md +++ b/pd-configuration-file.md @@ -159,6 +159,17 @@ pd-server 相关配置项。 > > 如果是从 v4.0 升级至当前版本,升级后的 `flow-round-by-digit` 行为和升级前的 `trace-region-flow` 行为默认保持一致:如果升级前 `trace-region-flow` 为 false,则升级后 `flow-round-by-digit` 为 127;如果升级前 `trace-region-flow` 为 true,则升级后 `flow-round-by-digit` 为 3。 +### `min-resolved-ts-persistence-interval` 从 v6.0.0 版本开始引入 + ++ 设置 PD leader 对集群中 Resolved TS 最小值进行持久化的间隔时间。如果该值设置为 `0`,表示禁用该功能。 ++ 默认值:在 v6.3.0 之前版本中为 `"0s"`,在 v6.3.0 及之后的版本中为 `"1s"`,即最小正值。 ++ 最小值:`"0s"` ++ 单位:秒 + +> **注意:** +> +> 对于从 v6.0.0~v6.2.0 升级上来的集群,`min-resolved-ts-persistence-interval` 的默认值在升级后将不会发生变化,即仍然为 `"0s"`。若要开启该功能,需要手动修改该配置项的值。 + ## security 安全相关配置项。 diff --git a/tikv-configuration-file.md b/tikv-configuration-file.md index 6916609a8ae6..d9880f79d54d 100644 --- a/tikv-configuration-file.md +++ b/tikv-configuration-file.md @@ -989,10 +989,10 @@ raftstore 相关的配置项。 + 默认值:1MB + 最小值:0 -### `report-min-resolved-ts-interval` +### `report-min-resolved-ts-interval` 从 v6.0.0 版本开始引入 -+ 设置 PD leader 收到 Resolved TS 的最小间隔时间。如果该值设置为 `0`,表示禁用该功能。 -+ 默认值:`"1s"`,即最小正值 ++ 设置 PD leader 收到 Resolved TS 的间隔时间。如果该值设置为 `0`,表示禁用该功能。 ++ 默认值:在 v6.3.0 之前版本中为 `"0s"`,在 v6.3.0 及之后的版本中为 `"1s"`,即最小正值。 + 最小值:0 + 单位:秒 From 091b41937abeca7649ca6d6a57f5fc90edea7151 Mon Sep 17 00:00:00 2001 From: CharlesCheung <61726649+CharlesCheung96@users.noreply.github.com> Date: Mon, 12 Jun 2023 20:49:07 +0800 Subject: [PATCH 174/257] ticdc: update storage sink doc (#13956) --- ticdc/ticdc-sink-to-cloud-storage.md | 66 +++++++++++++++++++--------- 1 file changed, 45 insertions(+), 21 deletions(-) diff --git a/ticdc/ticdc-sink-to-cloud-storage.md b/ticdc/ticdc-sink-to-cloud-storage.md index d1085899ec82..209c15015e7b 100644 --- a/ticdc/ticdc-sink-to-cloud-storage.md +++ b/ticdc/ticdc-sink-to-cloud-storage.md @@ -118,18 +118,14 @@ NFS 配置样例如下: > **注意:** > -> 表的版本可能在以下三种情况下发生变化: -> -> - 发生 DDL 操作后,表的版本为该 DDL 在上游 TiDB 执行结束的 TSO。但是,表版本的变化并不意味着表结构的变化。例如,在表中的某一列添加注释,不会导致 `schema.json` 文件内容发生变化。 -> - 进程重启,表的版本为进程重启时 Changefeed 的 checkpoint TSO。在有很多表的情况下,重启时需要遍历所有目录并找到上一次重启时每张表写入的位置,这样的操作耗时较长。因此,TiCDC 选择在一个以 checkpoint TSO 为版本的新目录下写入数据,而不是在旧版本的目录下继续写入数据。 -> - 发生表调度后,表的版本为该表调度到当前节点时 Changefeed 的 checkpoint TSO。 +> 表的版本仅在上游表发生 DDL 操作后才改变:表的版本为该 DDL 在上游 TiDB 执行结束的 TSO。但是,表版本的变化并不意味着表结构的变化。例如,在表中的某一列添加注释,不会导致 schema 文件内容发生变化。 ### Index 文件 Index 文件用于防止已写入的数据被错误覆盖,与数据变更记录存储在相同路径: ```shell -{scheme}://{prefix}/{schema}/{table}/{table-version-separator}/{partition-separator}/{date-separator}/CDC.index +{scheme}://{prefix}/{schema}/{table}/{table-version-separator}/{partition-separator}/{date-separator}/meta/CDC.index ``` Index 文件记录了当前目录下所使用到的最大文件名,比如: @@ -160,23 +156,27 @@ CDC000005.csv ### DDL 事件 -当 DDL 事件引起表的版本变更时,TiCDC 将会切换到新的路径下写入数据变更记录,例如 `test.table1` 的版本从 `9999` 变更为 `10000` 时将会在 `s3://bucket/bbb/ccc/test/table1/10000/2022-01-02/CDC000001.csv` 路径中写入数据。并且,当 DDL 事件发生时,TiCDC 将生成一个 `schema.json` 文件存储表结构信息。 +#### 表级 DDL 事件 -表结构信息将会存储到以下路径: +当上游表的 DDL 事件引起表的版本变更时,TiCDC 将会自动进行以下操作: -```shell -{scheme}://{prefix}/{schema}/{table}/{table-version-separator}/schema.json -``` +- 切换到新的路径下写入数据变更记录。例如,当 `test.table1` 的版本变更为 `441349361156227074` 时,TiCDC 将会在 `s3://bucket/bbb/ccc/test/table1/441349361156227074/2022-01-02/` 路径下写入数据。 +- 生成一个 schema 文件存储表结构信息,文件路径如下: + + ```shell + {scheme}://{prefix}/{schema}/{table}/meta/schema_{table-version}_{hash}.json + ``` -一个示例 `schema.json` 文件如下: +以 `schema_441349361156227074_3131721815.json` 为例,表结构信息文件的内容如下: ```json { "Table":"table1", "Schema":"test", "Version":1, - "TableVersion":10000, - "Query": "ALTER TABLE test.table1 ADD OfficeLocation blob(20)", + "TableVersion":441349361156227074, + "Query":"ALTER TABLE test.table1 ADD OfficeLocation blob(20)", + "Type":5, "TableColumns":[ { "ColumnName":"Id", @@ -213,6 +213,7 @@ CDC000005.csv - `Version`:Storage sink 协议版本号。 - `TableVersion`:表的版本号。 - `Query`:DDL 语句。 +- `Type`:DDL 类型。 - `TableColumns`:该数组表示表中每一列的详细信息。 - `ColumnName`:列名。 - `ColumnType`:该列的类型。详见[数据类型](#数据类型)。 @@ -223,9 +224,32 @@ CDC000005.csv - `ColumnIsPk`:值为 `true` 时表示该列是主键的一部分。 - `TableColumnsTotal`:`TableColumns` 数组的大小。 +#### 库级 DDL 事件 + +当上游数据库发生库级 DDL 事件时,TiCDC 将会自动生成一个 schema 文件存储数据库结构信息,文件路径如下: + +```shell +{scheme}://{prefix}/{schema}/meta/schema_{table-version}_{hash}.json +``` + +以 `schema_441349361156227000_3131721815.json` 为例,数据库结构信息文件的内容如下: + +```json +{ + "Table": "", + "Schema": "schema1", + "Version": 1, + "TableVersion": 441349361156227000, + "Query": "CREATE DATABASE `schema1`", + "Type": 1, + "TableColumns": null, + "TableColumnsTotal": 0 +} +``` + ## 数据类型 -本章节主要介绍 `schema.json` 文件中使用的各种数据类型。数据类型定义为 `T(M[, D])`,详见[数据类型概述](/data-type-overview.md#数据类型概述)。 +本章节主要介绍 `schema_{table-version}_{hash}.json` 文件(以下简称为 schema 文件)中使用的各种数据类型。数据类型定义为 `T(M[, D])`,详见[数据类型概述](/data-type-overview.md#数据类型概述)。 ### 整数类型 @@ -234,7 +258,7 @@ TiDB 中整数类型可被定义为 `IT[(M)] [UNSIGNED]`,其中: - `IT` 为整数类型,包括 `TINYINT`、`SMALLINT`、`MEDIUMINT`、`INT`、`BIGINT` 和 `BIT`。 - `M` 为该类型的显示宽度。 -`schema.json` 文件中对整数类型定义如下: +schema 文件中对整数类型定义如下: ```json { @@ -252,7 +276,7 @@ TiDB 中的小数类型可被定义为 `DT[(M,D)][UNSIGNED]`,其中: - `M` 为该类型数据的精度,即整数位加上小数位的总长度。 - `D` 为小数位的长度。 -`schema.json` 文件中对小数类型的定义如下: +schema 文件中对小数类型的定义如下: ```json { @@ -269,7 +293,7 @@ TiDB 中的日期类型可被定义为 `DT`,其中: - `DT` 为日期类型,包括 `DATE` 和 `YEAR`。 -`schema.json` 文件中对日期类型的定义如下: +schema 文件中对日期类型的定义如下: ```json { @@ -283,7 +307,7 @@ TiDB 中的时间类型可被定义为 `TT[(M)]`,其中: - `TT` 为时间类型,包括 `TIME`、`DATETIME` 和 `TIMESTAMP`。 - `M` 为秒的精度,取值范围为 0~6。 -`schema.json` 文件中对时间类型的定义如下: +schema 文件中对时间类型的定义如下: ```json { @@ -300,7 +324,7 @@ TiDB 中的字符串类型可被定义为 `ST[(M)]`,其中: - `ST` 为字符串类型,包括 `CHAR`、`VARCHAR`、`TEXT`、`BINARY`、`BLOB`、`JSON` 等。 - `M` 表示字符串的最大长度。 -`schema.json` 文件中对字符串类型的定义如下: +schema 文件中对字符串类型的定义如下: ```json { @@ -312,7 +336,7 @@ TiDB 中的字符串类型可被定义为 `ST[(M)]`,其中: ### Enum/Set 类型 -`schema.json` 文件中对 Enum/Set 类型的定义如下: +schema 文件中对 Enum/Set 类型的定义如下: ```json { From 538cbd051dc66f0b919eaf8df957993093a3cd46 Mon Sep 17 00:00:00 2001 From: Chao Zheng Date: Mon, 12 Jun 2023 22:07:06 -0700 Subject: [PATCH 175/257] update ticdc failed changefeed gc mechanism description (#14208) --- ticdc/ticdc-changefeed-overview.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ticdc/ticdc-changefeed-overview.md b/ticdc/ticdc-changefeed-overview.md index 525b5ba6def9..7dc2f7071b07 100644 --- a/ticdc/ticdc-changefeed-overview.md +++ b/ticdc/ticdc-changefeed-overview.md @@ -19,7 +19,7 @@ Changefeed 是 TiCDC 中的单个同步任务。Changefeed 将一个 TiDB 集群 - Stopped:同步任务停止,由于用户手动暂停 (pause) changefeed。处于这个状态的 changefeed 会阻挡 GC 推进。 - Error:同步任务报错,由于某些可恢复的错误导致同步无法继续进行,处于这个状态的 changefeed 会不断尝试继续推进,直到状态转为 Normal。处于这个状态的 changefeed 会阻挡 GC 推进。 - Finished:同步任务完成,同步任务进度已经达到预设的 TargetTs。处于这个状态的 changefeed 不会阻挡 GC 推进。 -- Failed:同步任务失败。由于发生了某些不可恢复的错误,导致同步无法继续进行,并且无法恢复。处于这个状态的 changefeed 不会阻挡 GC 推进。 +- Failed:同步任务失败。由于发生了某些不可恢复的错误,导致同步无法继续进行,并且无法恢复。TiCDC 将为发生故障的 changefeed 保留数据 24 小时,以防止其在 GC 过程中被清除。 以上状态流转图中的编号说明如下: From ecfc127134cf92835f48f6b37e57c1eb47636869 Mon Sep 17 00:00:00 2001 From: Ti Chi Robot Date: Tue, 13 Jun 2023 20:21:09 +0800 Subject: [PATCH 176/257] OWNERS: Auto Sync OWNERS files from community membership (#14219) --- OWNERS | 28 ++++++++++++++++++++++------ 1 file changed, 22 insertions(+), 6 deletions(-) diff --git a/OWNERS b/OWNERS index 00b11a3d3357..ec95e7e30cb6 100644 --- a/OWNERS +++ b/OWNERS @@ -1,12 +1,11 @@ # See the OWNERS docs at https://go.k8s.io/owners approvers: - # docs-maintainers: - - lilin90 - - qiancai - # docs-committers: - breezewish + - CaitinChen - CharLotteiu + - cofyc - csuzhangxc + - DanielZhangQD - dcalvin - dragonly - en-jin19 @@ -15,24 +14,41 @@ approvers: - kissmydb - lance6716 - lichunzhu + - lilin90 - Liuxiaozhen12 + - morgo - Oreoxmt - overvenus - - QueenyJin + - qiancai + - queenypingcap - ran-huang + - shichun-0415 + - SunRunAway - tangenta + - TomShawn + - toutdesuite + - WangXiangUSTC + - yikeke + - YiniXu9506 reviewers: - # docs-reviewers: - 3pointer - amyangfei - anotherrachel + - aylei - crazycs520 - dveeden + - ericsyh - glkappe - GMHDBJD - Icemap - Joyinqin + - junlan-zhang - KanShiori - lucklove + - lysu + - ngaut + - superlzs0476 - tiancaiamao + - weekface + - Yisaer - zimulala From 11a4dae7eaf3b985850f3cfe39ac887350f4a910 Mon Sep 17 00:00:00 2001 From: Frank945946 <108602632+Frank945946@users.noreply.github.com> Date: Tue, 13 Jun 2023 21:51:08 +0800 Subject: [PATCH 177/257] Update task-configuration-file-full.md (#14213) --- dm/task-configuration-file-full.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dm/task-configuration-file-full.md b/dm/task-configuration-file-full.md index 713697506c59..9e7f2230383b 100644 --- a/dm/task-configuration-file-full.md +++ b/dm/task-configuration-file-full.md @@ -222,7 +222,7 @@ mysql-instances: ## 配置顺序 -通过上面的配置文件示例,可以看出配置文件总共分为两个部分:`全局配置`和`实例配置`,其中`全局配置`又分为`基本信息配置`和`实例配置`,配置顺序如下: +通过上面的配置文件示例,可以看出配置文件总共分为两个部分:`全局配置`和`实例配置`,其中`全局配置`又分为`基本信息配置`和`功能配置集`。配置顺序如下: 1. 编辑[全局配置](#全局配置)。 2. 根据全局配置编辑[实例配置](#实例配置)。 From 627002ecae419db1d4575cebcb782e7202dbeeae Mon Sep 17 00:00:00 2001 From: you06 Date: Wed, 14 Jun 2023 10:33:07 +0800 Subject: [PATCH 178/257] add description of stale read metrics (#14207) --- grafana-tidb-dashboard.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/grafana-tidb-dashboard.md b/grafana-tidb-dashboard.md index 8e5d03454b4a..c903a9fbb7cb 100644 --- a/grafana-tidb-dashboard.md +++ b/grafana-tidb-dashboard.md @@ -112,6 +112,8 @@ aliases: ['/docs-cn/dev/grafana-tidb-dashboard/','/docs-cn/dev/reference/key-mon - KV Request OPS:KV Request 根据 TiKV 显示执行次数 - KV Request Duration 99 by store:根据 TiKV 显示 KV Request 执行时间 - KV Request Duration 99 by type:根据类型显示 KV Request 的执行时间 +- Stale Read OPS:每秒执行的 Stale Read 的数量,根据结果分为 hit 和 miss 进行统计 +- Stale Read Traffic:Stale Read 消耗的流量,根据结果分为 hit 和 miss 进行统计 ### PD Client From 1485424f527e67c16600fba09ad0dc5002e7d311 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=BA=8C=E6=89=8B=E6=8E=89=E5=8C=85=E5=B7=A5=E7=A8=8B?= =?UTF-8?q?=E5=B8=88?= Date: Wed, 14 Jun 2023 14:15:08 +0800 Subject: [PATCH 179/257] ticdc: update ticdc time-zone docs (#14197) --- ticdc/ticdc-server-config.md | 2 +- ticdc/ticdc-sink-to-mysql.md | 2 +- ticdc/troubleshoot-ticdc.md | 32 ++------------------------------ 3 files changed, 4 insertions(+), 32 deletions(-) diff --git a/ticdc/ticdc-server-config.md b/ticdc/ticdc-server-config.md index d25c21067f2c..40e49bf51091 100644 --- a/ticdc/ticdc-server-config.md +++ b/ticdc/ticdc-server-config.md @@ -23,7 +23,7 @@ summary: 了解 TiCDC 详细的命令行参数和配置文件定义。 - `cert`:TiCDC 创建 TLS 连接时使用的证书文件路径,PEM 格式,可选。 - `cert-allowed-cn`:TiCDC 创建 TLS 连接时使用的通用名称文件路径,可选。 - `key`:TiCDC 创建 TLS 连接时使用的证书密钥文件路径,PEM 格式,可选。 -- `tz`:TiCDC 服务使用的时区。TiCDC 在内部转换 `TIMESTAMP` 等时间数据类型和向下游同步数据时使用该时区,默认为进程运行本地时区。(注意如果同时指定 `tz` 参数和 `sink-uri` 中的 `time-zone` 参数,TiCDC 进程内部使用 `tz` 指定的时区,sink 向下游执行时使用 `time-zone` 指定的时区) +- `tz`:TiCDC 服务使用的时区。TiCDC 在内部转换 `TIMESTAMP` 等时间数据类型和向下游同步数据时使用该时区,默认为进程运行本地时区。(注意如果同时指定 `tz` 参数和 `sink-uri` 中的 `time-zone` 参数,TiCDC 进程内部使用 `tz` 指定的时区,sink 向下游执行时使用 `time-zone` 指定的时区,请保持二者一致。) - `cluster-id`:TiCDC 集群的 ID。可选,默认值为 `default`。`cluster-id` 是 TiCDC 集群的唯一标识,拥有相同 `cluster-id` 的 TiCDC 节点同属一个集群。长度最大为 128,需要符合正则表达式 `^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$`,且不能是以下值:`owner`,`capture`,`task`,`changefeed`,`job`,`meta`。 ## `cdc server` 配置文件说明 diff --git a/ticdc/ticdc-sink-to-mysql.md b/ticdc/ticdc-sink-to-mysql.md index b625fddf39e7..c59a2eec5b64 100644 --- a/ticdc/ticdc-sink-to-mysql.md +++ b/ticdc/ticdc-sink-to-mysql.md @@ -63,7 +63,7 @@ URI 中可配置的参数如下: | `ssl-ca` | 连接下游 MySQL 实例所需的 CA 证书文件路径(可选)。 | | `ssl-cert` | 连接下游 MySQL 实例所需的证书文件路径(可选)。 | | `ssl-key` | 连接下游 MySQL 实例所需的证书密钥文件路径(可选)。 | -| `time-zone` | 连接下游 MySQL 实例时使用的时区名称,从 v4.0.8 开始生效。(可选。如果不指定该参数,使用 TiCDC 服务进程的时区;如果指定该参数但使用空值,则表示连接 MySQL 时不指定时区,使用下游默认时区)。 | +| `time-zone` | 连接下游 MySQL 实例时使用的时区名称,从 v4.0.8 开始生效。(可选。如果不指定该参数,使用 TiCDC 服务进程的时区;如果指定该参数但使用空值,例如:`time-zone=""`,则表示连接 MySQL 时不指定时区,使用下游默认时区)。 | | `transaction-atomicity` | 指定事务的原子性级别(可选,默认值为 `none`)。当该值为 `table` 时 TiCDC 保证单表事务的原子性,当该值为 `none` 时 TiCDC 会拆分单表事务。 | 若需要对 Sink URI 中的数据库密码使用 Base64 进行编码,可以参考如下命令: diff --git a/ticdc/troubleshoot-ticdc.md b/ticdc/troubleshoot-ticdc.md index e7c399845180..c91151aaf409 100644 --- a/ticdc/troubleshoot-ticdc.md +++ b/ticdc/troubleshoot-ticdc.md @@ -82,37 +82,9 @@ Warning: Unable to load '/usr/share/zoneinfo/zone.tab' as time zone. Skipping it Warning: Unable to load '/usr/share/zoneinfo/zone1970.tab' as time zone. Skipping it. ``` -如果下游是特殊的 MySQL 环境(某种公有云 RDS 或某些 MySQL 衍生版本等),使用上述方式导入时区失败,就需要通过 sink-uri 中的 `time-zone` 参数指定下游的 MySQL 时区。可以首先在 MySQL 中查询其使用的时区: +如果下游是特殊的 MySQL 环境(某种公有云 RDS 或某些 MySQL 衍生版本等),使用上述方式导入时区失败,则可以通过设置 `time-zone` 为空值来使用下游默认时区,例如:`time-zone=""`。 -```shell -show variables like '%time_zone%'; -``` - -```shell -+------------------+--------+ -| Variable_name | Value | -+------------------+--------+ -| system_time_zone | CST | -| time_zone | SYSTEM | -+------------------+--------+ -``` - -然后在创建同步任务和创建 TiCDC 服务时使用该时区: - -```shell -cdc cli changefeed create --sink-uri="mysql://root@127.0.0.1:3306/?time-zone=CST" --server=http://127.0.0.1:8300 -``` - -> **注意:** -> -> CST 可能是以下四个不同时区的缩写: -> -> - 美国中部时间:Central Standard Time (USA) UT-6:00 -> - 澳大利亚中部时间:Central Standard Time (Australia) UT+9:30 -> - 中国标准时间:China Standard Time UT+8:00 -> - 古巴标准时间:Cuba Standard Time UT-4:00 -> -> 在中国,CST 通常表示中国标准时间,使用时请注意甄别。 +在 TiCDC 中使用时区时,建议显式指定时区,例如:`time-zone="Asia/Shanghai"`。同时,请确保 TiCDC Server 的 `tz` 时区配置、Sink URI 中的 `time-zone` 时区配置和下游数据库的时区配置保持一致。这样可以避免因时区不一致导致的数据不一致问题。 ## 如何处理升级 TiCDC 后配置文件不兼容的问题? From d997e85d06849b35caaa98f585fd3af991ad8cad Mon Sep 17 00:00:00 2001 From: Ran Date: Wed, 14 Jun 2023 15:43:08 +0800 Subject: [PATCH 180/257] add v6.5.3 release notes (#14168) --- TOC.md | 1 + releases/release-6.5.3.md | 135 +++++++++++++++++++++++++++++++++++ releases/release-notes.md | 1 + releases/release-timeline.md | 1 + 4 files changed, 138 insertions(+) create mode 100644 releases/release-6.5.3.md diff --git a/TOC.md b/TOC.md index c4919e8151ef..521665d08a9a 100644 --- a/TOC.md +++ b/TOC.md @@ -996,6 +996,7 @@ - v6.6 - [6.6.0-DMR](/releases/release-6.6.0.md) - v6.5 + - [6.5.3](/releases/release-6.5.3.md) - [6.5.2](/releases/release-6.5.2.md) - [6.5.1](/releases/release-6.5.1.md) - [6.5.0](/releases/release-6.5.0.md) diff --git a/releases/release-6.5.3.md b/releases/release-6.5.3.md new file mode 100644 index 000000000000..e72488a16d28 --- /dev/null +++ b/releases/release-6.5.3.md @@ -0,0 +1,135 @@ +--- +title: TiDB 6.5.3 Release Notes +summary: 了解 TiDB 6.5.3 版本的兼容性变更、改进提升,以及错误修复。 +--- + +# TiDB 6.5.3 Release Notes + +发版日期:2023 年 6 月 14 日 + +TiDB 版本:6.5.3 + +试用链接:[快速体验](https://docs.pingcap.com/zh/tidb/v6.5/quick-start-with-tidb) | [生产部署](https://docs.pingcap.com/zh/tidb/v6.5/production-deployment-using-tiup) | [下载离线包](https://cn.pingcap.com/product-community/?version=v6.5.3#version-list) + +## 改进提升 + ++ TiDB + + - 提升了对带有 Placement Rules 的分区表的 `TRUNCATE` 操作速度 [#43070](https://github.com/pingcap/tidb/issues/43070) @[Lloyd-Pottiger](https://github.com/Lloyd-Pottiger) + - 在 resolve lock 之后避免无效的 Stale Read 重试 [#43659](https://github.com/pingcap/tidb/issues/43659) @[you06](https://github.com/you06) + - 在 Stale Read 遇到 `DataIsNotReady` 报错时使用 leader read 来降低延迟 [#765](https://github.com/tikv/client-go/pull/765) @[Tema](https://github.com/Tema) + - 为 Stale Read 增加 `Stale Read OPS` 和 `Stale Read MBps` 指标,用于监控命中率和流量 [#43325](https://github.com/pingcap/tidb/issues/43325) @[you06](https://github.com/you06) + ++ TiKV + + - 使用 gzip 压缩 `check_leader` 请求以减少流量 [#14839](https://github.com/tikv/tikv/issues/14839) @[cfzjywxk](https://github.com/cfzjywxk) + ++ PD + + - PD Leader 选举使用单独的 gRPC 链接,防止受到其他请求的影响 [#6403](https://github.com/tikv/pd/issues/6403) @[rleungx](https://github.com/rleungx) + ++ Tools + + + TiCDC + + - 优化 TiCDC 对 DDL 的处理方式,使 DDL 不阻塞其他无关的 DML Event 的使用,同时减少内存使用 [#8106](https://github.com/pingcap/tiflow/issues/8106) @[asddongmen](https://github.com/asddongmen) + - 调整 Decoder 接口,增加了新方法 `AddKeyValue` [#8861](https://github.com/pingcap/tiflow/issues/8861) @[3AceShowHand](https://github.com/3AceShowHand) + - 优化同步数据到对象存储的场景下发生 DDL 事件时的目录结构 [#8890](https://github.com/pingcap/tiflow/issues/8890) @[CharlesCheung96](https://github.com/CharlesCheung96) + - 支持同步到 Kafka-on-Pulsar 下游 [#8892](https://github.com/pingcap/tiflow/issues/8892) @[hi-rustin](https://github.com/hi-rustin) + - 当同步数据到 Kafka 时,支持 OAuth 协议验证方式 [#8865](https://github.com/pingcap/tiflow/issues/8865) @[hi-rustin](https://github.com/hi-rustin) + - 优化采用 Avro 或 CSV 协议同步数据时 TiCDC 对 `UPDATE` 语句的处理方式,即将其拆分为 `DELETE` 和 `INSERT` 语句,这样用户从 `DELETE` 语句中即可获取修改前的 old value [#9086](https://github.com/pingcap/tiflow/issues/9086) @[3AceShowHand](https://github.com/3AceShowHand) + - 增加一个配置项 `insecure-skip-verify`,控制在同步数据到 Kafka 的场景下启用 TLS 时是否设置认证算法 [#8867](https://github.com/pingcap/tiflow/issues/8867) @[hi-rustin](https://github.com/hi-rustin) + - TiCDC 优化 DDL 同步操作,减轻 DDL 操作对下游延迟的影响 [#8686](https://github.com/pingcap/tiflow/issues/8686) @[hi-rustin](https://github.com/hi-rustin) + - 优化 TiCDC 在同步任务失败时对上游 GC TLS 的设置方法 [#8403](https://github.com/pingcap/tiflow/issues/8403) @[charleszheng44](https://github.com/charleszheng44) + + + TiDB Lightning + + - 在导入数据期间遇到 `unknown RPC` 错误时,增加了重试机制 [#43291](https://github.com/pingcap/tidb/issues/43291) @[D3Hunter](https://github.com/D3Hunter) + + + TiDB Binlog + + - 优化表信息的获取方式,降低 Drainer 的初始化时间和内存占用 [#1137](https://github.com/pingcap/tidb-binlog/issues/1137) @[lichunzhu](https://github.com/lichunzhu) + +## 错误修复 + ++ TiDB + + - 修复 `min, max` 查询结果出错的问题 [#43805](https://github.com/pingcap/tidb/issues/43805) @[wshwsh12](https://github.com/wshwsh12) + - 修复窗口函数计算下推到 TiFlash 时执行计划构造错误的问题 [#43922](https://github.com/pingcap/tidb/issues/43922) @[gengliqi](https://github.com/gengliqi) + - 修复使用 CTE 的查询导致 TiDB 卡住的问题 [#43749](https://github.com/pingcap/tidb/issues/43749) [#36896](https://github.com/pingcap/tidb/issues/36896) @[guo-shaoge](https://github.com/guo-shaoge) + - 修复在使用 `AES_DECRYPT` 表达式时,SQL 报错 `runtime error: index out of range` 的问题 [#43063](https://github.com/pingcap/tidb/issues/43063) @[lcwangchao](https://github.com/lcwangchao) + - 修复 `SHOW PROCESSLIST` 语句无法显示子查询时间较长语句的事务的 TxnStart 的问题 [#40851](https://github.com/pingcap/tidb/issues/40851) @[crazycs520](https://github.com/crazycs520) + - 修复 PD 隔离可能会导致运行的 DDL 阻塞的问题 [#44014](https://github.com/pingcap/tidb/issues/44014) [#43755](https://github.com/pingcap/tidb/issues/43755) [#44267](https://github.com/pingcap/tidb/issues/44267) @[wjhuang2016](https://github.com/wjhuang2016) + - 修复使用 `UNION` 查询联合视图和临时表时 TiDB panic 的问题 [#42563](https://github.com/pingcap/tidb/issues/42563) @[lcwangchao](https://github.com/lcwangchao) + - 修复 Placement Rule 在分区表下的行为问题,使得删除的分区 Placement Rule 可以被正确设置并回收 [#44116](https://github.com/pingcap/tidb/issues/44116) @[lcwangchao](https://github.com/lcwangchao) + - 修复在 TRUNCATE 分区表的某个分区时可能造成分区的 Placement Rule 失效的问题 [#44031](https://github.com/pingcap/tidb/issues/44031) @[lcwangchao](https://github.com/lcwangchao) + - 修复在重命名表期间 TiCDC 可能丢失部分行变更的问题 [#43338](https://github.com/pingcap/tidb/issues/43338) @[tangenta](https://github.com/tangenta) + - 修复使用 BR 导入表后 DDL 作业历史记录丢失的问题 [#43725](https://github.com/pingcap/tidb/issues/43725) @[tangenta](https://github.com/tangenta) + - 修复了 `JSON_OBJECT` 在某些情况下会报错的问题 [#39806](https://github.com/pingcap/tidb/issues/39806) @[YangKeao](https://github.com/YangKeao) + - 修复 IPv6 环境下的集群无法查询部分系统视图的问题 [#43286](https://github.com/pingcap/tidb/issues/43286) @[Defined2014](https://github.com/Defined2014) @[nexustar](https://github.com/nexustar) + - 修复当 PD 成员地址发生变化时,为 `AUTO_INCREMENT` 列分配 ID 会被长时间阻塞的问题 [#42643](https://github.com/pingcap/tidb/issues/42643) @[tiancaiamao](https://github.com/tiancaiamao) + - 修复回收放置规则时,TiDB 向 PD 发送重复请求造成 PD 日志中出现大量 `full config reset` 的问题 [#33069](https://github.com/pingcap/tidb/issues/33069) @[tiancaiamao](https://github.com/tiancaiamao) + - 修复了 `SHOW PRIVILEGES` 命令显示的权限列表不完整的问题 [#40591](https://github.com/pingcap/tidb/issues/40591) @[CbcWestwolf](https://github.com/CbcWestwolf) + - 修复 `ADMIN SHOW DDL JOBS LIMIT` 返回错误结果的问题 [#42298](https://github.com/pingcap/tidb/issues/42298) @[CbcWestwolf](https://github.com/CbcWestwolf) + - 修复在开启密码强度校验时对 `tidb_auth_token` 用户进行校验导致用户创建失败的问题 [#44098](https://github.com/pingcap/tidb/issues/44098) @[CbcWestwolf](https://github.com/CbcWestwolf) + - 修复动态裁剪模式下内连接表时找不到分区的问题 [#43686](https://github.com/pingcap/tidb/issues/43686) @[mjonss](https://github.com/mjonss) + - 修复在分区表上执行 `MODIFY COLUMN` 时输出 `Data Truncated` 相关报错的问题 [#41118](https://github.com/pingcap/tidb/issues/41118) @[mjonss](https://github.com/mjonss) + - 修复 IPv6 环境下显示错误的 TiDB 地址的问题 [#43260](https://github.com/pingcap/tidb/issues/43260) @[nexustar](https://github.com/nexustar) + - 修复在谓词下推的情况下 CTE 结果错误的问题 [#43645](https://github.com/pingcap/tidb/issues/43645) @[winoros](https://github.com/winoros) + - 修复在带有非关联子查询的语句中使用公共表表达式 (CTE) 可能导致结果错误的问题 [#44051](https://github.com/pingcap/tidb/issues/44051) @[winoros](https://github.com/winoros) + - 修复 Join Reorder 可能会造成 Outer Join 结果错误的问题 [#44314](https://github.com/pingcap/tidb/issues/44314) @[AilinKid](https://github.com/AilinKid) + - 修复在一些极端情况下,悲观事务的第一条语句发生重试时,对该事务进行 resolve lock 可能影响事务正确性的问题 [#42937](https://github.com/pingcap/tidb/issues/42937) @[MyonKeminta](https://github.com/MyonKeminta) + - 修复在一些罕见的情况下,悲观事务的残留悲观锁在 GC resolve lock 时可能影响数据正确性的问题 [#43243](https://github.com/pingcap/tidb/issues/43243) @[MyonKeminta](https://github.com/MyonKeminta) + - 修复了 `batch cop` 在执行过程中的 scan detail 信息不准确的问题 [#41582](https://github.com/pingcap/tidb/issues/41582) @[you06](https://github.com/you06) + - 修复在同时使用 Stale Read 和 `PREPARE` 语句时 TiDB 无法读取到数据更新的问题 [#43044](https://github.com/pingcap/tidb/issues/43044) @[you06](https://github.com/you06) + - 修复执行 `LOAD DATA` 语句可能误报 `assertion failed` 的问题 [#43849](https://github.com/pingcap/tidb/issues/43849) @[you06](https://github.com/you06) + - 修复使用 Stale Read 过程中,当 coprocessor 遇到 `region data not ready` 情况时无法 fallback 到 leader 的问题 [#43365](https://github.com/pingcap/tidb/issues/43365) @[you06](https://github.com/you06) + ++ TiKV + + - 修复 Continuous Profiling 中的文件句柄泄露的问题 [#14224](https://github.com/tikv/tikv/issues/14224) @[tabokie](https://github.com/tabokie) + - 修复 PD 宕机可能造成 PITR 无法推进的问题 [#14184](https://github.com/tikv/tikv/issues/14184) @[YuJuncen](https://github.com/YuJuncen) + - 修复加密 Key ID 冲突会导致旧 Key 被删除的问题 [#14585](https://github.com/tikv/tikv/issues/14585) @[tabokie](https://github.com/tabokie) + - 修复 autocommit 和 point get replica read 可能破坏线性一致性的问题 [#14715](https://github.com/tikv/tikv/issues/14715) @[cfzjywxk](https://github.com/cfzjywxk) + - 修复集群从较低版本升级到 v6.5 或更高版本时,由于累计的 Lock 记录可能导致性能下降到问题 [#14780](https://github.com/tikv/tikv/issues/14780) @[MyonKeminta](https://github.com/MyonKeminta) + - 修复 TiDB Lightning 可能导致 SST 文件泄露的问题 [#14745](https://github.com/tikv/tikv/issues/14745) @[YuJuncen](https://github.com/YuJuncen) + - 修复加密密钥和 raft log 文件删除之间的潜在冲突导致 TiKV 无法启动的问题 [#14761](https://github.com/tikv/tikv/issues/14761) @[Connor1996](https://github.com/Connor1996) + ++ TiFlash + + - 修复分区表 TableScan 算子在 Region 迁移时性能劣化的问题 [#7519](https://github.com/pingcap/tiflash/issues/7519) @[Lloyd-Pottiger](https://github.com/Lloyd-Pottiger) + - 修复在 GENERATED 类型表字段与 TIMESTAMP 或 TIME 类型同时存在的情况下,查询 TiFlash 可能会报错的问题 [#7468](https://github.com/pingcap/tiflash/issues/7468) @[Lloyd-Pottiger](https://github.com/Lloyd-Pottiger) + - 修复大的更新事务可能会导致 TiFlash 反复报错重启的问题 [#7316](https://github.com/pingcap/tiflash/issues/7316) @[JaySon-Huang](https://github.com/JaySon-Huang) + - 修复 `INSERT SELECT` 语句从 TiFlash 读取数据时报错 "Truncate error cast decimal as decimal" 的问题 [#7348](https://github.com/pingcap/tiflash/issues/7348) @[windtalker](https://github.com/windtalker) + - 修复查询在 Join build 侧数据非常大,且包含许多小型字符串类型列时,消耗的内存可能会超过实际需要的问题 [#7416](https://github.com/pingcap/tiflash/issues/7416) @[yibin87](https://github.com/yibin87) + ++ Tools + + + Backup & Restore (BR) + + - 修复备份失败时 BR 的报错信息 "resolve lock timeout" 具有误导性,掩盖了实际错误的问题 [#43236](https://github.com/pingcap/tidb/issues/43236) @[YuJuncen](https://github.com/YuJuncen) + + + TiCDC + + - 修复在表数量多达 50000 个时可能出现 OOM 的问题 [#7872](https://github.com/pingcap/tiflow/issues/7872) @[sdojjy](https://github.com/sdojjy) + - 修复 TiCDC 在上游 TiDB 发生 OOM 时卡住的问题 [#8561](https://github.com/pingcap/tiflow/issues/8561) @[overvenus](https://github.com/overvenus) + - 修复 PD 出现网络隔离或 PD Owner 节点重启等故障时 TiCDC 卡住问题 [#8808](https://github.com/pingcap/tiflow/issues/8808) [#8812](https://github.com/pingcap/tiflow/issues/8812) [#8877](https://github.com/pingcap/tiflow/issues/8877) @[asddongmen](https://github.com/asddongmen) + - 修复 TiCDC 的时区设置问题 [#8798](https://github.com/pingcap/tiflow/issues/8798) @[hi-rustin](https://github.com/hi-rustin) + - 修复上游 TiKV 节点 crash 时 checkpoint lag 上升的问题 [#8858](https://github.com/pingcap/tiflow/issues/8858) @[hicqu](https://github.com/hicqu) + - 修复在同步数据到下游 MySQL 的场景中,当上游 TiDB 执行 `FLASHBACK CLUSTER TO TIMESTAMP` 语句后同步出错的问题 [#8040](https://github.com/pingcap/tiflow/issues/8040) @[asddongmen](https://github.com/asddongmen) + - 修复当同步数据到对象存储时上游的 `EXCHANGE PARTITION` 操作没有正常同步到下游的问题 [#8914](https://github.com/pingcap/tiflow/issues/8914) @[CharlesCheung96](https://github.com/CharlesCheung96) + - 修复在某些特殊场景下 sorter 组件内存使用过多导致 OOM 的问题 [#8974](https://github.com/pingcap/tiflow/issues/8974) @[hicqu](https://github.com/hicqu) + - 修复当下游为 Kafka 时,TiCDC 查询下游的元信息频率过高导致下游负载过大的问题 [#8957](https://github.com/pingcap/tiflow/issues/8957) [#8959](https://github.com/pingcap/tiflow/issues/8959) @[hi-rustin](https://github.com/hi-rustin) + - 修复当 Kafka 消息过大导致同步出错时,在 Log 中记录了消息体的问题 [#9031](https://github.com/pingcap/tiflow/issues/9031) @[darraes](https://github.com/darraes) + - 修复下游 Kafka 滚动重启时 TiCDC 节点发生 panic 的问题 [#9023](https://github.com/pingcap/tiflow/issues/9023) @[asddongmen](https://github.com/asddongmen) + - 修复同步数据到存储服务时,下游 DDL 语句对应的 JSON 文件中没有记录表中字段默认值的问题 [#9066](https://github.com/pingcap/tiflow/issues/9066) @[CharlesCheung96](https://github.com/CharlesCheung96) + + + TiDB Lightning + + - 修复宽表导入时可能出现 OOM 的问题 [#43728](https://github.com/pingcap/tidb/issues/43728) @[D3Hunter](https://github.com/D3Hunter) + - 修复大数据量导入时报 `write to tikv with no leader returned` 错误的问题 [#43055](https://github.com/pingcap/tidb/issues/43055) @[lance6716](https://github.com/lance6716) + - 修复当数据文件中存在未闭合的 delimiter 时可能 OOM 的问题 [#40400](https://github.com/pingcap/tidb/issues/40400) @[buchuitoudegou](https://github.com/buchuitoudegou) @[lance6716](https://github.com/lance6716) + + + TiDB Binlog + + - 修复遇到状态为 `CANCELED` 的 DDL 时 TiDB Binlog 报错的问题 [#1228](https://github.com/pingcap/tidb-binlog/issues/1228) @[okJiang](https://github.com/okJiang) diff --git a/releases/release-notes.md b/releases/release-notes.md index 3a6ed98eb008..103d08f43e25 100644 --- a/releases/release-notes.md +++ b/releases/release-notes.md @@ -21,6 +21,7 @@ TiDB 历史版本发布声明如下: ## 6.5 +- [6.5.3](/releases/release-6.5.3.md): 2023-06-14 - [6.5.2](/releases/release-6.5.2.md): 2023-04-21 - [6.5.1](/releases/release-6.5.1.md): 2023-03-10 - [6.5.0](/releases/release-6.5.0.md): 2022-12-29 diff --git a/releases/release-timeline.md b/releases/release-timeline.md index 566d4bace297..74396c60b91f 100644 --- a/releases/release-timeline.md +++ b/releases/release-timeline.md @@ -9,6 +9,7 @@ summary: 了解 TiDB 的版本发布时间线。 | 版本 | 发布日期 | | :--- | :--- | +| [6.5.3](/releases/release-6.5.3.md) | 2023-06-14 | | [7.1.0](/releases/release-7.1.0.md) | 2023-05-31 | | [6.5.2](/releases/release-6.5.2.md) | 2023-04-21 | | [6.1.6](/releases/release-6.1.6.md) | 2023-04-12 | From 3e9d0c5711ec51692317e16e4003af0ebe862abd Mon Sep 17 00:00:00 2001 From: CharlesCheung <61726649+CharlesCheung96@users.noreply.github.com> Date: Thu, 15 Jun 2023 11:23:08 +0800 Subject: [PATCH 181/257] fix deploy-ticdc (#14235) --- ticdc/deploy-ticdc.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ticdc/deploy-ticdc.md b/ticdc/deploy-ticdc.md index 060d8fbfc4e2..4197bc572c7c 100644 --- a/ticdc/deploy-ticdc.md +++ b/ticdc/deploy-ticdc.md @@ -60,7 +60,7 @@ cdc_servers: - host: 10.1.1.2 gc-ttl: 86400 data_dir: /tidb-data/cdc-8300 - - host: 10.0.1.4:8300 + - host: 10.0.1.4 gc-ttl: 86400 data_dir: /tidb-data/cdc-8300 ``` From 8180655a92368bddc0b77d0c990890670e1937d1 Mon Sep 17 00:00:00 2001 From: Ran Date: Thu, 15 Jun 2023 14:25:09 +0800 Subject: [PATCH 182/257] fix wrong sha256 checksum (#14243) --- download-ecosystem-tools.md | 2 +- pd-control.md | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/download-ecosystem-tools.md b/download-ecosystem-tools.md index 37da2fecb0c3..083cbfda8787 100644 --- a/download-ecosystem-tools.md +++ b/download-ecosystem-tools.md @@ -58,7 +58,7 @@ TiDB 工具包中包含了一些常用的 TiDB 工具,例如数据导出工具 | 安装包 | 操作系统 | 架构 | SHA256 校验和 | |:---|:---|:---|:---| -| `https://download.pingcap.org/em-enterprise-server-{version}-linux-amd64.tar.gz` | Linux | amd64 | `https://download.pingcap.org/em-enterprise-server-{version}-linux-amd64.sha256` | +| `https://download.pingcap.org/em-enterprise-server-{version}-linux-amd64.tar.gz` | Linux | amd64 | `https://download.pingcap.org/em-enterprise-server-{version}-linux-amd64.tar.gz.sha256` | > **注意:** > diff --git a/pd-control.md b/pd-control.md index a45918bd2200..d88383d1e550 100644 --- a/pd-control.md +++ b/pd-control.md @@ -23,8 +23,8 @@ PD Control 是 PD 的命令行工具,用于获取集群状态信息和调整 | 安装包 | 操作系统 | 架构 | SHA256 校验和 | | :------------------------------------------------------------------------ | :------- | :---- | :--------------------------------------------------------------- | -| `https://download.pingcap.org/tidb-community-server-{version}-linux-amd64.tar.gz` (pd-ctl) | Linux | amd64 | `https://download.pingcap.org/tidb-community-server-{version}-linux-amd64.sha256` | -| `https://download.pingcap.org/tidb-community-server-{version}-linux-arm64.tar.gz` (pd-ctl) | Linux | arm64 | `https://download.pingcap.org/tidb-community-server-{version}-linux-arm64.sha256` | +| `https://download.pingcap.org/tidb-community-server-{version}-linux-amd64.tar.gz` (pd-ctl) | Linux | amd64 | `https://download.pingcap.org/tidb-community-server-{version}-linux-amd64.tar.gz.sha256` | +| `https://download.pingcap.org/tidb-community-server-{version}-linux-arm64.tar.gz` (pd-ctl) | Linux | arm64 | `https://download.pingcap.org/tidb-community-server-{version}-linux-arm64.tar.gz.sha256` | > **注意:** > From 5a545788fd8b98d3970192169cede5a6020e9cf4 Mon Sep 17 00:00:00 2001 From: TomShawn <41534398+TomShawn@users.noreply.github.com> Date: Thu, 15 Jun 2023 17:13:10 +0800 Subject: [PATCH 183/257] functions-and-operators: Improve format, add vitess_hash (#12571) --- .../date-and-time-functions.md | 24 +++ functions-and-operators/tidb-functions.md | 193 +++--------------- 2 files changed, 54 insertions(+), 163 deletions(-) diff --git a/functions-and-operators/date-and-time-functions.md b/functions-and-operators/date-and-time-functions.md index 48c4c22f6c5c..e6aaa11970c8 100644 --- a/functions-and-operators/date-and-time-functions.md +++ b/functions-and-operators/date-and-time-functions.md @@ -7,6 +7,11 @@ aliases: ['/docs-cn/dev/functions-and-operators/date-and-time-functions/','/docs TiDB 支持使用 MySQL 5.7 中提供的所有[日期和时间函数](https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html)。 +> **注意:** +> +> - MySQL 常常会接受格式不正确的日期和时间值。例如,`'2020-01-01\n\t01:01:01'` 和 `'2020-01_01\n\t01:01'` 被视为有效的日期和时间值。 +> - TiDB 会尽量与 MySQL 的行为保持一致,但可能无法在所有情况下完全匹配。建议使用正确的格式化日期,TiDB 文档中未记录将如何处理格式不正确的值。 + ## 日期时间函数表 | 函数名 | 功能描述 | @@ -72,6 +77,25 @@ TiDB 支持使用 MySQL 5.7 中提供的所有[日期和时间函数](https://de | [`YEAR()`](https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_year) | 返回参数对应的年数| | [`YEARWEEK()`](https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_yearweek) | 返回年数和星期数 | +## MySQL 兼容性 + +TiDB 支持 `str_to_date()` 函数,但是无法解析所有的日期和时间值。此外,TiDB 不支持以下日期和时间格式化选项: + +| 格式 | 说明 | +|--------|---------------------------------------------------------------------------------------| +| "%a" | 星期名的缩写(例如 Sun..Sat) | +| "%D" | 带英文后缀的月份日期(例如 0th,1st,2nd,3rd) | +| "%U" | 星期 (00..53),星期日是每周的第一天;WEEK() mode 0 | +| "%u" | 星期 (00..53),星期一是每周的第一天;WEEK() mode 1 | +| "%V" | 星期 (01..53),星期日是每周的第一天;WEEK() mode 2;和 "%X" 一起使用 | +| "%v" | 星期 (01..53),星期一是每周的第一天;WEEK() mode 3;和 "%x" 一起使用 | +| "%W" | 星期名(例如 Sunday..Saturday) | +| "%w" | 一周中的天名 (0=Sunday..6=Saturday) | +| "%X" | 星期天是每周第一天的年份,数字类型,四位数字 | +| "%x" | 星期一是每周第一天的年份,数字类型,四位数字 | + +更多信息,参见 [GitHub Issue #30082](https://github.com/pingcap/tidb/issues/30082)。 + ## 相关系统变量 `default_week_format` 变量影响 `WEEK()` 函数。 diff --git a/functions-and-operators/tidb-functions.md b/functions-and-operators/tidb-functions.md index 64d273e202e5..d4e8b3efd503 100644 --- a/functions-and-operators/tidb-functions.md +++ b/functions-and-operators/tidb-functions.md @@ -5,27 +5,29 @@ summary: 学习使用 TiDB 特有的函数。 # TiDB 特有的函数 -本文档介绍 TiDB 特有的函数。 +以下函数为 TiDB 中特有的函数,与 MySQL 不兼容: -## TIDB_BOUNDED_STALENESS +| 函数名 | 函数说明 | +| :-------------- | :------------------------------------- | +| `TIDB_BOUNDED_STALENESS()` | `TIDB_BOUNDED_STALENESS` 函数指示 TiDB 在指定时间范围内读取尽可能新的数据。参见[使用 AS OF TIMESTAMP 语法读取历史数据](/as-of-timestamp.md)。 | +| [`TIDB_DECODE_KEY(str)`](#tidb_decode_key) | `TIDB_DECODE_KEY` 函数用于将 TiDB 编码的键输入解码为包含 `_tidb_rowid` 和 `table_id` 的 JSON 结构。你可以在一些系统表和日志输出中找到 TiDB 的编码键。 | +| [`TIDB_DECODE_PLAN(str)`](#tidb_decode_plan) | `TIDB_DECODE_PLAN` 函数用于解码 TiDB 执行计划。 | +| `TIDB_IS_DDL_OWNER()` | `TIDB_IS_DDL_OWNER` 函数用于检查你连接的 TiDB 实例是否是 DDL Owner。DDL Owner 代表集群中所有其他节点执行 DDL 语句的 TiDB 实例。 | +| [`TIDB_PARSE_TSO(num)`](#tidb_parse_tso) | `TIDB_PARSE_TSO` 函数用于从 TiDB TSO 时间戳中提取物理时间戳。参见 [`tidb_current_ts`](/system-variables.md#tidb_current_ts)。 | +| [`TIDB_VERSION()`](#tidb_version) | `TIDB_VERSION` 函数用于获取当前连接的 TiDB 服务器版本和构建详细信息。 | +| [`TIDB_DECODE_SQL_DIGESTS(digests, stmtTruncateLength)`](#tidb_decode_sql_digests) | `TIDB_DECODE_SQL_DIGESTS` 函数用于在集群中查询一组 SQL Digest 所对应的 SQL 语句的归一化形式(即去除格式和参数后的形式)。 | +| `VITESS_HASH(str)` | `VITESS_HASH` 函数返回与 Vitess 的 `HASH` 函数兼容的字符串哈希值,有助于从 Vitess 迁移数据。 | +| `TIDB_SHARD()` | `TIDB_SHARD` 函数用于创建一个 SHARD INDEX 来打散热点索引。SHARD INDEX 是一种以 `TIDB_SHARD` 函数为前缀的表达式索引。 | +| `TIDB_ROW_CHECKSUM()` | `TIDB_ROW_CHECKSUM()` 函数用于查询行数据的 Checksum 值。该函数只能用于 FastPlan 流程的 `SELECT` 语句,即你可通过形如 `SELECT TIDB_ROW_CHECKSUM() FROM t WHERE id = ?` 或 `SELECT TIDB_ROW_CHECKSUM() FROM t WHERE id IN (?, ?, ...)` 的语句进行查询。参见[数据正确性校验](/ticdc/ticdc-integrity-check.md)。 | -`TIDB_BOUNDED_STALENESS` 是 TiDB 的内部函数,用于指定一个时间范围。用法为 `TIDB_BOUNDED_STALENESS(t1, t2)`,其中 t1 和 t2 为时间范围的两端,支持使用日期时间和时间函数。 +## 示例 -使用该函数,TiDB 会在指定的时间范围内选择一个合适的时间戳,该时间戳能保证所访问的副本上不存在开始于这个时间戳之前且还没有提交的相关事务,即能保证所访问的可用副本上执行读取操作而且不会被阻塞。 +下面为部分以上函数的示例。 -## TIDB_DECODE_KEY +### TIDB_DECODE_KEY `TIDB_DECODE_KEY` 函数用于将 TiDB 编码的键输入解码为包含 `_tidb_rowid` 和 `table_id` 的 JSON 结构。你可以在一些系统表和日志输出中找到 TiDB 的编码键。 -### 语法图 - -```ebnf+diagram -TableStmt ::= - "TIDB_DECODE_KEY(" STR ")" -``` - -### 示例 - 以下示例中,表 `t1` 有一个隐藏的 `rowid`,该 `rowid` 由 TiDB 生成。语句中使用了 `TIDB_DECODE_KEY` 函数。结果显示,隐藏的 `rowid` 被解码后并输出,这是典型的非聚簇主键结果。 {{< copyable "sql" >}} @@ -104,24 +106,11 @@ select tidb_decode_key('7480000000000000FF3E5F720400000000FF0000000601633430FF33 1 row in set (0.001 sec) ``` -### MySQL 兼容性 - -`TIDB_DECODE_KEY` 是 TiDB 特有的函数,和 MySQL 不兼容。 +### TIDB_DECODE_PLAN -## TIDB_DECODE_PLAN +你可以在慢查询日志中找到编码形式的 TiDB 执行计划,然后使用 `TIDB_DECODE_PLAN()` 函数将编码的执行计划解码为易读的形式。 -`TIDB_DECODE_PLAN` 函数用于解码 TiDB 执行计划。你可以在慢查询日志中找到 TiDB 执行计划。 - -### 语法图 - -```ebnf+diagram -TableStmt ::= - "TIDB_DECODE_PLAN(" STR ")" -``` - -### 示例 - -{{< copyable "sql" >}} +该函数很有用,因为在执行语句时 TiDB 会捕获执行计划。重新执行 `EXPLAIN` 中的语句可能会产生不同的结果,因为数据分布和统计数据会随着时间的推移而变化。 ```sql SELECT tidb_decode_plan('8QIYMAkzMV83CQEH8E85LjA0CWRhdGE6U2VsZWN0aW9uXzYJOTYwCXRpbWU6NzEzLjHCtXMsIGxvb3BzOjIsIGNvcF90YXNrOiB7bnVtOiAxLCBtYXg6IDU2OC41wgErRHByb2Nfa2V5czogMCwgcnBjXxEpAQwFWBAgNTQ5LglZyGNvcHJfY2FjaGVfaGl0X3JhdGlvOiAwLjAwfQkzLjk5IEtCCU4vQQoxCTFfNgkxXzAJMwm2SGx0KHRlc3QudC5hLCAxMDAwMCkNuQRrdgmiAHsFbBQzMTMuOMIBmQnEDDk2MH0BUgEEGAoyCTQzXzUFVwX1oGFibGU6dCwga2VlcCBvcmRlcjpmYWxzZSwgc3RhdHM6cHNldWRvCTk2ISE2aAAIMTUzXmYA')\G @@ -135,69 +124,15 @@ SELECT tidb_decode_plan('8QIYMAkzMV83CQEH8E85LjA0CWRhdGE6U2VsZWN0aW9uXzYJOTYwCXR └─TableFullScan_5 cop[tikv] 960 table:t, keep order:false, stats:pseudo 960 tikv_task:{time:153µs, loops:960} N/A N/A ``` -### MySQL 兼容性 - -`TIDB_DECODE_PLAN` 是 TiDB 特有的函数,和 MySQL 不兼容。 - -## TIDB_IS_DDL_OWNER - -`TIDB_IS_DDL_OWNER` 函数用于检查你连接的 TiDB 实例是否是 DDL Owner。DDL Owner 代表集群中所有其他节点执行 DDL 语句的 TiDB 实例。 - -### 语法图 - -```ebnf+diagram -TableStmt ::= - "TIDB_IS_DDL_OWNER())" -``` - -### 示例 - -{{< copyable "sql" >}} - -```sql -SELECT tidb_is_ddl_owner(); -``` - -```sql -+---------------------+ -| tidb_is_ddl_owner() | -+---------------------+ -| 1 | -+---------------------+ -1 row in set (0.00 sec) -``` - -### MySQL 兼容性 - -`TIDB_IS_DDL_OWNER` 是 TiDB 特有的函数,和 MySQL 不兼容。 - -### 另请参阅 - -- [ADMIN SHOW DDL](/sql-statements/sql-statement-admin-show-ddl.md) -- [ADMIN CANCEL DDL](/sql-statements/sql-statement-admin-cancel-ddl.md) - -## TIDB_PARSE_TSO +### TIDB_PARSE_TSO `TIDB_PARSE_TSO` 函数用于从 TiDB TSO 时间戳中提取物理时间戳。 -TSO 指 Time Stamp Oracle,是 PD (Placement Driver) 为每个事务提供的单调递增的时间戳。 - -TSO 是一串数字,包含以下两部分: +TSO 指 Time Stamp Oracle,是 PD (Placement Driver) 为每个事务提供的单调递增的时间戳。TSO 是一串数字,包含以下两部分: - 一个物理时间戳 - 一个逻辑计数器 -### 语法图 - -```ebnf+diagram -TableStmt ::= - "TIDB_PARSE_TSO(" NUM ")" -``` - -### 示例 - -{{< copyable "sql" >}} - ```sql BEGIN; SELECT TIDB_PARSE_TSO(@@tidb_current_ts); @@ -215,29 +150,10 @@ ROLLBACK; 以上示例使用 `TIDB_PARSE_TSO` 函数从 `tidb_current_ts` 会话变量提供的可用时间戳编号中提取物理时间戳。因为每个事务都会分配到时间戳,所以此函数在事务中运行。 -### MySQL 兼容性 - -`TIDB_PARSE_TSO` 是 TiDB 特有的函数,和 MySQL 不兼容。 - -### 另请参阅 - -- [`tidb_current_ts`](/system-variables.md#tidb_current_ts) - -## TIDB_VERSION +### TIDB_VERSION `TIDB_VERSION` 函数用于获取当前连接的 TiDB 服务器版本和构建详细信息。向 GitHub 上提交 issue 时,你可使用此函数获取相关信息。 -### 语法图 - -```ebnf+diagram -TableStmt ::= - "TIDB_VERSION()" -``` - -### 示例 - -{{< copyable "sql" >}} - ```sql SELECT TIDB_VERSION()\G ``` @@ -256,13 +172,9 @@ Check Table Before Drop: false 1 row in set (0.00 sec) ``` -### MySQL 兼容性 - -`TIDB_VERSION` 是 TiDB 特有的函数,和 MySQL 不兼容。如果要求兼容 MySQL,可以使用 `VERSION` 获取版本信息,但结果不包含详细的构建信息。 - -## TIDB_DECODE_SQL_DIGESTS +### TIDB_DECODE_SQL_DIGESTS -`TIDB_DECODE_SQL_DIGESTS` 函数用于在集群中查询一组 SQL Digest 所对应的 SQL 语句的归一化形式(即去除格式和参数后的形式)。函数接受 1 个或 2 个参数: +`TIDB_DECODE_SQL_DIGESTS()` 函数用于在集群中查询一组 SQL Digest 所对应的 SQL 语句的归一化形式(即去除格式和参数后的形式)。函数接受 1 个或 2 个参数: * `digests`:字符串类型,该参数应符合 JSON 字符串数组的格式,数组中的每个字符串应为一个 SQL Digest。 * `stmtTruncateLength`:可选参数,整数类型,用来限制返回结果中每条 SQL 语句的长度,超过指定的长度会被截断。0 表示不限制长度。 @@ -276,17 +188,6 @@ Check Table Before Drop: false > * 该函数开销较大,在行数很多的查询中(比如在规模较大、比较繁忙的集群上查询 `information_schema.cluster_tidb_trx` 全表时)直接使用该函数可能导致查询运行时间较长。请谨慎使用。 > * 该函数开销大的原因是,其每次被调用时,都会在内部发起对 `STATEMENTS_SUMMARY`、`STATEMENTS_SUMMARY_HISTORY`、`CLUSTER_STATEMENTS_SUMMARY` 和 `CLUSTER_STATEMENTS_SUMMARY_HISTORY` 这几张表的查询,且其中涉及 `UNION` 操作。且该函数目前不支持向量化,即对于多行数据调用该函数时,对每行都会独立进行一次上述的查询。 -### 语法图 - -```ebnf+diagram -DecodeSQLDigestsExpr ::= - "TIDB_DECODE_SQL_DIGESTS" "(" digests ( "," stmtTruncateLength )? ")" -``` - -### 示例 - -{{< copyable "sql" >}} - ```sql set @digests = '["e6f07d43b5c21db0fbb9a31feac2dc599787763393dd5acbfad80e247eb02ad5","38b03afa5debbdf0326a014dbe5012a62c51957f1982b3093e748460f8b00821","e5796985ccafe2f71126ed6c0ac939ffa015a8c0744a24b7aee6d587103fd2f7"]'; @@ -304,8 +205,6 @@ select tidb_decode_sql_digests(@digests); 上面的例子中,参数是一个包含 3 个 SQL Digest 的 JSON 数组,其对应的 SQL 语句分别为查询结果中给出的三项。但是其中第二条 SQL Digest 所对应的 SQL 语句未能从集群中找到,因而结果中的第二项为 `null`。 -{{< copyable "sql" >}} - ```sql select tidb_decode_sql_digests(@digests, 10); ``` @@ -321,21 +220,15 @@ select tidb_decode_sql_digests(@digests, 10); 上述调用指定了第二个参数(即截断长度)为 10,而查询结果中的第三条语句的长度大于 10,因而仅保留了前 10 个字符,并在尾部添加了 `"..."` 表示发生了截断。 -### MySQL 兼容性 - -`TIDB_DECODE_SQL_DIGESTS` 是 TiDB 特有的函数,和 MySQL 不兼容。 - -### 另请参阅 +另请参阅: - [`Statement Summary Tables`](/statement-summary-tables.md) - [`INFORMATION_SCHEMA.TIDB_TRX`](/information-schema/information-schema-tidb-trx.md) -## TIDB_SHARD +### TIDB_SHARD `TIDB_SHARD` 函数用于创建一个 SHARD INDEX 来打散热点索引。SHARD INDEX 是一种以 `TIDB_SHARD` 函数为前缀的表达式索引。 -### SHARD INDEX - - 创建方式: 使用 `uk((tidb_shard(a)), a))` 为字段 `a` 创建一个 SHARD INDEX。当二级唯一索引 `uk((tidb_shard(a)), a))` 的索引字段 `a` 上存在因单调递增或递减而产生的热点时,索引的前缀 `tidb_shard(a)` 会打散热点,从而提升集群可扩展性。 @@ -358,14 +251,7 @@ select tidb_decode_sql_digests(@digests, 10); - SHARD INDEX 无法走 FastPlan 流程,影响优化器性能。 - SHARD INDEX 无法使用执行计划缓存。 -### 语法图 - -```ebnf+diagram -TIDBShardExpr ::= - "TIDB_SHARD" "(" expr ")" -``` - -### 示例 +`TIDB_SHARD` 函数的使用示例如下: - 使用 `TIDB_SHARD` 函数计算 SHARD 值 @@ -396,23 +282,10 @@ TIDBShardExpr ::= CREATE TABLE test(id INT PRIMARY KEY CLUSTERED, a INT, b INT, UNIQUE KEY uk((tidb_shard(a)), a)); ``` -### MySQL 兼容性 - -`TIDB_SHARD` 是 TiDB 特有的函数,和 MySQL 不兼容。 - -## TIDB_ROW_CHECKSUM +### TIDB_ROW_CHECKSUM `TIDB_ROW_CHECKSUM` 函数用于查询行数据的 Checksum 值。该函数只能用于 FastPlan 流程的 `SELECT` 语句,即你可通过形如 `SELECT TIDB_ROW_CHECKSUM() FROM t WHERE id = ?` 或 `SELECT TIDB_ROW_CHECKSUM() FROM t WHERE id IN (?, ?, ...)` 的语句进行查询。 -### 语法图 - -```ebnf+diagram -TableStmt ::= - "TIDB_ROW_CHECKSUM()" -``` - -### 示例 - 在 TiDB 中开启行数据 Checksum 功能 [`tidb_enable_row_level_checksum`](/system-variables.md#tidb_enable_row_level_checksum-从-v710-版本开始引入): ```sql @@ -433,6 +306,8 @@ INSERT INTO TABLE t values (1, 10, a); SELECT *, TIDB_ROW_CHECKSUM() FROM t WHERE id = 1; ``` +输出结果如下: + ```sql +----+------+------+---------------------+ | id | k | c | TIDB_ROW_CHECKSUM() | @@ -441,11 +316,3 @@ SELECT *, TIDB_ROW_CHECKSUM() FROM t WHERE id = 1; +----+------+------+---------------------+ 1 row in set (0.000 sec) ``` - -### MySQL 兼容性 - -`TIDB_ROW_CHECKSUM` 是 TiDB 特有的函数,和 MySQL 不兼容。 - -### 另请参阅 - -- [数据正确性校验](/ticdc/ticdc-integrity-check.md) \ No newline at end of file From f9bdf38a47222b29a73a68df872b17840e71a90f Mon Sep 17 00:00:00 2001 From: Ran Date: Fri, 16 Jun 2023 10:37:09 +0800 Subject: [PATCH 184/257] *: add TiDB roadmap (#13942) --- TOC.md | 1 + _index.md | 2 + tidb-roadmap.md | 330 ++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 333 insertions(+) create mode 100644 tidb-roadmap.md diff --git a/TOC.md b/TOC.md index 521665d08a9a..ee49c73edf32 100644 --- a/TOC.md +++ b/TOC.md @@ -9,6 +9,7 @@ - [与 MySQL 的兼容性](/mysql-compatibility.md) - [使用限制](/tidb-limitations.md) - [荣誉列表](/credits.md) + - [路线图](/tidb-roadmap.md) - 快速上手 - [快速上手 TiDB](/quick-start-with-tidb.md) - [快速上手 HTAP](/quick-start-with-htap.md) diff --git a/_index.md b/_index.md index 836df438c97e..df0f0f1dd220 100644 --- a/_index.md +++ b/_index.md @@ -121,6 +121,8 @@ hide_commit: true +[TiDB 路线图](https://docs.pingcap.com/zh/tidb/dev/tidb-roadmap) + [TiDB 配置文件参数](https://docs.pingcap.com/zh/tidb/dev/tidb-configuration-file) [TiDB 命令行参数](https://docs.pingcap.com/zh/tidb/dev/command-line-flags-for-tidb-configuration) diff --git a/tidb-roadmap.md b/tidb-roadmap.md new file mode 100644 index 000000000000..76658862e488 --- /dev/null +++ b/tidb-roadmap.md @@ -0,0 +1,330 @@ +--- +title: TiDB 路线图 +summary: 了解 TiDB 未来的发展方向,包括新特性和改进提升。 +--- + +# TiDB 路线图 + +TiDB 路线图展示了 TiDB 未来的发展方向,包括新特性和改进提升。通过 TiDB 路线图,你可以预先了解 TiDB 的未来规划,跟踪进度,了解关键里程碑,并对开发工作提出反馈。在开发过程中,路线图可能会根据用户需求和反馈进行调整。如果你有功能需求,或者想提高某个特性的优先级,请在 [GitHub](https://github.com/pingcap/tidb/issues) 上提交 issue。 + +## TiDB 重要特性规划 + +
必需Logical Import Mode逻辑导入模式 information_schema.columns SELECT
Physical Import Mode物理导入模式 mysql.tidb SELECT
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
类别年中 LTS 版本年底 LTS 版本未来版本
+ 可扩展性与性能
增强性能 +
+
    +
  • + 通用执行计划缓存
    提升通用的读性能 +
  • +
    +
  • + 分区 Raft KV 存储引擎
    提供更快的写入速度、更快的扩缩容操作,支持更大的集群 +
  • +
    +
  • + TiFlash 性能提升
    优化 TiFlash,例如实现延迟物化和运行时过滤器 +
  • +
    +
  • + 最快的在线 DDL 分布式执行框架
    发布 DDL 分布式执行框架,支持快速完成在线 DDL 操作 +
  • +
    +
+
+
    +
  • + PB 级别的稳定性
    + 为海量数据提供可靠且稳定的性能 +
  • +
    +
  • + TiFlash 计算和存储分离架构 (自动缩放)
    + 实现弹性利用 HTAP 资源 +
  • +
    +
  • + 基于 S3 的 TiFlash 存储引擎 +
    降低共享存储成本 +
  • +
    +
+
+
    +
  • + 更强大的下一代存储引擎 +
  • +
    +
  • + 事务大小无限制 +
  • +
    +
  • + 支持多模型 +
  • +
    +
+
+ 稳定性与高可用 +
提升可靠性 +
+
    +
  • + 资源控制:资源组和后台任务支持流控和优先级调度
    + 稳定高效地管理共享集群的负载和业务 +
  • +
    +
  • + 增强 TiCDC 和 PITR 的恢复目标 +
    增加业务连续性,将系统故障的影响最小化 +
  • +
    +
  • + TiProxy +
    在集群升级、扩缩容时,保持应用与数据库的连接,避免影响业务 +
  • +
    +
  • + 端到端的数据正确性检查 +
    防止由 TiCDC 导致的数据错误或数据损坏 +
  • +
    +
+
+
    +
  • + 多租户 +
    提供细粒度的资源控制和隔离,降低成本 +
  • +
    +
  • + 提升集群级和节点级的容错能力 +
    增强集群的弹性 +
  • +
    +
  • + TiFlash 支持数据落盘 +
    避免 TiFlash 内存溢出 +
  • +
    +
+
+
    +
  • + 增强 TiDB 内存管理 +
  • +
    +
  • + 全局表 +
  • +
    +
+
+ SQL 功能 +
增强 SQL 功能和兼容性 +
+
    +
  • + 生产环境可用的 TTL (time-to-live) 数据生命周期控制 +
    通过自动清除过期数据,管理数据库大小,提升性能 +
  • +
    +
  • + 表级别的闪回 +
    支持通过 SQL 将单个表回退到指定的时间点 +
  • +
    +
+
+
    +
  • + 物化视图 +
    支持预计算以提高查询性能 +
  • +
    +
+
+
    +
  • + 联邦查询 +
  • +
    +
  • + Cascades 优化器 +
  • +
    +
  • + 全文搜索和 GIS 支持 +
  • +
    +
  • + 用户自定义函数 +
  • +
    +
+
+ 数据库管理与可观测性 +
增强数据库可管理性及其生态系统 +
+
    +
  • + TiCDC 支持分布式同步单表数据 +
    通过多个节点分布式执行同步负载,大幅提高 TiCDC 吞吐量 +
  • +
    +
  • + TiCDC 支持将 Amazon S3 和 Azure 对象存储作为生产级别的 sink +
    增强生态系统,更好地处理大数据 +
  • +
    +
  • + TiDB Operator 支持快速缩容 +
    从逐一缩容到批量快速缩容 +
  • +
    +
  • + 基于 SQL 的数据导入 +
    优化运维操作,对用户更友好 +
  • +
    +
+
+
    +
  • + 数据导入性能大幅提升 +
    预计提升 3~4 倍 +
  • +
    +
  • + TiCDC 支持多个上游数据源 +
    支持从多个 TiDB 集群到 TiCDC (N:1) +
  • +
    +
  • + 支持基于 SQL 的数据管理 +
    优化 TiCDC、DM 和 BR 等工具的数据管理方式 +
  • +
    +
  • + 升级期间自动暂停/恢复 DDL +
    提供平滑的升级体验 +
  • +
    +
+
+
    +
  • + AI 索引 +
  • +
    +
  • + 支持迁移异构数据库 +
  • +
    +
  • + 使用 AI 赋能 SQL 性能优化 +
  • +
+
+ 安全 +
增强数据安全与隐私 +
+
    +
  • + JWT 身份验证 +
    提供安全和标准的身份验证方式 +
  • +
    +
  • + LDAP 集成 +
    通过 TLS 在 LDAP 服务器进行身份验证 +
  • +
    +
  • + 增强审计日志 +
    + 审计日志中提供更多细节 +
  • +
    +
+
+
    +
  • + 行级或列级的访问控制 +
    + 更细粒度的权限控制 +
  • +
    +
  • + 统一的 TLS CA/密钥轮换策略 +
    提升所有 TiDB 组件的安全性和运维效率 +
  • +
    +
+
+
    +
  • + 增强客户端加密 +
  • +
    +
  • + 增强数据脱敏 +
  • +
    +
  • + 增强数据生命周期管理 +
  • +
    +
+
+ +上述表格中并未列出所有功能,当前规划可能会调整。不同的服务订阅版本中的功能可能有所不同。 + +## 近期已发布特性 + +- [TiDB 7.1.0 Release Notes](/releases/release-7.1.0.md) +- [TiDB 7.0.0 Release Notes](/releases/release-7.0.0.md) +- [TiDB 6.6.0 Release Notes](/releases/release-6.6.0.md) +- [TiDB 6.5.0 Release Notes](/releases/release-6.5.0.md) From 34aa0a45832dcc7127a9c911bfac3bfcaf324452 Mon Sep 17 00:00:00 2001 From: Jianyuan Jiang Date: Fri, 16 Jun 2023 11:55:10 +0800 Subject: [PATCH 185/257] update ticdc acl (#14051) --- ticdc/ticdc-sink-to-kafka.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ticdc/ticdc-sink-to-kafka.md b/ticdc/ticdc-sink-to-kafka.md index b636b6d93190..86882a1e6dcf 100644 --- a/ticdc/ticdc-sink-to-kafka.md +++ b/ticdc/ticdc-sink-to-kafka.md @@ -135,7 +135,7 @@ URI 中可配置的的参数如下: TiCDC 能够正常工作所需的最小权限集合如下: - - 对 Topic [资源类型](https://docs.confluent.io/platform/current/kafka/authorization.html#resources)的 `Create` 和 `Write` 权限。 + - 对 Topic [资源类型](https://docs.confluent.io/platform/current/kafka/authorization.html#resources)的 `Create` 、`Write` 和 `Describe` 权限。 - 对 Cluster 资源类型的 `DescribeConfigs` 权限。 ### TiCDC 集成 Kafka Connect (Confluent Platform) From 082a5e21ef30aec82a0dec84d64df88338177327 Mon Sep 17 00:00:00 2001 From: hongyunyan <649330952@qq.com> Date: Fri, 16 Jun 2023 13:47:09 +0800 Subject: [PATCH 186/257] Update Warning Section For FastScan (#14190) --- tiflash/use-fastscan.md | 37 +++++++++++++++++++++++++++++++++++-- 1 file changed, 35 insertions(+), 2 deletions(-) diff --git a/tiflash/use-fastscan.md b/tiflash/use-fastscan.md index 2e8bd03b8338..768fa2a94412 100644 --- a/tiflash/use-fastscan.md +++ b/tiflash/use-fastscan.md @@ -12,6 +12,39 @@ aliases: ['/zh/tidb/dev/sql-statement-set-tiflash-mode/','/zh/tidb/dev/dev-guide 某些 OLAP 对查询结果精度可以容忍一定误差。如果对查询性能有更高要求,可以在 session 级别或 global 级别开启 FastScan 功能,你可以通过修改变量 `tiflash_fastscan` 的值来选择是否启用 FastScan 功能。 +## 使用限制 + +当开启 FastScan 功能时,查询结果可能会包含表中的旧数据,即相同主键的多个历史版本的数据或者已经删除的数据。如下所示: + +```sql +CREATE TABLE t1 (a INT PRIMARY KEY, b INT); +ALTER TABLE t1 SET TIFLASH REPLICA 1; +INSERT INTO t1 VALUES(1,2); +INSERT INTO t1 VALUES(10,20); +UPDATE t1 SET b = 4 WHERE a = 1; +DELETE FROM t1 WHERE a = 10; +SET SESSION tidb_isolation_read_engines='tiflash'; + +SELECT * FROM t1; ++------+------+ +| a | b | ++------+------+ +| 1 | 4 | ++------+------+ + +SET SESSION tiflash_fastscan=ON; +SELECT * FROM t1; ++------+------+ +| a | b | ++------+------+ +| 1 | 2 | +| 1 | 4 | +| 10 | 20 | ++------+------+ +``` + +对于这些旧数据,TiFlash 在后台会自动发起数据整理(Compaction)。当这些旧数据已经被后台整理且它们的数据版本小于 GC safe point 之后,才会被物理清理。此后在 FastScan 模式下将不再返回这些数据。旧数据被整理的时机受多种因素的自动触发,你也可以通过 [`ALTER TABLE ... COMPACT`](/sql-statements/sql-statement-alter-table-compact.md) 手动触发数据整理。 + ## 启用和禁用 FastScan 默认情况下,session 和 global 级别的变量 `tiflash_fastscan=OFF`,即没有开启 FastScan 功能。你可以通过以下语句来查看对应的变量信息。 @@ -66,8 +99,8 @@ TiFlash 存储层的数据主要存放在 Delta 层和 Stable 层。 在默认状态下(即未开启 FastScan 功能),TableScan 算子过程整体包括了以下步骤: 1. Read data:在 Delta 层和 Stable 层分别建立数据流,进行各自数据的读取。 -2. Sort Merge:将步骤 1 中建立的数据流进行合并,并且将数据按照 (handle, version) 顺序排列返回。 +2. Sort Merge:将步骤 1 中建立的数据流进行合并,并且将数据按照 (主键列,时间戳列) 顺序排列返回。 3. Range Filter:根据读取范围限制,对步骤 2 中的数据进行过滤筛选并返回。 -4. MVCC + Column Filter:对步骤 3 中的数据进行 MVCC 过滤,同时过滤掉不需要的列并返回。 +4. MVCC + Column Filter:对步骤 3 中的数据进行 MVCC 过滤(即依照查询需要的数据版本,根据主键列以及时间戳列筛选出正确的数据版本),同时进行 Column 过滤(即过滤掉查询请求中不需要的列)并返回。 FastScan 通过损失一定的数据一致性来获取更快的查询性能。FastScan 中的 TableScan 流程省略了上述过程中的第 2 步和第 4 步中 MVCC 的部分,从而提高查询性能。 \ No newline at end of file From cf63a860fd9ce1f42c0a8bd488d78c866f9fec5a Mon Sep 17 00:00:00 2001 From: Frank945946 <108602632+Frank945946@users.noreply.github.com> Date: Fri, 16 Jun 2023 13:49:09 +0800 Subject: [PATCH 187/257] lightning: refined description about duplicate-resolution (#14258) --- tidb-lightning/tidb-lightning-configuration.md | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/tidb-lightning/tidb-lightning-configuration.md b/tidb-lightning/tidb-lightning-configuration.md index c28fd2384f11..91628721a636 100644 --- a/tidb-lightning/tidb-lightning-configuration.md +++ b/tidb-lightning/tidb-lightning-configuration.md @@ -128,11 +128,13 @@ addr = "172.16.31.10:8287" # on-duplicate = "replace" # 物理导入模式设置是否检测和解决重复的记录(唯一键冲突)。 -# 目前支持三种解决方法: -# - record: 数据写入目标表后,将目标表中重复记录添加到目标 TiDB 中的 `lightning_task_info.conflict_error_v1` 表中。 -# 注意,该方法要求目标 TiKV 的版本为 v5.2.0 或更新版本。如果版本过低,则会启用下面的 'none' 模式。 -# - none: 不检测重复记录。该模式是三种模式中性能最佳的,但是如果数据源存在重复记录,会导致 TiDB 中出现数据不一致的情况。 -# - remove: 记录所有目标表中的重复记录,和 'record' 模式相似。但是会删除目标表所有的重复记录,以确保目标 TiDB 中的数据状态保持一致。 +# 目前支持两种解决方法: +# - none: 不检测重复记录。该模式是两种模式中性能最佳的,但是如果数据源存在重复记录,会导致 TiDB 中出现数据不一致的情况。 +# - remove:如果写入的数据 A 和 B 存在 Primary Key 或 Unique Key 冲突, +# 则会将 A 和 B 这两条冲突数据从目标表移除,同时记录到目标 TiDB 中的 `lightning_task_info.conflict_error_v1` 表中。 +# 你可以根据业务需求选择正确的记录重新手动写入到目标表中。注意,该方法要求目标 TiKV 的版本为 v5.2.0 或更新版本。 +# 如果版本过低,则会启用 'none' 模式。 +# 默认值为 'none'。 # duplicate-resolution = 'none' # 物理导入模式一次请求中发送的 KV 数量。 # send-kv-pairs = 32768 From b9b58bc90b6e7b7179cca4629764d692ed9ef2f9 Mon Sep 17 00:00:00 2001 From: Jianyuan Jiang Date: Mon, 19 Jun 2023 17:33:10 +0800 Subject: [PATCH 188/257] update ticdc faq (#13895) --- ticdc/ticdc-faq.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ticdc/ticdc-faq.md b/ticdc/ticdc-faq.md index 6723b051ccfd..f0534a681cac 100644 --- a/ticdc/ticdc-faq.md +++ b/ticdc/ticdc-faq.md @@ -271,7 +271,7 @@ TiCDC 需要磁盘是为了缓冲上游写入高峰时下游消费不及时堆 ## 在两个异地 TiDB 集群之间同步数据,如何部署 TiCDC? -建议将 TiCDC 部署在下游 TiDB 集群。这是因为,如果上下游网络延迟较大,例如超过 100 ms 时,由于 MySQL 传输协议的原因,TiCDC 向下游执行 SQL 的延迟会急剧增加,导致系统的吞吐下降。部署在下游能够极大缓解该问题。 +对于 v6.5.2 之前的版本,建议将 TiCDC 部署在下游 TiDB 集群。这是因为,如果上下游网络延迟较大,例如超过 100 ms 时,由于 MySQL 传输协议的原因,TiCDC 向下游执行 SQL 的延迟会急剧增加,导致系统的吞吐下降。部署在下游能够极大缓解该问题。经过优化后,v6.5.2 及之后的版本建议将 TiCDC 部署在上游集群。 ## 如何理解 DML 和 DDL 语句之间的执行顺序? From 25cc719040e8d1a0ee5dfdf31aea27ecac4a78ac Mon Sep 17 00:00:00 2001 From: Benjamin2037 Date: Tue, 20 Jun 2023 11:52:11 +0800 Subject: [PATCH 189/257] Change the description for max_execution_time. (#14282) --- develop/dev-guide-timeouts-in-tidb.md | 4 ++-- system-variables.md | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/develop/dev-guide-timeouts-in-tidb.md b/develop/dev-guide-timeouts-in-tidb.md index 053e3829f355..68e503fa860f 100644 --- a/develop/dev-guide-timeouts-in-tidb.md +++ b/develop/dev-guide-timeouts-in-tidb.md @@ -26,7 +26,7 @@ TiDB 的事务的实现采用了 MVCC(多版本并发控制)机制,当新 ## SQL 执行时间超时 -TiDB 还提供了一个系统变量来限制单条 SQL 语句的执行时间:max_execution_time,它的默认值为 0,表示无限制。`max_execution_time` 目前对所有类型的 statement 生效,并非只对 SELECT 语句生效。其单位为 ms,但实际精度在 100ms 级别,而非更准确的毫秒级别。 +TiDB 还提供了一个系统变量来限制单条 SQL 语句的执行时间,仅对“只读”语句生效:`max_execution_time`,它的默认值为 0,表示无限制。`max_execution_time` 的单位为 ms,但实际精度在 100ms 级别,而非更准确的毫秒级别。 ## JDBC 查询超时 @@ -36,6 +36,6 @@ TiDB 提供了三个与 MySQL 兼容的超时控制参数: - **wait_timeout**,控制与 Java 应用连接的非交互式空闲超时时间。在 TiDB v5.4 及以上版本中,默认值为 `28800` 秒,即空闲超时为 8 小时。在 v5.4 之前,默认值为 `0`,即没有时间限制。 - **interactive_timeout**,控制与 Java 应用连接的交互式空闲超时时间,默认值为 8 小时。 -- **max_execution_time**,控制连接中 SQL 执行的超时时间,默认值是 0,即允许连接无限忙碌(一个 SQL 语句执行无限的长的时间)。 +- **max_execution_time**,控制连接中 SQL 执行的超时时间,仅对“只读”语句生效,默认值是 0,即允许连接无限忙碌(一个 SQL 语句执行无限的长的时间)。 但在实际生产环境中,空闲连接和一直无限执行的 SQL 对数据库和应用都有不好的影响。你可以通过在应用的连接字符串中配置这两个 session 级的变量来避免空闲连接和执行时间过长的 SQL 语句。例如,设置 `sessionVariables=wait_timeout=3600(1 小时)`和 `sessionVariables=max_execution_time=300000(5 分钟)`。 diff --git a/system-variables.md b/system-variables.md index 3e713637fdbf..ba4a697fbf06 100644 --- a/system-variables.md +++ b/system-variables.md @@ -539,7 +539,7 @@ mysql> SELECT * FROM t1; > **注意:** > -> - `max_execution_time` 目前对所有类型的语句生效,并非只对 `SELECT` 语句生效,与 MySQL 不同(只对`SELECT` 语句生效)。实际精度在 100ms 级别,而非更准确的毫秒级别。 +> - `max_execution_time` 目前只用于控制只读语句的最大执行时长,实际精度在 100ms 级别,而非更准确的毫秒级别。 > - 对于使用了 [`MAX_EXECUTION_TIME`](/optimizer-hints.md#max_execution_timen) Hint 的 SQL 语句,这些语句的最长执行时间将不受该变量限制,而是由该 Hint 进行限制。你也可以使用该 Hint 来创建 SQL 绑定,详情请参考 [SQL 操作常见问题](/faq/sql-faq.md#如何阻止特定的-sql-语句执行或者将某个-sql-语句加入黑名单)。 ### `max_prepared_stmt_count` From b32601b1bc368cbc7b7e0ed6dbd12fa40f6c03d1 Mon Sep 17 00:00:00 2001 From: Ran Date: Wed, 21 Jun 2023 16:04:12 +0800 Subject: [PATCH 190/257] *: remove the limit on single column data size (#14291) --- data-type-string.md | 8 ++++---- tidb-limitations.md | 6 ------ 2 files changed, 4 insertions(+), 10 deletions(-) diff --git a/data-type-string.md b/data-type-string.md index 759c166db17b..6e0781997f07 100644 --- a/data-type-string.md +++ b/data-type-string.md @@ -61,7 +61,7 @@ TINYTEXT [CHARACTER SET charset_name] [COLLATE collation_name] ### `MEDIUMTEXT` 类型 -类似于 [`TEXT`](#text-类型),区别在于最大列长度为 16,777,215。但由于 [TiDB 单列的限制](/tidb-limitations.md#单列的限制),TiDB 中默认单列存储最大不超过 6 MiB,可通过配置项将该限制调整至 120 MiB。 +类似于 [`TEXT`](#text-类型),区别在于最大列长度为 16,777,215。但由于 [`txn-entry-size-limit`](/tidb-configuration-file.md#txn-entry-size-limit-从-v50-版本开始引入) 的限制,TiDB 中默认单行存储最大不超过 6 MiB,可通过配置项将该限制调整至 120 MiB。 {{< copyable "sql" >}} @@ -71,7 +71,7 @@ MEDIUMTEXT [CHARACTER SET charset_name] [COLLATE collation_name] ### `LONGTEXT` 类型 -类似于 [`TEXT`](#text-类型),区别在于最大列长度为 4,294,967,295。但由于 [TiDB 单列的限制](/tidb-limitations.md#单列的限制),TiDB 中默认单列存储最大不超过 6 MiB,可通过配置项将该限制调整至 120 MiB。 +类似于 [`TEXT`](#text-类型),区别在于最大列长度为 4,294,967,295。但由于 [`txn-entry-size-limit`](/tidb-configuration-file.md#txn-entry-size-limit-从-v50-版本开始引入) 的限制,TiDB 中默认单行存储最大不超过 6 MiB,可通过配置项将该限制调整至 120 MiB。 {{< copyable "sql" >}} @@ -121,7 +121,7 @@ TINYBLOB ### `MEDIUMBLOB` 类型 -类似于 [`BLOB`](#blob-类型),区别在于最大列长度为 16,777,215。但由于 [TiDB 单列的限制](/tidb-limitations.md#单列的限制),TiDB 中默认单列存储最大不超过 6 MiB,可通过配置项将该限制调整至 120 MiB。 +类似于 [`BLOB`](#blob-类型),区别在于最大列长度为 16,777,215。但由于 [`txn-entry-size-limit`](/tidb-configuration-file.md#txn-entry-size-limit-从-v50-版本开始引入) 的限制,TiDB 中默认单行存储最大不超过 6 MiB,可通过配置项将该限制调整至 120 MiB。 {{< copyable "sql" >}} @@ -131,7 +131,7 @@ MEDIUMBLOB ### `LONGBLOB` 类型 -类似于 [`BLOB`](#blob-类型),区别在于最大列长度为 4,294,967,295。但由于 [TiDB 单列的限制](/tidb-limitations.md#单列的限制),TiDB 中默认单列存储最大不超过 6 MB,可通过配置项将该限制调整至 120 MiB。 +类似于 [`BLOB`](#blob-类型),区别在于最大列长度为 4,294,967,295。但由于 [`txn-entry-size-limit`](/tidb-configuration-file.md#txn-entry-size-limit-从-v50-版本开始引入) 的限制,TiDB 中默认单行存储最大不超过 6 MiB,可通过配置项将该限制调整至 120 MiB。 {{< copyable "sql" >}} diff --git a/tidb-limitations.md b/tidb-limitations.md index eb8c2141dd19..59e0f3b2c907 100644 --- a/tidb-limitations.md +++ b/tidb-limitations.md @@ -52,12 +52,6 @@ aliases: ['/docs-cn/dev/tidb-limitations/'] |:----------|:----------| | Size | 默认为 6 MiB,可通过 [`txn-entry-size-limit`](/tidb-configuration-file.md#txn-entry-size-limit-从-v50-版本开始引入) 配置项调至 120 MiB | -## 单列的限制 - -| 类型 | 最大限制(默认值) | -|:----------|:----------| -| Size | 默认为 6 MiB,可通过 [`txn-entry-size-limit`](/tidb-configuration-file.md#txn-entry-size-limit-从-v50-版本开始引入) 配置项调至 120 MiB | - ## 数据类型限制 | 类型 | 最大限制 | From 5034213d7e0b44b9133dff761dd5c974f0504895 Mon Sep 17 00:00:00 2001 From: Elsa <111482174+elsa0520@users.noreply.github.com> Date: Wed, 21 Jun 2023 16:16:12 +0800 Subject: [PATCH 191/257] change default value of `tidb_remove_orderby_in_subquery` to true (#14045) --- system-variables.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/system-variables.md b/system-variables.md index ba4a697fbf06..aa5ade011b6e 100644 --- a/system-variables.md +++ b/system-variables.md @@ -3552,7 +3552,7 @@ EXPLAIN FORMAT='brief' SELECT COUNT(1) FROM t WHERE a = 1 AND b IS NOT NULL; - 作用域:SESSION | GLOBAL - 是否持久化到集群:是 - 类型:布尔型 -- 默认值:`OFF` +- 默认值:在 v7.2.0 之前版本中为 `OFF`,在 v7.2.0 及之后版本中为 `ON`。 - 指定是否在子查询中移除 `ORDER BY` 子句。 ### `tidb_replica_read` 从 v4.0 版本开始引入 From c73ae4a75aab5dcabd750ef629cfbe88ac5af0e4 Mon Sep 17 00:00:00 2001 From: Yuanjia Zhang Date: Wed, 21 Jun 2023 16:17:43 +0800 Subject: [PATCH 192/257] planner: update the doc of SPM (#14205) --- optimizer-hints.md | 185 ++++++++++++++++++++++++++++++++++------- sql-plan-management.md | 5 +- 2 files changed, 159 insertions(+), 31 deletions(-) diff --git a/optimizer-hints.md b/optimizer-hints.md index 5ae0740bef1d..901791564a10 100644 --- a/optimizer-hints.md +++ b/optimizer-hints.md @@ -7,38 +7,10 @@ aliases: ['/docs-cn/dev/optimizer-hints/','/docs-cn/dev/reference/performance/op TiDB 支持 Optimizer Hints 语法,它基于 MySQL 5.7 中介绍的类似 comment 的语法,例如 `/*+ HINT_NAME(t1, t2) */`。当 TiDB 优化器选择的不是最优查询计划时,建议使用 Optimizer Hints。 -> **注意:** -> -> MySQL 命令行客户端在 5.7.7 版本之前默认清除了 Optimizer Hints。如果需要在这些早期版本的客户端中使用 `Hint` 语法,需要在启动客户端时加上 `--comments` 选项,例如 `mysql -h 127.0.0.1 -P 4000 -uroot --comments`。 +如果遇到 Hint 无法生效的情况,请参考[常见 Hint 不生效问题排查](#常见-hint-不生效问题排查)。 ## 语法 -> **注意:** -> -> 如果需要提示优化器使用的表不在 `USE DATABASE` 所指定的数据库内,需要显式指定数据库名。例如: -> -> ```sql -> tidb> SELECT /*+ HASH_JOIN(t2, t) */ * FROM t, test2.t2; -> Empty set, 1 warning (0.00 sec) -> -> tidb> SHOW WARNINGS; -> +---------+------+-------------------------------------------------------------------------------------------------------------------------------------------------------+ -> | Level | Code | Message | -> +---------+------+-------------------------------------------------------------------------------------------------------------------------------------------------------+ -> | Warning | 1815 | There are no matching table names for (t2) in optimizer hint /*+ HASH_JOIN(t2, t) */ or /*+ TIDB_HJ(t2, t) */. Maybe you can use the table alias name | -> +---------+------+-------------------------------------------------------------------------------------------------------------------------------------------------------+ -> 1 row in set (0.00 sec) -> -> tidb> SELECT /*+ HASH_JOIN(test2.t2, t) */ * FROM t, test2.t2; -> Empty set (0.00 sec) -> -> tidb> SELECT /*+ READ_FROM_STORAGE(TIFLASH[test1.t1,test2.t2]) */ t1.a FROM test1.t t1, test2.t t2 WHERE t1.a = t2.a; -> Empty set (0.00 sec) -> -> ``` -> -> 本文档中后续示例演示部分,皆是同一个数据库范围内的表。如果你使用的表不在同一个数据库内,请参照指示显式指定数据库名。 - Optimizer Hints 不区分大小写,通过 `/*+ ... */` 注释的形式跟在 `SELECT`、`UPDATE` 或 `DELETE` 关键字的后面。`INSERT` 关键字后不支持 Optimizer Hints。 多个不同的 Hint 之间需用逗号隔开,例如: @@ -814,3 +786,158 @@ SELECT /*+ NTH_PLAN(3) */ count(*) from t where a > 5; ```sql SELECT /*+ RESOURCE_GROUP(rg1) */ * FROM t limit 10; ``` + +## 常见 Hint 不生效问题排查 + +### MySQL 命令行客户端清除 Hint 导致不生效 + +MySQL 命令行客户端在 5.7.7 版本之前默认清除了 Optimizer Hints。如果需要在这些早期版本的客户端中使用 Hint 语法,需要在启动客户端时加上 `--comments` 选项。例如 `mysql -h 127.0.0.1 -P 4000 -uroot --comments`。 + +### 创建连接时不指定库名导致 Hint 不生效 + +如果创建连接时未指定数据库名,则可能出现 Hint 失效的情况。例如: + +使用 `mysql -h127.0.0.1 -P4000 -uroot` 命令连接数据库时,未使用 `-D` 参数指定数据库名。然后执行下面的 SQL 语句: + +```sql +SELECT /*+ use_index(t, a) */ a FROM test.t; +SHOW WARNINGS; +``` + +由于无法识别表 `t` 对应的数据库名,因此 `use_index(t, a)` Hint 无法生效。 + +```sql ++---------+------+----------------------------------------------------------------------+ +| Level | Code | Message | ++---------+------+----------------------------------------------------------------------+ +| Warning | 1815 | use_index(.t, a) is inapplicable, check whether the table(.t) exists | ++---------+------+----------------------------------------------------------------------+ +1 row in set (0.00 sec) +``` + +### 跨库查询不指定库名导致 Hint 不生效 + +对于跨库查询中需要访问的表,需要显式地指定数据库名,否则可能出现 Hint 失效的情况。例如执行下面跨库查询的 SQL 语句: + +```sql +USE test1; +CREATE TABLE t1(a INT, KEY(a)); +USE test2; +CREATE TABLE t2(a INT, KEY(a)); +SELECT /*+ use_index(t1, a) */ * FROM test1.t1, t2; +SHOW WARNINGS; +``` + +由于 `t1` 不在当前数据库 `test2` 下,因此 `use_index(t1, a)` Hint 无法被正确地识别。 + +```sql ++---------+------+----------------------------------------------------------------------------------+ +| Level | Code | Message | ++---------+------+----------------------------------------------------------------------------------+ +| Warning | 1815 | use_index(test2.t1, a) is inapplicable, check whether the table(test2.t1) exists | ++---------+------+----------------------------------------------------------------------------------+ +1 row in set (0.00 sec) +``` + +此时,需要显式地指定库名,即将 `use_index(t1, a)` 修改为 `use_index(test1.t1, a)`。 + +### Hint 位置不正确导致不生效 + +如果没有按照 Optimizer Hints 语法将 Hint 正确地放在指定关键字的后面,它将无法生效。例如: + +```sql +SELECT * /*+ use_index(t, a) */ FROM t; +SHOW WARNINGS; +``` + +Warning 信息如下: + +```sql ++---------+------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| Level | Code | Message | ++---------+------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| Warning | 1064 | You have an error in your SQL syntax; check the manual that corresponds to your TiDB version for the right syntax to use [parser:8066]Optimizer hint can only be followed by certain keywords like SELECT, INSERT, etc. | ++---------+------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +1 row in set (0.01 sec) +``` + +在上面的示例中,你需要将 Hint 直接放在 `SELECT` 关键字之后。具体的语法规则参见 [Hint 语法](#语法)部分。 + +### 排序规则不兼容导致 `INL_JOIN` Hint 不生效 + +如果两个表的 Join key 的排序规则不能兼容,将无法使用 IndexJoin 来执行查询。此时 [`INL_JOIN` Hint](#inl_joint1_name--tl_name-) 将无法生效。例如: + +```sql +CREATE TABLE t1 (k varchar(8), key(k)) COLLATE=utf8mb4_general_ci; +CREATE TABLE t2 (k varchar(8), key(k)) COLLATE=utf8mb4_bin; +EXPLAIN SELECT /*+ tidb_inlj(t1) */ * FROM t1, t2 WHERE t1.k=t2.k; +``` + +查询计划输出结果如下: + +```sql ++-----------------------------+----------+-----------+----------------------+----------------------------------------------+ +| id | estRows | task | access object | operator info | ++-----------------------------+----------+-----------+----------------------+----------------------------------------------+ +| HashJoin_19 | 12487.50 | root | | inner join, equal:[eq(test.t1.k, test.t2.k)] | +| ├─IndexReader_24(Build) | 9990.00 | root | | index:IndexFullScan_23 | +| │ └─IndexFullScan_23 | 9990.00 | cop[tikv] | table:t2, index:k(k) | keep order:false, stats:pseudo | +| └─IndexReader_22(Probe) | 9990.00 | root | | index:IndexFullScan_21 | +| └─IndexFullScan_21 | 9990.00 | cop[tikv] | table:t1, index:k(k) | keep order:false, stats:pseudo | ++-----------------------------+----------+-----------+----------------------+----------------------------------------------+ +5 rows in set, 1 warning (0.00 sec) +``` + +上面的 SQL 语句中 `t1.k` 和 `t2.k` 的排序规则不能相互兼容(分别为 `utf8mb4_general_ci` 和 `utf8mb4_bin`),导致 IndexJoin 无法适用。因此 `INL_JOIN` 或 `TIDB_INLJ` Hint 也无法生效。 + +```sql +SHOW WARNINGS; ++---------+------+----------------------------------------------------------------------------+ +| Level | Code | Message | ++---------+------+----------------------------------------------------------------------------+ +| Warning | 1815 | Optimizer Hint /*+ INL_JOIN(t1) */ or /*+ TIDB_INLJ(t1) */ is inapplicable | ++---------+------+----------------------------------------------------------------------------+ +1 row in set (0.00 sec) +``` + +### 连接顺序导致 `INL_JOIN` Hint 不生效 + +[`INL_JOIN(t1, t2)`](#inl_joint1_name--tl_name-) 或 `TIDB_INLJ(t1, t2)` 的语义是让 `t1` 和 `t2` 作为 `IndexJoin` 的内表与其他表进行连接,而不是直接将 `t1` 和 `t2` 进行 `IndexJoin` 连接。例如: + +```sql +EXPLAIN SELECT /*+ inl_join(t1, t3) */ * FROM t1, t2, t3 WHERE t1.id = t2.id AND t2.id = t3.id AND t1.id = t3.id; ++---------------------------------+----------+-----------+---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| id | estRows | task | access object | operator info | ++---------------------------------+----------+-----------+---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| IndexJoin_16 | 15625.00 | root | | inner join, inner:TableReader_13, outer key:test.t2.id, test.t1.id, inner key:test.t3.id, test.t3.id, equal cond:eq(test.t1.id, test.t3.id), eq(test.t2.id, test.t3.id) | +| ├─IndexJoin_34(Build) | 12500.00 | root | | inner join, inner:TableReader_31, outer key:test.t2.id, inner key:test.t1.id, equal cond:eq(test.t2.id, test.t1.id) | +| │ ├─TableReader_40(Build) | 10000.00 | root | | data:TableFullScan_39 | +| │ │ └─TableFullScan_39 | 10000.00 | cop[tikv] | table:t2 | keep order:false, stats:pseudo | +| │ └─TableReader_31(Probe) | 10000.00 | root | | data:TableRangeScan_30 | +| │ └─TableRangeScan_30 | 10000.00 | cop[tikv] | table:t1 | range: decided by [test.t2.id], keep order:false, stats:pseudo | +| └─TableReader_13(Probe) | 12500.00 | root | | data:TableRangeScan_12 | +| └─TableRangeScan_12 | 12500.00 | cop[tikv] | table:t3 | range: decided by [test.t2.id test.t1.id], keep order:false, stats:pseudo | ++---------------------------------+----------+-----------+---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +``` + +在上面例子中,`t1` 和 `t3` 并没有直接被一个 `IndexJoin` 连接起来。 + +如果想要直接使用 `IndexJoin` 来连接 `t1` 和 `t3`,需要先使用 [`LEADING` Hint](#leadingt1_name--tl_name-) 指定 `t1` 和 `t3` 的连接顺序,然后再配合使用 `INL_JION`。例如: + +```sql +EXPLAIN SELECT /*+ leading(t1, t3), inl_join(t3) */ * FROM t1, t2, t3 WHERE t1.id = t2.id AND t2.id = t3.id AND t1.id = t3.id; ++---------------------------------+----------+-----------+---------------+---------------------------------------------------------------------------------------------------------------------+ +| id | estRows | task | access object | operator info | ++---------------------------------+----------+-----------+---------------+---------------------------------------------------------------------------------------------------------------------+ +| Projection_12 | 15625.00 | root | | test.t1.id, test.t1.name, test.t2.id, test.t2.name, test.t3.id, test.t3.name | +| └─HashJoin_21 | 15625.00 | root | | inner join, equal:[eq(test.t1.id, test.t2.id) eq(test.t3.id, test.t2.id)] | +| ├─TableReader_36(Build) | 10000.00 | root | | data:TableFullScan_35 | +| │ └─TableFullScan_35 | 10000.00 | cop[tikv] | table:t2 | keep order:false, stats:pseudo | +| └─IndexJoin_28(Probe) | 12500.00 | root | | inner join, inner:TableReader_25, outer key:test.t1.id, inner key:test.t3.id, equal cond:eq(test.t1.id, test.t3.id) | +| ├─TableReader_34(Build) | 10000.00 | root | | data:TableFullScan_33 | +| │ └─TableFullScan_33 | 10000.00 | cop[tikv] | table:t1 | keep order:false, stats:pseudo | +| └─TableReader_25(Probe) | 10000.00 | root | | data:TableRangeScan_24 | +| └─TableRangeScan_24 | 10000.00 | cop[tikv] | table:t3 | range: decided by [test.t1.id], keep order:false, stats:pseudo | ++---------------------------------+----------+-----------+---------------+---------------------------------------------------------------------------------------------------------------------+ +9 rows in set (0.01 sec) +``` diff --git a/sql-plan-management.md b/sql-plan-management.md index bb91d5d8acea..143bdd6c78a2 100644 --- a/sql-plan-management.md +++ b/sql-plan-management.md @@ -177,10 +177,11 @@ CREATE BINDING FOR SELECT * FROM t WHERE a > 1 USING SELECT * FROM t use index(i 如需将 SQL 语句的执行计划固定为之前使用过的执行计划,可以使用 `plan_digest` 为该 SQL 语句绑定一个历史的执行计划。相比于使用 SQL 创建绑定的方式,此方式更加简便。 -目前,根据历史执行计划创建绑定有一些限制: +以下为根据历史执行计划创建绑定的注意事项: - 该功能是根据历史的执行计划生成 hint 而实现的绑定,历史的执行计划来源是 [Statement Summary Tables](/statement-summary-tables.md),因此在使用此功能之前需开启系统变量 [`tidb_enable_stmt_summary`](/system-variables.md#tidb_enable_stmt_summary-从-v304-版本开始引入)。 -- 对于带有子查询的查询、访问 TiFlash 的查询、3 张表或更多表进行 Join 的查询,目前还不支持通过历史执行计划进行绑定。 +- 对于包含子查询的查询、访问 TiFlash 的查询、3 张表或更多表进行 Join 的查询,目前还不支持通过历史执行计划进行绑定。 +- 原执行计划对应 SQL 语句中的 hint 也会被应用在创建的绑定中,如执行 `SELECT /*+ max_execution_time(1000) */ * FROM t` 后,使用其 `plan_digest` 创建的绑定中会带上 `max_execution_time(1000)`。 使用方式: From fe5dddbc75f8f04efbd74751085ff4c93bc3d4c7 Mon Sep 17 00:00:00 2001 From: crazycs Date: Wed, 21 Jun 2023 16:19:12 +0800 Subject: [PATCH 193/257] system-variables: add doc for tidb_expensive_txn_time_threshold (#14202) --- system-variables.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/system-variables.md b/system-variables.md index aa5ade011b6e..c20e8a28ed16 100644 --- a/system-variables.md +++ b/system-variables.md @@ -2104,6 +2104,16 @@ v5.0 后,用户仍可以单独修改以上系统变量(会有废弃警告) - 单位:秒 - 这个变量用来控制打印 expensive query 日志的阈值时间,默认值是 60 秒。expensive query 日志和慢日志的差别是,慢日志是在语句执行完后才打印,expensive query 日志可以把正在执行中的语句且执行时间超过阈值的语句及其相关信息打印出来。 +### `tidb_expensive_txn_time_threshold` 从 v7.2.0 版本开始引入 + +- 作用域:GLOBAL +- 是否持久化到集群:否,仅作用于当前连接的 TiDB 实例 +- 类型:整数型 +- 默认值:`600` +- 范围:`[60, 2147483647]` +- 单位:秒 +- 这个变量用来控制打印 expensive transaction 日志的阈值时间,默认值是 600 秒。expensive transaction 日志会将尚未 COMMIT 或 ROLLBACK 且持续时间超过该阈值的事务的相关信息打印出来。 + ### `tidb_force_priority` - 作用域:GLOBAL From 7eecc65bc4cb816ca2ab20d8137303db3d48296d Mon Sep 17 00:00:00 2001 From: Ling Jin <7138436+3AceShowHand@users.noreply.github.com> Date: Wed, 21 Jun 2023 16:22:13 +0800 Subject: [PATCH 194/257] add new changefeed level config (#14182) --- ticdc/ticdc-changefeed-config.md | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/ticdc/ticdc-changefeed-config.md b/ticdc/ticdc-changefeed-config.md index 90a9cb9b07da..ca3591746ed7 100644 --- a/ticdc/ticdc-changefeed-config.md +++ b/ticdc/ticdc-changefeed-config.md @@ -130,12 +130,18 @@ write-key-threshold = 0 # {matcher = ['test6.*'], partition = "ts"} # ] -# protocol 用于指定传递到下游的协议格式 -# 当下游类型是 Kafka 时,支持 canal-json、avro 两种协议。 +# protocol 用于指定编码消息时使用的格式协议 +# 当下游类型是 Kafka 时,支持 canal-json、avro 和 open-protocol。 # 当下游类型是存储服务时,目前仅支持 canal-json、csv 两种协议。 # 注意:该参数只有当下游为 Kafka 或存储服务时,才会生效。 # protocol = "canal-json" +# delete-only-output-handle-key-columns 用于指定 Delete 事件的输出内容,只对 canal-json 和 open-protocol 协议有效。从 v7.2.0 开始引入。 +# 默认值为 false,即输出所有列的内容。当设置为 true 时,只输出主键列,或唯一索引列的内容。 +# Avro 协议不受该参数控制,总是只输出主键列,或唯一索引列的内容。 +# CSV 协议不受该参数控制,总是输出所有列的内容。 +delete-only-output-handle-key-columns = false + # 以下三个配置项仅在同步到存储服务的 sink 中使用,在 MQ 和 MySQL 类 sink 中无需设置。 # 换行符,用来分隔两个数据变更事件。默认值为空,表示使用 "\r\n" 作为换行符。 # terminator = '' From 96852d55330488b6781a9250c6086dc2d2a023ed Mon Sep 17 00:00:00 2001 From: Jianjun Liao <36503113+Leavrth@users.noreply.github.com> Date: Wed, 21 Jun 2023 16:32:42 +0800 Subject: [PATCH 195/257] br: support access by azure sas token (#14234) --- br/backup-and-restore-storages.md | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/br/backup-and-restore-storages.md b/br/backup-and-restore-storages.md index ec5fbf3c4f7b..cb319afe9378 100644 --- a/br/backup-and-restore-storages.md +++ b/br/backup-and-restore-storages.md @@ -76,7 +76,8 @@ BACKUP DATABASE * TO 's3://bucket-name/prefix' SEND_CREDENTIALS_TO_TIKV = FALSE; - `account-name`:存储账户名 - `account-key`:访问密钥 - - `access-tier`:上传对象的存储类别,例如 `Hot`、`Cool`、`Archive`,默认为 `Hot` + - `sas-token`:共享访问签名令牌 + - `access-tier`:上传对象的存储类别,例如 `Hot`、`Cool`、`Archive`,默认值为该存储账户的默认访问层。 @@ -185,11 +186,15 @@ BACKUP DATABASE * TO 's3://bucket-name/prefix' SEND_CREDENTIALS_TO_TIKV = FALSE;
From fe278d62274f27d8eaea47ea235c7450f8a9b7a4 Mon Sep 17 00:00:00 2001 From: glorv Date: Wed, 28 Jun 2023 14:17:40 +0800 Subject: [PATCH 217/257] resource_control: update bind to default resource group (#14315) --- sql-statements/sql-statement-alter-user.md | 6 +++--- sql-statements/sql-statement-set-resource-group.md | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/sql-statements/sql-statement-alter-user.md b/sql-statements/sql-statement-alter-user.md index 1113e85d1b85..8a9602669cec 100644 --- a/sql-statements/sql-statement-alter-user.md +++ b/sql-statements/sql-statement-alter-user.md @@ -194,10 +194,10 @@ SELECT USER, JSON_EXTRACT(User_attributes, "$.resource_group") FROM mysql.user W 1 row in set (0.02 sec) ``` -取消用户绑定的资源组,即将用户绑定的资源组设置为空。取消后,用户会绑定到 `default` 资源组。 +取消用户绑定的资源组,即将用户绑定到 `default` 资源组。 ```sql -ALTER USER 'newuser' RESOURCE GROUP ``; +ALTER USER 'newuser' RESOURCE GROUP `default`; SELECT USER, JSON_EXTRACT(User_attributes, "$.resource_group") FROM mysql.user WHERE user = "newuser"; ``` @@ -205,7 +205,7 @@ SELECT USER, JSON_EXTRACT(User_attributes, "$.resource_group") FROM mysql.user W +---------+---------------------------------------------------+ | USER | JSON_EXTRACT(User_attributes, "$.resource_group") | +---------+---------------------------------------------------+ -| newuser | "" | +| newuser | "default" | +---------+---------------------------------------------------+ 1 row in set (0.02 sec) ``` diff --git a/sql-statements/sql-statement-set-resource-group.md b/sql-statements/sql-statement-set-resource-group.md index 1414d1dfb1f6..0355da6de53a 100644 --- a/sql-statements/sql-statement-set-resource-group.md +++ b/sql-statements/sql-statement-set-resource-group.md @@ -63,7 +63,7 @@ SELECT CURRENT_RESOURCE_GROUP(); 执行 `SET RESOURCE GROUP` 设置当前会话使用默认资源组。 ```sql -SET RESOURCE GROUP ``; +SET RESOURCE GROUP `default`; SELECT CURRENT_RESOURCE_GROUP(); ``` From 92aa8d8befdfffcde639ecd2bff2cc552a4e37ab Mon Sep 17 00:00:00 2001 From: Grace Cai Date: Wed, 28 Jun 2023 15:35:38 +0800 Subject: [PATCH 218/257] chore: add v7.2 to dispatch.yml (#14342) --- .github/workflows/dispatch.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/dispatch.yml b/.github/workflows/dispatch.yml index 8b740a890510..10b0071ddcf3 100644 --- a/.github/workflows/dispatch.yml +++ b/.github/workflows/dispatch.yml @@ -6,6 +6,7 @@ on: - ".github/**" branches: - master + - release-7.2 - release-7.1 - release-7.0 - release-6.6 From a75a38aba29a815c68bb86346c609edb70971871 Mon Sep 17 00:00:00 2001 From: Yuanjia Zhang Date: Wed, 28 Jun 2023 16:41:38 +0800 Subject: [PATCH 219/257] tidb: update the default value of variable `tidb_enable_non_prepared_plan_cache` (#14317) --- system-variables.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/system-variables.md b/system-variables.md index 0a24eca3a0c1..40b7633307ac 100644 --- a/system-variables.md +++ b/system-variables.md @@ -1623,7 +1623,7 @@ mysql> SELECT job_info FROM mysql.analyze_jobs ORDER BY end_time DESC LIMIT 1; - 作用域:SESSION | GLOBAL - 是否持久化到集群:是 - 类型:布尔型 -- 默认值:`OFF` +- 默认值:`ON` - 这个变量用来控制是否开启[非 Prepare 语句执行计划缓存](/sql-non-prepared-plan-cache.md)。 ### `tidb_enable_non_prepared_plan_cache_for_dml` 从 v7.1.0 版本开始引入 From 2cb2f6c8b89956351f477324bb507403df415e9d Mon Sep 17 00:00:00 2001 From: Yifan Xu <30385241+xuyifangreeneyes@users.noreply.github.com> Date: Wed, 28 Jun 2023 16:49:09 +0800 Subject: [PATCH 220/257] turn on lite-init-stats and force-init-stats by default (#14306) --- statistics.md | 8 ++------ tidb-configuration-file.md | 18 +++--------------- 2 files changed, 5 insertions(+), 21 deletions(-) diff --git a/statistics.md b/statistics.md index ec4c1ed4f3d2..8ac5877c509d 100644 --- a/statistics.md +++ b/statistics.md @@ -693,18 +693,14 @@ DROP STATS TableName GLOBAL; - 通过修改 TiDB 配置项 [`stats-load-concurrency`](/tidb-configuration-file.md#stats-load-concurrency-从-v540-版本开始引入) 的值控制统计信息同步加载可以并发处理的最大列数。该配置项的默认值为 `5`。 - 通过修改 TiDB 配置项 [`stats-load-queue-size`](/tidb-configuration-file.md#stats-load-queue-size-从-v540-版本开始引入) 的值设置统计信息同步加载最多可以缓存多少列的请求。该配置项的默认值为 `1000`。 -在 TiDB 启动阶段,初始统计信息加载完成之前执行的 SQL 可能有不合理的执行计划,从而影响性能。为了避免这种情况,从 v7.1.0 开始,TiDB 引入了配置项 [`force-init-stats`](/tidb-configuration-file.md#force-init-stats-从-v710-版本开始引入)。你可以控制 TiDB 启动时是否在统计信息初始化完成后再对外提供服务。该配置项默认关闭。 - -> **警告:** -> -> 轻量级的统计信息初始化目前为实验特性,不建议在生产环境中使用。该功能可能会在未事先通知的情况下发生变化或删除。如果发现 bug,请在 GitHub 上提 [issue](https://github.com/pingcap/tidb/issues) 反馈。 +在 TiDB 启动阶段,初始统计信息加载完成之前执行的 SQL 可能有不合理的执行计划,从而影响性能。为了避免这种情况,从 v7.1.0 开始,TiDB 引入了配置项 [`force-init-stats`](/tidb-configuration-file.md#force-init-stats-从-v710-版本开始引入)。你可以控制 TiDB 启动时是否在统计信息初始化完成后再对外提供服务。该配置项从 v7.2.0 起默认开启。 从 v7.1.0 开始,TiDB 引入了配置参数 [`lite-init-stats`](/tidb-configuration-file.md#lite-init-stats-从-v710-版本开始引入) 用于控制是否开启轻量级的统计信息初始化。 - 当 `lite-init-stats` 为 `true` 时,统计信息初始化时列和索引的直方图、TopN、Count-Min Sketch 均不会加载到内存中。 - 当 `lite-init-stats` 为 `false` 时,统计信息初始化时索引和主键的直方图、TopN、Count-Min Sketch 会被加载到内存中,非主键列的直方图、TopN、Count-Min Sketch 不会加载到内存中。当优化器需要某一索引或者列的直方图、TopN、Count-Min Sketch 时,这些统计信息会被同步或异步加载到内存中。 -`lite-init-stats` 默认值为 `false`,即关闭轻量级的统计信息初始化。将 `lite-init-stats` 设置为 `true` 可以加速统计信息初始化,避免加载不必要的统计信息,从而降低 TiDB 的内存使用。 +`lite-init-stats` 默认值为 `true`,即开启轻量级的统计信息初始化。将 `lite-init-stats` 设置为 `true` 可以加速统计信息初始化,避免加载不必要的统计信息,从而降低 TiDB 的内存使用。 ## 统计信息的导入导出 diff --git a/tidb-configuration-file.md b/tidb-configuration-file.md index 6259bd362ab7..962f7fc0ed98 100644 --- a/tidb-configuration-file.md +++ b/tidb-configuration-file.md @@ -535,20 +535,12 @@ TiDB 配置文件比命令行参数支持更多的选项。你可以在 [config/ ### `stats-load-concurrency` 从 v5.4.0 版本开始引入 -> **警告:** -> -> 统计信息同步加载功能目前为实验性特性,不建议在生产环境中使用。 - + TiDB 统计信息同步加载功能可以并发处理的最大列数 + 默认值:5 + 目前的合法值范围:`[1, 128]` ### `stats-load-queue-size` 从 v5.4.0 版本开始引入 -> **警告:** -> -> 统计信息同步加载功能目前为实验性特性,不建议在生产环境中使用。 - + 用于设置 TiDB 统计信息同步加载功能最多可以缓存多少列的请求 + 默认值:1000 + 目前的合法值范围:`[1, 100000]` @@ -564,20 +556,16 @@ TiDB 配置文件比命令行参数支持更多的选项。你可以在 [config/ ### `lite-init-stats` 从 v7.1.0 版本开始引入 -> **警告:** -> -> 该变量控制的功能目前为实验特性,不建议在生产环境中使用。该功能可能会在未事先通知的情况下发生变化或删除。如果发现 bug,请在 GitHub 上提 [issue](https://github.com/pingcap/tidb/issues) 反馈。 - + 用于控制 TiDB 启动时是否采用轻量级的统计信息初始化。 -+ 默认值:false ++ 默认值:在 v7.2.0 之前版本中为 `false`,在 v7.2.0 及之后的版本中为 `true`。 + 当 `lite-init-stats` 为 `true` 时,统计信息初始化时列和索引的直方图、TopN、Count-Min Sketch 均不会加载到内存中。当 `lite-init-stats` 为 `false` 时,统计信息初始化时索引和主键的直方图、TopN、Count-Min Sketch 会被加载到内存中,非主键列的直方图、TopN、Count-Min Sketch 不会加载到内存中。当优化器需要某一索引或者列的直方图、TopN、Count-Min Sketch 时,这些统计信息会被同步或异步加载到内存中(由 [`tidb_stats_load_sync_wait`](/system-variables.md#tidb_stats_load_sync_wait-从-v540-版本开始引入) 控制)。 + 将 `lite-init-stats` 设置为 true,可以加速统计信息初始化,避免加载不必要的统计信息,从而降低 TiDB 的内存使用。详情请参考[统计信息的加载](/statistics.md#统计信息的加载)。 ### `force-init-stats` 从 v7.1.0 版本开始引入 + 用于控制 TiDB 启动时是否在统计信息初始化完成后再对外提供服务。 -+ 默认值:false -+ 当 `force-init-stats` 为 `true` 时,TiDB 启动时会等到统计信息初始化完成后再对外提供服务。在表和分区数量较多的情况下,将 `force-init-stats` 设置为 `true` 可能会导致 TiDB 从启动到开始对外提供服务的时间变长。 ++ 默认值:在 v7.2.0 之前版本中为 `false`,在 v7.2.0 及之后的版本中为 `true`。 ++ 当 `force-init-stats` 为 `true` 时,TiDB 启动时会等到统计信息初始化完成后再对外提供服务。需要注意的是,在表和分区数量较多且 [`lite-init-stats`](/tidb-configuration-file.md#lite-init-stats-从-v710-版本开始引入) 为 `false` 的情况下,`force-init-stats` 为 `true` 可能会导致 TiDB 从启动到开始对外提供服务的时间变长。 + 当 `force-init-stats` 为 `false` 时,TiDB 在统计信息初始化未完成时即可对外提供服务,但由于统计信息初始化未完成,优化器会用 pseudo 统计信息进行决策,可能会产生不合理的执行计划。 ## opentracing From 7a20938f62dcf1ba1949edf391c7c586d3fdf5a2 Mon Sep 17 00:00:00 2001 From: Yiding Cui Date: Wed, 28 Jun 2023 18:03:46 +0800 Subject: [PATCH 221/257] system-variables: add description for `tidb_opt_enable_cte_mpp_shared_execution` (#14318) --- system-variables.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/system-variables.md b/system-variables.md index 40b7633307ac..44cd6e5ee530 100644 --- a/system-variables.md +++ b/system-variables.md @@ -2996,6 +2996,18 @@ mysql> desc select count(distinct a) from test.t; - 这个变量用来控制是否启用 [TiFlash 延迟物化](/tiflash/tiflash-late-materialization.md)功能。注意在 TiFlash [Fast Scan 模式](/tiflash/use-fastscan.md)下,延迟物化功能暂不可用。 - 当设置该变量为 `OFF` 关闭 TiFlash 延迟物化功能时,如果 `SELECT` 语句中包含过滤条件(`WHERE` 子句),TiFlash 会先扫描查询所需列的全部数据后再进行过滤。当设置该变量为 `ON` 开启 TiFlash 延迟物化功能时,TiFlash 会先扫描下推到 TableScan 算子的过滤条件相关的列数据,过滤得到符合条件的行后,再扫描这些行的其他列数据,继续后续计算,从而减少 IO 扫描和数据处理的计算量。 +### `tidb_opt_enable_mpp_shared_cte_execution` 从 v7.2.0 版本开始引入 + +> **警告:** +> +> 当前版本中该变量控制的功能尚未完全生效,请保留默认值。 + +- 作用域:SESSION | GLOBAL +- 是否持久化到集群:是 +- 类型:布尔型 +- 默认值:`OFF` +- 该变量控制非递归的[公共表表达式 (CTE)](/sql-statements/sql-statement-with.md) 是否可以直接在 TiFlash MPP 执行而不是在 TiDB 上执行。 + ### `tidb_opt_fix_control` 从 v7.1.0 版本开始引入 - 作用域:SESSION | GLOBAL From 4f45ef2c90f24d099bde9af1184cae30835fd20a Mon Sep 17 00:00:00 2001 From: fzzf678 <108643977+fzzf678@users.noreply.github.com> Date: Wed, 28 Jun 2023 18:16:46 +0800 Subject: [PATCH 222/257] sql: add switch for check constraint (#14320) --- constraints.md | 9 +++++++++ system-variables.md | 8 ++++++++ 2 files changed, 17 insertions(+) diff --git a/constraints.md b/constraints.md index dbe0334fda2f..1c185d0c3d22 100644 --- a/constraints.md +++ b/constraints.md @@ -51,6 +51,10 @@ Query OK, 1 row affected (0.03 sec) ## `CHECK` 约束 +> **注意:** +> +> `CHECK` 约束功能默认关闭,需要将变量 [`tidb_enable_check_constraint`](/system-variables.md#tidb_enable_check_constraint-从-v720-版本开始引入) 设置为 `ON` 后才能开启。 + `CHECK` 约束用于限制表中某个字段的值必须满足指定条件。当为表添加 `CHECK` 约束后,在插入或者更新表的数据时,TiDB 会检查约束条件是否满足,如果不满足,则会报错。 TiDB 中 `CHECK` 约束的语法如下,与 MySQL 中一致: @@ -128,6 +132,11 @@ ALTER TABLE t DROP CONSTRAINT t_chk_1; ALTER TABLE t ALTER CONSTRAINT c1 NOT ENFORCED; ``` +### 与 MySQL 的兼容性 + +- 不支持在添加列的同时添加 `CHECK` 约束(例如,`ALTER TABLE t ADD COLUMN a CHECK(a > 0)`)),否则只有列会被添加成功,TiDB 会忽略 `CHECK` 约束但不会报错。 +- 不支持使用 `ALTER TABLE t CHANGE a b int CHECK(b > 0)` 添加 `CHECK` 约束,使用该语句时 TiDB 会报错。 + ## 唯一约束 唯一约束是指唯一索引和主键列中所有的非空值都是唯一的。 diff --git a/system-variables.md b/system-variables.md index 44cd6e5ee530..298d2a8f8363 100644 --- a/system-variables.md +++ b/system-variables.md @@ -1450,6 +1450,14 @@ mysql> SELECT job_info FROM mysql.analyze_jobs ORDER BY end_time DESC LIMIT 1; - 默认值:`OFF` - 这个变量用于控制是否开启 cascades planner。 +### `tidb_enable_check_constraint` 从 v7.2.0 版本开始引入 + +- 作用域:GLOBAL +- 是否持久化到集群:是 +- 类型:布尔型 +- 默认值:`OFF` +- 这个变量用于控制是否启用 [`CHECK` 约束](/constraints.md#check-约束)。 + ### `tidb_enable_chunk_rpc` 从 v4.0 版本开始引入 - 作用域:SESSION From b087b934fabe4faed2bc7d3c064f7c3e453a1413 Mon Sep 17 00:00:00 2001 From: D3Hunter Date: Wed, 28 Jun 2023 19:28:46 +0800 Subject: [PATCH 223/257] data import: add IMPORT INTO stmt (#14183) --- TOC.md | 3 + error-codes.md | 42 ++- mysql-schema.md | 1 + privilege-management.md | 10 + .../sql-statement-cancel-import-job.md | 42 +++ sql-statements/sql-statement-import-into.md | 256 ++++++++++++++++++ .../sql-statement-show-import-job.md | 78 ++++++ system-variables.md | 3 +- tidb-configuration-file.md | 1 + tidb-distributed-execution-framework.md | 16 +- 10 files changed, 440 insertions(+), 12 deletions(-) create mode 100644 sql-statements/sql-statement-cancel-import-job.md create mode 100644 sql-statements/sql-statement-import-into.md create mode 100644 sql-statements/sql-statement-show-import-job.md diff --git a/TOC.md b/TOC.md index 61445a2b60a5..60540bcad325 100644 --- a/TOC.md +++ b/TOC.md @@ -708,6 +708,7 @@ - [`BATCH`](/sql-statements/sql-statement-batch.md) - [`BEGIN`](/sql-statements/sql-statement-begin.md) - [`CALIBRATE RESOURCE`](/sql-statements/sql-statement-calibrate-resource.md) + - [`CANCEL IMPORT JOB`](/sql-statements/sql-statement-cancel-import-job.md) - [`CHANGE COLUMN`](/sql-statements/sql-statement-change-column.md) - [`CHANGE DRAINER`](/sql-statements/sql-statement-change-drainer.md) - [`CHANGE PUMP`](/sql-statements/sql-statement-change-pump.md) @@ -751,6 +752,7 @@ - [`FLUSH TABLES`](/sql-statements/sql-statement-flush-tables.md) - [`GRANT `](/sql-statements/sql-statement-grant-privileges.md) - [`GRANT `](/sql-statements/sql-statement-grant-role.md) + - [`IMPORT INTO`](/sql-statements/sql-statement-import-into.md) - [`INSERT`](/sql-statements/sql-statement-insert.md) - [`KILL [TIDB]`](/sql-statements/sql-statement-kill.md) - [`LOAD DATA`](/sql-statements/sql-statement-load-data.md) @@ -797,6 +799,7 @@ - [`SHOW ERRORS`](/sql-statements/sql-statement-show-errors.md) - [`SHOW [FULL] FIELDS FROM`](/sql-statements/sql-statement-show-fields-from.md) - [`SHOW GRANTS`](/sql-statements/sql-statement-show-grants.md) + - [`SHOW IMPORT JOB`](/sql-statements/sql-statement-show-import-job.md) - [`SHOW INDEX [FROM|IN]`](/sql-statements/sql-statement-show-index.md) - [`SHOW INDEXES [FROM|IN]`](/sql-statements/sql-statement-show-indexes.md) - [`SHOW KEYS [FROM|IN]`](/sql-statements/sql-statement-show-keys.md) diff --git a/error-codes.md b/error-codes.md index 54843d25f6a7..14aa6f212fed 100644 --- a/error-codes.md +++ b/error-codes.md @@ -299,23 +299,55 @@ TiDB 兼容 MySQL 的错误码,在大多数情况下,返回和 MySQL 一样 * Error Number: 8156 - `LOAD DATA` 语句的文件路径不能为空。需要设置正确的路径再进行导入。请参考 [`LOAD DATA`](/sql-statements/sql-statement-load-data.md)。 + 传入的文件路径不能为空。需要设置正确的路径再进行导入。 + +* Error Number: 8157 + + 不支持的文件格式。请参考 [`IMPORT INTO`](/sql-statements/sql-statement-import-into.md#format) 查看支持的格式。 * Error Number: 8158 - 传入的 S3/GCS 路径无效。请参考[外部存储](/br/backup-and-restore-storages.md)设置有效的路径。 + 传入的文件路径不合法。请根据具体的错误提示进行处理。S3/GCS 路径设置可参考[外部存储](/br/backup-and-restore-storages.md#uri-格式)。 * Error Number: 8159 - TiDB 无法访问 `LOAD DATA` 语句中传入的 S3/GCS 路径。请确保填入的 S3/GCS bucket 存在,且你输入了正确的 access key 和 secret access key 以让 TiDB 服务器有权限访问 S3/GCS 对应的 bucket。 + TiDB 无法访问传入的 S3/GCS 路径。请确保填写的 S3/GCS bucket 存在,且输入了正确的 Access Key 和 Secret Access Key 以让 TiDB 服务器有权限访问 S3/GCS 对应的 bucket。 * Error Number: 8160 - `LOAD DATA` 读取数据文件失败。请根据具体的错误提示进行处理。 + 读取数据文件失败。请根据具体的错误提示进行处理。 * Error Number: 8162 - `LOAD DATA` 语句存在错误。请参考 [`LOAD DATA`](/sql-statements/sql-statement-load-data.md) 查看已支持的功能。 + 语句存在错误。请根据具体的错误提示进行处理。 + +* Error Number: 8163 + + 未知的选项。请参考 [`IMPORT INTO`](/sql-statements/sql-statement-import-into.md#参数说明) 查看支持的选项。 + +* Error Number: 8164 + + 选项取值无效。请参考 [`IMPORT INTO`](/sql-statements/sql-statement-import-into.md#参数说明) 查看有效的取值。 + +* Error Number: 8165 + + 重复指定了选项,每个选项只能指定一次。 + +* Error Number: 8166 + + 某些选项只能在特定的条件下才可以使用。请根据具体的错误提示进行处理。请参考 [`IMPORT INTO`](/sql-statements/sql-statement-import-into.md#参数说明) 查看支持的选项。 + +* Error Number: 8170 + + 指定的 job 不存在。 + +* Error Number: 8171 + + 该 job 的状态不能进行当前操作。请根据具体的错误提示进行处理。 + +* Error Number: 8173 + + 执行 `IMPORT INTO` 时,TiDB 会对当前环境进行检查,比如检查下游表是否为空等。请根据具体的错误提示进行处理。 * Error Number: 8200 diff --git a/mysql-schema.md b/mysql-schema.md index bf0905e3d733..54e65a6a5d14 100644 --- a/mysql-schema.md +++ b/mysql-schema.md @@ -72,3 +72,4 @@ aliases: ['/docs-cn/dev/system-tables/system-table-overview/','/docs-cn/dev/refe * `expr_pushdown_blacklist` 表达式下推的黑名单 * `opt_rule_blacklist` 逻辑优化规则的黑名单 * `table_cache_meta` 缓存表的信息 +* `tidb_import_jobs` 记录 [`IMPORT INTO`](/sql-statements/sql-statement-import-into.md) 任务信息 diff --git a/privilege-management.md b/privilege-management.md index 6a2d2f59d587..4c753ccb29ae 100644 --- a/privilege-management.md +++ b/privilege-management.md @@ -342,6 +342,10 @@ SELECT * FROM INFORMATION_SCHEMA.USER_PRIVILEGES WHERE grantee = "'root'@'%'"; 需要拥有 `SUPER` 或者 `BACKUP_ADMIN` 权限。 +### CANCEL IMPORT JOB + +需要 `SUPER` 权限来取消属于其他用户的任务,否则只能取消当前用户创建的任务。 + ### CREATE DATABASE 需要拥有全局 `CREATE` 权限。 @@ -374,6 +378,10 @@ SELECT * FROM INFORMATION_SCHEMA.USER_PRIVILEGES WHERE grantee = "'root'@'%'"; 需要对所操作的表拥有 `DROP` 权限。 +### IMPORT INTO + +需要对目标表拥有 `SELECT`、`UPDATE`、`INSERT`、`DELETE` 和 `ALTER` 权限。如果是导入存储在 TiDB 本地的文件,还需要有 `FILE` 权限。 + ### LOAD DATA `LOAD DATA` 需要对所操作的表拥有 `INSERT` 权限。执行 `REPLACE INTO` 语句还需要对所操作的表拥有 `DELETE` 权限。 @@ -400,6 +408,8 @@ SELECT * FROM INFORMATION_SCHEMA.USER_PRIVILEGES WHERE grantee = "'root'@'%'"; `SHOW PROCESSLIST` 需要 `SUPER` 权限来显示属于其他用户的连接。 +`SHOW IMPORT JOB` 需要 `SUPER` 权限来显示属于其他用户的任务,否则只能看到当前用户创建的任务。 + ### CREATE ROLE/USER `CREATE ROLE` 需要 `CREATE ROLE` 权限。 diff --git a/sql-statements/sql-statement-cancel-import-job.md b/sql-statements/sql-statement-cancel-import-job.md new file mode 100644 index 000000000000..c92efcad38a4 --- /dev/null +++ b/sql-statements/sql-statement-cancel-import-job.md @@ -0,0 +1,42 @@ +--- +title: CANCEL IMPORT +summary: TiDB 数据库中 CANCEL IMPORT 的使用概况。 +--- + +# CANCEL IMPORT + +`CANCEL IMPORT` 语句用于取消 TiDB 中创建的数据导入任务。 + +## 所需权限 + +只有导入任务的创建者或拥有 `SUPER` 权限的用户才能够取消任务。 + +## 语法图 + +```ebnf+diagram +CancelImportJobsStmt ::= + 'CANCEL' 'IMPORT' 'JOB' JobID +``` + +## 示例 + +下面示例取消 ID 为 1 的导入任务: + +```sql +CANCEL IMPORT JOB 1; +``` + +输出结果如下: + +``` +Query OK, 0 rows affected (0.01 sec) +``` + +## MySQL 兼容性 + +该语句是 TiDB 对 MySQL 语法的扩展。 + +## 另请参阅 + +* [`IMPORT INTO`](/sql-statements/sql-statement-import-into.md) +* [`SHOW IMPORT JOB`](/sql-statements/sql-statement-show-import-job.md) diff --git a/sql-statements/sql-statement-import-into.md b/sql-statements/sql-statement-import-into.md new file mode 100644 index 000000000000..5e930e514881 --- /dev/null +++ b/sql-statements/sql-statement-import-into.md @@ -0,0 +1,256 @@ +--- +title: IMPORT INTO +summary: TiDB 数据库中 IMPORT INTO 的使用概况。 +--- + +# IMPORT INTO + +`IMPORT INTO` 语句使用 TiDB Lightning 的[物理导入模式](/tidb-lightning/tidb-lightning-physical-import-mode.md),用于将 `CSV`、`SQL`、`PARQUET` 等格式的数据导入到 TiDB 的一张空表中。 + +> **警告:** +> +> 目前该语句为实验特性,不建议在生产环境中使用。 + +`IMPORT INTO` 支持导入存储在 Amazon S3、GCS 和 TiDB 本地的数据文件。 + +- 对于存储在 S3 或 GCS 的数据文件,`IMPORT INTO` 支持通过[后端任务分布式框架](/tidb-distributed-execution-framework.md)运行。 + + - 当此框架功能开启时(即 [tidb_enable_dist_task](/system-variables.md#tidb_enable_dist_task-从-v710-版本开始引入) 为 `ON`),`IMPORT INTO` 会将一个数据导入任务拆分成多个子任务并分配到各个 TiDB 节点上运行,以提高导入效率。 + - 当此框架功能关闭时,`IMPORT INTO` 仅支持在当前用户连接的 TiDB 节点上运行。 + +- 对于存储在 TiDB 本地的数据文件,`IMPORT INTO` 仅支持在当前用户连接的 TiDB 节点上运行,因此数据文件需要存放在当前用户连接的 TiDB 节点上。如果是通过 PROXY 或者 Load Balancer 访问 TiDB,则无法导入存储在 TiDB 本地的数据文件。 + +## 使用限制 + +- 目前该语句仅支持导入 1 TiB 以下的数据。 +- 只支持导入数据到数据库中已有的空表。 +- 不支持事务,也无法回滚。在显式事务 (`BEGIN`/`END`) 中执行会报错。 +- 在导入完成前会阻塞当前连接,如果需要异步执行,可以添加 `DETACHED` 选项。 +- 不支持和 [Backup & Restore](/br/backup-and-restore-overview.md)、[`FLASHBACK CLUSTER TO TIMESTAMP`](/sql-statements/sql-statement-flashback-to-timestamp.md)、[创建索引加速](/system-variables.md#tidb_ddl_enable_fast_reorg-从-v630-版本开始引入)、TiDB Lightning 导入、TiCDC 数据同步、[Point-in-time recovery (PITR)](/br/br-log-architecture.md) 等功能同时工作。 +- 每个集群上同时只能有一个 `IMPORT INTO` 任务在运行。`IMPORT INTO` 会 precheck 是否存在运行中的任务,但并非硬限制,如果多个客户端同时执行 `IMPORT INTO` 仍有可能启动多个任务,请避免该情况,否则可能导致数据不一致或者任务失败的问题。 +- 导入数据的过程中,请勿在目标表上执行 DDL 和 DML 操作,也不要在目标数据库上执行 [`FLASHBACK DATABASE`](/sql-statements/sql-statement-flashback-database.md),否则会导致导入失败或数据不一致。导入期间也不建议进行读操作,因为读取的数据可能不一致。请在导入完成后再进行读写操作。 +- 导入期间会占用大量系统资源,建议 TiDB 节点使用 32 核以上的 CPU 和 64 GiB 以上内存以获得更好的性能。导入期间会将排序好的数据写入到 TiDB [临时目录](/tidb-configuration-file.md#temp-dir-从-v630-版本开始引入)下,建议优先考虑配置闪存等高性能存储介质。详情请参考[物理导入使用限制](/tidb-lightning/tidb-lightning-physical-import-mode.md#必要条件及限制)。 +- TiDB [临时目录](/tidb-configuration-file.md#temp-dir-从-v630-版本开始引入)至少需要有 90 GiB 的可用空间。建议预留大于等于所需导入数据的存储空间,以保证最佳导入性能。 +- 一个导入任务只支持导入数据到一张目标表中。如需导入数据到多张目标表,需要在一张目标表导入完成后,再新建一个任务导入下一张目标表。 + +## 导入前准备 + +在使用 `IMPORT INTO` 开始导入数据前,请确保: + +- 要导入的目标表在 TiDB 中已经创建,并且是空表。 +- 当前集群有足够的剩余空间能容纳要导入的数据。 +- 当前连接的 TiDB 节点的[临时目录](/tidb-configuration-file.md#temp-dir-从-v630-版本开始引入)至少有 90 GiB 的磁盘空间。如果开启了 [`tidb_enable_dist_task`](/system-variables.md#tidb_enable_dist_task-从-v710-版本开始引入),需要确保集群中所有 TiDB 节点的临时目录都有足够的磁盘空间。 + +## 需要的权限 + +执行 `IMPORT INTO` 的用户需要有目标表的 `SELECT`、`UPDATE`、`INSERT`、`DELETE` 和 `ALTER` 权限。如果是导入存储在 TiDB 本地的文件,还需要有 `FILE` 权限。 + +## 语法图 + +```ebnf+diagram +ImportIntoStmt ::= + 'IMPORT' 'INTO' TableName ColumnNameOrUserVarList? SetClause? FROM fileLocation Format? WithOptions? + +ColumnNameOrUserVarList ::= + '(' ColumnNameOrUserVar (',' ColumnNameOrUserVar)* ')' + +SetClause ::= + 'SET' SetItem (',' SetItem)* + +SetItem ::= + ColumnName '=' Expr + +Format ::= + 'CSV' | 'SQL' | 'PARQUET' + +WithOptions ::= + 'WITH' OptionItem (',' OptionItem)* + +OptionItem ::= + optionName '=' optionVal | optionName +``` + +## 参数说明 + +### ColumnNameOrUserVarList + +用于指定数据文件中每行的各个字段如何对应到目标表列,也可以将字段对应到某个变量,用来跳过导入某些字段或者在 `SetClause` 中使用。 + +- 当不指定该参数时,数据文件中每行的字段数需要和目标表的列数一致,且各个字段会按顺序导入到对应的列。 +- 当指定该参数时,指定的列或变量个数需要和数据文件中每行的字段数一致。 + +### SetClause + +用于指定目标列值的计算方式。在 SET 表达式的右侧,可以引用在 `ColumnNameOrUserVarList` 中指定的变量。 + +SET 表达式左侧只能引用 `ColumnNameOrUserVarList` 中没有的列名。如果目标列名已经在 `ColumnNameOrUserVarList` 中,则该 SET 表达式无效。 + +### fileLocation + +用于指定数据文件的存储位置,该位置可以是 S3 或 GCS URI 路径,也可以是 TiDB 本地文件路径。 + +- S3 或 GCS URI 路径:配置详见[外部存储](/br/backup-and-restore-storages.md#uri-格式)。 +- TiDB 本地文件路径:必须为绝对路径,数据文件后缀必须为 `.csv`、`.sql` 或 `.parquet`。确保该路径对应的文件存储在当前用户连接的 TiDB 节点上,且当前连接的用户有 `FILE` 权限。 + +> **注意:** +> +> 如果目标集群开启了 [SEM](/system-variables.md#tidb_enable_enhanced_security),则 fileLocation 不能指定为本地文件路径。 + +使用 fileLocation 可以指定单个文件,也可使用通配符 `*` 来匹配需要导入的多个文件。注意通配符只能用在文件名部分,不会匹配目录,也不会递归处理子目录下相关的文件。下面以数据存储在 S3 为例: + +- 导入单个文件:`s3:///path/to/data/foo.csv` +- 导入指定路径下的所有文件:`s3:///path/to/data/*` +- 导入指定路径下的所有以 `.csv` 结尾的文件:`s3:///path/to/data/*.csv` +- 导入指定路径下所有以 `foo` 为前缀的文件:`s3:///path/to/data/foo*` +- 导入指定路径下以 `foo` 为前缀、以 `.csv` 结尾的文件:`s3:///path/to/data/foo*.csv` + +### Format + +`IMPORT INTO` 支持 3 种数据文件格式,包括 `CSV`、`SQL` 和 `PARQUET`。当不指定该参数时,默认格式为 `CSV`。 + +### WithOptions + +你可以通过 WithOptions 来指定导入选项,控制数据导入过程。例如,如需使导入任务在后台异步执行,你可以通过在 `IMPORT INTO` 语句中添加 `WITH DETACHED` 选项来开启导入任务的 `DETACHED` 模式。 + +目前支持的选项包括: + +| 选项名 | 支持的数据格式 | 描述 | +|:---|:---|:---| +| `CHARACTER_SET=''` | CSV | 指定数据文件的字符集,默认为 `utf8mb4`。目前支持的字符集包括 `binary`、`utf8`、`utf8mb4`、`gb18030`、`gbk`、`latin1` 和 `ascii`。 | +| `FIELDS_TERMINATED_BY=''` | CSV | 指定字段分隔符,默认为 `,`。 | +| `FIELDS_ENCLOSED_BY=''` | CSV | 指定字段的定界符,默认为 `"`。 | +| `FIELDS_ESCAPED_BY=''` | CSV | 指定字段的转义符,默认为 `\`。 | +| `FIELDS_DEFINED_NULL_BY=''` | CSV | 指定字段为何值时将会被解析为 NULL,默认为 `\N`。 | +| `LINES_TERMINATED_BY=''` | CSV | 指定行分隔符,默认 `IMPORT INTO` 会自动识别分隔符为 `\n`、`\r` 或 `\r\n`,如果行分隔符为以上三种,无须显式指定该选项。 | +| `SKIP_ROWS=` | CSV | 指定需要跳过的行数,默认为 `0`。可通过该参数跳过 CSV 中的 header,如果是通过通配符来指定所需导入的源文件,该参数会对 fileLocation 中通配符匹配的所有源文件生效。 | +| `DISK_QUOTA=''` | 所有格式 | 指定数据排序期间可使用的磁盘空间阈值。默认值为 TiDB [临时目录](/tidb-configuration-file.md#temp-dir-从-v630-版本开始引入)所在磁盘空间的 80%。如果无法获取磁盘总大小,默认值为 50 GiB。当显式指定 DISK_QUOTA 时,该值同样不能超过 TiDB [临时目录](/tidb-configuration-file.md#temp-dir-从-v630-版本开始引入)所在磁盘空间的 80%。 | +| `DISABLE_TIKV_IMPORT_MODE` | 所有格式 | 指定是否禁止导入期间将 TiKV 切换到导入模式。默认不禁止。如果当前集群存在正在运行的读写业务,为避免导入过程对这部分业务造成影响,可开启该参数。 | +| `THREAD=` | 所有格式 | 指定导入的并发度。默认值为 TiDB 节点的 CPU 核数的 50%,最小值为 1。可以显示指定该参数来控制对资源的占用,但最大值不能超过 CPU 核数。如需导入数据到一个空集群,建议可以适当调大该值,以提升导入性能。如果目标集群已经用于生产环境,请根据业务要求按需调整该参数值。 | +| `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` 等信息,且该任务会在后台异步执行。 | + +## 输出内容 + +当 `IMPORT INTO` 导入完成,或者开启了 `DETACHED` 模式时,`IMPORT INTO` 会返回当前任务的信息。以下为一些示例,字段的含义描述请参考 [`SHOW IMPORT JOB(s)`](/sql-statements/sql-statement-show-import-job.md)。 + +当 `IMPORT INTO` 导入完成时输出: + +```sql +IMPORT INTO t FROM '/path/to/small.csv'; ++--------+--------------------+--------------+----------+-------+----------+------------------+---------------+----------------+----------------------------+----------------------------+----------------------------+------------+ +| Job_ID | Data_Source | Target_Table | Table_ID | Phase | Status | Source_File_Size | Imported_Rows | Result_Message | Create_Time | Start_Time | End_Time | Created_By | ++--------+--------------------+--------------+----------+-------+----------+------------------+---------------+----------------+----------------------------+----------------------------+----------------------------+------------+ +| 60002 | /path/to/small.csv | `test`.`t` | 363 | | finished | 16B | 2 | | 2023-06-08 16:01:22.095698 | 2023-06-08 16:01:22.394418 | 2023-06-08 16:01:26.531821 | root@% | ++--------+--------------------+--------------+----------+-------+----------+------------------+---------------+----------------+----------------------------+----------------------------+----------------------------+------------+ +``` + +开启了 `DETACHED` 模式时,执行 `IMPORT INTO` 语句会立即返回输出。从输出中,你可以看到该任务状态 `Status` 为 `pending`,表示等待执行。 + +```sql +IMPORT INTO t FROM '/path/to/small.csv' WITH DETACHED; ++--------+--------------------+--------------+----------+-------+---------+------------------+---------------+----------------+----------------------------+------------+----------+------------+ +| Job_ID | Data_Source | Target_Table | Table_ID | Phase | Status | Source_File_Size | Imported_Rows | Result_Message | Create_Time | Start_Time | End_Time | Created_By | ++--------+--------------------+--------------+----------+-------+---------+------------------+---------------+----------------+----------------------------+------------+----------+------------+ +| 60001 | /path/to/small.csv | `test`.`t` | 361 | | pending | 16B | NULL | | 2023-06-08 15:59:37.047703 | NULL | NULL | root@% | ++--------+--------------------+--------------+----------+-------+---------+------------------+---------------+----------------+----------------------------+------------+----------+------------+ +``` + +## 查看和控制导入任务 + +对于开启了 `DETACHED` 模式的任务,可通过 [`SHOW IMPORT`](/sql-statements/sql-statement-show-import-job.md) 来查看当前任务的执行进度。 + +任务启动后,可通过 [`CANCEL IMPORT JOB `](/sql-statements/sql-statement-cancel-import-job.md) 来取消对应任务。 + +## 使用示例 + +### 导入带有 header 的 CSV 文件 + +```sql +IMPORT INTO t FROM '/path/to/file.csv' WITH skip_rows=1; +``` + +### 以 `DETACHED` 模式异步导入 + +```sql +IMPORT INTO t FROM '/path/to/file.csv' WITH DETACHED; +``` + +### 忽略数据文件中的特定字段 + +假设数据文件为以下 CSV 文件: + +``` +id,name,age +1,Tom,23 +2,Jack,44 +``` + +假设要导入的目标表结构为 `CREATE TABLE t(id int primary key, name varchar(100))`,则可通过以下方式来忽略导入文件中的 `age` 字段: + +```sql +IMPORT INTO t(id, name, @1) FROM '/path/to/file.csv' WITH skip_rows=1; +``` + +### 使用通配符 `*` 导入多个数据文件 + +假设在 `/path/to/` 目录下有 `file-01.csv`、`file-02.csv` 和 `file-03.csv` 三个文件,如需通过 `IMPORT INTO` 将这三个文件导入到目标表 `t` 中,可使用如下 SQL 语句: + +```sql +IMPORT INTO t FROM '/path/to/file-*.csv' +``` + +### 从 S3、GCS 导入数据 + +- 从 S3 导入数据 + + ```sql + IMPORT INTO t FROM 's3://bucket-name/test.csv?access-key=XXX&secret-access-key=XXX'; + ``` + +- 从 GCS 导入数据 + + ```sql + IMPORT INTO t FROM 'gs://bucket-name/test.csv'; + ``` + +S3 或 GCS 的 URI 路径配置详见[外部存储](/br/backup-and-restore-storages.md#uri-格式)。 + +### 通过 SetClause 语句计算列值 + +假设数据文件为以下 CSV 文件: + +``` +id,name,val +1,phone,230 +2,book,440 +``` + +要导入的目标表结构为 `CREATE TABLE t(id int primary key, name varchar(100), val int)`,并且希望在导入时将 `val` 列值扩大 100 倍,则可通过以下方式来导入: + +```sql +IMPORT INTO t(id, name, @1) SET val=@1*100 FROM '/path/to/file.csv' WITH skip_rows=1; +``` + +### 导入 SQL 格式的数据文件 + +```sql +IMPORT INTO t FROM '/path/to/file.sql' FORMAT 'sql'; +``` + +### 限制写入 TiKV 的速度 + +限制写入单个 TiKV 的速度为 10 MiB/s: + +```sql +IMPORT INTO t FROM 's3://bucket/path/to/file.parquet?access-key=XXX&secret-access-key=XXX' FORMAT 'parquet' WITH MAX_WRITE_SPEED='10MiB'; +``` + +## MySQL 兼容性 + +该语句是对 MySQL 语法的扩展。 + +## 另请参阅 + +* [`SHOW IMPORT JOB(s)`](/sql-statements/sql-statement-show-import-job.md) +* [`CANCEL IMPORT JOB`](/sql-statements/sql-statement-cancel-import-job.md) diff --git a/sql-statements/sql-statement-show-import-job.md b/sql-statements/sql-statement-show-import-job.md new file mode 100644 index 000000000000..598969433dd1 --- /dev/null +++ b/sql-statements/sql-statement-show-import-job.md @@ -0,0 +1,78 @@ +--- +title: SHOW IMPORT +summary: TiDB 数据库中 SHOW IMPORT 的使用概况。 +--- + +# SHOW IMPORT + +`SHOW IMPORT` 语句用于显示 TiDB 中已经创建的 IMPORT 任务。该语句只能显示由当前用户创建的任务。 + +## 所需权限 + +- 对于 `SHOW IMPORT JOBS` 语句,如果用户有 `SUPER` 权限,则可以看到所有 job,否则只能看到当前用户创建的 job。 +- 对于 `SHOW IMPORT JOB `,只有 job 创建者或者拥有 `SUPER` 权限的用户才可以查看。 + +## 语法图 + +```ebnf+diagram +ShowImportJobsStmt ::= + 'SHOW' 'IMPORT' 'JOBS' + +ShowImportJobStmt ::= + 'SHOW' 'IMPORT' 'JOB' JobID +``` + +`SHOW IMPORT` 语句输出结果的字段含义如下: + +| 列名 | 说明 | +|------------------|-------------------------| +| Job_ID | 任务 ID | +| Data_Source | 数据源信息 | +| Target_Table | 目标表 | +| Phase | 表示任务当前所处的阶段,导入过程分为 `importing`、`validating`、`add-index` 等阶段 | +| Status | 表示当前任务的状态。有以下几种状态:`pending` 表示任务已创建但还未开始运行;`running` 表示运行中;`canceled` 表示已经取消的任务;`failed` 表示任务失败并退出;`finished` 表示任务已完成。| +| Source_File_Size | 源文件大小 | +| Imported_Rows | 已经读到并写入目标表的数据行数 | +| Result_Message | 如果导入失败,则返回错误信息,否则为空。| +| Create_Time | 任务创建时间 | +| Start_Time | 任务启动时间 | +| End_Time | 任务结束时间 | +| Created_By | 创建该任务的数据库用户名 | + +## 示例 + +```sql +SHOW IMPORT JOBS; +``` + +``` ++--------+-------------------+--------------+----------+-------+----------+------------------+---------------+----------------+----------------------------+----------------------------+----------------------------+------------+ +| Job_ID | Data_Source | Target_Table | Table_ID | Phase | Status | Source_File_Size | Imported_Rows | Result_Message | Create_Time | Start_Time | End_Time | Created_By | ++--------+-------------------+--------------+----------+-------+----------+------------------+---------------+----------------+----------------------------+----------------------------+----------------------------+------------+ +| 1 | /path/to/file.csv | `test`.`foo` | 116 | | finished | 11GB | 950000 | | 2023-06-26 11:23:59.281257 | 2023-06-26 11:23:59.484932 | 2023-06-26 13:04:30.622952 | root@% | +| 2 | /path/to/file.csv | `test`.`bar` | 130 | | finished | 1.194TB | 49995000 | | 2023-06-26 15:42:45.079237 | 2023-06-26 15:42:45.388108 | 2023-06-26 17:29:43.023568 | root@% | ++--------+-------------------+--------------+----------+-------+----------+------------------+---------------+----------------+----------------------------+----------------------------+----------------------------+------------+ +1 row in set (0.01 sec) +``` + +```sql +SHOW IMPORT JOB 60001; +``` + +``` ++--------+--------------------+--------------+----------+-------+---------+------------------+---------------+----------------+----------------------------+------------+----------+------------+ +| Job_ID | Data_Source | Target_Table | Table_ID | Phase | Status | Source_File_Size | Imported_Rows | Result_Message | Create_Time | Start_Time | End_Time | Created_By | ++--------+--------------------+--------------+----------+-------+---------+------------------+---------------+----------------+----------------------------+------------+----------+------------+ +| 60001 | /path/to/small.csv | `test`.`t` | 361 | | pending | 16B | NULL | | 2023-06-08 15:59:37.047703 | NULL | NULL | root@% | ++--------+--------------------+--------------+----------+-------+---------+------------------+---------------+----------------+----------------------------+------------+----------+------------+ +1 row in set (0.01 sec) +``` + +## MySQL 兼容性 + +该语句是 TiDB 对 MySQL 语法的扩展。 + +## 另请参阅 + +* [`IMPORT INTO`](/sql-statements/sql-statement-import-into.md) +* [`CANCEL IMPORT JOB`](/sql-statements/sql-statement-cancel-import-job.md) diff --git a/system-variables.md b/system-variables.md index 298d2a8f8363..b96eecd197a7 100644 --- a/system-variables.md +++ b/system-variables.md @@ -1255,7 +1255,8 @@ mysql> SELECT job_info FROM mysql.analyze_jobs ORDER BY end_time DESC LIMIT 1; - 是否持久化到集群:是 - 默认值:`OFF` - 这个变量用于控制是否开启 [TiDB 后端任务分布式框架](/tidb-distributed-execution-framework.md)。开启分布式框架后,DDL 和 Import 等后端任务将会由集群中多个 TiDB 节点共同完成。 -- 在 TiDB v7.1.0 中,只支持分布式执行分区表的 `ADD INDEX`。 +- 从 TiDB v7.1.0 开始,支持分布式执行分区表的 [`ADD INDEX`](/sql-statements/sql-statement-add-index.md)。 +- 从 TiDB v7.2.0 开始,支持分布式导入任务 [`IMPORT INTO`](/sql-statements/sql-statement-import-into.md)。 - 该变量由 `tidb_ddl_distribute_reorg` 改名而来。 ### `tidb_ddl_error_count_limit` diff --git a/tidb-configuration-file.md b/tidb-configuration-file.md index 962f7fc0ed98..a6b907a3a8b7 100644 --- a/tidb-configuration-file.md +++ b/tidb-configuration-file.md @@ -46,6 +46,7 @@ TiDB 配置文件比命令行参数支持更多的选项。你可以在 [config/ + TiDB 用于存放临时数据的路径。如果一个功能需要使用 TiDB 节点的本地存储,TiDB 将把对应数据临时存放在这个目录下。 + 在创建索引的过程中,如果开启了[创建索引加速](/system-variables.md#tidb_ddl_enable_fast_reorg-从-v630-版本开始引入),那么新创建索引需要回填的数据会被先存放在 TiDB 本地临时存储路径,然后批量导入到 TiKV,从而提升索引创建速度。 ++ 在使用 [`IMPORT INTO`](/sql-statements/sql-statement-import-into.md) 导入数据时,排序后的数据会被先存放在 TiDB 本地临时存储路径,然后批量导入到 TiKV。 + 默认值:"/tmp/tidb" ### `oom-use-tmp-storage` diff --git a/tidb-distributed-execution-framework.md b/tidb-distributed-execution-framework.md index b9ceda19f7ca..232396f08254 100644 --- a/tidb-distributed-execution-framework.md +++ b/tidb-distributed-execution-framework.md @@ -19,7 +19,7 @@ TiDB 采用计算存储分离架构,具有出色的扩展性和弹性的扩缩 ## 使用场景与限制 -在数据库中,除了核心的事务型负载任务 (TP) 和分析型查询任务 (AP),也存在着其他重要任务,如 DDL 语句、Load Data、TTL、Analyze 和 Backup/Restore 等,即**后端任务**。这些任务需要处理数据库对象(表)中的大量数据,通常具有如下特点: +在数据库中,除了核心的事务型负载任务 (TP) 和分析型查询任务 (AP),也存在着其他重要任务,如 DDL 语句、IMPORT INTO、TTL、Analyze 和 Backup/Restore 等,即**后端任务**。这些任务需要处理数据库对象(表)中的大量数据,通常具有如下特点: - 需要处理一个 schema 或者一个数据库对象(表)中的所有数据。 - 可能需要周期执行,但频率较低。 @@ -31,12 +31,16 @@ TiDB 采用计算存储分离架构,具有出色的扩展性和弹性的扩缩 - 支持后端任务分布式执行,可以在整个 TiDB 集群可用的计算资源范围内进行灵活的调度,从而更好地利用 TiDB 集群内的计算资源。 - 提供统一的资源使用和管理能力,从整体和单个后端任务两个维度提供资源管理的能力。 -目前,后端任务分布式框架仅支持分布式执行 `ADD INDEX`,即 DDL 创建索引的场景。例如以下 SQL 语句: +目前,后端任务分布式框架支持分布式执行 `ADD INDEX` 和 `IMPORT INTO`。 -```sql -ALTER TABLE t1 ADD INDEX idx1(c1); -CREATE INDEX idx1 ON table t1(c1); -``` +- `ADD INDEX`,即 DDL 创建索引的场景。例如以下 SQL 语句: + + ```sql + ALTER TABLE t1 ADD INDEX idx1(c1); + CREATE INDEX idx1 ON table t1(c1); + ``` + +- `IMPORT INTO` 用于将 `CSV`、`SQL`、`PARQUET` 等格式的数据导入到一张空表中。详情请参考 [`IMPORT INTO`](/sql-statements/sql-statement-import-into.md)。 ## 启用前提 From 15cfe921e14f3c95948ca6cd8034086b61b09069 Mon Sep 17 00:00:00 2001 From: Elsa <111482174+elsa0520@users.noreply.github.com> Date: Wed, 28 Jun 2023 20:33:15 +0800 Subject: [PATCH 224/257] add runtime filter session variable (#14328) --- system-variables.md | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/system-variables.md b/system-variables.md index b96eecd197a7..ec13a5858aec 100644 --- a/system-variables.md +++ b/system-variables.md @@ -3703,6 +3703,30 @@ EXPLAIN FORMAT='brief' SELECT COUNT(1) FROM t WHERE a = 1 AND b IS NOT NULL; - 需要注意的是修改该变量不会对已保存的老数据产生影响,只会对修改变量后的新写入数据使用对应版本格式保存。 +### `tidb_runtime_filter_mode` 从 v7.2.0 版本开始引入 + +> **警告:** +> +> 当前版本中该变量控制的功能尚未完全生效,请保留默认值。 + +- 作用域:SESSION | GLOBAL +- 是否持久化到集群:是 +- 类型:枚举型 +- 默认值:`OFF` +- 可选值:`OFF`,`LOCAL` + +### `tidb_runtime_filter_type` 从 v7.2.0 版本开始引入 + +> **警告:** +> +> 当前版本中该变量控制的功能尚未完全生效,请保留默认值。 + +- 作用域:SESSION | GLOBAL +- 是否持久化到集群:是 +- 类型:枚举型 +- 默认值:`IN` +- 可选值:`IN` + ### `tidb_scatter_region` - 作用域:GLOBAL From 4c784af3e8b08f992b507cc314f279a8a0404002 Mon Sep 17 00:00:00 2001 From: Lucas Date: Wed, 28 Jun 2023 20:40:46 +0800 Subject: [PATCH 225/257] rocksdb.*cf: supply descriptions on `ttl` and `periodic-compaction-seconds`. (#14312) --- tikv-configuration-file.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/tikv-configuration-file.md b/tikv-configuration-file.md index bed96e1a7289..e3f46e0d2b47 100644 --- a/tikv-configuration-file.md +++ b/tikv-configuration-file.md @@ -1546,6 +1546,18 @@ rocksdb defaultcf、rocksdb writecf 和 rocksdb lockcf 相关的配置项。 - `5`:适用于 TiKV v6.1 及以上版本。全量和分区 filter 采用一种具有不同模式的、更快、更准确的 Bloom filter 实现。 + 默认值:`2` +### `ttl` 从 v7.2.0 版本开始引入 + ++ 设置 SST 文件被自动选中执行 compaction 的 TTL 时间。更新时间超过此值的 SST 文件将被选中并进行 compaction。在执行 compaction 时,这些 SST 文件通常以级联的方式进行压缩,以便被压缩到最底层或最底层的文件中。 ++ 默认值:`30d` ++ 单位:s(second)|h(hour)|d(day) + +### `periodic-compaction-seconds` 从 v7.2.0 版本开始引入 + ++ 设置周期性 compaction 的时间。更新时间超过此值的 SST 文件将被选中进行 compaction,并被重新写入这些 SST 文件所在的层级。 ++ 默认值:`30d` ++ 单位:s(second)|h(hour)|d(day) + ## rocksdb.defaultcf.titan rocksdb defaultcf titan 相关的配置项。 From abaacc3e3a10ffbf31ee260b99bb2cf581be0931 Mon Sep 17 00:00:00 2001 From: Grace Cai Date: Thu, 29 Jun 2023 10:10:43 +0800 Subject: [PATCH 226/257] Update cdnfresh.txt for v7.2 (#14354) --- resources/cdnfresh.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/resources/cdnfresh.txt b/resources/cdnfresh.txt index ca595ef8a559..e64e981c8c4a 100644 --- a/resources/cdnfresh.txt +++ b/resources/cdnfresh.txt @@ -2,6 +2,8 @@ https://download.pingcap.org/tidb-dev-zh-manual.pdf https://download.pingcap.org/tidb-dev-en-manual.pdf https://download.pingcap.org/tidb-stable-zh-manual.pdf https://download.pingcap.org/tidb-stable-en-manual.pdf +https://download.pingcap.org/tidb-v7.2-zh-manual.pdf +https://download.pingcap.org/tidb-v7.2-en-manual.pdf https://download.pingcap.org/tidb-v7.0-zh-manual.pdf https://download.pingcap.org/tidb-v7.0-en-manual.pdf https://download.pingcap.org/tidb-v6.5-zh-manual.pdf From 2cdfe73530c7bdbd57ac59dc36883cbd1b809a44 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=BA=8C=E6=89=8B=E6=8E=89=E5=8C=85=E5=B7=A5=E7=A8=8B?= =?UTF-8?q?=E5=B8=88?= Date: Thu, 29 Jun 2023 11:10:43 +0800 Subject: [PATCH 227/257] ticdc: add kafka oauth configurations (#14198) --- ticdc/ticdc-changefeed-config.md | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/ticdc/ticdc-changefeed-config.md b/ticdc/ticdc-changefeed-config.md index ca3591746ed7..a5e777ce75dd 100644 --- a/ticdc/ticdc-changefeed-config.md +++ b/ticdc/ticdc-changefeed-config.md @@ -81,7 +81,7 @@ rules = ['*.*', '!test.*'] # 默认值为空列表。 # IgnoreTxnStartTs = [] -# 事件过滤器规则 +# 事件过滤器规则 # 事件过滤器的详细配置规则可参考:https://docs.pingcap.com/zh/tidb/stable/ticdc-filter # 第一个事件过滤器规则 # [[filter.event-filters]] @@ -204,4 +204,21 @@ use-file-backend = false integrity-check-level = "none" # 当单行数据的 Checksum 校验失败时,Changefeed 打印错误行数据相关日志的级别。默认值为 "warn",可选值为 "warn" 和 "error"。 corruption-handle-level = "warn" + +# 以下参数仅在下游为 Kafka 时生效。 +[sink.kafka-config] +# Kafka SASL 认证机制。该参数默认值为空,表示不使用 SASL 认证。 +sasl-mechanism = "OAUTHBEARER" +# Kafka SASL OAUTHBEARER 认证机制中的 client-id。默认值为空。在使用该认证机制时,该参数必填。 +sasl-oauth-client-id = "producer-kafka" +# Kafka SASL OAUTHBEARER 认证机制中的 client-secret。默认值为空。需要 Base64 编码。在使用该认证机制时,该参数必填。 +sasl-oauth-client-secret = "cHJvZHVjZXIta2Fma2E=" +# Kafka SASL OAUTHBEARER 认证机制中的 token-url 用于获取 token。默认值为空。在使用该认证机制时,该参数必填。 +sasl-oauth-token-url = "http://127.0.0.1:4444/oauth2/token" +# Kafka SASL OAUTHBEARER 认证机制中的 scopes。默认值为空。在使用该认证机制时,该参数可选填。 +sasl-oauth-scopes = ["producer.kafka", "consumer.kafka"] +# Kafka SASL OAUTHBEARER 认证机制中的 grant-type。默认值为 "client_credentials"。在使用该认证机制时,该参数可选填。 +sasl-oauth-grant-type = "client_credentials" +# Kafka SASL OAUTHBEARER 认证机制中的 audience。默认值为空。在使用该认证机制时,该参数可选填。 +sasl-oauth-audience = "kafka" ``` From fc5e7c92c87f92c91e10dc01b9a2d2671809f89a Mon Sep 17 00:00:00 2001 From: niubell Date: Thu, 29 Jun 2023 11:12:13 +0800 Subject: [PATCH 228/257] tidb-lightning: add 50 TB data import best practices (#14271) --- TOC.md | 3 +- tidb-lightning/data-import-best-practices.md | 156 +++++++++++++++++++ 2 files changed, 158 insertions(+), 1 deletion(-) create mode 100644 tidb-lightning/data-import-best-practices.md diff --git a/TOC.md b/TOC.md index 60540bcad325..82dcea3562b2 100644 --- a/TOC.md +++ b/TOC.md @@ -102,7 +102,8 @@ - [对 TiDB 进行 CH-benCHmark 测试](/benchmark/benchmark-tidb-using-ch.md) - 数据迁移 - [数据迁移概述](/migration-overview.md) - - [迁移工具](/migration-tools.md) + - [数据迁移工具](/migration-tools.md) + - [数据导入最佳实践](/tidb-lightning/data-import-best-practices.md) - 数据迁移场景 - [从 Aurora 迁移数据到 TiDB](/migrate-aurora-to-tidb.md) - [从小数据量 MySQL 迁移数据到 TiDB](/migrate-small-mysql-to-tidb.md) diff --git a/tidb-lightning/data-import-best-practices.md b/tidb-lightning/data-import-best-practices.md new file mode 100644 index 000000000000..2524d493d9a3 --- /dev/null +++ b/tidb-lightning/data-import-best-practices.md @@ -0,0 +1,156 @@ +--- +title: 50 TiB 数据导入最佳实践 +summary: 了解将大规模数据导入 TiDB 的最佳实践。 +--- + +# 50 TiB 数据导入最佳实践 + +本文提供了将大规模数据导入 TiDB 的最佳实践,包括影响数据导入的一些关键因素和操作步骤。PingCAP 在内部环境和客户现场都曾成功导入过 50 TiB 以上的大单表数据,基于这些真实的应用场景,沉淀了本文中的最佳实践,希望可以帮你更顺畅更高效地导入大规模数据。 + +TiDB Lightning([物理导入模式](/tidb-lightning/tidb-lightning-physical-import-mode.md))是一款用于将离线数据导入空表、空集群的高效的数据导入工具。TiDB Lightning 以文件作为数据源,提供了单实例和[并行导入](/tidb-lightning/tidb-lightning-distributed-import.md)两种运行方式,以满足不同规模的源文件导入。 + +- 如果源文件数据规模在 10 TiB 以内,建议通过单个 TiDB Lightning 实例进行导入。 +- 如果源文件数据规模超过 10 TiB,建议通过多个 TiDB Lightning 实例进行[并行导入](/tidb-lightning/tidb-lightning-distributed-import.md)。 +- 如果源文件数据规模特别大(比如达到 50 TiB 及以上),在使用并行导入的同时,还需要针对源数据特点、表定义、参数配置等进行一定的准备和调优,才能更好、更快地完成大规模的数据导入。 + +本文中的以下内容同时适用于导入多表和导入大单表: + +- [关键因素](#关键因素) +- [准备源文件](#准备源文件) +- [预估存储空间](#预估存储空间) +- [配置参数](#配置参数) +- [解决 "checksum mismatch" 问题](#解决-checksum-mismatch-问题) +- [开启断点续传](#开启断点续传) +- [故障处理](#故障处理) + +由于导入大单表有一些特殊要求,以下章节单独介绍了相关最佳实践: + +- [导入大单表的最佳实践](#导入大单表的最佳实践) + +## 关键因素 + +在导入大量数据时,以下关键因素会影响导入性能,甚至可能影响导入成败: + +- 源文件 + + - 单个文件内数据是否按照主键有序。有序可以达到最优导入性能。 + - 多个 TiDB Lightning 实例导入的源文件之间,是否存在重叠的主键或者非空唯一索引。重叠越少,导入性能越好。 + +- 表定义 + + - 每个表的二级索引数量、大小会影响导入速度。索引越少,导入越快,导入后占用空间越小。 + - 索引数据大小 = 索引数量 \* 索引大小 \* 数据行数。 + +- 压缩率 + + 数据导入 TiDB 集群后会被压缩存储,而压缩率无法预先计算,只有数据真正导入到 TiKV 集群后才能计算。可以先尝试导入少量数据(如 10%),获取到集群对应的压缩率,然后以此作为全部数据导入后的压缩率。 + +- 配置参数 + + 以下配置参数的设置也会影响导入性能: + + - `region-concurrency`:TiDB Lightning 主逻辑处理的并发度。 + - `send-kv-pairs`:TiDB Lightning 发送给 TiKV 单次请求中的 KV 数量。 + - `disk-quota`:使用物理导入模式时,配置 TiDB Lightning 本地临时文件使用的磁盘配额。 + - `GOMEMLIMIT`:TiDB Lightning 采用 Go 语言实现,需要[合理配置 `GOMEMLIMIT`](#配置参数)。 + + 关于 TiDB Lightning 参数信息,请参考 [TiDB Lightning 配置参数](/tidb-lightning/tidb-lightning-configuration.md)。 + +- 数据校验 + + 数据和索引导入完成后,会对每个表执行 [`ADMIN CHECKSUM`](/sql-statements/sql-statement-admin-checksum-table.md),然后和 TiDB Lightning 本地的 Checksum 值做对比。当有很多表或单个表有很多行时,Checksum 阶段耗时会很长。 + +- 执行计划 + + Checksum 通过后,会对每个表执行 [`ANALYZE TABLE`](/sql-statements/sql-statement-analyze-table.md),构建最佳的执行计划。当有很多表或单个表很大时,ANALYZE 阶段耗时会很长。 + +- 相关 Issue + + 在实际导入 50 TiB 数据的过程中,存在一些在海量源文件及大规模集群下才会暴露出的问题。在选择产品版本时,请检查该版本是否已经修复了某些影响导入性能的 Issue。以下 Issue 在 v6.5.3、v7.1.0 及更新的版本中都已修复: + + - [Issue-14745](https://github.com/tikv/tikv/issues/14745):导入完成后,TiKV Import 目录遗留大量临时文件。 + - [Issue-6426](https://github.com/tikv/pd/issues/6426):PD [范围调度](/tidb-lightning/tidb-lightning-physical-import-mode-usage.md#导入时暂停-pd-调度的范围)接口存在未打散 Region 的情况,导致 Scatter Region 超时。v6.2.0 之前采用停止全局调度的方式,不会出现该问题。 + - [Issue-43079](https://github.com/pingcap/tidb/pull/43079):TiDB Lightning 对 NotLeader 错误的重试未刷新 Region Peers 信息。 + - [Issue-43291](https://github.com/pingcap/tidb/issues/43291):TiDB Lightning 未对临时文件删除的情况("No such file or directory")进行重试。 + +## 准备源文件 + +- 在生成文件时,在单个文件内尽量按照主键排序;如果表定义没有主键,可以添加一个自增主键,此时对文件内容顺序无要求。 +- 在给多个 TiDB Lightning 实例分配要导入的源文件时,尽量避免多个源文件之间存在重叠的主键或非空唯一索引的情况。如果生成文件是全局有序,可以按照范围划分不同的文件给不同 TiDB Lightning 实例进行导入,达到最佳导入效果。 +- 在生成文件时,每个文件尽量控制在 96 MiB 以下。 +- 如果文件特别大,超过 256 MiB,需要开启 [`strict-format`](/migrate-from-csv-files-to-tidb.md#第-4-步导入性能优化可选)。 + +## 预估存储空间 + +目前有以下两种有效的空间预估方法: + +- 假设数据总大小为 A,索引总大小为 B,副本数为 3,压缩率为 α(一般在 2.5 左右),则总的占用空间为:(A+B)\*3/α。该方法主要用于不进行任何数据导入时的估算,以此规划集群拓扑。 +- 预先导入 10% 的数据,实际占用空间再乘以 10,即可认为是该批数据最终的占用空间。该方法更加准确,尤其是对于导入大量数据时比较有效。 + +注意要预留 20% 的存储空间,后台任务如压缩、复制快照等会使用部分存储空间。 + +## 配置参数 + +需要正确设置以下配置参数: + +- `region-concurrency`:TiDB Lightning 主逻辑处理的并发度。在并行导入时,可以设置为 CPU 核数的 75%,防止出现资源过载带来 OOM 问题。 +- `send-kv-pairs`:TiDB Lightning 发送给 TiKV 单次请求中的 KV 数量。建议按照 send-kv-pairs \* row-size < 1 MiB 调整该值。v7.2.0 版本中,用 `send-kv-size` 代替了该参数,且无需单独设置。 +- `disk-quota`:尽量保证 TiDB Lightning 排序目录空间大于数据源大小。如无法保证,可以设置 `disk-quota` 为 TiDB Lightning 排序目录空间的 80%。此时 TiDB Lightning 会按照 `disk-quota` 的大小为一个批次去排序、写入,导入性能低于完整排序。 +- `GOMEMLIMIT`:TiDB Lightning 采用 Go 语言实现,设置 `GOMEMLIMIT` 为实例内存的 80%,降低因为 Go GC 机制带来的 OOM 概率。 + +关于 TiDB Lightning 参数信息,请参考 [TiDB Lightning 配置参数](/tidb-lightning/tidb-lightning-configuration.md)。 + +## 解决 "checksum mismatch" 问题 + +在数据校验过程中,可能会出现冲突数据,报错信息为:"checksum mismatch"。出现该问题,可以按照以下思路解决: + +1. 排查源数据是否有主键、唯一键冲突,解决冲突后再重新导入。根据以往经验,主键和唯一键冲突是导致该报错的主要原因。 +2. 表的主键、唯一键定义是否合理。如果不合理,更改表定义后重新导入。 +3. 如果按上述两个步骤操作后仍未解决问题,需要进一步判断源数据中是否有少量(低于 10%)不可预期的冲突数据。如果需要 TiDB Lightning 帮助检测、解决冲突数据,需要开启[冲突检测功能](/tidb-lightning/tidb-lightning-physical-import-mode-usage.md#冲突数据检测)。 + +## 开启断点续传 + +大规模的数据导入,一定要参照[断点续传](/tidb-lightning/tidb-lightning-checkpoints.md)文档,开启断点续传,并推荐优先使用 MySQL 作为 Driver,避免因为 TiDB Lightning 运行在容器环境,容器退出后断点信息被一并删除。 + +如果导入过程中遇到下游 TiKV 空间不足,可以手动执行 `kill` 命令关闭(不要带 `-9` 选项)所有 TiDB Lightning 实例,待扩容后,基于断点信息继续导入。 + +## 导入大单表的最佳实践 + +多表导入会导致 Checksum、ANALYZE 时间的增加,甚至超过数据导入本身,但是一般不需要调整配置。如果多表中存在单个或多个大表的情况,可以把这类大表的源文件划分出来,单独进行导入。 + +本小节重点介绍大单表导入的最佳实践。大单表没有严格的定义,一般认为符合以下任一条件者即为大单表: + +- 大小超过 10 TiB +- 行数超过 10 亿、列数超过 50 的宽表 + +### 生成源文件 + +根据上述[准备源文件的步骤](#准备源文件)生成源文件,对于大单表,如果不能做到全局有序,但是可以做到文件内按主键有序,且是标准的 CSV 文件,可以尽量生成单个大文件(例如每个 20 GiB),然后开启 [`strict-format`](/migrate-from-csv-files-to-tidb.md#第-4-步导入性能优化可选),既可以降低 TiDB Lightning 实例之间导入的数据文件中存在主键和唯一键的重叠,又能在导入前由 TiDB Lightning 实例对大文件进行切分,达到最佳的导入速度。 + +### 规划集群拓扑 + +按照每个 TiDB Lightning 实例处理 5 TiB 到 10 TiB 源数据进行准备,每个机器节点部署一个 TiDB Lightning 实例。机器节点规格可以参照 [TiDB Lightning 实例必要条件及限制](/tidb-lightning/tidb-lightning-physical-import-mode.md#必要条件及限制)。 + +### 调整配置参数 + +需要调整以下配置参数: + +- `region-concurrency` 设置为 TiDB Lightning 实例核数的 75%。 +- `send-kv-pairs` 设置为 `3200`。适用于 v7.1.0 及更早的版本。v7.2.0 开始引入了 `send-kv-size` 参数代替 `send-kv-pairs`,该参数无需配置。 +- `GOMEMLIMIT` 调整为实例所在节点内存的 80%。 + +如果导入过程中发现 PD Scatter Region 的时延超过 30 分钟,可以从以下维度进行调优: + +- 排查 TiKV 集群是否遇到 I/O 瓶颈。 +- 调高 TiKV `raftstore.apply-pool-size`,从默认值 `2` 调整为 `4` 或 `8`。 +- 降低 TiDB Lightning `region-split-concurrency` 为 CPU 核数的一半,最低可调整为 `1`。 + +### 关闭执行计划 `analyze` + +当存在单个大表的情况,建议关闭 `analyze` (`analyze="off"`)。在导入结束后,再手动执行 [`ANALYZE TABLE`](/sql-statements/sql-statement-analyze-table.md)。 + +关于 `analyze` 的相关配置,请参考 [TiDB Lightning 任务配置](/tidb-lightning/tidb-lightning-configuration.md#tidb-lightning-任务配置)。 + +## 故障处理 + +如果在使用 TiDB Lightning 的过程中遇到问题,请参考 [TiDB Lightning 故障处理](/tidb-lightning/troubleshoot-tidb-lightning.md)。 From ffa90f19d9ea6956c9bb711c173e53315f91e867 Mon Sep 17 00:00:00 2001 From: Ling Jin <7138436+3AceShowHand@users.noreply.github.com> Date: Thu, 29 Jun 2023 11:13:43 +0800 Subject: [PATCH 229/257] cdc: add ticdc checksum verification sample (#14337) --- TOC.md | 4 +- ticdc/ticdc-avro-checksum-verification.md | 514 ++++++++++++++++++++++ ticdc/ticdc-integrity-check.md | 18 +- 3 files changed, 518 insertions(+), 18 deletions(-) create mode 100644 ticdc/ticdc-avro-checksum-verification.md diff --git a/TOC.md b/TOC.md index 82dcea3562b2..62cffe991d9a 100644 --- a/TOC.md +++ b/TOC.md @@ -547,7 +547,9 @@ - [TiCDC CSV Protocol](/ticdc/ticdc-csv.md) - [TiCDC Open API v2](/ticdc/ticdc-open-api-v2.md) - [TiCDC Open API v1](/ticdc/ticdc-open-api.md) - - [Storage sink 消费程序编写指引](/ticdc/ticdc-storage-consumer-dev-guide.md) + - TiCDC 数据消费 + - [基于 Avro 的 TiCDC 行数据 Checksum 校验](/ticdc/ticdc-avro-checksum-verification.md) + - [Storage sink 消费程序编写指引](/ticdc/ticdc-storage-consumer-dev-guide.md) - [兼容性](/ticdc/ticdc-compatibility.md) - [故障处理](/ticdc/troubleshoot-ticdc.md) - [常见问题解答](/ticdc/ticdc-faq.md) diff --git a/ticdc/ticdc-avro-checksum-verification.md b/ticdc/ticdc-avro-checksum-verification.md new file mode 100644 index 000000000000..94694deceb54 --- /dev/null +++ b/ticdc/ticdc-avro-checksum-verification.md @@ -0,0 +1,514 @@ +--- +title: 基于 Avro 的 TiCDC 行数据 Checksum 校验 +summary: 介绍 TiCDC 行数据 Checksum 校验的具体实现。 +--- + +# 基于 Avro 的 TiCDC 行数据 Checksum 校验 + +本文介绍如何使用 Golang 消费 TiCDC 发送到 Kafka、且由 Avro 协议编码的数据,以及如何基于[单行数据 Checksum 功能](/ticdc/ticdc-integrity-check.md)进行数据校验。 + +本示例代码位于 [`avro-checksum-verification`](https://github.com/pingcap/tiflow/tree/master/examples/golang/avro-checksum-verification) 目录下。 + +本文使用 [kafka-go](https://github.com/segmentio/kafka-go) 实现一个简单的 Kafka Consumer 程序。该程序不断地从指定的 Topic 中读取数据、计算并校验 Checksum 值。 + +```go +package main + +import ( + "context" + "encoding/binary" + "encoding/json" + "hash/crc32" + "io" + "math" + "net/http" + "strconv" + "strings" + + "github.com/linkedin/goavro/v2" + "github.com/pingcap/log" + "github.com/pingcap/tidb/parser/mysql" + "github.com/pingcap/tidb/types" + "github.com/pingcap/tiflow/pkg/errors" + "github.com/segmentio/kafka-go" + "go.uber.org/zap" +) + +const ( + // confluent avro wire format, the first byte is always 0 + // https://docs.confluent.io/platform/current/schema-registry/fundamentals/serdes-develop/index.html#wire-format + magicByte = uint8(0) +) + +func main() { + var ( + kafkaAddr = "127.0.0.1:9092" + schemaRegistryURL = "http://127.0.0.1:8081" + + topic = "avro-checksum-test" + consumerGroupID = "avro-checksum-test" + ) + + consumer := kafka.NewReader(kafka.ReaderConfig{ + Brokers: []string{kafkaAddr}, + GroupID: consumerGroupID, + Topic: topic, + MaxBytes: 10e6, // 10MB + }) + defer consumer.Close() + + ctx := context.Background() + log.Info("start consuming ...", zap.String("kafka", kafkaAddr), zap.String("topic", topic), zap.String("groupID", consumerGroupID)) + for { + // 1. 获取 kafka 消息 + message, err := consumer.FetchMessage(ctx) + if err != nil { + log.Error("read kafka message failed", zap.Error(err)) + } + + value := message.Value + if len(value) == 0 { + log.Info("delete event does not have value, skip checksum verification", zap.String("topic", topic)) + } + + // 2. 对 value 进行解码,得到对应的 value map 和 schema map + valueMap, valueSchema, err := getValueMapAndSchema(value, schemaRegistryURL) + if err != nil { + log.Panic("decode kafka value failed", zap.String("topic", topic), zap.ByteString("value", value), zap.Error(err)) + } + + // 3. 使用上一步得到的 value map 和 schema map,计算并且校验 checksum + err = CalculateAndVerifyChecksum(valueMap, valueSchema) + if err != nil { + log.Panic("calculate checksum failed", zap.String("topic", topic), zap.ByteString("value", value), zap.Error(err)) + } + + // 4. 数据消费成功,提交 offset + if err := consumer.CommitMessages(ctx, message); err != nil { + log.Error("commit kafka message failed", zap.Error(err)) + break + } + } +} +``` + +从上面的代码可以看出,`getValueMapAndSchema()` 和 `CalculateAndVerifyChecksum()` 是计算 Checksum 的关键步骤,下面分别介绍这两个函数的实现。 + +## 解码数据以及获取相应的 Schema + +`getValueMapAndSchema()` 方法的主要作用是解码数据以及获取相应的 schema,二者均以 `map[string]interface{}` 类型返回。 + +```go +// data is received kafka message's key or value, url is the schema registry url. +// return the decoded value and corresponding schema as map. +func getValueMapAndSchema(data []byte, url string) (map[string]interface{}, map[string]interface{}, error) { + schemaID, binary, err := extractSchemaIDAndBinaryData(data) + if err != nil { + return nil, nil, err + } + + codec, err := GetSchema(url, schemaID) + if err != nil { + return nil, nil, err + } + + native, _, err := codec.NativeFromBinary(binary) + if err != nil { + return nil, nil, err + } + + result, ok := native.(map[string]interface{}) + if !ok { + return nil, nil, errors.New("raw avro message is not a map") + } + + schema := make(map[string]interface{}) + if err := json.Unmarshal([]byte(codec.Schema()), &schema); err != nil { + return nil, nil, errors.Trace(err) + } + + return result, schema, nil +} + +// extractSchemaIDAndBinaryData +func extractSchemaIDAndBinaryData(data []byte) (int, []byte, error) { + if len(data) < 5 { + return 0, nil, errors.ErrAvroInvalidMessage.FastGenByArgs() + } + if data[0] != magicByte { + return 0, nil, errors.ErrAvroInvalidMessage.FastGenByArgs() + } + return int(binary.BigEndian.Uint32(data[1:5])), data[5:], nil +} + +// GetSchema query the schema registry to fetch the schema by the schema id. +// return the goavro.Codec which can be used to encode and decode the data. +func GetSchema(url string, schemaID int) (*goavro.Codec, error) { + requestURI := url + "/schemas/ids/" + strconv.Itoa(schemaID) + + req, err := http.NewRequest("GET", requestURI, nil) + if err != nil { + log.Error("Cannot create the request to look up the schema", zap.Error(err)) + return nil, errors.WrapError(errors.ErrAvroSchemaAPIError, err) + } + req.Header.Add( + "Accept", + "application/vnd.schemaregistry.v1+json, application/vnd.schemaregistry+json, "+ + "application/json", + ) + + httpClient := &http.Client{} + resp, err := httpClient.Do(req) + if err != nil { + return nil, err + } + defer resp.Body.Close() + + body, err := io.ReadAll(resp.Body) + if err != nil { + log.Error("Cannot parse the lookup schema response", zap.Error(err)) + return nil, errors.WrapError(errors.ErrAvroSchemaAPIError, err) + } + + if resp.StatusCode == 404 { + log.Warn("Specified schema not found in Registry", zap.String("requestURI", requestURI), zap.Int("schemaID", schemaID)) + return nil, errors.ErrAvroSchemaAPIError.GenWithStackByArgs("Schema not found in Registry") + } + + if resp.StatusCode != 200 { + log.Error("Failed to query schema from the Registry, HTTP error", + zap.Int("status", resp.StatusCode), zap.String("uri", requestURI), zap.ByteString("responseBody", body)) + return nil, errors.ErrAvroSchemaAPIError.GenWithStack("Failed to query schema from the Registry, HTTP error") + } + + var jsonResp lookupResponse + err = json.Unmarshal(body, &jsonResp) + if err != nil { + log.Error("Failed to parse result from Registry", zap.Error(err)) + return nil, errors.WrapError(errors.ErrAvroSchemaAPIError, err) + } + + codec, err := goavro.NewCodec(jsonResp.Schema) + if err != nil { + return nil, errors.WrapError(errors.ErrAvroSchemaAPIError, err) + } + return codec, nil +} + +type lookupResponse struct { + Name string `json:"name"` + SchemaID int `json:"id"` + Schema string `json:"schema"` +} + +``` + +## 计算并校验 Checksum + +上一步获取的 `valueMap` 和 `valueSchema` 包含了所有用于 Checksum 计算和校验的元素。 + +在消费端计算和校验 Checksum 的过程包含以下几个步骤: + +1. 获取期望的 Checksum 值。 +2. 遍历每一列,根据列的数据值和对应的 MySQL Type,生成字节切片,不断更新 Checksum 值。 +3. 将上一步计算得到的 Checksum 和从收到的消息里提取出来的 Checksum 做比较。如果不一致,则说明 Checksum 校验失败,数据可能发生损坏。 + +示例代码如下: + +```go +func CalculateAndVerifyChecksum(valueMap, valueSchema map[string]interface{}) error { + // fields 存放有数据变更事件的每一个列的类型信息,按照每一列的 ID 排序,该顺序和 Checksum 计算顺序相同 + fields, ok := valueSchema["fields"].([]interface{}) + if !ok { + return errors.New("schema fields should be a map") + } + + // 1. 从 valueMap 里面查找期望的 checksum 值,它被编码成 string 类型 + // 如果找不到,说明 TiCDC 发送该条数据时,还没有开启 checksum 功能,直接返回即可 + o, ok := valueMap["_tidb_row_level_checksum"] + if !ok { + return nil + } + expected := o.(string) + if expected == "" { + return nil + } + + // expectedChecksum 即是从 TiCDC 传递而来的期望的 checksum 值 + expectedChecksum, err := strconv.ParseUint(expected, 10, 64) + if err != nil { + return errors.Trace(err) + } + + // 2. 遍历每一个 field,计算 checksum 值 + var actualChecksum uint32 + // buf 用来存储每次更新 checksum 时使用的字节切片 + buf := make([]byte, 0) + for _, item := range fields { + field, ok := item.(map[string]interface{}) + if !ok { + return errors.New("schema field should be a map") + } + + // `tidbOp` 及之后的列不参与到 checksum 计算中,因为它们是一些用于辅助数据消费的列,并非真实的 TiDB 列数据 + colName := field["name"].(string) + if colName == "_tidb_op" { + break + } + + // holder 存放有列类型信息 + var holder map[string]interface{} + switch ty := field["type"].(type) { + case []interface{}: + for _, item := range ty { + if m, ok := item.(map[string]interface{}); ok { + holder = m["connect.parameters"].(map[string]interface{}) + break + } + } + case map[string]interface{}: + holder = ty["connect.parameters"].(map[string]interface{}) + default: + log.Panic("type info is anything else", zap.Any("typeInfo", field["type"])) + } + tidbType := holder["tidb_type"].(string) + + mysqlType := mysqlTypeFromTiDBType(tidbType) + + // 根据每一列的名字,从解码之后的 value map 里拿到该列的值 + value, ok := valueMap[colName] + if !ok { + return errors.New("value not found") + } + value, err := getColumnValue(value, holder, mysqlType) + if err != nil { + return errors.Trace(err) + } + + if len(buf) > 0 { + buf = buf[:0] + } + + // 根据每一列的 value 和 mysqlType,生成用于更新 checksum 的字节切片,然后更新 checksum + buf, err = buildChecksumBytes(buf, value, mysqlType) + if err != nil { + return errors.Trace(err) + } + actualChecksum = crc32.Update(actualChecksum, crc32.IEEETable, buf) + } + + if uint64(actualChecksum) != expectedChecksum { + log.Error("checksum mismatch", + zap.Uint64("expected", expectedChecksum), + zap.Uint64("actual", uint64(actualChecksum))) + return errors.New("checksum mismatch") + } + + log.Info("checksum verified", zap.Uint64("checksum", uint64(actualChecksum))) + return nil +} + +func mysqlTypeFromTiDBType(tidbType string) byte { + var result byte + switch tidbType { + case "INT", "INT UNSIGNED": + result = mysql.TypeLong + case "BIGINT", "BIGINT UNSIGNED": + result = mysql.TypeLonglong + case "FLOAT": + result = mysql.TypeFloat + case "DOUBLE": + result = mysql.TypeDouble + case "BIT": + result = mysql.TypeBit + case "DECIMAL": + result = mysql.TypeNewDecimal + case "TEXT": + result = mysql.TypeVarchar + case "BLOB": + result = mysql.TypeLongBlob + case "ENUM": + result = mysql.TypeEnum + case "SET": + result = mysql.TypeSet + case "JSON": + result = mysql.TypeJSON + case "DATE": + result = mysql.TypeDate + case "DATETIME": + result = mysql.TypeDatetime + case "TIMESTAMP": + result = mysql.TypeTimestamp + case "TIME": + result = mysql.TypeDuration + case "YEAR": + result = mysql.TypeYear + default: + log.Panic("this should not happen, unknown TiDB type", zap.String("type", tidbType)) + } + return result +} + +// value 是一个 interface 类型的值,需要根据 holder 提供的类型信息,做一次转换处理 +func getColumnValue(value interface{}, holder map[string]interface{}, mysqlType byte) (interface{}, error) { + switch t := value.(type) { + // nullable 的列,其值被编码成一个 map,只有一个键值对,键是类型,值是真实的值,此处只关心真实的值 + case map[string]interface{}: + for _, v := range t { + value = v + } + } + + switch mysqlType { + case mysql.TypeEnum: + // Enum 被编码成了 string,此处转换为对应于 Enum 定义的 int 值 + allowed := strings.Split(holder["allowed"].(string), ",") + switch t := value.(type) { + case string: + enum, err := types.ParseEnum(allowed, t, "") + if err != nil { + return nil, errors.Trace(err) + } + value = enum.Value + case nil: + value = nil + } + case mysql.TypeSet: + // Set 被编码成了 string,根据 set 定义的顺序,转换为对应的 int 值 + elems := strings.Split(holder["allowed"].(string), ",") + switch t := value.(type) { + case string: + s, err := types.ParseSet(elems, t, "") + if err != nil { + return nil, errors.Trace(err) + } + value = s.Value + case nil: + value = nil + } + } + return value, nil +} + +// buildChecksumBytes 生成用于更新 checksum 的字节切片, 参考 https://github.com/pingcap/tidb/blob/e3417913f58cdd5a136259b902bf177eaf3aa637/util/rowcodec/common.go#L308 +func buildChecksumBytes(buf []byte, value interface{}, mysqlType byte) ([]byte, error) { + if value == nil { + return buf, nil + } + + switch mysqlType { + // TypeTiny, TypeShort, TypeInt32 被编码成 int32 + // TypeLong 被编码成 int32 if signed, else int64 + // TypeLongLong,如果是 signed,被编码成 int64,否则被编码成 uint64, + // 开启 checksum 功能,bigintUnsignedHandlingMode 必须设置为 string,被编码成 string. + case mysql.TypeTiny, mysql.TypeShort, mysql.TypeLong, mysql.TypeLonglong, mysql.TypeInt24, mysql.TypeYear: + switch a := value.(type) { + case int32: + buf = binary.LittleEndian.AppendUint64(buf, uint64(a)) + case uint32: + buf = binary.LittleEndian.AppendUint64(buf, uint64(a)) + case int64: + buf = binary.LittleEndian.AppendUint64(buf, uint64(a)) + case uint64: + buf = binary.LittleEndian.AppendUint64(buf, a) + case string: + v, err := strconv.ParseUint(a, 10, 64) + if err != nil { + return nil, errors.Trace(err) + } + buf = binary.LittleEndian.AppendUint64(buf, v) + default: + log.Panic("unknown golang type for the integral value", + zap.Any("value", value), zap.Any("mysqlType", mysqlType)) + } + // Float 类型编码为 float32,Double 编码为 float64 + case mysql.TypeFloat, mysql.TypeDouble: + var v float64 + switch a := value.(type) { + case float32: + v = float64(a) + case float64: + v = a + } + if math.IsInf(v, 0) || math.IsNaN(v) { + v = 0 + } + buf = binary.LittleEndian.AppendUint64(buf, math.Float64bits(v)) + // getColumnValue 将 Enum 和 Set 转换为了 uint64 类型 + case mysql.TypeEnum, mysql.TypeSet: + buf = binary.LittleEndian.AppendUint64(buf, value.(uint64)) + case mysql.TypeBit: + // bit 类型编码为 []bytes,需要进一步转换为 uint64 + v, err := binaryLiteralToInt(value.([]byte)) + if err != nil { + return nil, errors.Trace(err) + } + buf = binary.LittleEndian.AppendUint64(buf, v) + // 非二进制类型时,编码成 string, 反之则为 []byte + case mysql.TypeVarchar, mysql.TypeVarString, mysql.TypeString, mysql.TypeTinyBlob, mysql.TypeMediumBlob, mysql.TypeLongBlob, mysql.TypeBlob: + switch a := value.(type) { + case string: + buf = appendLengthValue(buf, []byte(a)) + case []byte: + buf = appendLengthValue(buf, a) + default: + log.Panic("unknown golang type for the string value", + zap.Any("value", value), zap.Any("mysqlType", mysqlType)) + } + case mysql.TypeTimestamp, mysql.TypeDatetime, mysql.TypeDate, mysql.TypeDuration, mysql.TypeNewDate: + v := value.(string) + buf = appendLengthValue(buf, []byte(v)) + // 开启 checksum 功能时,decimalHandlingMode 必须设置为 string + case mysql.TypeNewDecimal: + buf = appendLengthValue(buf, []byte(value.(string))) + case mysql.TypeJSON: + buf = appendLengthValue(buf, []byte(value.(string))) + // Null 和 Geometry 不参与到 checksum 计算 + case mysql.TypeNull, mysql.TypeGeometry: + // do nothing + default: + return buf, errors.New("invalid type for the checksum calculation") + } + return buf, nil +} + +func appendLengthValue(buf []byte, val []byte) []byte { + buf = binary.LittleEndian.AppendUint32(buf, uint32(len(val))) + buf = append(buf, val...) + return buf +} + +// 将 []byte 转换为 uint64,参考 https://github.com/pingcap/tidb/blob/e3417913f58cdd5a136259b902bf177eaf3aa637/types/binary_literal.go#L105 +func binaryLiteralToInt(bytes []byte) (uint64, error) { + bytes = trimLeadingZeroBytes(bytes) + length := len(bytes) + + if length > 8 { + log.Error("invalid bit value found", zap.ByteString("value", bytes)) + return math.MaxUint64, errors.New("invalid bit value") + } + + if length == 0 { + return 0, nil + } + + val := uint64(bytes[0]) + for i := 1; i < length; i++ { + val = (val << 8) | uint64(bytes[i]) + } + return val, nil +} + +func trimLeadingZeroBytes(bytes []byte) []byte { + if len(bytes) == 0 { + return bytes + } + pos, posMax := 0, len(bytes)-1 + for ; pos < posMax; pos++ { + if bytes[pos] != 0 { + break + } + } + return bytes[pos:] +} +``` \ No newline at end of file diff --git a/ticdc/ticdc-integrity-check.md b/ticdc/ticdc-integrity-check.md index e6ae5ed01a90..a91ede7e88bb 100644 --- a/ticdc/ticdc-integrity-check.md +++ b/ticdc/ticdc-integrity-check.md @@ -96,23 +96,7 @@ fn checksum(columns) { * CHAR、VARCHAR、VARSTRING、STRING、TEXT、BLOB(包括 TINY、MEDIUM 和 LONG)等字符类型,会直接使用字节。 * NULL 和 GEOMETRY 类型不会被纳入到 Checksum 计算中,返回空字节。 -## 基于 Golang 的 Avro 数据消费和 Checksum 计算过程解释 - -TiCDC 提供了基于 Golang 的 Checksum 计算过程,你可以参考该过程实现自己的 Checksum 计算逻辑。主要代码逻辑位于 TiCDC Avro Decoder 中实现的 [NextRowChangedEvent](https://github.com/pingcap/tiflow/blob/eb04aecaf8e61f7f9d67597c2d2ef1f44583dd79/pkg/sink/codec/avro/decoder.go#L100) 方法。该方法的具体工作过程如下: - -1. 假设已经从 Kafka 读取到消息,并设置了 key 和 value 字段。分别对 key 和 value 进行解码操作,得到解码之后的数据值和 schema。具体的过程可以参考 [`decodeKey`](https://github.com/pingcap/tiflow/blob/eb04aecaf8e61f7f9d67597c2d2ef1f44583dd79/pkg/sink/codec/avro/decoder.go#L395) 和 [`decodeValue`](https://github.com/pingcap/tiflow/blob/eb04aecaf8e61f7f9d67597c2d2ef1f44583dd79/pkg/sink/codec/avro/decoder.go#L419) 方法。 -2. 使用解码后的 key、value 和 schema 等内容,重新构建每一列的数据内容 `RowChangedEvent`。详情可见 [`assembleEvent`](https://github.com/pingcap/tiflow/blob/eb04aecaf8e61f7f9d67597c2d2ef1f44583dd79/pkg/sink/codec/avro/decoder.go#L176) 方法。构建 `RowChangedEvent` 的过程如下: - - 1. 获取 schema 中所有的 `fields` 内容,遍历 `fields` 中的每一个元素 `field` 以构建对应的列。其中 `fields` 已经按照 Column ID 排序。 - 2. 利用 `field` 中包含的每一列的类型信息,重建每一列的 MySQL Type。并通过 keyMap 识别到 Handle Key 列,然后设置相应的 flag。 - 3. valueMap 中的值需要经过 [`getColumnValue`](https://github.com/pingcap/tiflow/blob/eb04aecaf8e61f7f9d67597c2d2ef1f44583dd79/pkg/sink/codec/avro/decoder.go#L299) 转换,这是因为在编码过程中,某些列允许为 NULL,此时会把 value 编码成一个 map。因此,解码时需要从 map 中获取具体的值,即 map 中的第一个元素。如果该列是 `mysql.TypeEnum` 或 `mysql.TypeSet` 类型,还需要映射到它们的数字形式表示上。 - 4. 遍历完 `fields` 后,就获取了所有列的数据。对于 Delete 事件,将解码得到的列设置为 `PreColumns`;对于 Insert 和 Update 事件,将解码得到的列设置为 `Columns`。 - -Checksum 计算和校验的过程如下: - -1. 调用 [`extractExpectedChecksum`](https://github.com/pingcap/tiflow/blob/eb04aecaf8e61f7f9d67597c2d2ef1f44583dd79/pkg/sink/codec/avro/decoder.go#L281) 方法,获取期望的 Checksum 值。如果该方法返回 `false`,则说明该事件不需要进行 Checksum 校验,因为上游并没有发送 Checksum。这可能发生在 TiCDC 开启了 Checksum 但 TiDB 没有开启该功能时,或者当前事件发生在 Checksum 校验功能开启之前等场景。 -2. 调用 [`calculateChecksum`](https://github.com/pingcap/tiflow/blob/eb04aecaf8e61f7f9d67597c2d2ef1f44583dd79/pkg/sink/codec/avro/decoder.go#L461) 方法,遍历之前重建出来的所有列。利用 [buildChecksumBytes](https://github.com/pingcap/tiflow/blob/eb04aecaf8e61f7f9d67597c2d2ef1f44583dd79/pkg/sink/codec/avro/decoder.go#L482) 方法将每一列的 value 和 MySQL Type 编码为一个字节切片,然后使用该字节切片更新 Checksum 值。 -3. 通过 [`verifyChecksum`](https://github.com/pingcap/tiflow/blob/eb04aecaf8e61f7f9d67597c2d2ef1f44583dd79/pkg/sink/codec/avro/decoder.go#L444) 方法,进行 Checksum 计算和校验。将步骤 2 计算的值与步骤 1 获取的期望值进行比较。如果不相等,则说明 Checksum 校验失败,数据可能存在损坏的情况。 +基于 Golang 的 Avro 数据消费和 Checksum 校验,可以参考 [TiCDC 行数据 Checksum 校验](/ticdc/ticdc-avro-checksum-verification.md)。 > **注意:** > From 752322c6ff11e7d07543f004b2f62a85eb8a77b8 Mon Sep 17 00:00:00 2001 From: Grace Cai Date: Thu, 29 Jun 2023 14:06:13 +0800 Subject: [PATCH 230/257] TiDB features: add the v7.2 column (#14236) --- basic-features.md | 379 +++++++++++++++++++++++----------------------- 1 file changed, 192 insertions(+), 187 deletions(-) diff --git a/basic-features.md b/basic-features.md index 6461f6f7d350..077e05ab711e 100644 --- a/basic-features.md +++ b/basic-features.md @@ -20,222 +20,227 @@ aliases: ['/docs-cn/dev/basic-features/','/docs-cn/dev/experimental-features-4.0 ## 数据类型,函数和操作符 -| 数据类型,函数,操作符 | 7.1 | 6.5 | 6.1 | 5.4 | 5.3 | 5.2 | 5.1 | 5.0 | 4.0 | -|---|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:| -| [数值类型](/data-type-numeric.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| [日期和时间类型](/data-type-date-and-time.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| [字符串类型](/data-type-string.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| [JSON 类型](/data-type-json.md) | Y | Y | E | E | E | E | E | E | E | -| [控制流程函数](/functions-and-operators/control-flow-functions.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| [字符串函数](/functions-and-operators/string-functions.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| [数值函数与操作符](/functions-and-operators/numeric-functions-and-operators.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| [日期和时间函数](/functions-and-operators/date-and-time-functions.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| [位函数和操作符](/functions-and-operators/bit-functions-and-operators.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| [Cast 函数和操作符](/functions-and-operators/cast-functions-and-operators.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| [加密和压缩函数](/functions-and-operators/encryption-and-compression-functions.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| [信息函数](/functions-and-operators/information-functions.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| [JSON 函数](/functions-and-operators/json-functions.md) | Y | Y | E | E | E | E | E | E | E | -| [聚合函数](/functions-and-operators/aggregate-group-by-functions.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| [窗口函数](/functions-and-operators/window-functions.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| [其他函数](/functions-and-operators/miscellaneous-functions.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| [操作符](/functions-and-operators/operators.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| [字符集和排序规则](/character-set-and-collation.md) [^1] | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| [用户级别锁](/functions-and-operators/locking-functions.md) | Y | Y | Y | N | N | N | N | N | N | +| 数据类型,函数,操作符 | 7.2 | 7.1 | 6.5 | 6.1 | 5.4 | 5.3 | 5.2 | 5.1 | 5.0 | 4.0 | +|---|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:| +| [数值类型](/data-type-numeric.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| [日期和时间类型](/data-type-date-and-time.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| [字符串类型](/data-type-string.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| [JSON 类型](/data-type-json.md) | Y | Y | Y | E | E | E | E | E | E | E | +| [控制流程函数](/functions-and-operators/control-flow-functions.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| [字符串函数](/functions-and-operators/string-functions.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| [数值函数与操作符](/functions-and-operators/numeric-functions-and-operators.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| [日期和时间函数](/functions-and-operators/date-and-time-functions.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| [位函数和操作符](/functions-and-operators/bit-functions-and-operators.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| [Cast 函数和操作符](/functions-and-operators/cast-functions-and-operators.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| [加密和压缩函数](/functions-and-operators/encryption-and-compression-functions.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| [信息函数](/functions-and-operators/information-functions.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| [JSON 函数](/functions-and-operators/json-functions.md) | Y | Y | Y | E | E | E | E | E | E | E | +| [聚合函数](/functions-and-operators/aggregate-group-by-functions.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| [窗口函数](/functions-and-operators/window-functions.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| [其他函数](/functions-and-operators/miscellaneous-functions.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| [操作符](/functions-and-operators/operators.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| [字符集和排序规则](/character-set-and-collation.md) [^1] | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| [用户级别锁](/functions-and-operators/locking-functions.md) | Y | Y | Y | Y | N | N | N | N | N | N | ## 索引和约束 -| 索引和约束 | 7.1 | 6.5 | 6.1 | 5.4 | 5.3 | 5.2 | 5.1 | 5.0 | 4.0 | -|---|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:| -| [表达式索引](/sql-statements/sql-statement-create-index.md#表达式索引) [^2] | Y | Y | E | E | E | E | E | E | E | -| [列式存储 (TiFlash)](/tiflash/tiflash-overview.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| [使用 FastScan 加速 OLAP 场景下的查询](/tiflash/use-fastscan.md) | Y | E | N | N | N | N | N | N | N | -| [RocksDB 引擎](/storage-engine/rocksdb-overview.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| [Titan 插件](/storage-engine/titan-overview.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| [Titan Level Merge](/storage-engine/titan-configuration.md#level-merge实验功能) | E | E | E | E | E | E | E | E | E | -| [使用 bucket 提高数据扫描并发度](/tune-region-performance.md#使用-bucket-增加并发) | E | E | E | N | N | N | N | N | N | -| [不可见索引](/sql-statements/sql-statement-add-index.md) | Y | Y | Y | Y | Y | Y | Y | Y | N | -| [复合主键](/constraints.md#主键约束) | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| [唯一约束](/constraints.md#唯一约束) | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| [整型主键上的聚簇索引](/constraints.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| [复合或非整型主键上的聚簇索引](/constraints.md) | Y | Y | Y | Y | Y | Y | Y | Y | N | -| [多值索引](/sql-statements/sql-statement-create-index.md#多值索引) | Y | N | N | N | N | N | N | N | N | -| [外键约束](/constraints.md#外键约束) | Y | N | N | N | N | N | N | N | N | -| [TiFlash 延迟物化](/tiflash/tiflash-late-materialization.md) | Y | N | N | N | N | N | N | N | N | +| 索引和约束 | 7.2 | 7.1 | 6.5 | 6.1 | 5.4 | 5.3 | 5.2 | 5.1 | 5.0 | 4.0 | +|---|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:| +| [表达式索引](/sql-statements/sql-statement-create-index.md#表达式索引) [^2] | Y | Y | Y | E | E | E | E | E | E | E | +| [列式存储 (TiFlash)](/tiflash/tiflash-overview.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| [使用 FastScan 加速 OLAP 场景下的查询](/tiflash/use-fastscan.md) | Y | Y | E | N | N | N | N | N | N | N | +| [RocksDB 引擎](/storage-engine/rocksdb-overview.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| [Titan 插件](/storage-engine/titan-overview.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| [Titan Level Merge](/storage-engine/titan-configuration.md#level-merge实验功能) | E | E | E | E | E | E | E | E | E | E | +| [使用 bucket 提高数据扫描并发度](/tune-region-performance.md#使用-bucket-增加并发) | E | E | E | E | N | N | N | N | N | N | +| [不可见索引](/sql-statements/sql-statement-add-index.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | N | +| [复合主键](/constraints.md#主键约束) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| [`CHECK` 约束](/constraints.md#check-约束) | Y | N | N | N | N | N | N | N | N | N | +| [唯一约束](/constraints.md#唯一约束) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| [整型主键上的聚簇索引](/constraints.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| [复合或非整型主键上的聚簇索引](/constraints.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | N | +| [多值索引](/sql-statements/sql-statement-create-index.md#多值索引) | Y | Y | N | N | N | N | N | N | N | N | +| [外键约束](/constraints.md#外键约束) | Y | Y | N | N | N | N | N | N | N | N | +| [TiFlash 延迟物化](/tiflash/tiflash-late-materialization.md) | Y | Y | N | N | N | N | N | N | N | N | ## SQL 语句 -| SQL 语句 [^3] | 7.1 | 6.5 | 6.1 | 5.4 | 5.3 | 5.2 | 5.1 | 5.0 | 4.0 | -|---|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:| -| `SELECT`,`INSERT`,`UPDATE`,`DELETE`,`REPLACE` | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| `INSERT ON DUPLICATE KEY UPDATE` | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| `LOAD DATA INFILE` | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| `SELECT INTO OUTFILE` | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| `INNER JOIN`, LEFT\|RIGHT [OUTER] JOIN | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| `UNION`,`UNION ALL` | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| [`EXCEPT` 和 `INTERSECT` 运算符](/functions-and-operators/set-operators.md) | Y | Y | Y | Y | Y | Y | Y | Y | N | -| `GROUP BY`,`ORDER BY` | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| [窗口函数](/functions-and-operators/window-functions.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| [公共表表达式 (CTE)](/sql-statements/sql-statement-with.md) | Y | Y | Y | Y | Y | Y | Y | N | N | -| `START TRANSACTION`,`COMMIT`,`ROLLBACK` | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| [`EXPLAIN`](/sql-statements/sql-statement-explain.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| [`EXPLAIN ANALYZE`](/sql-statements/sql-statement-explain-analyze.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| [用户自定义变量](/user-defined-variables.md) | E | E | E | E | E | E | E | E | E | -| [`BATCH [ON COLUMN] LIMIT INTEGER DELETE`](/sql-statements/sql-statement-batch.md) | Y | Y | Y | N | N | N | N | N | N | -| [`BATCH [ON COLUMN] LIMIT INTEGER INSERT/UPDATE/REPLACE`](/sql-statements/sql-statement-batch.md) | Y | Y | N | N | N | N | N | N | N | -| [`ALTER TABLE ... COMPACT`](/sql-statements/sql-statement-alter-table-compact.md) | Y | Y | E | N | N | N | N | N | N | -| [表级锁 (Table Lock)](/sql-statements/sql-statement-lock-tables-and-unlock-tables.md) | E | E | E | E | E | E | E | E | E | -| [物化列式存储的查询结果](/tiflash/tiflash-results-materialization.md) | Y | E | N | N | N | N | N | N | N | +| SQL 语句 [^3] | 7.2 | 7.1 | 6.5 | 6.1 | 5.4 | 5.3 | 5.2 | 5.1 | 5.0 | 4.0 | +|---|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:| +| `SELECT`,`INSERT`,`UPDATE`,`DELETE`,`REPLACE` | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| `INSERT ON DUPLICATE KEY UPDATE` | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| `LOAD DATA INFILE` | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| `SELECT INTO OUTFILE` | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| `INNER JOIN`, LEFT\|RIGHT [OUTER] JOIN | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| `UNION`,`UNION ALL` | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| [`EXCEPT` 和 `INTERSECT` 运算符](/functions-and-operators/set-operators.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | N | +| `GROUP BY`,`ORDER BY` | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| [窗口函数](/functions-and-operators/window-functions.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| [公共表表达式 (CTE)](/sql-statements/sql-statement-with.md) | Y | Y | Y | Y | Y | Y | Y | Y | N | N | +| `START TRANSACTION`,`COMMIT`,`ROLLBACK` | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| [`EXPLAIN`](/sql-statements/sql-statement-explain.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| [`EXPLAIN ANALYZE`](/sql-statements/sql-statement-explain-analyze.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| [用户自定义变量](/user-defined-variables.md) | E | E | E | E | E | E | E | E | E | E | +| [`BATCH [ON COLUMN] LIMIT INTEGER DELETE`](/sql-statements/sql-statement-batch.md) | Y | Y | Y | Y | N | N | N | N | N | N | +| [`BATCH [ON COLUMN] LIMIT INTEGER INSERT/UPDATE/REPLACE`](/sql-statements/sql-statement-batch.md) | Y | Y | Y | N | N | N | N | N | N | N | +| [`ALTER TABLE ... COMPACT`](/sql-statements/sql-statement-alter-table-compact.md) | Y | Y | Y | E | N | N | N | N | N | N | +| [表级锁 (Table Lock)](/sql-statements/sql-statement-lock-tables-and-unlock-tables.md) | E | E | E | E | E | E | E | E | E | E | +| [物化列式存储的查询结果](/tiflash/tiflash-results-materialization.md) | Y | Y | E | N | N | N | N | N | N | N | ## 高级 SQL 功能 -| 高级 SQL 功能 | 7.1 | 6.5 | 6.1 | 5.4 | 5.3 | 5.2 | 5.1 | 5.0 | 4.0 | -|---|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:| -| [Prepare 语句执行计划缓存](/sql-prepared-plan-cache.md) | Y | Y | Y | Y | Y | E | E | E | E | -| [非 Prepare 语句执行计划缓存](/sql-non-prepared-plan-cache.md) | E | N | N | N | N | N | N | N | N | -| [执行计划管理 (SPM)](/sql-plan-management.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| [根据历史执行计划创建绑定](/sql-plan-management.md#根据历史执行计划创建绑定) | Y | E | N | N | N | N | N | N | N | -| [下推计算结果缓存 (Coprocessor Cache)](/coprocessor-cache.md) | Y | Y | Y | Y | Y | Y | Y | Y | E | -| [Stale Read](/stale-read.md) | Y | Y | Y | Y | Y | Y | Y | N | N | -| [Follower Read](/follower-read.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| [通过系统变量 `tidb_snapshot` 读取历史数据](/read-historical-data.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| [Optimizer hints](/optimizer-hints.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| [MPP 执行引擎](/explain-mpp.md) | Y | Y | Y | Y | Y | Y | Y | Y | N | -| [MPP 执行引擎 - compression exchange](/explain-mpp.md#mpp-version-和-exchange-数据压缩) | Y | N | N | N | N | N | N | N | N | -| [索引合并](/explain-index-merge.md) | Y | Y | Y | Y | E | E | E | E | E | -| [基于 SQL 的数据放置规则](/placement-rules-in-sql.md) | Y | Y | Y | E | E | N | N | N | N | -| [Cascades Planner](/system-variables.md#tidb_enable_cascades_planner) | E | E | E | E | E | E | E | E | E | +| 高级 SQL 功能 | 7.2 | 7.1 | 6.5 | 6.1 | 5.4 | 5.3 | 5.2 | 5.1 | 5.0 | 4.0 | +|---|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:| +| [Prepare 语句执行计划缓存](/sql-prepared-plan-cache.md) | Y | Y | Y | Y | Y | Y | E | E | E | E | +| [非 Prepare 语句执行计划缓存](/sql-non-prepared-plan-cache.md) | E | E | N | N | N | N | N | N | N | N | +| [执行计划管理 (SPM)](/sql-plan-management.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| [根据历史执行计划创建绑定](/sql-plan-management.md#根据历史执行计划创建绑定) | Y | Y | E | N | N | N | N | N | N | N | +| [下推计算结果缓存 (Coprocessor Cache)](/coprocessor-cache.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | E | +| [Stale Read](/stale-read.md) | Y | Y | Y | Y | Y | Y | Y | Y | N | N | +| [Follower Read](/follower-read.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| [通过系统变量 `tidb_snapshot` 读取历史数据](/read-historical-data.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| [Optimizer hints](/optimizer-hints.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| [MPP 执行引擎](/explain-mpp.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | N | +| [MPP 执行引擎 - compression exchange](/explain-mpp.md#mpp-version-和-exchange-数据压缩) | Y | Y | N | N | N | N | N | N | N | N | +| [TiFlash Pipeline 执行模型](/tiflash/tiflash-pipeline-model.md) | E | N | N | N | N | N | N | N | N | N | +| [索引合并](/explain-index-merge.md) | Y | Y | Y | Y | Y | E | E | E | E | E | +| [基于 SQL 的数据放置规则](/placement-rules-in-sql.md) | Y | Y | Y | Y | E | E | N | N | N | N | +| [Cascades Planner](/system-variables.md#tidb_enable_cascades_planner) | E | E | E | E | E | E | E | E | E | E | ## 数据定义语言 (DDL) -| 数据定义语言 (DDL) | 7.1 | 6.5 | 6.1 | 5.4 | 5.3 | 5.2 | 5.1 | 5.0 | 4.0 | -|---|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:| -| `CREATE`,`DROP`,`ALTER`,`RENAME`,`TRUNCATE` | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| [生成列](/generated-columns.md) | Y | E | E | E | E | E | E | E | E | -| [视图](/views.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| [序列](/sql-statements/sql-statement-create-sequence.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| [`AUTO_INCREMENT` 列](/auto-increment.md) | Y | Y[^4] | Y | Y | Y | Y | Y | Y | Y | -| [`AUTO_RANDOM` 列](/auto-random.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| [TTL (Time to Live)](/time-to-live.md) | Y | E | N | N | N | N | N | N | N | -| [DDL 算法断言](/sql-statements/sql-statement-alter-table.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| 在单条语句中添加多列 | Y | Y | E | E | E | E | E | E | E | -| [更改列类型](/sql-statements/sql-statement-modify-column.md) | Y | Y | Y | Y | Y | Y | Y | N | N | -| [临时表](/temporary-tables.md) | Y | Y | Y | Y | Y | N | N | N | N | -| 并行 DDL | Y | Y | N | N | N | N | N | N | N | -| [添加索引加速](/system-variables.md#tidb_ddl_enable_fast_reorg-从-v630-版本开始引入) | Y | Y | N | N | N | N | N | N | N | -| [元数据锁](/metadata-lock.md) | Y | Y | N | N | N | N | N | N | N | -| [`FLASHBACK CLUSTER TO TIMESTAMP`](/sql-statements/sql-statement-flashback-to-timestamp.md) | Y | Y | N | N | N | N | N | N | N | +| 数据定义语言 (DDL) | 7.2 | 7.1 | 6.5 | 6.1 | 5.4 | 5.3 | 5.2 | 5.1 | 5.0 | 4.0 | +|---|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:| +| `CREATE`,`DROP`,`ALTER`,`RENAME`,`TRUNCATE` | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| [生成列](/generated-columns.md) | Y | Y | E | E | E | E | E | E | E | E | +| [视图](/views.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| [序列](/sql-statements/sql-statement-create-sequence.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| [`AUTO_INCREMENT` 列](/auto-increment.md) | Y | Y | Y[^4] | Y | Y | Y | Y | Y | Y | Y | +| [`AUTO_RANDOM` 列](/auto-random.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| [TTL (Time to Live)](/time-to-live.md) | Y | Y | E | N | N | N | N | N | N | N | +| [DDL 算法断言](/sql-statements/sql-statement-alter-table.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| 在单条语句中添加多列 | Y | Y | Y | E | E | E | E | E | E | E | +| [更改列类型](/sql-statements/sql-statement-modify-column.md) | Y | Y | Y | Y | Y | Y | Y | Y | N | N | +| [临时表](/temporary-tables.md) | Y | Y | Y | Y | Y | Y | N | N | N | N | +| 并行 DDL | Y | Y | Y | N | N | N | N | N | N | N | +| [添加索引加速](/system-variables.md#tidb_ddl_enable_fast_reorg-从-v630-版本开始引入) | Y | Y | Y | N | N | N | N | N | N | N | +| [元数据锁](/metadata-lock.md) | Y | Y | Y | N | N | N | N | N | N | N | +| [`FLASHBACK CLUSTER TO TIMESTAMP`](/sql-statements/sql-statement-flashback-to-timestamp.md) | Y | Y | Y | N | N | N | N | N | N | N | +| [暂停](/sql-statements/sql-statement-admin-pause-ddl.md)/[恢复](/sql-statements/sql-statement-admin-resume-ddl.md) DDL | E | N | N | N | N | N | N | N | N | N | ## 事务 -| 事务 | 7.1 | 6.5 | 6.1 | 5.4 | 5.3 | 5.2 | 5.1 | 5.0 | 4.0 | -|---|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:| -| [Async commit](/system-variables.md#tidb_enable_async_commit-从-v50-版本开始引入) | Y | Y | Y | Y | Y | Y | Y | Y | N | -| [1PC](/system-variables.md#tidb_enable_1pc-从-v50-版本开始引入) | Y | Y | Y | Y | Y | Y | Y | Y | N | -| [大事务 (10 GB)](/transaction-overview.md#事务限制) | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| [悲观事务](/pessimistic-transaction.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| [乐观事务](/optimistic-transaction.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| [可重复读隔离(快照隔离)](/transaction-isolation-levels.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| [读已提交隔离](/transaction-isolation-levels.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| 事务 | 7.2 | 7.1 | 6.5 | 6.1 | 5.4 | 5.3 | 5.2 | 5.1 | 5.0 | 4.0 | +|---|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:| +| [Async commit](/system-variables.md#tidb_enable_async_commit-从-v50-版本开始引入) | Y | Y | Y | Y | Y | Y | Y | Y | Y | N | +| [1PC](/system-variables.md#tidb_enable_1pc-从-v50-版本开始引入) | Y | Y | Y | Y | Y | Y | Y | Y | Y | N | +| [大事务 (10 GB)](/transaction-overview.md#事务限制) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| [悲观事务](/pessimistic-transaction.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| [乐观事务](/optimistic-transaction.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| [可重复读隔离(快照隔离)](/transaction-isolation-levels.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| [读已提交隔离](/transaction-isolation-levels.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | ## 分区 -| 分区 | 7.1 | 6.5 | 6.1 | 5.4 | 5.3 | 5.2 | 5.1 | 5.0 | 4.0 | -|---|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:| -| [Range 分区](/partitioned-table.md#range-分区) | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| [Hash 分区](/partitioned-table.md#hash-分区) | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| [Key 分区](/partitioned-table.md#key-分区) | Y | N | N | N | N | N | N | N | N | -| [List 分区](/partitioned-table.md#list-分区) | Y | Y | Y | E | E | E | E | E | N | -| [List COLUMNS 分区](/partitioned-table.md#list-columns-分区) | Y | Y | Y | E | E | E | E | E | N | -| [`EXCHANGE PARTITION`](/partitioned-table.md) | Y | Y | E | E | E | E | E | E | N | -| [`REORGANIZE PARTITION`](/partitioned-table.md#重组分区) | Y | N | N | N | N | N | N | N | N | -| [`COALESCE PARTITION`](/partitioned-table.md#减少分区数量) | Y | N | N | N | N | N | N | N | N | -| [动态裁剪](/partitioned-table.md#动态裁剪模式) | Y | Y | Y | E | E | E | E | N | N | -| [Range COLUMNS 分区](/partitioned-table.md#range-columns-分区) | Y | Y | N | N | N | N | N | N | N | -| [Range INTERVAL 分区](/partitioned-table.md#range-interval-分区) | Y | E | N | N | N | N | N | N | N | +| 分区 | 7.2 | 7.1 | 6.5 | 6.1 | 5.4 | 5.3 | 5.2 | 5.1 | 5.0 | 4.0 | +|---|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:| +| [Range 分区](/partitioned-table.md#range-分区) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| [Hash 分区](/partitioned-table.md#hash-分区) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| [Key 分区](/partitioned-table.md#key-分区) | Y | Y | N | N | N | N | N | N | N | N | +| [List 分区](/partitioned-table.md#list-分区) | Y | Y | Y | Y | E | E | E | E | E | N | +| [List COLUMNS 分区](/partitioned-table.md#list-columns-分区) | Y | Y | Y | Y | E | E | E | E | E | N | +| [`EXCHANGE PARTITION`](/partitioned-table.md) | Y | Y | Y | E | E | E | E | E | E | N | +| [`REORGANIZE PARTITION`](/partitioned-table.md#重组分区) | Y | Y | N | N | N | N | N | N | N | N | +| [`COALESCE PARTITION`](/partitioned-table.md#减少分区数量) | Y | Y | N | N | N | N | N | N | N | N | +| [动态裁剪](/partitioned-table.md#动态裁剪模式) | Y | Y | Y | Y | E | E | E | E | N | N | +| [Range COLUMNS 分区](/partitioned-table.md#range-columns-分区) | Y | Y | Y | N | N | N | N | N | N | N | +| [Range INTERVAL 分区](/partitioned-table.md#range-interval-分区) | Y | Y | E | N | N | N | N | N | N | N | ## 统计信息 -| 统计信息 | 7.1 | 6.5 | 6.1 | 5.4 | 5.3 | 5.2 | 5.1 | 5.0 | 4.0 | -|---|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:| -| [CM-Sketch](/statistics.md) | 默认关闭 | 默认关闭 | 默认关闭 | 默认关闭 | 默认关闭 | Y | Y | Y | Y | -| [直方图](/statistics.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| 扩展统计信息(多列) | E | E | E | E | E | E | E | E | N | -| 统计反馈 | N | N | 已废弃 | 已废弃 | E | E | E | E | E | -| [统计信息自动更新](/statistics.md#自动更新) | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| [快速分析](/system-variables.md#tidb_enable_fast_analyze) | E | E | E | E | E | E | E | E | E | -| [动态裁剪](/partitioned-table.md#动态裁剪模式) | Y | Y | Y | E | E | E | E | N | N | -| [收集部分列的统计信息](/statistics.md#收集部分列的统计信息) | E | E | E | E | N | N | N | N | N | -| [限制统计信息的内存使用量](/statistics.md#统计信息收集的内存限制) | E | E | E | N | N | N | N | N | N | -| [随机采样约 10000 行数据来快速构建统计信息](/system-variables.md#tidb_enable_fast_analyze) | E | E | E | E | E | E | E | E | E | -| [锁定统计信息](/statistics.md#锁定统计信息) | E | E | N | N | N | N | N | N | N | -| [轻量级统计信息初始化](/statistics.md#统计信息的加载) | E | N | N | N | N | N | N | N | N | +| 统计信息 | 7.2 | 7.1 | 6.5 | 6.1 | 5.4 | 5.3 | 5.2 | 5.1 | 5.0 | 4.0 | +|---|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:| +| [CM-Sketch](/statistics.md) | 默认关闭 | 默认关闭 | 默认关闭 | 默认关闭 | 默认关闭 | 默认关闭 | Y | Y | Y | Y | +| [直方图](/statistics.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| 扩展统计信息(多列) | E | E | E | E | E | E | E | E | E | N | +| 统计反馈 | N | N | N | 已废弃 | 已废弃 | E | E | E | E | E | +| [统计信息自动更新](/statistics.md#自动更新) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| [快速分析](/system-variables.md#tidb_enable_fast_analyze) | E | E | E | E | E | E | E | E | E | E | +| [动态裁剪](/partitioned-table.md#动态裁剪模式) | Y | Y | Y | Y | E | E | E | E | N | N | +| [收集部分列的统计信息](/statistics.md#收集部分列的统计信息) | E | E | E | E | E | N | N | N | N | N | +| [限制统计信息的内存使用量](/statistics.md#统计信息收集的内存限制) | E | E | E | E | N | N | N | N | N | N | +| [随机采样约 10000 行数据来快速构建统计信息](/system-variables.md#tidb_enable_fast_analyze) | E | E | E | E | E | E | E | E | E | E | +| [锁定统计信息](/statistics.md#锁定统计信息) | E | E | E | N | N | N | N | N | N | N | +| [轻量级统计信息初始化](/statistics.md#统计信息的加载) | Y | E | N | N | N | N | N | N | N | N | ## 安全 -| 安全 | 7.1 | 6.5 | 6.1 | 5.4 | 5.3 | 5.2 | 5.1 | 5.0 | 4.0 | -|---|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:| -| [传输层加密 (TLS)](/enable-tls-between-clients-and-servers.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| [静态加密 (TDE)](/encryption-at-rest.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| [基于角色的访问控制 (RBAC)](/role-based-access-control.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| [证书鉴权](/certificate-authentication.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| [`caching_sha2_password` 认证](/system-variables.md#default_authentication_plugin) | Y | Y | Y | Y | Y | Y | N | N | N | -| [`tidb_sm3_password` 认证](/system-variables.md#default_authentication_plugin) | Y | Y | N | N | N | N | N | N | N | -| [`tidb_auth_token` 认证](/system-variables.md#default_authentication_plugin) | Y | Y | N | N | N | N | N | N | N | -| [`authentication_ldap_sasl` 认证](/system-variables.md#default_authentication_plugin) | Y | N | N | N | N | N | N | N | N | -| [`authentication_ldap_simple` 认证](/system-variables.md#default_authentication_plugin) | Y | N | N | N | N | N | N | N | N | -| [密码管理](/password-management.md) | Y | Y | N | N | N | N | N | N | N | -| [与 MySQL 兼容的 `GRANT` 权限管理](/privilege-management.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| [动态权限](/privilege-management.md#动态权限) | Y | Y | Y | Y | Y | Y | Y | N | N | -| [安全增强模式](/system-variables.md#tidb_enable_enhanced_security) | Y | Y | Y | Y | Y | Y | Y | N | N | -| [日志脱敏](/log-redaction.md) | Y | Y | Y | Y | Y | Y | Y | Y | N | +| 安全 | 7.2 | 7.1 | 6.5 | 6.1 | 5.4 | 5.3 | 5.2 | 5.1 | 5.0 | 4.0 | +|---|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:| +| [传输层加密 (TLS)](/enable-tls-between-clients-and-servers.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| [静态加密 (TDE)](/encryption-at-rest.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| [基于角色的访问控制 (RBAC)](/role-based-access-control.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| [证书鉴权](/certificate-authentication.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| [`caching_sha2_password` 认证](/system-variables.md#default_authentication_plugin) | Y | Y | Y | Y | Y | Y | Y | N | N | N | +| [`tidb_sm3_password` 认证](/system-variables.md#default_authentication_plugin) | Y | Y | Y | N | N | N | N | N | N | N | +| [`tidb_auth_token` 认证](/system-variables.md#default_authentication_plugin) | Y | Y | Y | N | N | N | N | N | N | N | +| [`authentication_ldap_sasl` 认证](/system-variables.md#default_authentication_plugin) | Y | Y | N | N | N | N | N | N | N | N | +| [`authentication_ldap_simple` 认证](/system-variables.md#default_authentication_plugin) | Y | Y | N | N | N | N | N | N | N | N | +| [密码管理](/password-management.md) | Y | Y | Y | N | N | N | N | N | N | N | +| [与 MySQL 兼容的 `GRANT` 权限管理](/privilege-management.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| [动态权限](/privilege-management.md#动态权限) | Y | Y | Y | Y | Y | Y | Y | Y | N | N | +| [安全增强模式](/system-variables.md#tidb_enable_enhanced_security) | Y | Y | Y | Y | Y | Y | Y | Y | N | N | +| [日志脱敏](/log-redaction.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | N | ## 数据导入和导出 -| 数据导入和导出 | 7.1 | 6.5 | 6.1 | 5.4 | 5.3 | 5.2 | 5.1 | 5.0 | 4.0 | -|---|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:| -| [快速导入 (TiDB Lightning)](/tidb-lightning/tidb-lightning-overview.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| mydumper 逻辑导出 | 已废弃 | 已废弃 | 已废弃 | 已废弃 | 已废弃 | 已废弃 | 已废弃 | 已废弃 | 已废弃 | -| [Dumpling 逻辑导出](/dumpling-overview.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| [事务 `LOAD DATA`](/sql-statements/sql-statement-load-data.md) | Y [^5] | Y | Y | Y | Y | Y | Y | Y | N [^6] | -| [数据迁移工具](/migration-overview.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| [TiDB Binlog](/tidb-binlog/tidb-binlog-overview.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| [Change data capture (CDC)](/ticdc/ticdc-overview.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| [TiCDC 支持保存数据到存储服务 (Amazon S3/GCS/Azure Blob Storage/NFS)](/ticdc/ticdc-sink-to-cloud-storage.md) | Y | E | N | N | N | N | N | N | N | -| [TiCDC 支持在两个 TiDB 集群之间进行双向复制](/ticdc/ticdc-bidirectional-replication.md) | Y | Y | N | N | N | N | N | N | N | -| [TiCDC OpenAPI v2](/ticdc/ticdc-open-api-v2.md) | Y | N | N | N | N | N | N | N | N | +| 数据导入和导出 | 7.2 | 7.1 | 6.5 | 6.1 | 5.4 | 5.3 | 5.2 | 5.1 | 5.0 | 4.0 | +|---|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:| +| [快速导入 (TiDB Lightning)](/tidb-lightning/tidb-lightning-overview.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| [快速导入 (`IMPORT INTO`)](/sql-statements/sql-statement-import-into.md) | E | N | N | N | N | N | N | N | N | N | +| mydumper 逻辑导出 | 已废弃 | 已废弃 | 已废弃 | 已废弃 | 已废弃 | 已废弃 | 已废弃 | 已废弃 | 已废弃 | 已废弃 | +| [Dumpling 逻辑导出](/dumpling-overview.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| [事务 `LOAD DATA`](/sql-statements/sql-statement-load-data.md) [^5] | Y | Y | Y | Y | Y | Y | Y | Y | Y | N [^6] | +| [数据迁移工具](/migration-overview.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| [TiDB Binlog](/tidb-binlog/tidb-binlog-overview.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| [Change data capture (CDC)](/ticdc/ticdc-overview.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| [TiCDC 支持保存数据到存储服务 (Amazon S3/GCS/Azure Blob Storage/NFS)](/ticdc/ticdc-sink-to-cloud-storage.md) | Y | Y | E | N | N | N | N | N | N | N | +| [TiCDC 支持在两个 TiDB 集群之间进行双向复制](/ticdc/ticdc-bidirectional-replication.md) | Y | Y | Y | N | N | N | N | N | N | N | +| [TiCDC OpenAPI v2](/ticdc/ticdc-open-api-v2.md) | Y | Y | N | N | N | N | N | N | N | N | ## 管理,可视化和工具 -| 管理,可视化和工具 | 7.1 | 6.5 | 6.1 | 5.4 | 5.3 | 5.2 | 5.1 | 5.0 | 4.0 | -|---|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:| -| [TiDB Dashboard 图形化展示](/dashboard/dashboard-intro.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| [TiDB Dashboard 持续性能分析功能](/dashboard/continuous-profiling.md) | Y | Y | Y | E | E | N | N | N | N | -| [TiDB Dashboard Top SQL 功能](/dashboard/top-sql.md) | Y | Y | Y | E | N | N | N | N | N | -| [TiDB Dashboard SQL 诊断功能](/information-schema/information-schema-sql-diagnostics.md) | Y | Y | E | E | E | E | E | E | E | -| [TiDB Dashboard 集群诊断功能](/dashboard/dashboard-diagnostics-access.md) | Y | Y | E | E | E | E | E | E | E | -| [Grafana 中的 TiKV-FastTune 面板](/grafana-tikv-dashboard.md#tikv-fasttune-面板) | E | E | E | E | E | E | E | E | E | -| [Information schema](/information-schema/information-schema.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| [Metrics schema](/metrics-schema.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| [Statements summary tables](/statement-summary-tables.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| [Statements summary tables - 持久化 statements summary](/statement-summary-tables.md#持久化-statements-summary) | E | N | N | N | N | N | N | N | N | -| [慢查询日志](/identify-slow-queries.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| [TiUP 部署](/tiup/tiup-overview.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| [Kubernetes operator](https://docs.pingcap.com/tidb-in-kubernetes/stable) | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| [内置物理备份](/br/backup-and-restore-use-cases.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| [Global Kill](/sql-statements/sql-statement-kill.md) | Y | Y | Y | E | E | E | E | E | E | -| [Lock View](/information-schema/information-schema-data-lock-waits.md) | Y | Y | Y | Y | Y | Y | E | E | E | -| [`SHOW CONFIG`](/sql-statements/sql-statement-show-config.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | -| [`SET CONFIG`](/dynamic-config.md) | Y | Y | Y | E | E | E | E | E | E | -| [DM WebUI](/dm/dm-webui-guide.md) | E | E | E | N | N | N | N | N | N | -| [前台限流](/tikv-configuration-file.md#前台限流) | Y | Y | E | N | N | N | N | N | N | -| [后台限流](/tikv-configuration-file.md#后台限流) | E | E | N | N | N | N | N | N | N | -| [基于 EBS 的备份和恢复](https://docs.pingcap.com/zh/tidb-in-kubernetes/v1.4/volume-snapshot-backup-restore) | Y | Y | N | N | N | N | N | N | N | -| [PITR](/br/br-pitr-guide.md) | Y | Y | N | N | N | N | N | N | N | -| [全局内存控制](/configure-memory-usage.md#如何配置-tidb-server-实例使用内存的阈值) | Y | Y | N | N | N | N | N | N | N | -| [RawKV 跨集群复制](/tikv-configuration-file.md#api-version-从-v610-版本开始引入) | E | E | N | N | N | N | N | N | N | -| [Green GC](/system-variables.md#tidb_gc_scan_lock_mode-从-v50-版本开始引入) | E | E | E | E | E | E | E | E | N | -| [资源管控 (Resource Control)](/tidb-resource-control.md) | Y | N | N | N | N | N | N | N | N | -| [TiFlash 存算分离架构与 S3 支持](/tiflash/tiflash-disaggregated-and-s3.md) | E | N | N | N | N | N | N | N | N | +| 管理,可视化和工具 | 7.2 | 7.1 | 6.5 | 6.1 | 5.4 | 5.3 | 5.2 | 5.1 | 5.0 | 4.0 | +|---|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:| +| [TiDB Dashboard 图形化展示](/dashboard/dashboard-intro.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| [TiDB Dashboard 持续性能分析功能](/dashboard/continuous-profiling.md) | Y | Y | Y | Y | E | E | N | N | N | N | +| [TiDB Dashboard Top SQL 功能](/dashboard/top-sql.md) | Y | Y | Y | Y | E | N | N | N | N | N | +| [TiDB Dashboard SQL 诊断功能](/information-schema/information-schema-sql-diagnostics.md) | Y | Y | Y | E | E | E | E | E | E | E | +| [TiDB Dashboard 集群诊断功能](/dashboard/dashboard-diagnostics-access.md) | Y | Y | Y | E | E | E | E | E | E | E | +| [Grafana 中的 TiKV-FastTune 面板](/grafana-tikv-dashboard.md#tikv-fasttune-面板) | E | E | E | E | E | E | E | E | E | E | +| [Information schema](/information-schema/information-schema.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| [Metrics schema](/metrics-schema.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| [Statements summary tables](/statement-summary-tables.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| [Statements summary tables - 持久化 statements summary](/statement-summary-tables.md#持久化-statements-summary) | E | E | N | N | N | N | N | N | N | N | +| [慢查询日志](/identify-slow-queries.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| [TiUP 部署](/tiup/tiup-overview.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| [Kubernetes operator](https://docs.pingcap.com/tidb-in-kubernetes/stable) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| [内置物理备份](/br/backup-and-restore-use-cases.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| [Global Kill](/sql-statements/sql-statement-kill.md) | Y | Y | Y | Y | E | E | E | E | E | E | +| [Lock View](/information-schema/information-schema-data-lock-waits.md) | Y | Y | Y | Y | Y | Y | Y | E | E | E | +| [`SHOW CONFIG`](/sql-statements/sql-statement-show-config.md) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | +| [`SET CONFIG`](/dynamic-config.md) | Y | Y | Y | Y | E | E | E | E | E | E | +| [DM WebUI](/dm/dm-webui-guide.md) | E | E | E | E | N | N | N | N | N | N | +| [前台限流](/tikv-configuration-file.md#前台限流) | Y | Y | Y | E | N | N | N | N | N | N | +| [后台限流](/tikv-configuration-file.md#后台限流) | E | E | E | N | N | N | N | N | N | N | +| [基于 EBS 的备份和恢复](https://docs.pingcap.com/zh/tidb-in-kubernetes/v1.4/volume-snapshot-backup-restore) | Y | Y | Y | N | N | N | N | N | N | N | +| [PITR](/br/br-pitr-guide.md) | Y | Y | Y | N | N | N | N | N | N | N | +| [全局内存控制](/configure-memory-usage.md#如何配置-tidb-server-实例使用内存的阈值) | Y | Y | Y | N | N | N | N | N | N | N | +| [RawKV 跨集群复制](/tikv-configuration-file.md#api-version-从-v610-版本开始引入) | E | E | E | N | N | N | N | N | N | N | +| [Green GC](/system-variables.md#tidb_gc_scan_lock_mode-从-v50-版本开始引入) | E | E | E | E | E | E | E | E | E | N | +| [资源管控 (Resource Control)](/tidb-resource-control.md) | Y | Y | N | N | N | N | N | N | N | N | +| [Runaway Queries 自动管理](/tidb-resource-control.md#管理资源消耗超出预期的查询-runaway-queries) | E | N | N | N | N | N | N | N | N | N | +| [TiFlash 存算分离架构与 S3 支持](/tiflash/tiflash-disaggregated-and-s3.md) | E | E | N | N | N | N | N | N | N | N | [^1]: TiDB 误将 latin1 处理为 utf8 的子集。见 [TiDB #18955](https://github.com/pingcap/tidb/issues/18955)。 @@ -245,6 +250,6 @@ aliases: ['/docs-cn/dev/basic-features/','/docs-cn/dev/experimental-features-4.0 [^4]: 从 [TiDB v6.4.0](/releases/release-6.4.0.md) 开始,支持[高性能、全局单调递增的 `AUTO_INCREMENT` 列](/auto-increment.md#mysql-兼容模式)。 -[^5]: 对于 [TiDB v7.0.0](/releases/release-7.0.0.md),新增参数 `FIELDS DEFINED NULL BY` 以及新增支持从 S3 和 GCS 导入数据,均为实验特性。 +[^5]: 从 [TiDB v7.0.0](/releases/release-7.0.0.md) 开始新增的参数 `FIELDS DEFINED NULL BY` 以及新增支持从 S3 和 GCS 导入数据,均为实验特性。 [^6]: 对于 TiDB v4.0,事务 `LOAD DATA` 不保证原子性。 From baf765ed0cdcaee1a47d87a83e77aaf997868f1f Mon Sep 17 00:00:00 2001 From: Grace Cai Date: Thu, 29 Jun 2023 14:07:43 +0800 Subject: [PATCH 231/257] Add v7.2.0 release notes (#14154) --- TOC.md | 4 +- releases/release-7.2.0.md | 328 +++++++++++++++++++++++++++++++++++ releases/release-notes.md | 4 + releases/release-timeline.md | 1 + upgrade-tidb-using-tiup.md | 2 +- 5 files changed, 337 insertions(+), 2 deletions(-) create mode 100644 releases/release-7.2.0.md diff --git a/TOC.md b/TOC.md index 62cffe991d9a..ee321dd024b1 100644 --- a/TOC.md +++ b/TOC.md @@ -4,7 +4,7 @@ - [文档中心](https://docs.pingcap.com/zh) - 关于 TiDB - [TiDB 简介](/overview.md) - - [TiDB 7.1 Release Notes](/releases/release-7.1.0.md) + - [TiDB 7.2 Release Notes](/releases/release-7.2.0.md) - [功能概览](/basic-features.md) - [与 MySQL 的兼容性](/mysql-compatibility.md) - [使用限制](/tidb-limitations.md) @@ -1000,6 +1000,8 @@ - [版本发布时间线](/releases/release-timeline.md) - [TiDB 版本规则](/releases/versioning.md) - [TiDB 离线包](/binary-package.md) + - v7.2 + - [7.2.0-DMR](/releases/release-7.2.0.md) - v7.1 - [7.1.0](/releases/release-7.1.0.md) - v7.0 diff --git a/releases/release-7.2.0.md b/releases/release-7.2.0.md new file mode 100644 index 000000000000..aa049790268e --- /dev/null +++ b/releases/release-7.2.0.md @@ -0,0 +1,328 @@ +--- +title: TiDB 7.2.0 Release Notes +summary: 了解 TiDB 7.2.0 版本的新功能、兼容性变更、改进提升,以及错误修复。 +--- + +# TiDB 7.2.0 Release Notes + +发版日期:2023 年 6 月 29 日 + +TiDB 版本:7.2.0 + +试用链接:[快速体验](https://docs.pingcap.com/zh/tidb/v7.2/quick-start-with-tidb) | [下载离线包](https://cn.pingcap.com/product-community/) + +在 7.2.0 版本中,你可以获得以下关键特性: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
分类功能描述
可扩展性与性能资源组支持管理资源消耗超出预期的查询(实验特性)通过此功能,你可以更细粒度地管理执行时间超时的查询,根据查询的不同类型实现不同的行为。符合指定阈值的查询将按照你的设置被降低优先级或者终止执行。 +
TiFlash 支持 Pipeline 执行模型(实验特性)TiFlash 支持 Pipeline 执行模型,优化对线程资源的控制。
SQL支持新的 SQL 语句 IMPORT INTO,可以通过 TiDB 进行数据导入(实验特性)TiDB 引入了一个新的 SQL 语句 IMPORT INTO。该语句集成了 TiDB Lightning 的物理导入模式的能力,使你无需单独部署和管理 TiDB Lightning 即可导入数据文件到 TiDB 中。例如,通过该语句,你可以直接从 Amazon S3 或 Google Cloud Storage (GCS) 远程导入数据到 TiDB 中。
数据库管理与可观测性DDL 任务支持暂停和恢复操作(实验特性)该功能允许临时暂停资源密集型的 DDL 操作,例如索引创建,以节省资源并最小化对在线流量的影响。当资源许可时,你可以无缝恢复 DDL 任务,而无需取消和重新开始。该功能提高了资源利用率,改善了用户体验,并简化了 schema 更改过程。
+ +## 功能详情 + +### 性能 + +* 新增支持下推以下两个[窗口函数](/tiflash/tiflash-supported-pushdown-calculations.md)到 TiFlash [#7427](https://github.com/pingcap/tiflash/issues/7427) @[xzhangxian1008](https://github.com/xzhangxian1008) + + * `FIRST_VALUE` + * `LAST_VALUE` + +* TiFlash 支持 Pipeline 执行模型(实验特性)[#6518](https://github.com/pingcap/tiflash/issues/6518) @[SeaRise](https://github.com/SeaRise) + + 在 v7.2.0 版本之前,TiFlash 引擎中各个任务在执行时,需要自行申请线程资源。TiFlash 引擎通过控制任务数的方式限制线程资源使用,以避免线程资源超用,但并不能完全避免此问题。因此,在 v7.2.0 中,TiFlash 引入 Pipeline 执行模型,对所有线程资源进行统一管理,并对所有任务的执行进行统一调度,充分利用线程资源,同时避免资源超用。新增系统变量 [`tidb_enable_tiflash_pipeline_model`](/system-variables.md#tidb_enable_tiflash_pipeline_model-从-v720-版本开始引入) 用于设置是否启用 Pipeline 执行模型。 + + 更多信息,请参考[用户文档](/tiflash/tiflash-pipeline-model.md)。 + +* 降低 TiFlash 等待 schema 同步的时延 [#7630](https://github.com/pingcap/tiflash/issues/7630) @[hongyunyan](https://github.com/hongyunyan) + + 当表的 schema 发生变化时,TiFlash 需要及时从 TiKV 同步新的表结构信息。在 v7.2.0 之前,当 TiFlash 访问表数据时,只要检测到数据库中某张表的 schema 发生了变化,TiFlash 就会重新同步该数据库中所有表的 schema 信息。即使一张表没有 TiFlash 副本,TiFlash 也会同步该表的 schema 信息。当数据库中有大量表时,通过 TiFlash 只读取一张表的数据也可能因为需要等待所有表的 schema 信息同步完成而造成较高的时延。 + + 在 v7.2.0 中,TiFlash 优化了 schema 的同步机制,只同步拥有 TiFlash 副本的表的 schema 信息。当检测到某张有 TiFlash 副本的表的 schema 有变化时,TiFlash 只同步该表的 schema 信息,从而降低了 TiFlash 同步 schema 的时延,同时减少了 DDL 操作对于 TiFlash 同步数据的影响。该优化自动生效,无须任何设置。 + +* 提升统计信息收集的性能 [#44725](https://github.com/pingcap/tidb/issues/44725) @[xuyifangreeneyes](https://github.com/xuyifangreeneyes) + + TiDB v7.2.0 优化了统计信息的收集策略,会选择跳过一部分重复的信息,以及对优化器价值不高的信息,从而将统计信息收集的整体速度提升了 30%。这一改进有利于 TiDB 更及时地更新数据库对象的统计信息,生成更准确的执行计划,从而提升数据库整体性能。 + + 默认设置下,统计信息收集会跳过类型为 `JSON`、`BLOB`、`MEDIUMBLOB`、`LONGBLOB` 的列。你可以通过设置系统变量 [`tidb_analyze_skip_column_types`](/system-variables.md#tidb_analyze_skip_column_types-从-v720-版本开始引入) 来修改默认行为。当前支持设置跳过 `JSON`、`BLOB`、`TEXT` 这几个类型及其子类型。 + + 更多信息,请参考[用户文档](/system-variables.md#tidb_analyze_skip_column_types-从-v720-版本开始引入)。 + +* 提升数据和索引一致性检查的性能 [#43693](https://github.com/pingcap/tidb/issues/43693) @[wjhuang2016](https://github.com/wjhuang2016) + + [`ADMIN CHECK [TABLE|INDEX]`](/sql-statements/sql-statement-admin-check-table-index.md) 语句用于校验表中数据和对应索引的一致性。在 v7.2.0 中,TiDB 优化了数据一致性的校验方式,大幅提升了 [`ADMIN CHECK [TABLE|INDEX]`](/sql-statements/sql-statement-admin-check-table-index.md) 语句的执行效率,在大数据量场景中性能能够提升百倍。 + + 该优化默认开启([`tidb_enable_fast_table_check`](/system-variables.md#tidb_enable_fast_table_check-从-v720-版本开始引入) 默认为 `ON`),可以大幅减少大型表数据一致性检查的时间,提升运维体验。 + + 更多信息,请参考[用户文档](/system-variables.md#tidb_enable_fast_table_check-从-v720-版本开始引入)。 + +### 稳定性 + +* 自动管理资源超出预期的查询(实验特性)[#43691](https://github.com/pingcap/tidb/issues/43691) @[Connor1996](https://github.com/Connor1996) @[CabinfeverB](https://github.com/CabinfeverB) @[glorv](https://github.com/glorv) @[HuSharp](https://github.com/HuSharp) @[nolouch](https://github.com/nolouch) + + 突发的 SQL 性能问题引发数据库整体性能下降,是数据库稳定性最常见的挑战。造成 SQL 性能问题的原因有很多,例如未经充分测试的新 SQL、数据量剧烈变化、执行计划突变等,这些问题很难从源头上完全规避。TiDB v7.2.0 增加了对资源超出预期的查询的管理能力,在上述问题发生时,能够快速降低影响范围。 + + 你可以针对某个资源组 (Resource Group) 设置查询的最长执行时间。当查询的执行时间超过设置值时,自动降低查询的优先级或者取消查询。你还可以设置在一段时间内通过文本或者执行计划立即匹配已经识别出的查询,从而避免问题查询的并发度太高时,在识别阶段就造成大量资源消耗的情况。 + + 对资源超出预期查询的自动管理能力,为你提供了有效的手段,快速应对突发的查询性能问题,降低对数据库整体性能的影响,从而提升数据库的稳定性。 + + 更多信息,请参考[用户文档](/tidb-resource-control.md#管理资源消耗超出预期的查询-runaway-queries)。 + +* 增强根据历史执行计划创建绑定的能力 [#39199](https://github.com/pingcap/tidb/issues/39199) @[qw4990](https://github.com/qw4990) + + TiDB v7.2.0 进一步增强[根据历史执行计划创建绑定](/sql-plan-management.md#根据历史执行计划创建绑定)的能力,加强对复杂语句的解析和绑定,使绑定更稳固,并新增支持对以下 Hint 的绑定: + + - [`AGG_TO_COP()`](/optimizer-hints.md#agg_to_cop) + - [`LIMIT_TO_COP()`](/optimizer-hints.md#limit_to_cop) + - [`ORDER_INDEX`](/optimizer-hints.md#order_indext1_name-idx1_name--idx2_name- ) + - [`NO_ORDER_INDEX()`](/optimizer-hints.md#no_order_indext1_name-idx1_name--idx2_name-) + + 更多信息,请参考[用户文档](/sql-plan-management.md)。 + +* 提供 Optimizer Fix Controls 机制对优化器行为进行细粒度控制 [#43169](https://github.com/pingcap/tidb/issues/43169) @[time-and-fate](https://github.com/time-and-fate) + + 为了生成更合理的执行计划,TiDB 优化器的行为会随产品迭代而不断演进。但在某些特定场景下,这些变化可能引发性能回退。因此 TiDB 引入了 Optimizer Fix Controls 来控制优化器的一部分细粒度行为,你可以对一些新的变化进行回滚或控制。 + + 每一个可控的行为,都有一个与 Fix 号码对应的 GitHub Issue 进行说明。所有可控的行为列举在文档 [Optimizer Fix Controls](/optimizer-fix-controls.md) 中。通过设置系统变量 [`tidb_opt_fix_control`](/system-variables.md#tidb_opt_fix_control-从-v710-版本开始引入) 可以为一个或多个行为设置目标值,进而达到行为控制的目的。 + + Optimizer Fix Controls 机制加强了你对 TiDB 优化器的细粒度管控能力,为升级过程引发的性能问题提供了新的修复手段,提升 TiDB 的稳定性。 + + 更多信息,请参考[用户文档](/optimizer-fix-controls.md)。 + +* 轻量统计信息初始化 GA [#42160](https://github.com/pingcap/tidb/issues/42160) @[xuyifangreeneyes](https://github.com/xuyifangreeneyes) + + 轻量统计信息初始化自 v7.2.0 成为正式功能。轻量级的统计信息初始化可以大幅减少启动时必须加载的统计信息的数量,从而提升启动过程中统计信息的加载速度。该功能提升了 TiDB 在复杂运行环境下的稳定性,并降低了部分 TiDB 节点重启对整体服务的影响。 + + 从 v7.2.0 起,新建的集群在启动阶段将默认加载轻量级统计信息,并在加载完成后再对外提供服务。对于从旧版本升级上来的集群,可通过修改 TiDB 配置项 [`lite-init-stats`](/tidb-configuration-file.md#lite-init-stats-从-v710-版本开始引入) 和 [`force-init-stats`](/tidb-configuration-file.md#force-init-stats-从-v710-版本开始引入) 为 `true` 开启此功能。 + + 更多信息,请参考[用户文档](/statistics.md#统计信息的加载)。 + +### SQL 功能 + +* 支持 `CHECK` 约束 [#41711](https://github.com/pingcap/tidb/issues/41711) @[fzzf678](https://github.com/fzzf678) + + 从 v7.2.0 开始,你可以通过 `CHECK` 约束限制表中的一个或者多个字段值必须满足特定的条件。当为表添加 `CHECK` 约束后,在插入或者更新表的数据时,TiDB 会先检查约束条件是否满足,只允许满足约束的数据写入。 + + 该功能默认关闭,你可以通过将变量 [`tidb_enable_check_constraint`](/system-variables.md#tidb_enable_check_constraint-从-v720-版本开始引入) 设置为 `ON` 开启该功能。 + + 更多信息,请参考[用户文档](/constraints.md#check-约束)。 + +### 数据库管理 + +* DDL 任务支持暂停和恢复操作(实验特性)[#18015](https://github.com/pingcap/tidb/issues/18015) @[godouxm](https://github.com/godouxm) + + TiDB v7.2.0 之前的版本中,当 DDL 任务在执行期间遇到业务高峰时,为了减少对业务的影响,只能手动取消 DDL 任务。TiDB v7.2.0 引入了 DDL 任务的暂停和恢复功能,你可以在高峰时间点暂停 DDL 任务,等到业务高峰时间结束后再恢复 DDL 任务,从而避免了 DDL 操作对业务负载的影响。 + + 例如,可以通过如下 `ADMIN PAUSE DDL JOBS` 或 `ADMIN RESUME DDL JOBS` 语句暂停或者恢复多个 DDL 任务: + + ```sql + ADMIN PAUSE DDL JOBS 1,2; + ADMIN RESUME DDL JOBS 1,2; + ``` + + 更多信息,请参考[用户文档](/ddl-introduction.md#ddl-相关的命令介绍)。 + +### 数据迁移 + +* 引入新的 SQL 语句 `IMPORT INTO`,大幅提升数据导入效率(实验特性)[#42930](https://github.com/pingcap/tidb/issues/42930) @[D3Hunter](https://github.com/D3Hunter) + + `IMPORT INTO` 集成了 TiDB Lightning [物理导入模式](/tidb-lightning/tidb-lightning-physical-import-mode.md)的能力。通过该语句,你可以将 CSV、SQL 和 PARQUET 等格式的数据快速导入到 TiDB 的一张空表中。这种导入方式无需单独部署和管理 TiDB Lightning,在降低了数据导入难度的同时,大幅提升了数据导入效率。 + + 对于存储在 Amazon S3 或 GCS 的数据文件,在开启了[后端任务分布式框架](/tidb-distributed-execution-framework.md)后,`IMPORT INTO` 还支持将数据导入任务拆分成多个子任务,并将子任务调度到多个 TiDB 节点并行导入,进一步提升导入性能。 + + 更多信息,请参考[用户文档](/sql-statements/sql-statement-import-into.md)。 + +* TiDB Lightning 支持将字符集为 latin1 的源文件导入到 TiDB 中 [#44434](https://github.com/pingcap/tidb/issues/44434) @[lance6716](https://github.com/lance6716) + + 通过此功能,你可以使用 TiDB Lightning 将字符集为 latin1 的源文件直接导入到 TiDB 中。在 v7.2.0 之前,导入这样的文件需要额外的预处理或转换。从 v7.2.0 起,你只需在配置 TiDB Lightning 导入任务时指定 `character-set = "latin1"`,TiDB Lightning 就会在导入过程中自动处理字符集的转换,以确保数据的完整性和准确性。 + + 更多信息,请参考[用户文档](/tidb-lightning/tidb-lightning-configuration.md#tidb-lightning-任务配置)。 + +## 兼容性变更 + +> **注意:** +> +> 以下为从 v7.1.0 升级至当前版本 (v7.2.0) 所需兼容性变更信息。如果从 v7.0.0 或之前版本升级到当前版本,可能也需要考虑和查看中间版本 release notes 中提到的兼容性变更信息。 + +### 系统变量 + +| 变量名 | 修改类型 | 描述 | +|--------|------------------------------|------| +| [`last_insert_id`](/system-variables.md#last_insert_id-从-v530-版本开始引入) | 修改 | 该变量的最大值从 `9223372036854775807` 修改为 `18446744073709551615`,和 MySQL 保持一致。 | +| [`tidb_enable_non_prepared_plan_cache`](/system-variables.md#tidb_enable_non_prepared_plan_cache) | 修改 | 经进一步的测试后,该变量默认值从 `OFF` 修改为 `ON`,即默认开启非 Prepare 语句执行计划缓存。 | +| [`tidb_remove_orderby_in_subquery`](/system-variables.md#tidb_remove_orderby_in_subquery-从-v610-版本开始引入) | 修改 | 经进一步的测试后,该变量默认值从 `OFF` 修改为 `ON`,即优化器改写会移除子查询中的 `ORDER BY` 子句。 | +| [`tidb_analyze_skip_column_types`](/system-variables.md#tidb_analyze_skip_column_types-从-v720-版本开始引入) | 新增 | 这个变量表示在执行 `ANALYZE` 命令收集统计信息时,跳过哪些类型的列的统计信息收集。该变量仅适用于 [`tidb_analyze_version = 2`](/system-variables.md#tidb_analyze_version-从-v510-版本开始引入) 的情况。使用 `ANALYZE TABLE t COLUMNS c1, ..., cn` 语法时,如果指定的列的类型在 `tidb_analyze_skip_column_types` 中,则不会收集该列的统计信息。 | +| [`tidb_enable_check_constraint`](/system-variables.md#tidb_enable_check_constraint-从-v720-版本开始引入) | 新增 | 这个变量用于控制 `CHECK` 约束功能是否开启。默认值 `OFF` 表示该功能默认关闭。 | +| [`tidb_enable_fast_table_check`](/system-variables.md#tidb_enable_fast_table_check-从-v720-版本开始引入) | 新增 | 这个变量用于控制是否使用基于校验和的方式来快速检查表中数据和索引的一致性。默认值 `ON` 表示该功能默认开启。 | +| [`tidb_enable_tiflash_pipeline_model`](/system-variables.md#tidb_enable_tiflash_pipeline_model-从-v720-版本开始引入) | 新增 | 这个变量用来控制是否启用 TiFlash 新的执行模型 [Pipeline Model](/tiflash/tiflash-pipeline-model.md),默认值为 `OFF`,即关闭 Pipeline Model。 | +| [`tidb_expensive_txn_time_threshold`](/system-variables.md#tidb_expensive_txn_time_threshold-从-v720-版本开始引入) | 新增 | 控制打印 expensive transaction 日志的阈值时间,默认值是 600 秒。expensive transaction 日志会将尚未 COMMIT 或 ROLLBACK 且持续时间超过该阈值的事务的相关信息打印出来。 | + +### 配置文件参数 + +| 配置文件 | 配置项 | 修改类型 | 描述 | +| -------- | -------- | -------- | -------- | +| TiDB | [`lite-init-stats`](/tidb-configuration-file.md#lite-init-stats-从-v710-版本开始引入) | 修改 | 经进一步的测试后,默认值从 `false` 修改为 `true`,表示 TiDB 启动时默认采用轻量级的统计信息初始化,以提高启动时统计信息初始化的效率。 | +| TiDB | [`force-init-stats`](/tidb-configuration-file.md#force-init-stats-从-v710-版本开始引入) | 修改 | 配合 `lite-init-stats`,默认值从 `false` 修改为 `true`,表示 TiDB 启动时会等到统计信息初始化完成后再对外提供服务。 | +| TiKV | [rocksdb.\[defaultcf\|writecf\|lockcf\].compaction-guard-min-output-file-size](/tikv-configuration-file.md#compaction-guard-min-output-file-size) | 修改 | 为减小 RocksDB 中 compaction 任务的数据量,该变量默认值从 `"8MB"` 修改为 `"1MB"`。 | +| TiKV | [rocksdb.\[defaultcf\|writecf\|lockcf\].optimize-filters-for-memory](/tikv-configuration-file.md#optimize-filters-for-memory-从-v720-版本开始引入) | 新增 | 控制是否生成能够最小化内存碎片的 Bloom/Ribbon filter。 | +| TiKV | [rocksdb.\[defaultcf\|writecf\|lockcf\].periodic-compaction-seconds](/tikv-configuration-file.md#periodic-compaction-seconds-从-v720-版本开始引入) | 新增 | 控制周期性 compaction 的时间,修改时间超过此值的 SST 文件将被选中进行 compaction,并被重新写入这些 SST 文件所在的层级。 | +| TiKV | [rocksdb.\[defaultcf\|writecf\|lockcf\].ribbon-filter-above-level](/tikv-configuration-file.md#ribbon-filter-above-level-从-v720-版本开始引入) | 新增 | 控制是否对于大于等于该值的 level 使用 Ribbon filter,对于小于该值的 level,使用非 block-based bloom filter。 | +| TiKV | [rocksdb.\[defaultcf\|writecf\|lockcf\].ttl](/tikv-configuration-file.md#ttl-从-v720-版本开始引入) | 新增 | 设置 SST 文件被自动选中执行 compaction 的 TTL 时间。更新时间超过 TTL 的 SST 文件将被选中并进行 compaction。 | +| TiDB Lightning | `send-kv-pairs` | 废弃 | 从 v7.2.0 版本开始,`send-kv-pairs` 不再生效。你可以使用新参数 [`send-kv-size`](/tidb-lightning/tidb-lightning-configuration.md) 来指定物理导入模式下向 TiKV 发送数据时一次请求的最大大小。 | +| TiDB Lightning | [`character-set`](/tidb-lightning/tidb-lightning-configuration.md#tidb-lightning-任务配置) | 修改 | 扩展支持导入的字符集,新增 `latin1` 选项,用于导入字符集为 latin1 的源文件。| +| TiDB Lightning | [`send-kv-size`](/tidb-lightning/tidb-lightning-configuration.md) | 新增 | 用于设置单次发送到 TiKV 的键值对的大小。当键值对的大小达到设定的阈值时,它们将被 TiDB Lightning 立即发送到 TiKV,避免在导入大宽表的时候由于 TiDB Lightning 节点内存积累键值对过多导致 OOM 的问题。通过调整该参数,你可以在内存使用和导入速度之间找到平衡,提高导入过程的稳定性和效率。| +| Data Migration | [`strict-optimistic-shard-mode`](/dm/feature-shard-merge-optimistic.md) | 新增 | 用于兼容历史版本 TiDB Data Migration v2.0 的分库分表同步 DDL 的行为。当用户选择乐观模式时,可以启用该参数,开启后,乐观模式下,同步任务遇到二类 DDL 时,整个任务会中断。在多个表的 DDL 变更有依赖关系的场景,可以及时中断同步,在用户手动处理完各表的 DDL 后,再继续同步数据,保障上下游数据的一致性。| +| TiCDC | [`sink.protocol`](/ticdc/ticdc-changefeed-config.md) | 修改 | 扩展下游类型是 Kafka 时的可选值范围:增加 `"open-protocol"`。用于指定编码消息时使用的格式协议。| +| TiCDC | [`sink.delete-only-output-handle-key-columns`](/ticdc/ticdc-changefeed-config.md) | 新增 | 指定 DELETE 事件的输出内容,只对 `"canal-json"` 和 `"open-protocol"` 协议有效。默认值为 `false`,即输出所有列的内容。当设置为 `true` 时,只输出主键列,或唯一索引列的内容。 | + +## 改进提升 + ++ TiDB + + - 优化构造索引扫描范围的逻辑,支持将一些复杂条件转化为索引扫描范围 [#41572](https://github.com/pingcap/tidb/issues/41572) [#44389](https://github.com/pingcap/tidb/issues/44389) @[xuyifangreeneyes](https://github.com/xuyifangreeneyes) + - 新增 `Stale Read OPS`、`Stale Read Traffic` 监控指标 [#43325](https://github.com/pingcap/tidb/issues/43325) @[you06](https://github.com/you06) + - 当 Stale Read 的 retry leader 遇到 lock 时,resolve lock 之后强制重试 leader,避免无谓开销 [#43659](https://github.com/pingcap/tidb/issues/43659) @[you06](https://github.com/you06) + - 使用估计时间计算 Stale Read ts,减少 Stale Read 的开销 [#44215](https://github.com/pingcap/tidb/issues/44215) @[you06](https://github.com/you06) + - 添加 long-running 事务日志和系统变量 [#41471](https://github.com/pingcap/tidb/issues/41471) @[crazycs520](https://github.com/crazycs520) + - 支持通过压缩的 MySQL 协议连接 TiDB,提升数据密集型查询在低网络质量下的性能,并节省带宽成本。该功能支持基于 `zlib` 和 `zstd` 的压缩算法 [#22605](https://github.com/pingcap/tidb/issues/22605) @[dveeden](https://github.com/dveeden) + - 支持将 `utf8` 和 `utf8mb3` 识别为旧的三字节 UTF-8 字符集编码,有助于将具有旧字符集编码的表从 MySQL 8.0 迁移到 TiDB [#26226](https://github.com/pingcap/tidb/issues/26226) @[dveeden](https://github.com/dveeden) + - 支持在 `UPDATE` 语句中使用 `:=` 进行赋值操作 [#44751](https://github.com/pingcap/tidb/issues/44751) @[CbcWestwolf](https://github.com/CbcWestwolf) + ++ TiKV + + - 支持通过 `pd.retry-interval` 配置在连接请求失败等场景下 PD 连接的重试间隔 [#14964](https://github.com/tikv/tikv/issues/14964) @[rleungx](https://github.com/rleungx) + - 优化资源管控调度算法,将全局的资源使用量作为调度因素 [#14604](https://github.com/tikv/tikv/issues/14604) @[Connor1996](https://github.com/Connor1996) + - 使用 gzip 压缩 `check_leader` 请求以减少流量 [#14553](https://github.com/tikv/tikv/issues/14553) @[you06](https://github.com/you06) + - 为 `check_leader` 请求增加相关监控项 [#14658](https://github.com/tikv/tikv/issues/14658) @[you06](https://github.com/you06) + - 详细记录 TiKV 处理写入命令过程中的时间信息 [#12362](https://github.com/tikv/tikv/issues/12362) @[cfzjywxk](https://github.com/cfzjywxk) + ++ PD + + - PD Leader 选举使用单独的 gRPC 连接,防止受到其他请求的影响 [#6403](https://github.com/tikv/pd/issues/6403) @[rleungx](https://github.com/rleungx) + - 默认开启 bucket split 以改善多 Region 的热点问题 [#6433](https://github.com/tikv/pd/issues/6433) @[bufferflies](https://github.com/bufferflies) + ++ Tools + + + Backup & Restore (BR) + + - 为外部存储 Azure Blob Storage 提供共享访问签名 (SAS) 的访问方式 [#44199](https://github.com/pingcap/tidb/issues/44199) @[Leavrth](https://github.com/Leavrth) + + + TiCDC + + - 优化同步到对象存储场景下发生 DDL 时存放数据文件目录的结构 [#8891](https://github.com/pingcap/tiflow/issues/8891) @[CharlesCheung96](https://github.com/CharlesCheung96) + - 在同步到 Kafka 场景下,支持 OAUTHBEARER 认证方式 [#8865](https://github.com/pingcap/tiflow/issues/8865) @[hi-rustin](https://github.com/hi-rustin) + - 在同步到 Kafka 场景下,对于 `DELETE` 操作,支持选择只输出 Handle Key [#9143](https://github.com/pingcap/tiflow/issues/9143) @[3AceShowHand](https://github.com/3AceShowHand) + + + TiDB Data Migration (DM) + + - 支持读取 MySQL 8.0 中的压缩 binlog 作为增量同步的数据源 [#6381](https://github.com/pingcap/tiflow/issues/6381) @[dveeden](https://github.com/dveeden) + + + TiDB Lightning + + - 优化导入数据过程中的重试机制,避免因 leader 切换而导致的错误 [#44478](https://github.com/pingcap/tidb/issues/44263) @[lance6716](https://github.com/lance6716) + - 数据导入完成后使用 SQL 方式校验 checksum,提升数据校验的稳定性 [#41941](https://github.com/pingcap/tidb/issues/41941) @[GMHDBJD](https://github.com/GMHDBJD) + - 优化导入宽表时 TiDB Lightning 发生 OOM 的问题 [#43853](https://github.com/pingcap/tidb/issues/43853) @[D3Hunter](https://github.com/D3Hunter) + +## 错误修复 + ++ TiDB + + - 修复使用 CTE 的查询导致 TiDB 卡住的问题 [#43749](https://github.com/pingcap/tidb/issues/43749) [#36896](https://github.com/pingcap/tidb/issues/36896) @[guo-shaoge](https://github.com/guo-shaoge) + - 修复 `min, max` 查询结果出错的问题 [#43805](https://github.com/pingcap/tidb/issues/43805) @[wshwsh12](https://github.com/wshwsh12) + - 修复 `SHOW PROCESSLIST` 语句无法显示子查询时间较长语句的事务的 TxnStart 的问题 [#40851](https://github.com/pingcap/tidb/issues/40851) @[crazycs520](https://github.com/crazycs520) + - 修复由于 Coprocessor task 中 `TxnScope` 缺失导致 Stale Read 全局优化不生效的问题 [#43365](https://github.com/pingcap/tidb/issues/43365) @[you06](https://github.com/you06) + - 修复 follower read 未处理 flashback 错误而进行重试,导致查询报错的问题 [#43673](https://github.com/pingcap/tidb/issues/43673) @[you06](https://github.com/you06) + - 修复 `ON UPDATE` 语句没有正确更新主键导致数据索引不一致的问题 [#44565](https://github.com/pingcap/tidb/issues/44565) @[zyguan](https://github.com/zyguan) + - 修改 `UNIX_TIMESTAMP()` 函数的上限为 `3001-01-19 03:14:07.999999 UTC`,与 MySQL 8.0.28+ 保持一致 [#43987](https://github.com/pingcap/tidb/issues/43987) @[YangKeao](https://github.com/YangKeao) + - 修复在 ingest 模式下创建索引失败的问题 [#44137](https://github.com/pingcap/tidb/issues/44137) @[tangenta](https://github.com/tangenta) + - 修复取消处于 rollback 状态的 DDL 任务导致相关元数据出错的问题 [#44143](https://github.com/pingcap/tidb/issues/44143) @[wjhuang2016](https://github.com/wjhuang2016) + - 修复 `memTracker` 配合 cursor fetch 使用导致内存泄漏的问题 [#44254](https://github.com/pingcap/tidb/issues/44254) @[YangKeao](https://github.com/YangKeao) + - 修复删除数据库导致 GC 推进慢的问题 [#33069](https://github.com/pingcap/tidb/issues/33069) @[tiancaiamao](https://github.com/tiancaiamao) + - 修复分区表在 Index Join 的 probe 阶段找不到对应行而报错的问题 [#43686](https://github.com/pingcap/tidb/issues/43686) @[AilinKid](https://github.com/AilinKid) @[mjonss](https://github.com/mjonss) + - 修复在创建分区表时使用 `SUBPARTITION` 没有警告提醒的问题 [#41198](https://github.com/pingcap/tidb/issues/41198) [#41200](https://github.com/pingcap/tidb/issues/41200) @[mjonss](https://github.com/mjonss) + - 修复执行时间超过 `MAX_EXECUTION_TIME` 的 query 被 kill 时的报错信息和 MySQL 不一致的问题 [#43031](https://github.com/pingcap/tidb/issues/43031) @[dveeden](https://github.com/dveeden) + - 修复 `LEADING` hint 不支持查询块别名 (query block alias) 的问题 [#44645](https://github.com/pingcap/tidb/issues/44645) @[qw4990](https://github.com/qw4990) + - 修复 `LAST_INSERT_ID()` 函数的返回类型,从 VARCHAR 变更为 LONGLONG,与 MySQL 一致 [#44574](https://github.com/pingcap/tidb/issues/44574) @[Defined2014](https://github.com/Defined2014) + - 修复在带有非关联子查询的语句中使用公共表表达式 (CTE) 可能导致结果错误的问题 [#44051](https://github.com/pingcap/tidb/issues/44051) @[winoros](https://github.com/winoros) + - 修复 Join Reorder 可能会造成 Outer Join 结果错误的问题 [#44314](https://github.com/pingcap/tidb/issues/44314) @[AilinKid](https://github.com/AilinKid) + - 修复 `PREPARE stmt FROM "ANALYZE TABLE xxx"` 会被 `tidb_mem_quota_query` kill 掉的问题 [#44320](https://github.com/pingcap/tidb/issues/44320) @[chrysan](https://github.com/chrysan) + ++ TiKV + + - 修复处理 stale 悲观锁冲突时事务返回值不正确的问题 [#13298](https://github.com/tikv/tikv/issues/13298) @[cfzjywxk](https://github.com/cfzjywxk) + - 修复内存悲观锁可能导致 Flashback 失败和数据不一致的问题 [#13303](https://github.com/tikv/tikv/issues/13303) @[JmPotato](https://github.com/JmPotato) + - 修复处理过期请求时 fair lock 的正确性问题 [#13298](https://github.com/tikv/tikv/issues/13298) @[cfzjywxk](https://github.com/cfzjywxk) + - 修复 autocommit 和 point get replica read 可能破坏线性一致性的问题 [#14715](https://github.com/tikv/tikv/issues/14715) @[cfzjywxk](https://github.com/cfzjywxk) + ++ PD + + - 修复在特殊情况下冗余副本无法自动修复的问题 [#6573](https://github.com/tikv/pd/issues/6573) @[nolouch](https://github.com/nolouch) + ++ TiFlash + + - 修复查询在 Join build 侧数据非常大,且包含许多小型字符串类型列时,消耗的内存可能会超过实际需要的问题 [#7416](https://github.com/pingcap/tiflash/issues/7416) @[yibin87](https://github.com/yibin87) + ++ Tools + + + Backup & Restore (BR) + + - 修复某些情况下误报 `checksum mismatch` 的问题 [#44472](https://github.com/pingcap/tidb/issues/44472) @[Leavrth](https://github.com/Leavrth) + - 修复某些情况下误报 `resolved lock timeout` 的问题 [#43236](https://github.com/pingcap/tidb/issues/43236) @[YuJuncen](https://github.com/YuJuncen) + - 修复在恢复统计信息的时候可能会 panic 的问题 [#44490](https://github.com/pingcap/tidb/issues/44490) @[tangenta](https://github.com/tangenta) + + + TiCDC + + - 修复在某些特殊情况下 Resolved TS 不能正常推进的问题 [#8963](https://github.com/pingcap/tiflow/issues/8963) @[CharlesCheung96](https://github.com/CharlesCheung96) + - 修复使用 Avro 或 CSV 协议场景下 `UPDATE` 操作不能输出旧值的问题 [#9086](https://github.com/pingcap/tiflow/issues/9086) @[3AceShowHand](https://github.com/3AceShowHand) + - 修复同步到 Kafka 场景下,读取下游 Metadata 太频繁导致下游压力过大的问题 [#8959](https://github.com/pingcap/tiflow/issues/8959) @[hi-rustin](https://github.com/hi-rustin) + - 修复同步到 TiDB 或 MySQL 场景下,频繁设置下游双向复制相关变量导致下游日志过多的问题 [#9180](https://github.com/pingcap/tiflow/issues/9180) @[asddongmen](https://github.com/asddongmen) + - 修复 PD 节点宕机导致 TiCDC 节点重启的问题 [#8868](https://github.com/pingcap/tiflow/issues/8868) @[asddongmen](https://github.com/asddongmen) + - 修复 TiCDC 同步到 Kafka-on-Pulsar 时不能正确建立连接的问题 [#8892](https://github.com/pingcap/tiflow/issues/8892) @[hi-rustin](https://github.com/hi-rustin) + + + TiDB Lightning + + - 修复开启 `experimental.allow-expression-index` 且默认值是 UUID 时导致 TiDB Lightning panic 的问题 [#44497](https://github.com/pingcap/tidb/issues/44497) @[lichunzhu](https://github.com/lichunzhu) + - 修复划分数据文件时任务退出导致 TiDB Lightning panic 的问题 [#43195](https://github.com/pingcap/tidb/issues/43195) @[lance6716](https://github.com/lance6716) + +## 贡献者 + +感谢来自 TiDB 社区的贡献者们: + +- [asjdf](https://github.com/asjdf) +- [blacktear23](https://github.com/blacktear23) +- [Cavan-xu](https://github.com/Cavan-xu) +- [darraes](https://github.com/darraes) +- [demoManito](https://github.com/demoManito) +- [dhysum](https://github.com/dhysum) +- [HappyUncle](https://github.com/HappyUncle) +- [jiyfhust](https://github.com/jiyfhust) +- [L-maple](https://github.com/L-maple) +- [nyurik](https://github.com/nyurik) +- [SeigeC](https://github.com/SeigeC) +- [tangjingyu97](https://github.com/tangjingyu97) \ No newline at end of file diff --git a/releases/release-notes.md b/releases/release-notes.md index 103d08f43e25..a132f4a08be0 100644 --- a/releases/release-notes.md +++ b/releases/release-notes.md @@ -7,6 +7,10 @@ aliases: ['/docs-cn/dev/releases/release-notes/','/docs-cn/dev/releases/rn/'] TiDB 历史版本发布声明如下: +## 7.2 + +- [7.2.0-DMR](/releases/release-7.2.0.md): 2023-06-29 + ## 7.1 - [7.1.0](/releases/release-7.1.0.md): 2023-05-31 diff --git a/releases/release-timeline.md b/releases/release-timeline.md index 74396c60b91f..52130a2bee77 100644 --- a/releases/release-timeline.md +++ b/releases/release-timeline.md @@ -9,6 +9,7 @@ summary: 了解 TiDB 的版本发布时间线。 | 版本 | 发布日期 | | :--- | :--- | +| [7.2.0-DMR](/releases/release-7.2.0.md) | 2023-06-29 | | [6.5.3](/releases/release-6.5.3.md) | 2023-06-14 | | [7.1.0](/releases/release-7.1.0.md) | 2023-05-31 | | [6.5.2](/releases/release-6.5.2.md) | 2023-04-21 | diff --git a/upgrade-tidb-using-tiup.md b/upgrade-tidb-using-tiup.md index 39e5313cc351..c287053c49db 100644 --- a/upgrade-tidb-using-tiup.md +++ b/upgrade-tidb-using-tiup.md @@ -44,7 +44,7 @@ aliases: ['/docs-cn/dev/upgrade-tidb-using-tiup/','/docs-cn/dev/how-to/upgrade/u ### 2.1 查阅兼容性变更 -查阅 TiDB v7.1.0 release notes 中的[兼容性变更](/releases/release-7.1.0.md#兼容性变更)。如果有任何变更影响到了你的升级,请采取相应的措施。 +查阅 TiDB v7.2.0 release notes 中的[兼容性变更](/releases/release-7.2.0.md#兼容性变更)。如果有任何变更影响到了你的升级,请采取相应的措施。 ### 2.2 升级 TiUP 或更新 TiUP 离线镜像 From 60c18a27a78b9f1e4db67b22d8b22c853a5132df Mon Sep 17 00:00:00 2001 From: kaaaaaaang Date: Thu, 29 Jun 2023 14:09:13 +0800 Subject: [PATCH 232/257] bump tidb and tiup version to 7.2.0 (#14338) --- br/backup-and-restore-use-cases.md | 6 +-- dm/maintain-dm-using-tiup.md | 2 +- dm/quick-start-create-task.md | 2 +- .../information-schema-tidb-servers-info.md | 2 +- pd-control.md | 2 +- post-installation-check.md | 2 +- production-deployment-using-tiup.md | 12 +++--- quick-start-with-tidb.md | 10 ++--- scale-tidb-using-tiup.md | 4 +- system-variables.md | 2 +- ticdc/deploy-ticdc.md | 4 +- ticdc/ticdc-open-api-v2.md | 2 +- tidb-binlog/get-started-with-tidb-binlog.md | 2 +- tidb-monitoring-api.md | 2 +- tiflash/create-tiflash-replicas.md | 4 +- tiup/tiup-cluster.md | 40 +++++++++---------- tiup/tiup-component-cluster-deploy.md | 2 +- tiup/tiup-component-cluster-patch.md | 2 +- tiup/tiup-component-cluster-upgrade.md | 2 +- tiup/tiup-component-dm-upgrade.md | 2 +- tiup/tiup-component-management.md | 12 +++--- tiup/tiup-mirror.md | 6 +-- tiup/tiup-playground.md | 4 +- upgrade-tidb-using-tiup.md | 30 +++++++------- 24 files changed, 79 insertions(+), 79 deletions(-) diff --git a/br/backup-and-restore-use-cases.md b/br/backup-and-restore-use-cases.md index 955e1b3f08d5..422549487649 100644 --- a/br/backup-and-restore-use-cases.md +++ b/br/backup-and-restore-use-cases.md @@ -17,7 +17,7 @@ aliases: ['/docs-cn/dev/br/backup-and-restore-use-cases/','/docs-cn/dev/referenc ## 部署 TiDB 集群和 br 命令行工具 -使用 PITR 功能,需要部署 v6.2.0 或以上版本的 TiDB 集群,并且更新 br 命令行工具到与 TiDB 集群相同的版本,本文假设使用的是 v7.1.0 版本。 +使用 PITR 功能,需要部署 v6.2.0 或以上版本的 TiDB 集群,并且更新 br 命令行工具到与 TiDB 集群相同的版本,本文假设使用的是 v7.2.0 版本。 下表介绍了在 TiDB 集群中使用日志备份功能的推荐配置。 @@ -44,13 +44,13 @@ aliases: ['/docs-cn/dev/br/backup-and-restore-use-cases/','/docs-cn/dev/referenc - 安装: ```shell - tiup install br:v7.1.0 + tiup install br:v7.2.0 ``` - 升级: ```shell - tiup update br:v7.1.0 + tiup update br:v7.2.0 ``` ## 配置备份存储 (Amazon S3) diff --git a/dm/maintain-dm-using-tiup.md b/dm/maintain-dm-using-tiup.md index e0eaac6c8f53..10ba08e4ea51 100644 --- a/dm/maintain-dm-using-tiup.md +++ b/dm/maintain-dm-using-tiup.md @@ -390,7 +390,7 @@ tiup dmctl --master-addr master1:8261 operate-source create /tmp/source1.yml 此时可以通过命令行参数 `--native-ssh` 启用系统自带命令行: -- 部署集群:`tiup dm deploy --native-ssh`,其中 `` 为集群名称,`` 为 DM 集群版本(例如 `v7.1.0`),`` 为拓扑文件路径 +- 部署集群:`tiup dm deploy --native-ssh`,其中 `` 为集群名称,`` 为 DM 集群版本(例如 `v7.2.0`),`` 为拓扑文件路径 - 启动集群:`tiup dm start --native-ssh` - 升级集群:`tiup dm upgrade ... --native-ssh` diff --git a/dm/quick-start-create-task.md b/dm/quick-start-create-task.md index 4794fd5e1cb7..578de1ebb54e 100644 --- a/dm/quick-start-create-task.md +++ b/dm/quick-start-create-task.md @@ -69,7 +69,7 @@ docker run --rm --name mysql-3307 -p 3307:3307 -e MYSQL_ALLOW_EMPTY_PASSWORD=tru {{< copyable "shell-regular" >}} ```bash -wget https://download.pingcap.org/tidb-community-server-v7.1.0-linux-amd64.tar.gz +wget https://download.pingcap.org/tidb-community-server-v7.2.0-linux-amd64.tar.gz tar -xzvf tidb-latest-linux-amd64.tar.gz mv tidb-latest-linux-amd64/bin/tidb-server ./ ./tidb-server -P 4000 --store mocktikv --log-file "./tidb.log" & diff --git a/information-schema/information-schema-tidb-servers-info.md b/information-schema/information-schema-tidb-servers-info.md index 4b2c49eeca0e..2f2ca5e1ea67 100644 --- a/information-schema/information-schema-tidb-servers-info.md +++ b/information-schema/information-schema-tidb-servers-info.md @@ -46,7 +46,7 @@ SELECT * FROM TIDB_SERVERS_INFO\G PORT: 4000 STATUS_PORT: 10080 LEASE: 45s - VERSION: 5.7.25-TiDB-v7.1.0 + VERSION: 5.7.25-TiDB-v7.2.0 GIT_HASH: 635a4362235e8a3c0043542e629532e3c7bb2756 BINLOG_STATUS: Off LABELS: diff --git a/pd-control.md b/pd-control.md index d88383d1e550..703dcc7eb0b5 100644 --- a/pd-control.md +++ b/pd-control.md @@ -28,7 +28,7 @@ PD Control 是 PD 的命令行工具,用于获取集群状态信息和调整 > **注意:** > -> 下载链接中的 `{version}` 为 TiDB 的版本号。例如,amd64 架构的 `v7.1.0` 版本的下载链接为 `https://download.pingcap.org/tidb-community-server-v7.1.0-linux-amd64.tar.gz`。 +> 下载链接中的 `{version}` 为 TiDB 的版本号。例如,amd64 架构的 `v7.2.0` 版本的下载链接为 `https://download.pingcap.org/tidb-community-server-v7.2.0-linux-amd64.tar.gz`。 ### 源码编译 diff --git a/post-installation-check.md b/post-installation-check.md index 5736621be245..9a6b58fac88d 100644 --- a/post-installation-check.md +++ b/post-installation-check.md @@ -63,7 +63,7 @@ mysql -u root -h ${tidb_server_host_IP_address} -P 4000 ```sql Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 3 -Server version: 5.7.25-TiDB-v7.1.0 TiDB Server (Apache License 2.0) Community Edition, MySQL 5.7 compatible +Server version: 5.7.25-TiDB-v7.2.0 TiDB Server (Apache License 2.0) Community Edition, MySQL 5.7 compatible Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved. diff --git a/production-deployment-using-tiup.md b/production-deployment-using-tiup.md index 44431628419f..de60c47efb6d 100644 --- a/production-deployment-using-tiup.md +++ b/production-deployment-using-tiup.md @@ -138,12 +138,12 @@ aliases: ['/docs-cn/dev/production-offline-deployment-using-tiup/', '/zh/tidb/de 如果从官网下载的离线镜像不满足你的具体需求,或者希望对已有的离线镜像内容进行调整,例如增加某个组件的新版本等,可以采取以下步骤进行操作: - 1. 在制作离线镜像时,可通过参数指定具体的组件和版本等信息,获得不完整的离线镜像。例如,要制作一个只包括 v1.11.3 版本 TiUP 和 TiUP Cluster 的离线镜像,可执行如下命令: + 1. 在制作离线镜像时,可通过参数指定具体的组件和版本等信息,获得不完整的离线镜像。例如,要制作一个只包括 v1.12.3 版本 TiUP 和 TiUP Cluster 的离线镜像,可执行如下命令: {{< copyable "shell-regular" >}} ```bash - tiup mirror clone tiup-custom-mirror-v1.11.3 --tiup v1.11.3 --cluster v1.11.3 + tiup mirror clone tiup-custom-mirror-v1.12.3 --tiup v1.12.3 --cluster v1.12.3 ``` 如果只需要某一特定平台的组件,也可以通过 `--os` 和 `--arch` 参数来指定。 @@ -175,10 +175,10 @@ aliases: ['/docs-cn/dev/production-offline-deployment-using-tiup/', '/zh/tidb/de {{< copyable "shell-regular" >}} ```bash - tiup mirror merge tiup-custom-mirror-v1.11.3 + tiup mirror merge tiup-custom-mirror-v1.12.3 ``` - 5. 上述步骤完成后,通过 `tiup list` 命令检查执行结果。在本文例子中,使用 `tiup list tiup` 和 `tiup list cluster` 均应能看到对应组件的 `v1.11.3` 版本出现在结果中。 + 5. 上述步骤完成后,通过 `tiup list` 命令检查执行结果。在本文例子中,使用 `tiup list tiup` 和 `tiup list cluster` 均应能看到对应组件的 `v1.12.3` 版本出现在结果中。 #### 部署离线环境 TiUP 组件 @@ -341,13 +341,13 @@ alertmanager_servers: {{< copyable "shell-regular" >}} ```shell - tiup cluster deploy tidb-test v7.1.0 ./topology.yaml --user root [-p] [-i /home/root/.ssh/gcp_rsa] + tiup cluster deploy tidb-test v7.2.0 ./topology.yaml --user root [-p] [-i /home/root/.ssh/gcp_rsa] ``` 以上部署示例中: - `tidb-test` 为部署的集群名称。 -- `v7.1.0` 为部署的集群版本,可以通过执行 `tiup list tidb` 来查看 TiUP 支持的最新可用版本。 +- `v7.2.0` 为部署的集群版本,可以通过执行 `tiup list tidb` 来查看 TiUP 支持的最新可用版本。 - 初始化配置文件为 `topology.yaml`。 - `--user root` 表示通过 root 用户登录到目标主机完成集群部署,该用户需要有 ssh 到目标机器的权限,并且在目标机器有 sudo 权限。也可以用其他有 ssh 和 sudo 权限的用户完成部署。 - [-i] 及 [-p] 为可选项,如果已经配置免密登录目标机,则不需填写。否则选择其一即可,[-i] 为可登录到目标机的 root 用户(或 --user 指定的其他用户)的私钥,也可使用 [-p] 交互式输入该用户的密码。 diff --git a/quick-start-with-tidb.md b/quick-start-with-tidb.md index 04811f96e5c0..11af47bee512 100644 --- a/quick-start-with-tidb.md +++ b/quick-start-with-tidb.md @@ -81,10 +81,10 @@ TiDB 是一个分布式系统。最基础的 TiDB 测试集群通常由 2 个 Ti {{< copyable "shell-regular" >}} ```shell - tiup playground v7.1.0 --db 2 --pd 3 --kv 3 + tiup playground v7.2.0 --db 2 --pd 3 --kv 3 ``` - 上述命令会在本地下载并启动某个版本的集群(例如 v7.1.0)。最新版本可以通过执行 `tiup list tidb` 来查看。运行结果将显示集群的访问方式: + 上述命令会在本地下载并启动某个版本的集群(例如 v7.2.0)。最新版本可以通过执行 `tiup list tidb` 来查看。运行结果将显示集群的访问方式: ```log CLUSTER START SUCCESSFULLY, Enjoy it ^-^ @@ -198,10 +198,10 @@ TiDB 是一个分布式系统。最基础的 TiDB 测试集群通常由 2 个 Ti {{< copyable "shell-regular" >}} ```shell - tiup playground v7.1.0 --db 2 --pd 3 --kv 3 + tiup playground v7.2.0 --db 2 --pd 3 --kv 3 ``` - 上述命令会在本地下载并启动某个版本的集群(例如 v7.1.0)。最新版本可以通过执行 `tiup list tidb` 来查看。运行结果将显示集群的访问方式: + 上述命令会在本地下载并启动某个版本的集群(例如 v7.2.0)。最新版本可以通过执行 `tiup list tidb` 来查看。运行结果将显示集群的访问方式: ```log CLUSTER START SUCCESSFULLY, Enjoy it ^-^ @@ -432,7 +432,7 @@ TiDB 是一个分布式系统。最基础的 TiDB 测试集群通常由 2 个 Ti ``` - 参数 `` 表示设置集群名称 - - 参数 `` 表示设置集群版本,例如 `v7.1.0`。可以通过 `tiup list tidb` 命令来查看当前支持部署的 TiDB 版本 + - 参数 `` 表示设置集群版本,例如 `v7.2.0`。可以通过 `tiup list tidb` 命令来查看当前支持部署的 TiDB 版本 - 参数 `-p` 表示在连接目标机器时使用密码登录 > **注意:** diff --git a/scale-tidb-using-tiup.md b/scale-tidb-using-tiup.md index e170b6d0275a..9d1d052813f2 100644 --- a/scale-tidb-using-tiup.md +++ b/scale-tidb-using-tiup.md @@ -276,11 +276,11 @@ tiup cluster display ``` ``` -Starting /root/.tiup/components/cluster/v1.11.3/cluster display +Starting /root/.tiup/components/cluster/v1.12.3/cluster display TiDB Cluster: -TiDB Version: v7.1.0 +TiDB Version: v7.2.0 ID Role Host Ports Status Data Dir Deploy Dir diff --git a/system-variables.md b/system-variables.md index ec13a5858aec..d58f3c7cf051 100644 --- a/system-variables.md +++ b/system-variables.md @@ -4448,7 +4448,7 @@ Query OK, 0 rows affected, 1 warning (0.00 sec) - 作用域:NONE - 默认值:`5.7.25-TiDB-(tidb version)` -- 这个变量的值是 MySQL 的版本和 TiDB 的版本,例如 '5.7.25-TiDB-v7.1.0'。 +- 这个变量的值是 MySQL 的版本和 TiDB 的版本,例如 '5.7.25-TiDB-v7.2.0'。 ### `version_comment` diff --git a/ticdc/deploy-ticdc.md b/ticdc/deploy-ticdc.md index 4197bc572c7c..cf86b34a0f3c 100644 --- a/ticdc/deploy-ticdc.md +++ b/ticdc/deploy-ticdc.md @@ -95,7 +95,7 @@ tiup cluster upgrade --transfer-timeout 600 > **注意:** > -> 命令中的 `` 需要替换为集群名字,`` 需要替换为目标版本号,例如 v7.1.0。 +> 命令中的 `` 需要替换为集群名字,`` 需要替换为目标版本号,例如 v7.2.0。 ### 升级的注意事项 @@ -152,7 +152,7 @@ tiup cluster upgrade --transfer-timeout 600 ## 使用 TiCDC 命令行工具来查看集群状态 -执行以下命令来查看 TiCDC 集群运行状态,注意需要将 `v` 替换为 TiCDC 集群版本,例如 `v7.1.0`: +执行以下命令来查看 TiCDC 集群运行状态,注意需要将 `v` 替换为 TiCDC 集群版本,例如 `v7.2.0`: ```shell tiup ctl:v cdc capture list --server=http://10.0.10.25:8300 diff --git a/ticdc/ticdc-open-api-v2.md b/ticdc/ticdc-open-api-v2.md index 74989712f4c9..a98cbda533f0 100644 --- a/ticdc/ticdc-open-api-v2.md +++ b/ticdc/ticdc-open-api-v2.md @@ -90,7 +90,7 @@ curl -X GET http://127.0.0.1:8300/api/v2/status ```json { - "version": "v7.1.0", + "version": "v7.2.0", "git_hash": "10413bded1bdb2850aa6d7b94eb375102e9c44dc", "id": "d2912e63-3349-447c-90ba-72a4e04b5e9e", "pid": 1447, diff --git a/tidb-binlog/get-started-with-tidb-binlog.md b/tidb-binlog/get-started-with-tidb-binlog.md index d22191703a76..2e3da643f2ed 100644 --- a/tidb-binlog/get-started-with-tidb-binlog.md +++ b/tidb-binlog/get-started-with-tidb-binlog.md @@ -47,7 +47,7 @@ sudo yum install -y mariadb-server {{< copyable "shell-regular" >}} ```bash -curl -LO https://download.pingcap.org/tidb-community-server-v7.1.0-linux-amd64.tar.gz | tar xzf - && +curl -LO https://download.pingcap.org/tidb-community-server-v7.2.0-linux-amd64.tar.gz | tar xzf - && cd tidb-latest-linux-amd64 ``` diff --git a/tidb-monitoring-api.md b/tidb-monitoring-api.md index 529eaa4d5a34..b4cfef34cc7c 100644 --- a/tidb-monitoring-api.md +++ b/tidb-monitoring-api.md @@ -32,7 +32,7 @@ curl http://127.0.0.1:10080/status ``` { connections: 0, # 当前 TiDB Server 上的客户端连接数 - version: "5.7.25-TiDB-v7.1.0", # TiDB 版本号 + version: "5.7.25-TiDB-v7.2.0", # TiDB 版本号 git_hash: "7267747ae0ec624dffc3fdedb00f1ed36e10284b" # TiDB 当前代码的 Git Hash } ``` diff --git a/tiflash/create-tiflash-replicas.md b/tiflash/create-tiflash-replicas.md index 93ccfccd2d7d..c08100edc899 100644 --- a/tiflash/create-tiflash-replicas.md +++ b/tiflash/create-tiflash-replicas.md @@ -139,10 +139,10 @@ SELECT TABLE_NAME FROM information_schema.tables where TABLE_SCHEMA = " tiup ctl:v pd -u http://:2379 store limit all engine tiflash 60 add-peer ``` - > 上述命令中,需要将 `v` 替换为该集群版本,例如 `v7.1.0`,`:2379` 替换为任一 PD 节点的地址。替换后样例为: + > 上述命令中,需要将 `v` 替换为该集群版本,例如 `v7.2.0`,`:2379` 替换为任一 PD 节点的地址。替换后样例为: > > ```shell - > tiup ctl:v7.1.0 pd -u http://192.168.1.4:2379 store limit all engine tiflash 60 add-peer + > tiup ctl:v7.2.0 pd -u http://192.168.1.4:2379 store limit all engine tiflash 60 add-peer > ``` 执行完毕后,几分钟内,你将观察到 TiFlash 节点的 CPU 及磁盘 IO 资源占用显著提升,TiFlash 将更快地创建副本。同时,TiKV 节点的 CPU 及磁盘 IO 资源占用也将有所上升。 diff --git a/tiup/tiup-cluster.md b/tiup/tiup-cluster.md index 4a30f5f4ac04..e321a1a2589e 100644 --- a/tiup/tiup-cluster.md +++ b/tiup/tiup-cluster.md @@ -16,7 +16,7 @@ tiup cluster ``` ``` -Starting component `cluster`: /home/tidb/.tiup/components/cluster/v1.11.3/cluster +Starting component `cluster`: /home/tidb/.tiup/components/cluster/v1.12.3/cluster Deploy a TiDB cluster for production Usage: @@ -61,7 +61,7 @@ Flags: tiup cluster deploy [flags] ``` -该命令需要提供集群的名字、集群使用的 TiDB 版本(例如 `v7.1.0`),以及一个集群的拓扑文件。 +该命令需要提供集群的名字、集群使用的 TiDB 版本(例如 `v7.2.0`),以及一个集群的拓扑文件。 拓扑文件的编写可参考[示例](https://github.com/pingcap/tiup/blob/master/embed/examples/cluster/topology.example.yaml)。以一个最简单的拓扑为例,将下列文件保存为 `/tmp/topology.yaml`: @@ -118,12 +118,12 @@ tidb_servers: ... ``` -假如我们想要使用 TiDB 的 v7.1.0 版本,集群名字为 `prod-cluster`,则执行以下命令: +假如我们想要使用 TiDB 的 v7.2.0 版本,集群名字为 `prod-cluster`,则执行以下命令: {{< copyable "shell-regular" >}} ```shell -tiup cluster deploy -p prod-cluster v7.1.0 /tmp/topology.yaml +tiup cluster deploy -p prod-cluster v7.2.0 /tmp/topology.yaml ``` 执行过程中会再次确认拓扑结构并提示输入目标机器上的 root 密码(-p 表示使用密码): @@ -131,7 +131,7 @@ tiup cluster deploy -p prod-cluster v7.1.0 /tmp/topology.yaml ```bash Please confirm your topology: TiDB Cluster: prod-cluster -TiDB Version: v7.1.0 +TiDB Version: v7.2.0 Type Host Ports OS/Arch Directories ---- ---- ----- ------- ----------- pd 172.16.5.134 2379/2380 linux/x86_64 deploy/pd-2379,data/pd-2379 @@ -171,10 +171,10 @@ tiup cluster list ``` ``` -Starting /root/.tiup/components/cluster/v1.11.3/cluster list +Starting /root/.tiup/components/cluster/v1.12.3/cluster list Name User Version Path PrivateKey ---- ---- ------- ---- ---------- -prod-cluster tidb v7.1.0 /root/.tiup/storage/cluster/clusters/prod-cluster /root/.tiup/storage/cluster/clusters/prod-cluster/ssh/id_rsa +prod-cluster tidb v7.2.0 /root/.tiup/storage/cluster/clusters/prod-cluster /root/.tiup/storage/cluster/clusters/prod-cluster/ssh/id_rsa ``` ## 启动集群 @@ -200,9 +200,9 @@ tiup cluster display prod-cluster ``` ``` -Starting /root/.tiup/components/cluster/v1.11.3/cluster display prod-cluster +Starting /root/.tiup/components/cluster/v1.12.3/cluster display prod-cluster TiDB Cluster: prod-cluster -TiDB Version: v7.1.0 +TiDB Version: v7.2.0 ID Role Host Ports OS/Arch Status Data Dir Deploy Dir -- ---- ---- ----- ------- ------ -------- ---------- 172.16.5.134:3000 grafana 172.16.5.134 3000 linux/x86_64 Up - deploy/grafana-3000 @@ -268,9 +268,9 @@ tiup cluster display prod-cluster ``` ``` -Starting /root/.tiup/components/cluster/v1.11.3/cluster display prod-cluster +Starting /root/.tiup/components/cluster/v1.12.3/cluster display prod-cluster TiDB Cluster: prod-cluster -TiDB Version: v7.1.0 +TiDB Version: v7.2.0 ID Role Host Ports OS/Arch Status Data Dir Deploy Dir -- ---- ---- ----- ------- ------ -------- ---------- 172.16.5.134:3000 grafana 172.16.5.134 3000 linux/x86_64 Up - deploy/grafana-3000 @@ -370,12 +370,12 @@ Global Flags: -y, --yes 跳过所有的确认步骤 ``` -例如,把集群升级到 v7.1.0 的命令为: +例如,把集群升级到 v7.2.0 的命令为: {{< copyable "shell-regular" >}} ```bash -tiup cluster upgrade tidb-test v7.1.0 +tiup cluster upgrade tidb-test v7.2.0 ``` ## 更新配置 @@ -552,14 +552,14 @@ tiup cluster audit ``` ``` -Starting component `cluster`: /home/tidb/.tiup/components/cluster/v1.11.3/cluster audit +Starting component `cluster`: /home/tidb/.tiup/components/cluster/v1.12.3/cluster audit ID Time Command -- ---- ------- -4BLhr0 2023-05-31T23:55:09+08:00 /home/tidb/.tiup/components/cluster/v1.11.3/cluster deploy test v7.1.0 /tmp/topology.yaml -4BKWjF 2023-05-31T23:36:57+08:00 /home/tidb/.tiup/components/cluster/v1.11.3/cluster deploy test v7.1.0 /tmp/topology.yaml -4BKVwH 2023-05-31T23:02:08+08:00 /home/tidb/.tiup/components/cluster/v1.11.3/cluster deploy test v7.1.0 /tmp/topology.yaml -4BKKH1 2023-05-31T16:39:04+08:00 /home/tidb/.tiup/components/cluster/v1.11.3/cluster destroy test -4BKKDx 2023-05-31T16:36:57+08:00 /home/tidb/.tiup/components/cluster/v1.11.3/cluster deploy test v7.1.0 /tmp/topology.yaml +4BLhr0 2023-06-29T23:55:09+08:00 /home/tidb/.tiup/components/cluster/v1.12.3/cluster deploy test v7.2.0 /tmp/topology.yaml +4BKWjF 2023-06-29T23:36:57+08:00 /home/tidb/.tiup/components/cluster/v1.12.3/cluster deploy test v7.2.0 /tmp/topology.yaml +4BKVwH 2023-06-29T23:02:08+08:00 /home/tidb/.tiup/components/cluster/v1.12.3/cluster deploy test v7.2.0 /tmp/topology.yaml +4BKKH1 2023-06-29T16:39:04+08:00 /home/tidb/.tiup/components/cluster/v1.12.3/cluster destroy test +4BKKDx 2023-06-29T16:36:57+08:00 /home/tidb/.tiup/components/cluster/v1.12.3/cluster deploy test v7.2.0 /tmp/topology.yaml ``` 第一列为 audit-id,如果想看某个命令的执行日志,则传入这个 audit-id: @@ -673,7 +673,7 @@ tiup cluster check --cluster 此时可以通过命令行参数 `--ssh=system` 启用系统自带命令行: -- 部署集群:`tiup cluster deploy --ssh=system`,其中 `` 为集群名称,`` 为 TiDB 集群版本(例如 `v7.1.0`),`` 为拓扑文件路径 +- 部署集群:`tiup cluster deploy --ssh=system`,其中 `` 为集群名称,`` 为 TiDB 集群版本(例如 `v7.2.0`),`` 为拓扑文件路径 - 启动集群:`tiup cluster start --ssh=system` - 升级集群:`tiup cluster upgrade ... --ssh=system` diff --git a/tiup/tiup-component-cluster-deploy.md b/tiup/tiup-component-cluster-deploy.md index 67d0585179f5..e2aa9029ee8b 100644 --- a/tiup/tiup-component-cluster-deploy.md +++ b/tiup/tiup-component-cluster-deploy.md @@ -13,7 +13,7 @@ tiup cluster deploy [flags] ``` - `` 表示新集群的名字,不能和现有集群同名 -- `` 为要部署的 TiDB 集群版本号,如 `v7.1.0` +- `` 为要部署的 TiDB 集群版本号,如 `v7.2.0` - `` 为事先编写好的[拓扑文件](/tiup/tiup-cluster-topology-reference.md) ## 选项 diff --git a/tiup/tiup-component-cluster-patch.md b/tiup/tiup-component-cluster-patch.md index 703138ec7fa2..b1b467052a33 100644 --- a/tiup/tiup-component-cluster-patch.md +++ b/tiup/tiup-component-cluster-patch.md @@ -28,7 +28,7 @@ tiup cluster patch [flags] 1. 确定以下变量的值: - `${component}`:需要替换的组件名(例如 `tidb`、`tikv`、`pd`)。 - - `${version}`:组件的版本(例如 `v7.1.0`、`v6.5.2`)。 + - `${version}`:组件的版本(例如 `v7.2.0`、`v6.5.2`)。 - `${os}`:操作系统 (`linux`)。 - `${arch}`:组件运行的平台 (`amd64`、`arm64`)。 2. 下载当前的组件包: diff --git a/tiup/tiup-component-cluster-upgrade.md b/tiup/tiup-component-cluster-upgrade.md index 485d0ad3491c..71b3d54fc82d 100644 --- a/tiup/tiup-component-cluster-upgrade.md +++ b/tiup/tiup-component-cluster-upgrade.md @@ -13,7 +13,7 @@ tiup cluster upgrade [flags] ``` - `` 为要操作的集群名字,如果忘记集群名字可通过[集群列表](/tiup/tiup-component-cluster-list.md)查看。 -- `` 为要升级到的目标版本,例如 `v7.1.0`。目前仅允许升级到比当前集群更高的版本,不允许升级到比当前集群更低的版本,即不允许降级。同时也不允许升级成 nightly 版本。 +- `` 为要升级到的目标版本,例如 `v7.2.0`。目前仅允许升级到比当前集群更高的版本,不允许升级到比当前集群更低的版本,即不允许降级。同时也不允许升级成 nightly 版本。 ## 选项 diff --git a/tiup/tiup-component-dm-upgrade.md b/tiup/tiup-component-dm-upgrade.md index c0f689efe554..523a66a41b34 100644 --- a/tiup/tiup-component-dm-upgrade.md +++ b/tiup/tiup-component-dm-upgrade.md @@ -13,7 +13,7 @@ tiup dm upgrade [flags] ``` - `` 为要操作的集群名字,如果忘记集群名字可查看[集群列表](/tiup/tiup-component-dm-list.md)。 -- `` 为要升级到的目标版本,例如 `v7.1.0`。目前仅允许升级到比当前集群更高的版本,不允许升级到比当前集群更低的版本,即不允许降级。同时也不允许升级成 nightly 版本。 +- `` 为要升级到的目标版本,例如 `v7.2.0`。目前仅允许升级到比当前集群更高的版本,不允许升级到比当前集群更低的版本,即不允许降级。同时也不允许升级成 nightly 版本。 ## 选项 diff --git a/tiup/tiup-component-management.md b/tiup/tiup-component-management.md index aa9c3a75c48c..aa4f0819d1af 100644 --- a/tiup/tiup-component-management.md +++ b/tiup/tiup-component-management.md @@ -69,12 +69,12 @@ tiup install tidb tiup install tidb:nightly ``` -示例三:使用 TiUP 安装 v7.1.0 版本的 TiKV +示例三:使用 TiUP 安装 v7.2.0 版本的 TiKV {{< copyable "shell-regular" >}} ```shell -tiup install tikv:v7.1.0 +tiup install tikv:v7.2.0 ``` ## 升级组件 @@ -127,12 +127,12 @@ Flags: 如果想要多次启动同一个组件并复用之前的工作目录,就可以在启动时用 `--tag` 指定相同的名字。指定 tag 后,在实例终止时就*不会自动删除*工作目录,方便下次启动时复用。 -示例一:运行 v7.1.0 版本的 TiDB +示例一:运行 v7.2.0 版本的 TiDB {{< copyable "shell-regular" >}} ```shell -tiup tidb:v7.1.0 +tiup tidb:v7.2.0 ``` 示例二:指定 tag 运行 TiKV @@ -218,12 +218,12 @@ component 为要卸载的组件名称,version 为要卸载的版本,这两 - 若省略版本,加 `--all` 表示卸载该组件所有版本 - 若版本和组件都省略,则加 `--all` 表示卸载所有组件及其所有版本 -示例一:卸载 v7.1.0 版本的 TiDB +示例一:卸载 v7.2.0 版本的 TiDB {{< copyable "shell-regular" >}} ```shell -tiup uninstall tidb:v7.1.0 +tiup uninstall tidb:v7.2.0 ``` 示例二:卸载所有版本的 TiKV diff --git a/tiup/tiup-mirror.md b/tiup/tiup-mirror.md index c9cd9401fe25..f9bc57152ca8 100644 --- a/tiup/tiup-mirror.md +++ b/tiup/tiup-mirror.md @@ -86,9 +86,9 @@ tiup mirror clone [global-version] [flags] 如果只想克隆某个组件的某一个版本而不是所有版本,则使用 `--=` 来限定,例如: - - 只想克隆 TiDB 的 v7.1.0 版本,则执行 `tiup mirror clone --tidb v7.1.0` - - 只想克隆 TiDB 的 v7.1.0 版本,以及 TiKV 的所有版本,则执行 `tiup mirror clone --tidb v7.1.0 --tikv all` - - 克隆一个集群的所有组件的 v7.1.0 版本,则执行 `tiup mirror clone v7.1.0` + - 只想克隆 TiDB 的 v7.2.0 版本,则执行 `tiup mirror clone --tidb v7.2.0` + - 只想克隆 TiDB 的 v7.2.0 版本,以及 TiKV 的所有版本,则执行 `tiup mirror clone --tidb v7.2.0 --tikv all` + - 克隆一个集群的所有组件的 v7.2.0 版本,则执行 `tiup mirror clone v7.2.0` 克隆完成后,签名密钥会自动设置。 diff --git a/tiup/tiup-playground.md b/tiup/tiup-playground.md index 613123f1b22b..2a124c647bcc 100644 --- a/tiup/tiup-playground.md +++ b/tiup/tiup-playground.md @@ -17,9 +17,9 @@ tiup playground ${version} [flags] 如果直接执行 `tiup playground` 命令,则 TiUP playground 会使用本地安装的 TiDB/TiKV/PD 组件或者安装这些组件的稳定版本,来启动一个由 1 个 TiKV、1 个 TiDB、1 个 PD 和 1 个 TiFlash 实例构成的集群。该命令实际做了以下事情: -- 因为该命令没有指定 playground 的版本,TiUP 会先查找已安装的 playground 的最新版本,假设已安装的 playground 最新版为 v1.11.3,则该命令相当于 tiup playground:v1.11.3 +- 因为该命令没有指定 playground 的版本,TiUP 会先查找已安装的 playground 的最新版本,假设已安装的 playground 最新版为 v1.12.3,则该命令相当于 tiup playground:v1.12.3 - 如果 playground 从未安装过任何版本的 TiDB/TiKV/PD 组件,TiUP 会先安装这些组件的最新稳定版,然后再启动运行这些组件的实例 -- 因为该命令没有指定 TiDB/PD/TiKV 各组件的版本,默认情况下,它会使用各组件的最新发布版本,假设当前为 v7.1.0,则该命令相当于 tiup playground:1.11.3 v7.1.0 +- 因为该命令没有指定 TiDB/PD/TiKV 各组件的版本,默认情况下,它会使用各组件的最新发布版本,假设当前为 v7.2.0,则该命令相当于 tiup playground:1.12.3 v7.2.0 - 因为该命令也没有指定各组件的个数,默认情况下,它会启动由 1 个 TiDB、1 个 TiKV、1 个 PD 和 1 个 TiFlash 实例构成的最小化集群 - 在依次启动完各个 TiDB 组件后,playground 会提醒集群启动成功,并告诉你一些有用的信息,譬如如何通过 MySQL 客户端连接集群、如何访问 [TiDB Dashboard](/dashboard/dashboard-intro.md) 等 diff --git a/upgrade-tidb-using-tiup.md b/upgrade-tidb-using-tiup.md index c287053c49db..a657a8921d99 100644 --- a/upgrade-tidb-using-tiup.md +++ b/upgrade-tidb-using-tiup.md @@ -7,10 +7,10 @@ aliases: ['/docs-cn/dev/upgrade-tidb-using-tiup/','/docs-cn/dev/how-to/upgrade/u 本文档适用于以下升级路径: -- 使用 TiUP 从 TiDB 4.0 版本升级至 TiDB 7.1。 -- 使用 TiUP 从 TiDB 5.0-5.4 版本升级至 TiDB 7.1。 -- 使用 TiUP 从 TiDB 6.0-6.6 版本升级至 TiDB 7.1。 -- 使用 TiUP 从 TiDB 7.0 版本升级至 TiDB 7.1。 +- 使用 TiUP 从 TiDB 4.0 版本升级至 TiDB 7.2。 +- 使用 TiUP 从 TiDB 5.0-5.4 版本升级至 TiDB 7.2。 +- 使用 TiUP 从 TiDB 6.0-6.6 版本升级至 TiDB 7.2。 +- 使用 TiUP 从 TiDB 7.0-7.1 版本升级至 TiDB 7.2。 > **警告:** > @@ -22,17 +22,17 @@ aliases: ['/docs-cn/dev/upgrade-tidb-using-tiup/','/docs-cn/dev/how-to/upgrade/u > **注意:** > -> 如果原集群是 3.0 或 3.1 或更早的版本,不支持直接升级到 v7.1.0 及后续修订版本。你需要先从早期版本升级到 4.0 后,再从 4.0 升级到 v7.1.0 及后续修订版本。 +> 如果原集群是 3.0 或 3.1 或更早的版本,不支持直接升级到 v7.2.0 及后续修订版本。你需要先从早期版本升级到 4.0 后,再从 4.0 升级到 v7.2.0 及后续修订版本。 ## 1. 升级兼容性说明 - TiDB 目前暂不支持版本降级或升级后回退。 -- 使用 TiDB Ansible 管理的 4.0 版本集群,需要先按照 [4.0 版本文档的说明](https://docs.pingcap.com/zh/tidb/v4.0/upgrade-tidb-using-tiup)将集群导入到 TiUP (`tiup cluster`) 管理后,再按本文档说明升级到 v7.1.0 版本。 -- 若要将 v3.0 之前的版本升级至 v7.1.0 版本: +- 使用 TiDB Ansible 管理的 4.0 版本集群,需要先按照 [4.0 版本文档的说明](https://docs.pingcap.com/zh/tidb/v4.0/upgrade-tidb-using-tiup)将集群导入到 TiUP (`tiup cluster`) 管理后,再按本文档说明升级到 v7.2.0 版本。 +- 若要将 v3.0 之前的版本升级至 v7.2.0 版本: 1. 首先[通过 TiDB Ansible 升级到 3.0 版本](https://docs.pingcap.com/zh/tidb/v3.0/upgrade-tidb-using-ansible)。 2. 然后按照 [4.0 版本文档的说明](https://docs.pingcap.com/zh/tidb/v4.0/upgrade-tidb-using-tiup),使用 TiUP (`tiup cluster`) 将 TiDB Ansible 配置导入。 3. 将集群升级至 v4.0 版本。 - 4. 按本文档说明将集群升级到 v7.1.0 版本。 + 4. 按本文档说明将集群升级到 v7.2.0 版本。 - 支持 TiDB Binlog,TiCDC,TiFlash 等组件版本的升级。 - 将 v6.3.0 之前的 TiFlash 升级至 v6.3.0 及之后的版本时,需要特别注意:在 Linux AMD64 架构的硬件平台部署 TiFlash 时,CPU 必须支持 AVX2 指令集。而在 Linux ARM64 架构的硬件平台部署 TiFlash 时,CPU 必须支持 ARMv8 架构。具体请参考 [6.3.0 版本 Release Notes](/releases/release-6.3.0.md#其他) 中的描述。 - 具体不同版本的兼容性说明,请查看各个版本的 [Release Note](/releases/release-notes.md)。请根据各个版本的 Release Note 的兼容性更改调整集群的配置。 @@ -137,7 +137,7 @@ tiup update cluster > **注意:** > -> 升级到 v7.1.0 版本前,请确认已在 4.0 修改的参数在 v7.1.0 版本中是兼容的,可参考 [TiKV 配置文件描述](/tikv-configuration-file.md)。 +> 升级到 v7.2.0 版本前,请确认已在 4.0 修改的参数在 v7.2.0 版本中是兼容的,可参考 [TiKV 配置文件描述](/tikv-configuration-file.md)。 ### 2.4 检查当前集群的健康状况 @@ -174,12 +174,12 @@ tiup cluster check --cluster tiup cluster upgrade ``` -以升级到 v7.1.0 版本为例: +以升级到 v7.2.0 版本为例: {{< copyable "shell-regular" >}} ``` -tiup cluster upgrade v7.1.0 +tiup cluster upgrade v7.2.0 ``` > **注意:** @@ -203,7 +203,7 @@ tiup cluster upgrade v7.1.0 tiup cluster stop ``` -之后通过 `upgrade` 命令添加 `--offline` 参数来进行停机升级,其中 `` 为集群名,`` 为升级的目标版本,例如 `v7.1.0`。 +之后通过 `upgrade` 命令添加 `--offline` 参数来进行停机升级,其中 `` 为集群名,`` 为升级的目标版本,例如 `v7.2.0`。 {{< copyable "shell-regular" >}} @@ -232,7 +232,7 @@ tiup cluster display ``` Cluster type: tidb Cluster name: -Cluster version: v7.1.0 +Cluster version: v7.2.0 ``` ## 4. 升级 FAQ @@ -263,7 +263,7 @@ Cluster version: v7.1.0 ### 4.2 升级过程中 evict leader 等待时间过长,如何跳过该步骤快速升级 -可以指定 `--force`,升级时会跳过 `PD transfer leader` 和 `TiKV evict leader` 过程,直接重启并升级版本,对线上运行的集群性能影响较大。命令如下,其中 `` 为升级的目标版本,例如 `v7.1.0`: +可以指定 `--force`,升级时会跳过 `PD transfer leader` 和 `TiKV evict leader` 过程,直接重启并升级版本,对线上运行的集群性能影响较大。命令如下,其中 `` 为升级的目标版本,例如 `v7.2.0`: {{< copyable "shell-regular" >}} @@ -278,5 +278,5 @@ tiup cluster upgrade --force {{< copyable "" >}} ``` -tiup install ctl:v7.1.0 +tiup install ctl:v7.2.0 ``` From 32f268540b4bb8fbae708550fd9622098d18d117 Mon Sep 17 00:00:00 2001 From: Chao Zheng Date: Thu, 29 Jun 2023 00:56:19 -0700 Subject: [PATCH 233/257] fix cdc changefeed config error (#14353) --- ticdc/ticdc-changefeed-config.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ticdc/ticdc-changefeed-config.md b/ticdc/ticdc-changefeed-config.md index a5e777ce75dd..b01af0d841c0 100644 --- a/ticdc/ticdc-changefeed-config.md +++ b/ticdc/ticdc-changefeed-config.md @@ -184,9 +184,9 @@ enable-partition-separator = true # 是否在 CSV 行中包含 commit-ts。默认值为 false。 # include-commit-ts = false -# sink.consistent 中的字段用于配置 Changefeed 的数据一致性。详细的信息,请参考 。 +# consistent 中的字段用于配置 Changefeed 的数据一致性。详细的信息,请参考 。 # 注意:一致性相关参数只有当下游为数据库并且开启 redo log 功能时,才会生效。 -[sink.consistent] +[consistent] # 数据一致性级别。默认值为 "none",可选值为 "none" 和 "eventual"。 # 设置为 "none" 时将关闭 redo log。 level = "none" From 460344e928c8b57f60a816c3bf8daee09cde4329 Mon Sep 17 00:00:00 2001 From: Grace Cai Date: Thu, 29 Jun 2023 18:18:48 +0800 Subject: [PATCH 234/257] release-7.1.0: update package downloading link (#14371) --- releases/release-7.1.0.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/releases/release-7.1.0.md b/releases/release-7.1.0.md index b93dcc04b55f..5fce41c83536 100644 --- a/releases/release-7.1.0.md +++ b/releases/release-7.1.0.md @@ -9,7 +9,7 @@ summary: 了解 TiDB 7.1.0 版本的新功能、兼容性变更、改进提升 TiDB 版本:7.1.0 -试用链接:[快速体验](https://docs.pingcap.com/zh/tidb/v7.1/quick-start-with-tidb) | [生产部署](https://docs.pingcap.com/zh/tidb/v7.1/production-deployment-using-tiup) | [下载离线包](https://cn.pingcap.com/product-community) +试用链接:[快速体验](https://docs.pingcap.com/zh/tidb/v7.1/quick-start-with-tidb) | [生产部署](https://docs.pingcap.com/zh/tidb/v7.1/production-deployment-using-tiup) | [下载离线包](https://cn.pingcap.com/product-community/?version=v7.1.0#version-list) TiDB 7.1.0 为长期支持版本 (Long-Term Support Release, LTS)。 From 213d507ceedeef613379fb7facda83b9a8064d23 Mon Sep 17 00:00:00 2001 From: Ran Date: Fri, 30 Jun 2023 11:57:41 +0800 Subject: [PATCH 235/257] update the supported macos version (#14375) --- hardware-and-software-requirements.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hardware-and-software-requirements.md b/hardware-and-software-requirements.md index 036b85bc59ce..b9597e90bce6 100644 --- a/hardware-and-software-requirements.md +++ b/hardware-and-software-requirements.md @@ -25,7 +25,7 @@ TiDB 作为一款开源一栈式实时 HTAP 数据库,可以很好地部署和 | 麒麟欧拉版 V10 SP1/SP2 |
  • x86_64
  • ARM 64
| | UOS V20 |
  • x86_64
  • ARM 64
| | openEuler 22.03 LTS SP1 | x86_64 | -| macOS Catalina 及以上的版本 |
  • x86_64
  • ARM 64
| +| macOS 12 (Monterey) 及以上的版本 |
  • x86_64
  • ARM 64
| | Oracle Enterprise Linux 7.3 及以上的 7.x 版本 | x86_64 | | Ubuntu LTS 18.04 及以上的版本 | x86_64 | | CentOS 8 Stream |
  • x86_64
  • ARM 64
| From 0bf5e0cd2c704b773fa51626c0aac00d70d97835 Mon Sep 17 00:00:00 2001 From: Lucas Date: Fri, 30 Jun 2023 18:57:42 +0800 Subject: [PATCH 236/257] pd: bugfix for the descriptions on `Slow Score`. (#14310) --- best-practices/pd-scheduling-best-practices.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/best-practices/pd-scheduling-best-practices.md b/best-practices/pd-scheduling-best-practices.md index 675c1d7ce49b..53f8cfdb96a7 100644 --- a/best-practices/pd-scheduling-best-practices.md +++ b/best-practices/pd-scheduling-best-practices.md @@ -297,4 +297,4 @@ 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 到达上限(默认 100)时,将节点上的 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`)。 From 709234f8249ea5eaa18f3f80494bc62f5f75144c Mon Sep 17 00:00:00 2001 From: Grace Cai Date: Fri, 30 Jun 2023 23:29:13 +0800 Subject: [PATCH 237/257] add the link of v7.2 release notes to TiDB roadmap (#14376) --- README.md | 1 + tidb-roadmap.md | 1 + 2 files changed, 2 insertions(+) diff --git a/README.md b/README.md index 88b383cb9bd9..f1d6530a1059 100644 --- a/README.md +++ b/README.md @@ -13,6 +13,7 @@ | 文档仓库 branch | 对应 TiDB 文档版本 | |:---------|:----------| | [`master`](https://github.com/pingcap/docs-cn/tree/master) | dev 最新开发版 | +| [`release-7.2`](https://github.com/pingcap/docs-cn/tree/release-7.2) | 7.2 开发里程碑版 (DMR) | | [`release-7.1`](https://github.com/pingcap/docs-cn/tree/release-7.1) | 7.1 长期支持版 (LTS) | | [`release-7.0`](https://github.com/pingcap/docs-cn/tree/release-7.0) | 7.0 开发里程碑版 (DMR) | | [`release-6.6`](https://github.com/pingcap/docs-cn/tree/release-6.6) | 6.6 开发里程碑版 (DMR) | diff --git a/tidb-roadmap.md b/tidb-roadmap.md index 76658862e488..9a42469cd8a4 100644 --- a/tidb-roadmap.md +++ b/tidb-roadmap.md @@ -324,6 +324,7 @@ TiDB 路线图展示了 TiDB 未来的发展方向,包括新特性和改进提 ## 近期已发布特性 +- [TiDB 7.2.0 Release Notes](/releases/release-7.2.0.md) - [TiDB 7.1.0 Release Notes](/releases/release-7.1.0.md) - [TiDB 7.0.0 Release Notes](/releases/release-7.0.0.md) - [TiDB 6.6.0 Release Notes](/releases/release-6.6.0.md) From 1b1fbb49b60b02521d77a81a5edeb6694d23f9bd Mon Sep 17 00:00:00 2001 From: ShuNing Date: Mon, 3 Jul 2023 09:29:13 +0800 Subject: [PATCH 238/257] resource_control: ru consistent with serverless (#14033) --- tidb-resource-control.md | 53 +++++++++++++++++++++++++++++----------- 1 file changed, 39 insertions(+), 14 deletions(-) diff --git a/tidb-resource-control.md b/tidb-resource-control.md index 5fffb685d9e5..3c5bf5b89022 100644 --- a/tidb-resource-control.md +++ b/tidb-resource-control.md @@ -32,21 +32,46 @@ TiDB 资源管控特性提供了两层资源管理能力,包括在 TiDB 层的 ## 什么是 Request Unit (RU) -Request Unit (RU) 是 TiDB 对 CPU、IO 等系统资源的统一抽象的单位, 目前包括 CPU、IOPS 和 IO 带宽三个指标。这三个指标的消耗会按照一定的比例统一到 RU 单位上。 +Request Unit (RU) 是 TiDB 对 CPU、IO 等系统资源的统一抽象的计量单位,用于表示对数据库的单个请求消耗的资源量。请求消耗的 RU 数量取决于多种因素,例如操作类型或正在检索或修改的数据量。目前,RU 包含以下资源的统计信息: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
资源类型RU 消耗
Read2 storage read batches 消耗 1 RU
8 storage read requests 消耗 1 RU
64 KiB read request payload 消耗 1 RU
Write1 storage write batch 消耗 1 RU * 副本数
1 storage write request 消耗 1 RU
1 KiB write request payload 消耗 1 RU
SQL CPU 3 ms 消耗 1 RU
-下表是用户请求对 TiKV 存储层 CPU 和 IO 资源的消耗以及对应的 RU 权重: - -| 资源 | RU 权重 | -|:-----------|:-------------| -| CPU | 1/3 RU / 毫秒 | -| 读 IO | 1/64 RU / KB | -| 写 IO | 1 RU / KB | -| 一次读请求的基本开销 | 0.25 RU | -| 一次写请求的基本开销 | 1.5 RU | - -基于上表,假设某个资源组消耗的 TiKV 时间是 `c` 毫秒,`r1` 次请求读取了 `r2` KB 数据,`w1` 次写请求写入了 `w2` KB 数据,集群中非 witness TiKV 节点数是 `n`,则该资源组消耗的总 RU 的公式如下: - -`c`\* 1/3 + (`r1` \* 0.25 + `r2` \* 1/64) + (`w1` \* 1.5 + `w2` \* 1 \* `n`) +> **注意:** +> +> - 每个写操作最终都被会复制到所有副本(TiKV 默认 3 个数据副本),并且每次复制都被认为是一个不同的写操作。 +> - 除了用户执行的查询之外,RU 还可以被后台任务消耗,例如自动统计信息收集。 +> - 上表只列举了本地部署的 TiDB 计算 RU 时涉及的相关资源,其中不包括网络和存储部分。TiDB Serverless 的 RU 可参考 [TiDB Serverless Pricing Details](https://www.pingcap.com/tidb-cloud-serverless-pricing-details/)。 ## 相关参数 From 7b5080437bedca90bc23bf1c58d944c926518124 Mon Sep 17 00:00:00 2001 From: xixirangrang Date: Mon, 3 Jul 2023 10:12:42 +0800 Subject: [PATCH 239/257] resource-control: fix html tag issue (#14393) --- tidb-resource-control.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tidb-resource-control.md b/tidb-resource-control.md index 3c5bf5b89022..c126d3ede48f 100644 --- a/tidb-resource-control.md +++ b/tidb-resource-control.md @@ -43,7 +43,7 @@ Request Unit (RU) 是 TiDB 对 CPU、IO 等系统资源的统一抽象的计量 - Read + Read 2 storage read batches 消耗 1 RU @@ -51,7 +51,7 @@ Request Unit (RU) 是 TiDB 对 CPU、IO 等系统资源的统一抽象的计量 64 KiB read request payload 消耗 1 RU - Write + Write 1 storage write batch 消耗 1 RU * 副本数 From be0463c81e0e68c0bccaf6af33a5b5cd376e6c4b Mon Sep 17 00:00:00 2001 From: CharlesCheung <61726649+CharlesCheung96@users.noreply.github.com> Date: Mon, 3 Jul 2023 10:56:13 +0800 Subject: [PATCH 240/257] ticdc: fix date-separator config of storage sink (#14272) --- ticdc/ticdc-changefeed-config.md | 4 ++-- ticdc/ticdc-sink-to-cloud-storage.md | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/ticdc/ticdc-changefeed-config.md b/ticdc/ticdc-changefeed-config.md index b01af0d841c0..09ec1b27560c 100644 --- a/ticdc/ticdc-changefeed-config.md +++ b/ticdc/ticdc-changefeed-config.md @@ -146,9 +146,9 @@ delete-only-output-handle-key-columns = false # 换行符,用来分隔两个数据变更事件。默认值为空,表示使用 "\r\n" 作为换行符。 # terminator = '' -# 文件路径的日期分隔类型。可选类型有 `none`、`year`、`month` 和 `day`。默认值为 `none`,即不使用日期分隔。详见 。 +# 文件路径的日期分隔类型。可选类型有 `none`、`year`、`month` 和 `day`。默认值为 `day`,即按天分隔。详见 。 # 注意:该参数只有当下游为存储服务时,才会生效。 -date-separator = 'none' +date-separator = 'day' # 是否使用 partition 作为分隔字符串。默认值为 true,即一张表中各个 partition 的数据会分不同的目录来存储。建议保持该配置项为 true 以避免下游分区表可能丢数据的问题 。使用示例详见 。 # 注意:该参数只有当下游为存储服务时,才会生效。 diff --git a/ticdc/ticdc-sink-to-cloud-storage.md b/ticdc/ticdc-sink-to-cloud-storage.md index 209c15015e7b..9ffaf5eae28d 100644 --- a/ticdc/ticdc-sink-to-cloud-storage.md +++ b/ticdc/ticdc-sink-to-cloud-storage.md @@ -108,7 +108,7 @@ NFS 配置样例如下: - `table`:表名。例如:s3://bucket/bbb/ccc/test/**table1**。 - `table-version-separator`:将文件路径按照表的版本进行分隔。例如:s3://bucket/bbb/ccc/test/table1/**9999**。 - `partition-separator`:将文件路径按照表的分区号进行分隔。例如:s3://bucket/bbb/ccc/test/table1/9999/**20**。 -- `date-separator`:将文件路径按照事务提交的日期进行分隔,可选值如下: +- `date-separator`:将文件路径按照事务提交的日期进行分隔,默认值为 `day`,可选值如下: - `none`:不以 `date-separator` 分隔文件路径。例如:`test.table1` 版本号为 `9999` 的所有文件都存到 `s3://bucket/bbb/ccc/test/table1/9999` 路径下。 - `year`:以事务提交的年份分隔文件路径。例如:s3://bucket/bbb/ccc/test/table1/9999/**2022**。 - `month`:以事务提交的年份和月份分隔文件路径。例如:s3://bucket/bbb/ccc/test/table1/9999/**2022-01**。 From 5a082bbe27dd7cf833d7ba167973bf3e837cd292 Mon Sep 17 00:00:00 2001 From: Ran Date: Mon, 3 Jul 2023 12:44:12 +0800 Subject: [PATCH 241/257] *: fix html table in resource control (#14399) --- tidb-resource-control.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/tidb-resource-control.md b/tidb-resource-control.md index c126d3ede48f..997a115f4b05 100644 --- a/tidb-resource-control.md +++ b/tidb-resource-control.md @@ -49,7 +49,9 @@ Request Unit (RU) 是 TiDB 对 CPU、IO 等系统资源的统一抽象的计量 8 storage read requests 消耗 1 RU + 64 KiB read request payload 消耗 1 RU + Write 1 storage write batch 消耗 1 RU * 副本数 @@ -261,7 +263,7 @@ Runaway Queries 指那些执行时间或者消耗的资源超出预期的查询 ``` 其中,`match_type` 为该 Runaway Query 的来源,其值如下: - + - `identify` 表示命中条件。 - `watch` 表示被快速识别机制命中。 From 2a14900ffa953a0133bc06465990b2efd3a8cc67 Mon Sep 17 00:00:00 2001 From: Roger Song Date: Tue, 4 Jul 2023 17:12:43 +0800 Subject: [PATCH 242/257] include warning message in tidb control (#14361) --- tidb-control.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/tidb-control.md b/tidb-control.md index a1ed517fd56c..b8971fefa77c 100644 --- a/tidb-control.md +++ b/tidb-control.md @@ -7,6 +7,10 @@ aliases: ['/docs-cn/dev/tidb-control/','/docs-cn/dev/reference/tools/tidb-contro TiDB Control 是 TiDB 的命令行工具,用于获取 TiDB 状态信息,多用于调试。本文介绍了 TiDB Control 的主要功能和各个功能的使用方法。 +> **注意:** +> +> TiDB Control 主要用于诊断调试,不保证和 TiDB 未来引入的新特性完全兼容。因此不推荐客户在应用程序开发或工具开发中利用 TiDB Control 获取结果。 + ## 获取 TiDB Control 本节提供了两种方式获取 TiDB Control 工具。 From ca9650befcf2875a06827fddc8082e6cc0347c1a Mon Sep 17 00:00:00 2001 From: Cheese Date: Wed, 5 Jul 2023 02:54:43 +0000 Subject: [PATCH 243/257] feat: change django support level to full cause of we added test cases to pipeline already (#14414) --- develop/dev-guide-choose-driver-or-orm.md | 2 +- develop/dev-guide-third-party-support.md | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/develop/dev-guide-choose-driver-or-orm.md b/develop/dev-guide-choose-driver-or-orm.md index 0d3f368fc903..778bcc1622e9 100644 --- a/develop/dev-guide-choose-driver-or-orm.md +++ b/develop/dev-guide-choose-driver-or-orm.md @@ -272,7 +272,7 @@ go get -u gorm.io/driver/mysql
-支持等级:**Compatible** +支持等级:**Full** [Django](https://docs.djangoproject.com/) 是一个流行的 Python 的开发框架,你可以使用 `pip install Django==3.2.16 django-tidb>=3.0.0` 获取你的应用程序的所有依赖项。建议使用 Django **3.2.16** 及以上版本。 diff --git a/develop/dev-guide-third-party-support.md b/develop/dev-guide-third-party-support.md index a9070752562c..4206cc39525a 100644 --- a/develop/dev-guide-third-party-support.md +++ b/develop/dev-guide-third-party-support.md @@ -251,8 +251,8 @@ PingCAP 与开源社区合作,通过三方工具提供以下支持: Python Django - v4.0.5 - Compatible + v4.1 + Full django-tidb TiDB 和 Django 的简单 CRUD 应用程序 From 4b5ac6804d545dcd324057cda9780a2d3ddaea19 Mon Sep 17 00:00:00 2001 From: Ran Date: Wed, 5 Jul 2023 13:30:43 +0800 Subject: [PATCH 244/257] Update tidb-roadmap.md since last LTS (#14405) --- tidb-roadmap.md | 178 +++++++++++++++--------------------------------- 1 file changed, 54 insertions(+), 124 deletions(-) diff --git a/tidb-roadmap.md b/tidb-roadmap.md index 9a42469cd8a4..2a8f7d8252b7 100644 --- a/tidb-roadmap.md +++ b/tidb-roadmap.md @@ -5,7 +5,9 @@ summary: 了解 TiDB 未来的发展方向,包括新特性和改进提升。 # TiDB 路线图 -TiDB 路线图展示了 TiDB 未来的发展方向,包括新特性和改进提升。通过 TiDB 路线图,你可以预先了解 TiDB 的未来规划,跟踪进度,了解关键里程碑,并对开发工作提出反馈。在开发过程中,路线图可能会根据用户需求和反馈进行调整。如果你有功能需求,或者想提高某个特性的优先级,请在 [GitHub](https://github.com/pingcap/tidb/issues) 上提交 issue。 +TiDB 路线图展示了 TiDB 未来的计划。随着我们发布长期稳定版本 (LTS),这个路线图将会持续更新。通过路线图,你可以预先了解 TiDB 的未来规划,以便你关注进度,了解关键里程碑,并对开发工作提出反馈。 + +在开发过程中,路线图可能会根据用户需求和反馈进行调整。越靠右侧的特性,其优先级越低。如果你有功能需求,或者想提高某个特性的优先级,请在 [GitHub](https://github.com/pingcap/tidb/issues) 上提交 issue。 ## TiDB 重要特性规划 @@ -13,8 +15,8 @@ TiDB 路线图展示了 TiDB 未来的发展方向,包括新特性和改进提 类别 - 年中 LTS 版本 - 年底 LTS 版本 + 2023 年底 LTS 版本 + 2024 年中 LTS 版本 未来版本 @@ -26,19 +28,11 @@ TiDB 路线图展示了 TiDB 未来的发展方向,包括新特性和改进提
  • - 通用执行计划缓存
    提升通用的读性能 + 分区 Raft KV 存储引擎 GA
    支持 PB 级别的集群,提升写入速度、扩缩容操作速度,提升数据整理的稳定性

  • - 分区 Raft KV 存储引擎
    提供更快的写入速度、更快的扩缩容操作,支持更大的集群 -
  • -
    -
  • - TiFlash 性能提升
    优化 TiFlash,例如实现延迟物化和运行时过滤器 -
  • -
    -
  • - 最快的在线 DDL 分布式执行框架
    发布 DDL 分布式执行框架,支持快速完成在线 DDL 操作 + 增强副本读取功能
    降低 TiKV 跨可用区的数据传输成本

@@ -46,36 +40,21 @@ TiDB 路线图展示了 TiDB 未来的发展方向,包括新特性和改进提
  • - PB 级别的稳定性
    - 为海量数据提供可靠且稳定的性能 -
  • -
    -
  • - TiFlash 计算和存储分离架构 (自动缩放)
    - 实现弹性利用 HTAP 资源 + 引入性能优化框架,适用于所有相关后台任务,如 DDL、TTL 和集群分析操作
    + 性能优化框架将这些后台任务的工作负载分散到整个集群中,从而提升性能,并减少各个节点上的资源消耗。该框架已经应用于 ADD INDEX 操作。

  • - 基于 S3 的 TiFlash 存储引擎 -
    降低共享存储成本 + TiFlash 存算分离架构、基于 S3 的 TiFlash 存储引擎等功能 GA
    + 实现更具成本效益的弹性 HTAP
  • -
  • - 更强大的下一代存储引擎 -
  • -
    -
  • - 事务大小无限制 + 移除事务大小的限制
  • -
    -
  • - 支持多模型 -
  • -
@@ -87,44 +66,17 @@ TiDB 路线图展示了 TiDB 未来的发展方向,包括新特性和改进提
  • - 资源控制:资源组和后台任务支持流控和优先级调度
    - 稳定高效地管理共享集群的负载和业务 + 后台任务支持资源管控
    + 控制后台任务(如数据导入、DDL、TTL、自动分析、数据整理等操作)对前台流量的影响
  • -
    -
  • - 增强 TiCDC 和 PITR 的恢复目标 -
    增加业务连续性,将系统故障的影响最小化 -
  • -
    -
  • - TiProxy -
    在集群升级、扩缩容时,保持应用与数据库的连接,避免影响业务 -
  • -
    -
  • - 端到端的数据正确性检查 -
    防止由 TiCDC 导致的数据错误或数据损坏 -
  • -
  • 多租户 -
    提供细粒度的资源控制和隔离,降低成本 -
  • -
    -
  • - 提升集群级和节点级的容错能力 -
    增强集群的弹性 +
    基于资源管控实现资源隔离
  • -
    -
  • - TiFlash 支持数据落盘 -
    避免 TiFlash 内存溢出 -
  • -
@@ -132,11 +84,6 @@ TiDB 路线图展示了 TiDB 未来的发展方向,包括新特性和改进提
  • 增强 TiDB 内存管理
  • -
    -
  • - 全局表 -
  • -
    @@ -148,22 +95,19 @@ TiDB 路线图展示了 TiDB 未来的发展方向,包括新特性和改进提
    • - 生产环境可用的 TTL (time-to-live) 数据生命周期控制 -
      通过自动清除过期数据,管理数据库大小,提升性能 + 兼容 MySQL 8.0

    • - 表级别的闪回 -
      支持通过 SQL 将单个表回退到指定的时间点 + 为数据导入、备份恢复、PITR 提供统一的 SQL 接口
    • -
    • - 物化视图 -
      支持预计算以提高查询性能 + 优化器支持 Cascades 框架 +
      改进查询优化框架,让优化器更具可扩展性,适应未来的需求

    @@ -174,10 +118,6 @@ TiDB 路线图展示了 TiDB 未来的发展方向,包括新特性和改进提 联邦查询
    -
  • - Cascades 优化器 -
  • -
  • 全文搜索和 GIS 支持
  • @@ -198,50 +138,26 @@ TiDB 路线图展示了 TiDB 未来的发展方向,包括新特性和改进提
    • TiCDC 支持分布式同步单表数据 -
      通过多个节点分布式执行同步负载,大幅提高 TiCDC 吞吐量 +
      大幅提高 TiDB 到 TiDB 的数据吞吐量

    • - TiCDC 支持将 Amazon S3 和 Azure 对象存储作为生产级别的 sink -
      增强生态系统,更好地处理大数据 -
    • -
      -
    • - TiDB Operator 支持快速缩容 -
      从逐一缩容到批量快速缩容 + 升级期间自动暂停/恢复 DDL +
      提供平滑的升级体验

    • - 基于 SQL 的数据导入 -
      优化运维操作,对用户更友好 + TiCDC 原生集成大数据生态 +
      例如集成 Snowflake 和 Iceburg
    • -
      -
    • - 数据导入性能大幅提升 -
      预计提升 3~4 倍 -
    • -
    • TiCDC 支持多个上游数据源
      支持从多个 TiDB 集群到 TiCDC (N:1)
    • -
      -
    • - 支持基于 SQL 的数据管理 -
      优化 TiCDC、DM 和 BR 等工具的数据管理方式 -
    • -
      -
    • - 升级期间自动暂停/恢复 DDL -
      提供平滑的升级体验 -
    • -
    @@ -263,45 +179,45 @@ TiDB 路线图展示了 TiDB 未来的发展方向,包括新特性和改进提 安全 -
    增强数据安全与隐私 +
    增强数据安全与隐私保护
    • - JWT 身份验证 -
      提供安全和标准的身份验证方式 + 通过 Azure Key Vault 进行密钥管理 +
      由 Azure Key Vault 管理的静态加密

    • - LDAP 集成 -
      通过 TLS 在 LDAP 服务器进行身份验证 + 列级访问控制 +
      允许针对特定列来授予或限制访问权限

    • - 增强审计日志 -
      - 审计日志中提供更多细节 + 数据库级别的加密 +
      支持配置数据库级别的静态加密
    • -
    • - 行级或列级的访问控制 -
      - 更细粒度的权限控制 + AWS IAM 身份验证 +
      将 TiDB 作为 AWS 第三方 ARN,用于 AWS IAM 访问

    • 统一的 TLS CA/密钥轮换策略 -
      提升所有 TiDB 组件的安全性和运维效率 +
      统一管理所有 TiDB 组件的证书
    • -
      +
    • + 基于标签的访问控制 +
      通过配置标签来授予访问权限 +
    • 增强客户端加密
    • @@ -313,7 +229,6 @@ TiDB 路线图展示了 TiDB 未来的发展方向,包括新特性和改进提
    • 增强数据生命周期管理
    • -
    @@ -322,7 +237,22 @@ TiDB 路线图展示了 TiDB 未来的发展方向,包括新特性和改进提 上述表格中并未列出所有功能,当前规划可能会调整。不同的服务订阅版本中的功能可能有所不同。 -## 近期已发布特性 +## 已发布特性 + +以下是历史版本路线图中已交付的部分功能。更多详细信息,请参阅 [v7.1.0 Release Notes](/releases/release-7.1.0.md)。 + +- 多租户框架的基础:资源组的资源管控配额和调度 +- TiCDC 支持对象存储 sink,包括 Amazon S3 和 Azure Blob Storage (GA) +- 最快的在线添加索引 `ADD INDEX` 操作 (GA) +- TiFlash 延迟物化 (GA) +- TiFlash 支持数据落盘 (GA) +- LDAP 身份认证 +- SQL 审计日志增强(仅企业版可用) +- 分区 Raft KV 存储引擎(实验特性) +- 通用的会话级别执行计划缓存(实验特性) +- TiCDC 支持以 Kafka 为下游的分布式表级别数据同步(实验特性) + +## 已发布版本 - [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 162900aaf8c1daeb1a233e6080515b82b47483c8 Mon Sep 17 00:00:00 2001 From: Aolin Date: Wed, 5 Jul 2023 14:26:14 +0800 Subject: [PATCH 245/257] lightning: add a note for physical import mode (#14406) --- migrate-large-mysql-to-tidb.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/migrate-large-mysql-to-tidb.md b/migrate-large-mysql-to-tidb.md index fe8e8974479b..9ed487a1505f 100644 --- a/migrate-large-mysql-to-tidb.md +++ b/migrate-large-mysql-to-tidb.md @@ -7,7 +7,7 @@ summary: 介绍如何从大数据量 MySQL 迁移数据到 TiDB。 通常数据量较低时,使用 DM 进行迁移较为简单,可直接完成全量+持续增量迁移工作。但当数据量较大时,DM 较低的数据导入速度 (30~50 GiB/h) 可能令整个迁移周期过长。本文所称“大数据量”通常指 TiB 级别以上。 -因此,本文档介绍如何使用 Dumpling 和 TiDB Lightning 进行全量数据迁移,其[物理导入模式](/tidb-lightning/tidb-lightning-physical-import-mode.md)导入速度可达每小时 500 GiB。完成全量数据迁移后,再使用 DM 完成增量数据迁移。 +因此,本文档介绍如何使用 Dumpling 和 TiDB Lightning 进行全量数据迁移。TiDB Lightning [物理导入模式](/tidb-lightning/tidb-lightning-physical-import-mode.md)的导入速度最高可达每小时 500 GiB,注意实际导入速度受硬件配置、表结构、索引数量等多方面因素的影响。完成全量数据迁移后,再使用 DM 完成增量数据迁移。 ## 前提条件 From f5b15adfd70770f49d986b15a4ae4814586ee94f Mon Sep 17 00:00:00 2001 From: Spade A <71589810+SpadeA-Tang@users.noreply.github.com> Date: Wed, 5 Jul 2023 15:30:44 +0800 Subject: [PATCH 246/257] tikv config doc: update check and compact related docs (#14398) --- releases/release-7.1.0.md | 3 +++ tikv-configuration-file.md | 18 ++++++++++++++++-- 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/releases/release-7.1.0.md b/releases/release-7.1.0.md index 5fce41c83536..9fa8369abc22 100644 --- a/releases/release-7.1.0.md +++ b/releases/release-7.1.0.md @@ -348,9 +348,12 @@ TiDB 7.1.0 为长期支持版本 (Long-Term Support Release, LTS)。 | TiDB | [`performance.force-init-stats`](/tidb-configuration-file.md#force-init-stats-从-v710-版本开始引入) | 新增 | 用于控制 TiDB 启动时是否在统计信息初始化完成后再对外提供服务。 | | TiDB | [`performance.lite-init-stats`](/tidb-configuration-file.md#lite-init-stats-从-v710-版本开始引入) | 新增 | 用于控制 TiDB 启动时是否采用轻量级的统计信息初始化。 | | TiDB | [`log.timeout`](/tidb-configuration-file.md#timeout-从-v710-版本开始引入) | 新增 | 用于控制 TiDB 写日志操作的超时时间,当磁盘故障导致日志无法写入时,该配置可以让 TiDB 进程崩溃而不是卡死。默认值为 `0`,即不设定超时时间。 | +| TiKV | [`region-compact-min-redundant-rows`](/tikv-configuration-file.md#region-compact-min-redundant-rows-从-v710-版本开始引入) | 新增 | 触发 RocksDB compaction 需要的冗余的 MVCC 数据行数。默认值为 `50000`。 | +| TiKV | [`region-compact-redundant-rows-percent`](/tikv-configuration-file.md#region-compact-redundant-rows-percent-从-v710-版本开始引入) | 新增 | 触发 RocksDB compaction 需要的冗余的 MVCC 数据行所占比例。默认值为 `20`。 | | TiKV | [`split.byte-threshold`](/tikv-configuration-file.md#byte-threshold-从-v50-版本开始引入) | 修改 | 当 [`region-split-size`](/tikv-configuration-file.md#region-split-size) 大于等于 4 GB 时,默认值从 `30MiB` 修改为 `100MiB`。 | | TiKV | [`split.qps-threshold`](/tikv-configuration-file.md#qps-threshold) | 修改 | 当 [`region-split-size`](/tikv-configuration-file.md#region-split-size) 大于等于 4 GB 时,默认值从 `3000` 修改为 `7000`。 | | TiKV | [`split.region-cpu-overload-threshold-ratio`](/tikv-configuration-file.md#region-cpu-overload-threshold-ratio-从-v620-版本开始引入) | 修改 | 当 [`region-split-size`](/tikv-configuration-file.md#region-split-size) 大于等于 4 GB 时,默认值从 `0.25` 修改为 `0.75`。 | +| TiKV | [`region-compact-check-step`](/tikv-configuration-file.md#region-compact-check-step) | 修改 | 当使用分区 Raft KV (`storage.engine="partitioned-raft-kv"`) 时,默认值从 `100` 修改为 `5`。 | | PD | [`store-limit-version`](/pd-configuration-file.md#store-limit-version-从-v710-版本开始引入) | 新增 | 用于设置 store limit 工作模式。可选值为 `"v1"` 和 `"v2"`。 | | PD | [`schedule.enable-diagnostic`](/pd-configuration-file.md#enable-diagnostic-从-v630-版本开始引入) | 修改 | 默认值从 `false` 修改为 `true`,默认打开调度器的诊断功能。 | | TiFlash | `http_port` | 删除 | 废弃 TiFlash HTTP 服务端口(默认 `8123`)。 | diff --git a/tikv-configuration-file.md b/tikv-configuration-file.md index e3f46e0d2b47..c2b72bd95c71 100644 --- a/tikv-configuration-file.md +++ b/tikv-configuration-file.md @@ -761,8 +761,9 @@ raftstore 相关的配置项。 ### `region-compact-check-step` + 每轮校验人工 compaction 时,一次性检查的 Region 个数。 -+ 默认值:100 -+ 最小值:0 ++ 默认值: + + 当 `storage.engine="raft-kv"` 时,默认值为 100。 + + 当 `storage.engine="partitioned-raft-kv"` 时,默认值为 5。 ### `region-compact-min-tombstones` @@ -777,6 +778,19 @@ raftstore 相关的配置项。 + 最小值:1 + 最大值:100 +### `region-compact-min-redundant-rows` 从 v7.1.0 版本开始引入 + ++ 触发 RocksDB compaction 需要的冗余的 MVCC 数据行数。该配置只对分区 Raft KV (storage.engine="partitioned-raft-kv") 生效。 ++ 默认值:`50000` ++ 最小值:`0` + +### `region-compact-redundant-rows-percent` 从 v7.1.0 版本开始引入 + ++ 触发 RocksDB compaction 需要的冗余的 MVCC 数据行所占比例。该配置只对分区 Raft KV (`storage.engine="partitioned-raft-kv"`) 生效。 ++ 默认值:`20` ++ 最小值:`1` ++ 最大值:`100` + ### `pd-heartbeat-tick-interval` + 触发 Region 对 PD 心跳的时间间隔,0 表示不启用。 From 4d37c04b091fe251fcaa6ac897a153bc319879a3 Mon Sep 17 00:00:00 2001 From: dcswinner01 Date: Wed, 5 Jul 2023 18:12:44 +0800 Subject: [PATCH 247/257] pd: update the description of enable-diagnostic (#14427) --- pd-configuration-file.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pd-configuration-file.md b/pd-configuration-file.md index 68032ec10fb0..ddb12d1b555c 100644 --- a/pd-configuration-file.md +++ b/pd-configuration-file.md @@ -366,7 +366,7 @@ pd-server 相关配置项。 ### `enable-diagnostic` 从 v6.3.0 版本开始引入 + 是否开启诊断功能。开启特性时,PD 将会记录调度中的一些状态来帮助诊断。开启时会略微影响调度速度,在 Store 数量较多时会消耗较大内存。 -+ 默认值:true ++ 默认值:从 v7.1.0 起,默认值从 `false` 变更为 `true`。如果从 v7.1.0 之前版本的集群升级至 v7.1.0 及之后的版本,该默认值不发生变化。 ### `hot-regions-write-interval` 从 v5.4.0 版本开始引入 From a574403953e6dc6cc7e98ed7ec7cc62ba8120715 Mon Sep 17 00:00:00 2001 From: D3Hunter Date: Wed, 5 Jul 2023 19:05:13 +0800 Subject: [PATCH 248/257] import into: add known issue (#14365) --- sql-statements/sql-statement-import-into.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/sql-statements/sql-statement-import-into.md b/sql-statements/sql-statement-import-into.md index 5e930e514881..fcac6978917c 100644 --- a/sql-statements/sql-statement-import-into.md +++ b/sql-statements/sql-statement-import-into.md @@ -20,6 +20,10 @@ summary: TiDB 数据库中 IMPORT INTO 的使用概况。 - 对于存储在 TiDB 本地的数据文件,`IMPORT INTO` 仅支持在当前用户连接的 TiDB 节点上运行,因此数据文件需要存放在当前用户连接的 TiDB 节点上。如果是通过 PROXY 或者 Load Balancer 访问 TiDB,则无法导入存储在 TiDB 本地的数据文件。 +## 已知问题 + +数据导入任务启动后,在对要导入的数据进行本地排序期间,当使用的 TiDB 磁盘空间超过了 [`DISK_QUOTA`](#withoptions) 的设定值或本地磁盘空间的 80%,并且 TiDB 已经开始向 TiKV 写入数据时,如果取消该任务或导入任务运行失败,后台导入线程会继续运行一段时间,然后才会真正退出。详情参考 [#45048](https://github.com/pingcap/tidb/issues/45048)。 + ## 使用限制 - 目前该语句仅支持导入 1 TiB 以下的数据。 From 7045b2df6c089b2632e49224bcef1c226eb62f2a Mon Sep 17 00:00:00 2001 From: Ran Date: Thu, 6 Jul 2023 16:08:15 +0800 Subject: [PATCH 249/257] .github: add 7.3 in pr template (#14432) --- .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 0514b4914365..265c04b6a4c4 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.3 (TiDB 7.3 versions) - [ ] v7.2 (TiDB 7.2 versions) - [ ] v7.1 (TiDB 7.1 versions) - [ ] v7.0 (TiDB 7.0 versions) From b2732174223899aa44067559cd47ef1d84aea652 Mon Sep 17 00:00:00 2001 From: Grace Cai Date: Fri, 7 Jul 2023 12:10:53 +0800 Subject: [PATCH 250/257] dispatch.yml: remove the achvied release-v6.6 (#14436) --- .github/workflows/dispatch.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/dispatch.yml b/.github/workflows/dispatch.yml index 10b0071ddcf3..35c5683680f5 100644 --- a/.github/workflows/dispatch.yml +++ b/.github/workflows/dispatch.yml @@ -9,7 +9,6 @@ on: - release-7.2 - release-7.1 - release-7.0 - - release-6.6 - release-6.5 - release-6.1 - release-5.4 From 214143e8d07952a68913d230c2125b3210721302 Mon Sep 17 00:00:00 2001 From: Grace Cai Date: Fri, 7 Jul 2023 17:02:11 +0800 Subject: [PATCH 251/257] v6.3/v6.4/v6.6 release notes: add archive info (#14437) --- .github/pull_request_template.md | 1 - releases/release-6.3.0.md | 4 ++++ releases/release-6.4.0.md | 4 ++++ releases/release-6.6.0.md | 4 ++++ 4 files changed, 12 insertions(+), 1 deletion(-) diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index 265c04b6a4c4..7947102b65b4 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -23,7 +23,6 @@ For details, see [tips for choosing the affected versions (in Chinese)](https:// - [ ] v7.2 (TiDB 7.2 versions) - [ ] v7.1 (TiDB 7.1 versions) - [ ] v7.0 (TiDB 7.0 versions) -- [ ] v6.6 (TiDB 6.6 versions) - [ ] v6.5 (TiDB 6.5 versions) - [ ] v6.1 (TiDB 6.1 versions) - [ ] v5.4 (TiDB 5.4 versions) diff --git a/releases/release-6.3.0.md b/releases/release-6.3.0.md index 41d96e7a7917..1478e28447c9 100644 --- a/releases/release-6.3.0.md +++ b/releases/release-6.3.0.md @@ -8,6 +8,10 @@ title: TiDB 6.3.0 Release Notes TiDB 版本:6.3.0-DMR +> **注意:** +> +> TiDB 6.3.0-DMR 的用户文档已[归档](https://docs-archive.pingcap.com/zh/tidb/v6.3)。如无特殊需求,建议使用 TiDB 数据库的[最新 LTS 版本](https://docs.pingcap.com/zh/tidb/stable)。 + 试用链接:[快速体验](https://docs.pingcap.com/zh/tidb/v6.3/quick-start-with-tidb) | [下载离线包](https://cn.pingcap.com/product-community/?version=v6.3.0-DMR#version-list) 在 6.3.0-DMR 版本中,你可以获得以下关键特性: diff --git a/releases/release-6.4.0.md b/releases/release-6.4.0.md index 1374dbc3f579..faa610dd590a 100644 --- a/releases/release-6.4.0.md +++ b/releases/release-6.4.0.md @@ -8,6 +8,10 @@ title: TiDB 6.4.0 Release Notes TiDB 版本:6.4.0-DMR +> **注意:** +> +> TiDB 6.4.0-DMR 的用户文档已[归档](https://docs-archive.pingcap.com/zh/tidb/v6.4)。如无特殊需求,建议使用 TiDB 数据库的[最新 LTS 版本](https://docs.pingcap.com/zh/tidb/stable)。 + 试用链接:[快速体验](https://docs.pingcap.com/zh/tidb/v6.4/quick-start-with-tidb) | [下载离线包](https://cn.pingcap.com/product-community/?version=v6.4.0-DMR#version-list) 在 6.4.0-DMR 版本中,你可以获得以下关键特性: diff --git a/releases/release-6.6.0.md b/releases/release-6.6.0.md index 882cec047100..91f7f85c2970 100644 --- a/releases/release-6.6.0.md +++ b/releases/release-6.6.0.md @@ -9,6 +9,10 @@ summary: 了解 TiDB 6.6.0 版本的新功能、兼容性变更、改进提升 TiDB 版本:6.6.0-[DMR](/releases/versioning.md#开发里程碑版本) +> **注意:** +> +> TiDB 6.6.0-DMR 的用户文档已[归档](https://docs-archive.pingcap.com/zh/tidb/v6.6)。如无特殊需求,建议使用 TiDB 数据库的[最新 LTS 版本](https://docs.pingcap.com/zh/tidb/stable)。 + 试用链接:[快速体验](https://docs.pingcap.com/zh/tidb/v6.6/quick-start-with-tidb) | [下载离线包](https://cn.pingcap.com/product-community/?version=v6.6.0-DMR#version-list) 在 6.6.0 版本中,你可以获得以下关键特性: From ad6f9212870096d9ecd20b367747cf7e8329eab8 Mon Sep 17 00:00:00 2001 From: xixirangrang Date: Fri, 7 Jul 2023 17:06:42 +0800 Subject: [PATCH 252/257] lightning: refine desciption about analyze (#14435) --- tidb-lightning/data-import-best-practices.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/tidb-lightning/data-import-best-practices.md b/tidb-lightning/data-import-best-practices.md index 2524d493d9a3..e062a741ef48 100644 --- a/tidb-lightning/data-import-best-practices.md +++ b/tidb-lightning/data-import-best-practices.md @@ -60,9 +60,9 @@ TiDB Lightning([物理导入模式](/tidb-lightning/tidb-lightning-physical-im 数据和索引导入完成后,会对每个表执行 [`ADMIN CHECKSUM`](/sql-statements/sql-statement-admin-checksum-table.md),然后和 TiDB Lightning 本地的 Checksum 值做对比。当有很多表或单个表有很多行时,Checksum 阶段耗时会很长。 -- 执行计划 +- Analyze 操作 - Checksum 通过后,会对每个表执行 [`ANALYZE TABLE`](/sql-statements/sql-statement-analyze-table.md),构建最佳的执行计划。当有很多表或单个表很大时,ANALYZE 阶段耗时会很长。 + Checksum 通过后,会对每个表执行 [`ANALYZE TABLE`](/sql-statements/sql-statement-analyze-table.md),构建最佳的执行计划。当有很多表或单个表很大时,Analyze 阶段耗时会很长。 - 相关 Issue @@ -116,7 +116,7 @@ TiDB Lightning([物理导入模式](/tidb-lightning/tidb-lightning-physical-im ## 导入大单表的最佳实践 -多表导入会导致 Checksum、ANALYZE 时间的增加,甚至超过数据导入本身,但是一般不需要调整配置。如果多表中存在单个或多个大表的情况,可以把这类大表的源文件划分出来,单独进行导入。 +多表导入会导致 Checksum、Analyze 时间的增加,甚至超过数据导入本身,但是一般不需要调整配置。如果多表中存在单个或多个大表的情况,可以把这类大表的源文件划分出来,单独进行导入。 本小节重点介绍大单表导入的最佳实践。大单表没有严格的定义,一般认为符合以下任一条件者即为大单表: @@ -145,7 +145,7 @@ TiDB Lightning([物理导入模式](/tidb-lightning/tidb-lightning-physical-im - 调高 TiKV `raftstore.apply-pool-size`,从默认值 `2` 调整为 `4` 或 `8`。 - 降低 TiDB Lightning `region-split-concurrency` 为 CPU 核数的一半,最低可调整为 `1`。 -### 关闭执行计划 `analyze` +### 关闭 Analyze 操作 当存在单个大表的情况,建议关闭 `analyze` (`analyze="off"`)。在导入结束后,再手动执行 [`ANALYZE TABLE`](/sql-statements/sql-statement-analyze-table.md)。 From 89fe9ed0cc6363e5ca5535f0c9602e1dbc2e30c1 Mon Sep 17 00:00:00 2001 From: Ran Date: Fri, 7 Jul 2023 18:27:41 +0800 Subject: [PATCH 253/257] add experimental label to smooth upgrade (#14446) --- releases/release-7.1.0.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/releases/release-7.1.0.md b/releases/release-7.1.0.md index 9fa8369abc22..b570f4a28367 100644 --- a/releases/release-7.1.0.md +++ b/releases/release-7.1.0.md @@ -239,7 +239,7 @@ TiDB 7.1.0 为长期支持版本 (Long-Term Support Release, LTS)。 ### 数据库管理 -* 支持无需手动取消 DDL 的平滑升级集群功能 [#39751](https://github.com/pingcap/tidb/issues/39751) @[zimulala](https://github.com/zimulala) +* 支持无需手动取消 DDL 的平滑升级集群功能(实验特性) [#39751](https://github.com/pingcap/tidb/issues/39751) @[zimulala](https://github.com/zimulala) 在 TiDB v7.1.0 之前的版本中,升级集群时需要先手动取消正在运行或排队的 DDL 任务,并在升级完成后再手动添加这些任务。 From 3cc42bbe85ef75ebf981d12662eb23540ea3c76c Mon Sep 17 00:00:00 2001 From: glkappe Date: Mon, 10 Jul 2023 14:47:11 +0800 Subject: [PATCH 254/257] Update exporting-grafana-snapshots.md (#13963) --- exporting-grafana-snapshots.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/exporting-grafana-snapshots.md b/exporting-grafana-snapshots.md index 995a3254a7f2..0222650f0620 100644 --- a/exporting-grafana-snapshots.md +++ b/exporting-grafana-snapshots.md @@ -10,6 +10,10 @@ summary: 了解如何将 Grafana 监控数据导出为快照以及如何将快 # 将 Grafana 监控数据导出成快照 +> **注意:** +> +> 目前该工具仅支持在 Grafana v6.x.x 上使用。 + 在故障诊断中,监控数据十分重要。当你请求远程协助时,技术支持人员有时需要查看 Grafana Dashboard 以确认问题所在。[MetricsTool](https://metricstool.pingcap.net/) 用于将 Grafana Dashboard 的快照导出为本地文件,并将快照可视化。因此,你可以在不泄露 Grafana 服务器上其他敏感信息的前提下,将监控数据以快照形式分享给外部人员,同时也方便外部人员准确识读数据图表。 ## 使用方法 @@ -40,10 +44,6 @@ MetricsTool 导出的快照文件包含快照生成时的监控指标实际数 不会。快照文件解析全部在浏览器中完成,Visualizer 不会将任何信息发送给 PingCAP。你可以放心地使用 Visualizer 查看带有敏感信息的快照文件,不用担心信息会泄露给第三方。 -### MetricsTool 可以导出除 Grafana 外其他监控工具的数据吗? - -不能。目前该工具仅支持在 Grafana v6.x.x 上使用。 - ### 可以在所有监控指标数据都加载完毕前就运行脚本吗? 可以。虽然脚本会弹出提示,让你等所有监控数据加载完毕后再运行,但可以手动跳过等待并导出快照,以免有些监控数据加载的时间过长。 From 6a6aa894648f405d5eccb3b30e44012b457ab350 Mon Sep 17 00:00:00 2001 From: Lux Date: Mon, 10 Jul 2023 14:51:43 +0800 Subject: [PATCH 255/257] Update dashboard-slow-query.md (#14101) --- dashboard/dashboard-slow-query.md | 6 ++++++ .../dashboard-slow-queries-export-v651.png | Bin 0 -> 88285 bytes 2 files changed, 6 insertions(+) create mode 100644 media/dashboard/dashboard-slow-queries-export-v651.png diff --git a/dashboard/dashboard-slow-query.md b/dashboard/dashboard-slow-query.md index a14260773a05..7796613e4f8b 100644 --- a/dashboard/dashboard-slow-query.md +++ b/dashboard/dashboard-slow-query.md @@ -36,6 +36,12 @@ aliases: ['/docs-cn/dev/dashboard/dashboard-slow-query/'] ![显示更多列信息](/media/dashboard/dashboard-slow-queries-list2-v620.png) +### 导出慢查询到本地 + +点击页面右上角 ☰ (**更多**) 可以显示**导出** (**Export**) 选项。点击**导出** (**Export**) 后,TiDB Dashboard 会将当前列表中的慢查询以 CSV 文件的格式进行导出。 + +![导出慢查询到本地](/media/dashboard/dashboard-slow-queries-export-v651.png) + ### 修改列表排序依据 列表默认以**结束运行时间** (**Finish Time**) 逆序排序,点击不同的列标题可以修改排序依据或切换排序顺序: diff --git a/media/dashboard/dashboard-slow-queries-export-v651.png b/media/dashboard/dashboard-slow-queries-export-v651.png new file mode 100644 index 0000000000000000000000000000000000000000..b587f8ead4fbf050be3720c650786bc25f0d9738 GIT binary patch literal 88285 zcmeFZg;$jO*Eft<7>I=+X&@*_NwIWUxpfJk?P4s-kS4yFYe0VSRna@@QkBv? zp*-qjjhsH>-t6k(p>6-=JZn_VPJ6-ou6>P?0Cg6&yCvEmGT+@l_UYm+A(@xCAFYcN z9t`h`7@N)XyNm)E~F#B}yMQyzG1quHpau^|CuopyT-e`G4fU zzOY|>_wO&AI7w{xukU&J<>8GB|N6?st0X^<{p%~Qh<*A0^@WE|Z(Kb6udk4tJu&&O zFAzQQeMs}KuiUu%zZdh*4f)?Y^Ph9^zh~w@_u+r5>A(8K|Mr>x+=%~62YxL5Ql@aJb%e?+WmiC2hm#l-aONriID~{z5Sm<=jE|qsApdq z634F084zUz{W{XS*}Znjm+lmC;MspowBt`VEDKJ!lYBEz+bh*PE^^{L(Z5I2sh9-| z0Y0zmbIL>+zxySkcMW<`Y-TOp3)Uc;BH-b&d@E*=_pnJwYtJ6ZOK5A-Q+us7DUHs8|8@RVtnnZ zatjJHm6eqrHWCr>zkf)BT}(N5+i`uZ1MWN#QQRXdvLoGm5x3=-GW=y30f-;=1R1 z)~6bcOSRRtw6YB9{7yOw)8rgGuSUau?2F~8q4lEV_gMUr5Q+DRN#dW~iUC*t5dCR((4`@<-r?6cPWg*pkN9E#`P8Yj=H8-r zZR?kbUUsY2h^%d#ffGr82~O0piAeT>Fiuqh91pcTC$oN59RjQwwgL}m~G)a zB>f++s!0E4yyLo0?d>_MamY9g>Vf!Udaea%`o%dg8PMsyT<0zqc6D#6THqLCDz!A68 z|K`6T<`>iZY?zT&(g%Ef&GS|o@A_}4mN(t^c$OOXsq?{Gzmv9~;Vt-SFTNDNQF2%< zggS2Ts3uIf^zL!bb?jEaE@bBri_kn|QjB|QV2~uw7}h3$ zqe(O$ct>)IFZ!;QqnrQ-G#jP=gjqM`=^@rr5b>D#+M-}YLl8ylx} zb#+~(q8e(veWIh^!oouB>C-RperXvQ`y-m#+RQn<*^geIGT&XBI7Vf#da`++gb|I= zIemfVBLln)Gb1D8x7)ATBytb)4zxhj=%v+3^9u?xl_ z??Ue}KI)pUD2J)>vPOK3^!VVshD>m9!1vb=X@=fRV2g|0=^~?}&6k!wTw@h9PAbnx zaF_MiURw7^Y%=PCo)!M-Q&M2y`5;QpbnUGo{G=4|rnRSJs5Z@$NwSy_8sYBp%^Ffuyh<6>f{XoX!nY;NS| z=E}c)`w zP`C(gpF>ZP-9N8o<>VGOd17K?w}vbW=F=kex}fvkk%6w*ouSk(P9~BX&1JfM5Oi#= zCm&Ub^?Wd5^uT2Vo_}^WGbx?$0FDa<$K`i(bNI)Pw%VtgUd?!&xPlqZ zo1AXk_e`B_|^Kb6%42LPn17e~yCxLmJN?wj!iOP~2)rW6)bvdpijyzQk=~)_HZj z+%84WW0^;$tF&J)N9=Gtq&oZAwLnq)-0kI&3e_`b&R}=OJUk8rd1Do7@x29`6aMu0 z5j_=^d3bKye9iSV=rT|CysNjR7aumaEU&8 zN4t$;n+?=9=gR}^Iy*aM6%^E=E+vC$WGF9qp^pv;%q%Qn478%2<#N8|s^8I=oRX3f zxe(HG=TzO@v2CLJORCobbF#Bl;HMbOe}BHGMn&Al5zA{G+C9J2N#k&^yAID<`Ps85 zculvnk~n?%vHRCP#3^Qs3n=U9CG_QL-Oif%@ww*gBs>(25K(+4JnuVM&AuTA2cDyz z8?EqI9-z6R<%FM1nKbW+^v_d7e6ORe_ z{@OlTmyymom(yRk)Ya8RL~qiOli$hdWiB4f{q^e?n^^mVE#*eZ=g(J(6^J@WuSM$Q zV`Wis7qck}XtGN9j}n~>>lCo|FLLwaD09fRd*+xDuVrO-GOMcLC{m&4e(_P))Li`e z{)();yxQZ(k89s}jd|^$phTHPL`Ip86FI)kxcw*VpYE+y^mEl~3|E8~qLGrS|MTR= z%6X*vJx2$F2eC}{mc^#+eZRw5f{shTxz@^&xmzI{g&qkY)u(%DvDbdK&PE$^i+~U88v#)Sm%)>DA@o56y!Hl`*uwmzJ z!2wW&^2Fm83&O+0({4)z&%xvFiQ%#2wi@`#TTtwPQzT4M)P8K9L0ZpNq-x z%^Cu)9~(d25KNl`?ezMQbA_&jmDT57i{AHFn0lc1RD0}XS5@g!=-T?W8}0|dAJlm5 zGnAHa-?@1DOU~h%zt~(+Gh276Oc$pJOM4kT@^ewqi@68nY zEy0VL`uYW82NPu4)$UH1M9WfbCtSP>oEKR*%J>;}pR8u~T3x7rYCd$2VTefjRAa~@ ze5&5c)tX_n#O!H$&!++c0uN$au~Wf9C1#zs?l3V~?yQWuAFMZq$HwL$qlJpsDvGUg zsYtI{pNLjYTKcJ{rza+X%iza}J9qBf6BNYiB&NkHW(3oTFlWsW-vU_B;k4pMg^ItN zPLWTQG`AMfeyC6HvJiCKdAYzYJ6VhBigDM{=ZmA#A`j23W#}X8)j8&qL{wRh@C&9LQKz0|KdtL8VapzsMONw za1VFoU7dNJSe;#ls+5EynQu8))Q)0>5uiaA>Gnt8t~^;Y-Ci2hE;4#wR8$nmu#`2> z=}$(VPY(^id({$+?n^w}WU4;IFXE@els5ZxZ06ygXcZRhT`pva(%^1-0n=ic(LW%q4iND9g$Qc<(jq zGqbZR3r(RHO-(&X@7n0 zo2!xYfQxGjK7W~85UWm^83Df)s;zkHU^7FEXC;=?&<|XnI((0x-u!t*X$~e8 zsp}u=>M8R)I(qto&J?MgIi9m;&#IwNtTMlU{hBK-Oq#(xu;|G|i!>TNAT2*TN_26_ z4{L=Niwx3mESFHkl-#eBISLOz$A>*A^YT1vk9#=g-T}LMNPeJA6W3xy5lTR`e z*N1KK_YTkHtI`Gw#S1bgdyxE$|1NC6uT;@kQ{*_Wa{IgsbI#9Fru+BhYxi1hN}Luo zXayam0r8%g#1HJR*0RgQ2sorGQML`2n0IsAO+Hy3ES5_2+SZCq{Jy7%VbIxueC!Uvt{jZVy=!+KwZ=4c=X+U35RUFCUeYNLVtp)-Ghzuh9+Vwx5J$PIJM31-r;* zJ&IKig@M5_>V}JlbKUXh`)j8^-;N=ebgN%qQ$pe`o%gQ6%*@QZ*x{6zXTaHuZ>Xb? zY8r89mkGVbt~au%D*>DcUAfFF!zvJ@sqaHlcQspQSF(TUuLtSqiF>QI*bFB_(PgH&BUr zSD|b6Oi=bscWCM4QEZXQzAJF0FcG@S?WVW^GPlMHX##q1^EX^-DjRoSWF<_|A9Z{+ zsDm0O$n0+~cQ5qjlv)q-0_1rHnn4E~M#m$<4kl}|#C82eZ*TAX+C*JwD)5U@@BQTl zf|iyR3T@8iFe|SR!=2T=K#KfOf`~`Yz`($4jglBaE%YiibgCog96`ZDjeDc zn6wCGX$Ye3Pvaa~c1{WSqvV5Ejdy4h(5|pgt2y{92cYII505(Zw(ih7a#t^1x|x;6 ztO*bS>2J^l6%vHC06KSw?2M!U#OED$UC7EP@z_DbN9;HK&Id36-n}F>Ld;PyL)E5g z-LK4M93YnSb+N_$mCDu6Z{7;;$1-gW^}dhJurShOmYnR#%FTsI9S$r6iXiBruDN*@ z@UZoL!KcPXMwu|R5%^#0Q_HB7u!ND-g`$AU%ve~k=Go@)AC0f7q5VYBu^!$!xoKaY?fow0{Os+}Skqyp&h z@leHYJ&V1IRX#`Fh)|TCF6mr}T3=t6m6q;+>k5yG8d!0#=8e5T!~X?t1mL@-7ln7( z*c4$_#PHj_@bCQ$$MyofXfEK9%=~;swn(|xr$|+_wPPAW=*K5kpW2jBTV=Xl^#t&l zf*JSLfr~~URp9WxVVi9~%B5+-c1}tR|EXpx&jtW3t@Do*^eEZe*!=+H1+%I)0i{u*wKG( zeSLks1!$h5XiZnw^2y0bZqMB{=V2*&e%ptnq@)d&5uZP278R+$xds#zBjkc+AKR0G z+YOZv);+IgWRwcGY}J8gd1aTHnz|GoiA-0fa*E*jU^?h&@ZJqOwQw!~3Y|T3rt|YX z)dNvntW6DPcENs*^iW5~m*b}|NQVMoNnKl8<6TWlO??9IYk@{=JZuT-^cIYfA=b#fVkO9TR`N+KR=2@OtHC@ww zoPVA>XU1cpyhifNd`}cNnjYzgU(NPsw;nu1(MR6B!}|oIq|_T%LJ|~2)_G-^daLJV z##rSob!A3>QI^c!q63rY$HQd{W#uFIM*&(ptu(A*cb$4JoY!_h;!sRW1wA zf=(GR?ZiFL&(02QHL<+n3G|t4^Mn4u4_p~A$nejf&ETeE0qAdjJ5E-zk4JdfA@KM8 zkqE%WBO|)i0R9lr%k%k!-ha*m}*F`H%vl>Zm*2y0P0^z z2@&lIAZOtQ^=7ID1P!e`jj3@UusUT{oQKw!;bE_WJf}33*yfoBuObh<4-@JU0>2*@ zXtNBm4sT6cTic5LjkbA5s?}9LYIH}Dar0)I&?@Cle_x*kP}QNY2Cor1#9p)em`r%> zW&4i7Vqe}6)+wjVdN`e&MWbYo7C#$nQ)1j4!8=h0Y~OGg8k+lDlK_UtLc&Qsxw-dSqq#D=y*Pw~Du<5=#!)3mOr)kVkWz8~+AT;*dIa(a z(sy1;4R8X#YzkwtgszR?*n9WPi@${@CKeRb9%5VVG71Zop&*&>-tDNT(6@RckQ(6y zEw=@?4tf|z4OEm>0cN5dgb}r8&*mI-K!pJMji6o-1@=%kK+5R=`Ws~XUJB?I2oz4x zKjU4-+^nzpi>z8ghqeCk6UqzTR~h*DY+L-I%gx>iTLj3$4E$SB4ZRdT@$dHb{)4>@ z9tki(>|Ni~k5oEyqYS%9yYH8%CfBN*PLE;=8Eh@8v7Md3{O*H_1$;ru% zeOjia(W_1_2ks^BOpa8Bs(jsDT+z*$rH-)@$~d`-o!*0DsWft$h5Y$ zde<342Wn_9+1emfN2aGU!hOpEW_j=4J@40_z!jp@bZ{uPcX05U{WNw=Mn=$a?jy(# zvktMQ!P?r|+4J2Qn0=9BuST83>#oudUN+j_QTC6ie75vwiYoGK?uDTD=Qu`E8M#c_n(rd7so%6X$JD*W9Drh-FBBpfmx3cU90k^^@PckK188dR7i`iu8Q$N`y z;k(CFc=pcx6jx8_v8cSmSVe8u;9vqNx>uExx z%!5~GKx|#W>xYDyI%vu5E(4hRY?>hwF7gE=Wb36l-#-;90{8A^wI)vkg4hDsEp2ff zw^Oqt0zktIYFQhDju$=LH3XKX3%H=msUOupTbk&xA^=39=}siVym|qfmB3NU)34P- z7{1VI)$N?#Ax74bVQV>7rs7oqu0cQ{`}KXQ5t$kK4Pk%$s1HEnEl~TU=)KesZCW|n z5I&~8U_3tYXpbIwF>(J3TUo)EDJc5GY>M>(Js>J%c1{i;kGUPMrO`^wP|tkI9VUQh zCdJ@l$$@w~-|2b?vQze#FAvGY4!*LL{~-oT%wlVySG(9G2!Tod^xn^auOko#>5K}A zq9~~lI-sRFCEf&gFVME(Tw7duu@rEc&J|I}JJ`L~&$Y(z$lbhobEweJKLN-Pd?>e|{1#dl3hwGo_KF^UGk*Px z>L5xyfRBGvc?vz(q{1&aTC2r*UhUy(4-8y7LJt6d+~ed_2Bir&yo#M&A$+|A6sFcF z&N`eMTpDr%05&43El@mATc1r#Ok@MS2gt0Ztem6}%R4VLz84HgKM)7N*bC|$9t}Xh zr;?I>z~6%2w!!p)+hA;Jx(Gti#$f*Na^GxgEP@w0I-Y`_Z#mbI1ZYHAODp;Utzc?H zgQWGq*GHfj>}YYXv^u{gCl6_pCkU9ju6;iZ=gMXN1A7gJV!H6r!G`3^7jP#=>1t~^ z;&2ufZTT@9Ev*1Hgh<0v)6%k1Q&U?Kc7NFlR>c=Ty|a_tJYCzZtvl0G^foKvY&o;=^JS2?@p1?ff6Y_Mf`4P zNE_izaSmygaL&|0#~m1WhTI(xvaE@pi5Osp!^6T-pdU&|Nm=4I=dIc77w32V zFVJR#N(#^vAoN~dvU#aCz-gnZGKTt}KkqUyJh|X64$!V)nGT*vL;u#+mbbVAG_ueh zMx&_2M4PI}>1iW){LEll0%Xn3&E;mBB{_F)ac#1ss!EuLkBsLcMQd3EKhtqa0@GO2%$)KV|qxiX>^oNkD+pE3PtG4)Dv!m!6 zT)Ls%j^flkbIBx6)TqCoTv2^6^#B`TxLvvDj0&SmPU1|$-hZS$#Z<{RV9<&;)YR{k{RxuJlZ z51Z}p{2u}WHe<&RBtuKA28*2AMQT7~cL(+dc*w}HE>v5TecWqjG&B|XQ~O*|p?NoB zN^=8@@+C~OBpRLHX?*+k?K+#tpuPez%f9;r!m3X{oXk?_Q6M-WNES|8d_I_97seNB z54YHn(>(;$6A%!7bFHll336sIEOn z&1cS?sdMWat#-?9DBY>NI2RmX_UOiij6kM~6eM6+bzq$q8Ds#0Y*Z8g-iB5kF^cZr z!zC6_=zDfX#l<=GX(4sJiKra_A3AM(_H`7ZA4ptbl;=n|>Xf3NA2dx2XZT0ynhFs^ zkMKdQB2v6NI18mO>dyjxY%}G|#0+l(z3M|`8cBBg;5F#6%W3T#iW$BZ4e%y}y z1%kTN-)omIzfilmp6}OB>#?)a3+Q;7tEpn`$GI6t!L4?mLsfd8gF-}&31`uy`u+{T z;^O27_C8k3NOD{pO^TDA3lNlfM4y13Yc~w+1i=I56F=Sp4(Rb%tC20-}E2m)9<+pUtzH%w}xCM>wIiHrNr#kZCp!R55j!~4kpa5CD|Da{%Mycwi} zF%$Ic9;V4?f%_uPYa};6pYbBa31QZBkw=)|Y)kjY4wt`AJimDDTKdM)m^%m4dkVqswc zQB2Ic(@W2g?3f&g`<++z_O1a+4;c2KEkihb43OQ`D_6ibii(Mf%7lq@;kX?DJOtgT ztB1D>KNWQI+)jv$h>WBT{|Ll-<%%nmb{Dv(iEU{_w_t%PSG3cBHy<}_saBgigmp5I+z1|^7=+n(Y~u=f7kKzgCSIP!ci8Afn=)4@RE zh0!~-{`eQ4T{oN6NFg;{T-R5#;(Ym#uG5uX!|B?(XjH6)hFX*a8)nnwQNNHbP{hsC z?e2~*UL?1H-gAL|vEum_V&lM(W}UJuMPXLfJkhX1JHY&&bqRo z>=MAymD2-o1Nxt>v9PgiSJ;3_h*0qS$`!%dyc)0}1OND&c6Qe}#GNA}+Y#CZdlThD z*h0Ri{Z@AOJh!$VwE48wTbVe5>yOU7;TKzum8Qh)k1;N;DYu~oRG+kOyJ(iMr=^L& z#rJHhza0_`WuRZj2FNZ~`|WJl;;BX4OD?@yoQsm7%s=`Z5y8yFlu>s?MMZ_T7EZYM zmFeMNO#KT^QSl)w-oy_#tKPnOvuRG*1{}0M9|g}$RaZAIT`6$|qitf-0Kp-HCHg$v zOS*&#^Tm!>9P!!J_AZs?7qU)HrSNgMotK`;)R0f5Mo5Ir&YDEaGbWzngtBEQebXb{ zZfy-+v|(JheTr~hz&>@HBhFM95GMFRs_F9Um2)2>BKp$P1Z){)=z8p{?&X!T)Mj~X z{Hh8FGnl@q?B%lT5zv%H-HsM8srp*1Z9~VO-!a6TcqA&Kk#rK$~?eY9V}?pBAkKFV~I0Qt5^~SW))k-^kwAFN^lUG0H3Zpt#Sn`hx`=c zN0=tKH9WI{_Mg{Rpg%tA2IZw)Y7q{uyZ3f+;yg_BKEx=8IgSF>VPBz(Up+dsL6i>> z@71yRGT~#G{58h~3j!5MT)v~)=GDY?3KPpw$Zpcse_| zEy(d&pnrq>3m+wPc$v3GEP=D}=TFKFA^$pqH;cf;h6sA@+1&t$0PVGz4v$s6cFuES zCVL_wu~(vO%?f&cBgIdmjLN5S&7uQ;Y?~%ZnvGUGMQ1yo3tfMFt~Bb-mcsL;N~nXo zB{P&;#*czVc#n?FSWD4#oqQi~0dx2E@4Qy;bSG*#q5OsIZG*~{_{$3z>ui_G9-h6H z>&J+`eN)lWGS5}QP`tCO_8z^I(VYdVrxY9yklp|BfG*vZ%v=u(!5dY18Ly62YZtzF zJI+Q;@4cIJ2q4^YX`s*@`1P>k;IndDgA5dJ&E70Eq2GrP$yR${KUD@+#KNm{Y#ktq z0kTU$I=|$%wkiE1d?W+ngZBdJHy!Z?mwmBnqYchwS`B`IrJArkjNiu8j;8F00^DcS zs~RAwgTRC{m2Ks6*>DN4YZ=x&71P$3-n{V-eTrN7=RR*R_+sst9f8o51vA1(&?Y8^oR=wLabS3!Nfhg z*vLrJ5e*FulQ%-zr~hJ;`G&V6pyN%vNMpL#uYZo3-gC`&y%bU%Aj5o)j?MxN;|X{j zm4}e{v4Av|=+wrXEM?0Er4OqMHo4kDa;#Q-nRUdS{pqHW{bYe)oIh^gHk-m%2cx*9 zCZG$2!%!M)C3VDn|NdtX;Q*oGX#YD-e31 ztUx21(HQu9M=R~i7&@i6uOz`xML|I!_M}1xNc{i5$umkR?$KC-I0AR>%tN>afy4-d zhiScUZ(HJ_ySXNMVcRj--}fFeX$3|FrRB+64%+b`{{Acwgaq0xYMn09`v>F;W1tHV6o8BF?dzjzG*Vh?t+X$6 z@fZdR&v{&GaUUee@l`J=F|yT%x|*2dapug2n6LQEa*nieTEYB$`YFc7#5kL9zOB(8 z1HYoenonVj&iC@D9-Ll&+`@zr;Np>t4Jq{+DU`&dZZ~clSE~wz2!(&LGVkT>&CBsG zE0N2?$l1`PpdegL`Ajj6-@sD@$X(*TyS+Ea+rx7wHUfD z>v`lUn7)FiY>4`)-+2b~aYQ@Huo?7cA_9Kfe*Js-_G3F3QIeEsu;aW`X!8qv8paF? zTUuJs>NSh+>pxKJ>|;x6pX%DYvH)4}LBe==GS{0)Vt+6-@`Z%PAv+Zg=Ns@Pl#eu6 zb7!8ZX9WfZ@-E9lt}hjl-Bjf6-0?Bs#|$s4HsON!#^xM#ptXXo1Tk&Vc3LhIc}xR{ zh8~MD`WuHYcw>Peo6ZAa?gz?UiXIgtK#sDf%55X?_mhNr)r{^z^BZl;&eZC~g6A^M zKRG^QS_%mV5Tt<04c~2!jgP18AW+r_hq?IIB?0Ys#t-X3cN1=6ZopGcQ^VZeDpsg{jnjQ!SvKbRjp?a>W8V0~8(9qb* zDi^p(%9$&SyEOV$6g=n7ovSQih0(dVoFJ3w`sR6mc!Vq6GAj2^bdCVc1<7ws0-IW@9uDXw-9CNE5Ia(?BqOLbZM3iOe zhiBj8mS16vt>H_Vxs~rEMayhsnv2+JlZ5L{`&b?mAS6hQ|zE^y?%~+ z2*9Z$jE!lccm)?~X3kWCwzK;t4zVIPHyx2k3VYSsE5xt_FFxb7OP>&&D9%@g?IJsI zfaj;KT>hL2X596VXdcT5J-|<@ya{9cwCpP@XWI9d6yAy`DN0)0lkSecr9yI^*v|B> z(%bTt6O$$&d%u~4=+$Qk;lWW&8B()M&Hb`8IrF9*#btzIJ2eL%XuoN&*t=6sJVR9&Q^9# z1*YX(>GiFwL>RvNQilb~+PpECR?zm(OFMnAcL26PNGl!mRRBolpbJ-L+YV|D&*fG} z?GVP!d4l5H3C`4veFY+hl$3BI`s4lkEtKLA@w~Kc%?fZ32`g;QcZ2$z{r9gu98ADY zvS8i-Xc6>2C~p%x^1RJKd)eMz*5&(23P=8=9ZzX1+TFz_=XM4);m2PQ=7CsLvqqs} z2^>0$=bly_p>%ae3~sb>orZc}`r6B-sGpZ(=^h-N@Rg=bcx=NTaDn49+Aas0g^)co zd=5lYSsLIB2j0TS*kDsXTSIm9@uoQV^RwN&y%wdvO^UDk3iv>ycG{d%PMOpJX`nN- zS2f8R3Ia)N0M6wBcb z+!^QC8XoLS+>gpVHGkM$IUcfu_cv8Y=9{?HzE=b{VN-|4C5yo6F}_0B%33Mv3}4Y< zi_B>iXhE_|?x2GsPvz}73d9G%g22WDc^1f#V7hOSjP_!kEEd1TW;}fFh|g_g(<*ub zd1ZmLVG_reEgK%)Vc_~Cn!B89JAoHTY(jtxl!@V+7e&Rzm8Dl;PvD<;v+N_hN6pT$ zLp6HtYLSDrx*<@isHmy8TDaQhkmO5jBLfpt4#Xnh{C5KktK7nmeQ<&l!iG+M>Fw&l z?S}@C?wsqmDZ_e(5d8Sk*p-OBG)rV30rYPqo?IuP*+`RG|}YdZLjzvms1;0>+!T@nT*8Jn=CX$OgqbrT%h^PGkaCHokr2M@Y3RHR%s zXLtcIdo_&5m~uW~X8vtj=m3rs@T7qE?>k*;_ffTtm^Nl3X;%94{-o6Du+$@CkwpaD zKLZlFKl!vT-#0eS-+ zj&)t1-6e)`^uY1Y&RqM@w#~(_p{XxV2{V}ShG-7Up#Jg7^4KE zVV#0G(LrbZMRV%!fRB)U4eWe+>?ZgLj=KY(rcEvOF%7`H&N*rv^J;8VA9bTYQdEvq zw`!6=KWpG$IjKt|e&g!vLh*r%llLv9U4Mm^pNMEZ_4sjLJLAWb$2kl6sAWlhu0`D$ z;7rQBnN;!Ox(-|UZ&ZB*Yg3VXY&4F{7;Tc86?45caMP_;&->;mxT~hA9_(B(s|Udh z@d6H#aC0_>8j)nM%(Bmu9rarjzR{vyScvnrsAO^egbcl$E&y>AP#`%XyjFJqalvMq zgKu^}Qw9$Uykr>*_K;imrWd`ZlFoSl!W zGOGS}7ND#!FDt)) znq$&4FzhbRG&OPSdmfE;FUK;=Ta$u}m-`!AQ@9)r(XVoQXCCnNWG>tEw>BDE$HXTl z?_DX{8fZBzD&aMsCqEu;WPY@9D8w|HC`D)Wm6|2(f^1RK$WxXkHyh_)ogWB3lI(Pt#5}`ZV9=2Ho=F)dXNq8dS z1)0;5t+bpR*K9{PlNw~xxS2}{K(lx74SC>^L2#Wd%ga1Em=8~lF8}__&ji{C#75%r zNCXAh@Q~?({CXzcWkx9do98LS+Y&@_pm=3`SkVm^fBG#-@hHVjKt_7U-9V-X`^_sA z7PMSPY|4ZRN!C=rfqTaJ?SuC5pCm+3{++>Y*+}E?zOqp+?GKE{jDaZ zL|2-{`HaMfx{0UY`K**r1>1_8_<7fKOFr9d+cUr2x9V-I?(63X3C%Lg^c(}Q2PO)h z`PZ5=f0RISf}kKf(7T9;YhHl1E9|^EX|t@NtZ=--1hy8Rw}rq=sm5=YXs8?czj8TLQY#r z#g^vKY)2M$+hf4#c9(H}LBy7>hkl!f_j6GJ+)HWuc zw)4<$jrx8h{MwTjQ4SJcySh~3MZE;S7(%3I3mgY+BriVfaj~s-onFMfXKFwF``>F% z7Iu$uXtwo#>bx3E)CKFd$1Jczz zM0mH$3-~_Nzl>Y_?da<_`N}OsM4N^A2d!_pUQ4NL99JGq_N!OKx96$y&Z@b&x#2T> z@JupY0Mmu4FX3`O-jP9=4us9pp$Rc4{&Z5gNh;U79t2$uU#48}X}i zkhuHEAhI_d<_=Fc$U-_pDX|Z>h)RI@${^|L5wvYmFztnW-`JVv$VJHMLft$fwBx`} zPiL5i07*C4I7tw(OHp~(YN86qzXrAu7nd>P5e!JGoJ!C!Q-@w7r*~KD>a}YNN&a;9 z=WIRUy^x(1Z5ZEXpp9E3y{N``4;-#)_1T+G%kSEsG z%Qo`d5D^0+1sRvWRBNq}lCN;UIYLSvS)?q-z?`^+hHNlM&JUvH<5zNk5FyrQOiaus zR9$vz>QDZfygUVjOCfm{*wBNJ;Z(OtQt&Xf^7>so7^W$JC-x6;tbeXs>K0@{h+Z9Z z47kw-dnuYpOzvaw9pYr> z5D{pofjUE4s&=h+b?P>*H|hR*;O-;Je3!4tAbyTsj=t>7CYPBk(GcUCna zTLah4Q0kKjs`R;d|f6^Y=0!IHQy(3cj=|gc4J~ z5u3Ih0_5r$8p;M~(m7i?4kqn~`eY!55KXzq%G#P|QQQrY{J=vb!wqFLRfybKkRVQz z(Q)IK7I@$%j6Eq=TB5lGAyBhEf-Nmo2YF%$W0Tk@KwRC_=N_9d+I=W!^^iVi>_D={ z+uJ;!P4YxeM~kBB}^+VaCLG~ac7G04;% zquoK81F{se341N~*xB0$Ry@aRDk=tDMXt>WADj#VgFEmR+nDIpJ53~W63iu6EoxB$ zqId2{K&Gi5{NUR%%-{!BK7RT&PJL3h`tNTRwNo3nuKlnBuXeF3Ai&qeBDpmA)`&7X zD^drl>Dv8gH?pdU`yqOU^?Y>g>QzcFf&JhJWJke$qm>Vlz?l*~RWwmf;X1npO`&%r zU6%os_CQW56ZVozOG+qxha{;St^rRN=_rt}&9WJg#30zq_eon?{yp6K56m7wcfNU#;kAL7ia_Vz^(ixwEW zFA>ty*Ov~tRGDQPX*V6cZgl`-r!LTBBE4DIO$GJ=LpHfd4y?I{aj9Ms?S%KFEVH`;cgY^PS-JFkWp}%OV zsDw72y^cg4Vfjc6Y>yM}kp2NvQB6mOrE-+*KLKOvW?cc;N?%yWDd+=%GZS1O>#-^= z;D_*6!;yZRm^iMecY+dwS)hC;z61M_rLaZ5TpZM7basJEs?#3&swF5$$SyauxFB3N zGMv^=m#%~YTSE5HkpMN4T7-QCB+vZ`_B0{w5{PsCXBpW$yVas}0Z~YSt2-SYxFNd*1JT$uw?>cqXd-Dsn@4e z_8mr`6HSpNfg%J+!$8^awPVLmWkS9e;S%4ZK?L7?%CT?=1M7qRxEpdnQ`)DiZ>+&I!ef zM}a(Y5p6p;v_Z~e zIx*Ywn_p9HGu+0m^#_fh<1f?NPCeyIK2mSX_0aGL5hHq?02mru;<*6J03$za^Sva+ zp_&f&5|6Z0JhTSk>QYo=6ORsX*rUV!AThyyFdji{17jcA8au@K97-W!&VgF4R3yH6 zo!mLjW(5gLBK8)duN2sP^nc)-3H7=8U+c_{`zM^g9)(52{nGOxIH4R`d0;L5Q>#fg z*wwuQ14vs#xy^(l#$i84T=(q|;bg=(xPJXQVyMD018foA1sO>ujBy?bo21J}ccnF+ z{VCYLVBmW{a$!2RN>x+S^#1U5QYb>WxeLRX0uUdZMxFZSff;R9q|QPMg{2{rdt6+q z@I9=otjHP+IQ#kKlV?NNRRpnMvT(onNrIVCMy(o5P>Ngl+}=P|9bw_d2)F=89Fz>Q zcn4OdN3PK)2!sM*(W|Ja0F4LM4M64rYhz>U*4=yeWRRpGAaWbEx*Uk;fwX5-s?GEK z8xax+L95T}f={^+W0{Yv;6sKC!c~|2hs1=}hsO^!Ahc#-ZH**%k%%uyq85L?`64TiI)gq+$nJSH>`MYfj7Y6z z&q6^w7m5}6l@+kzA}>907Jd`p-jSq!Z%v#*A)HsBc3O7dE&G`eY<|61%Bs5PnK%kHY3@^Rd2Tv^$jtzj(w)#o^8x|t=g-_Y`=?` z2Z#3dCgLu68Rh4N){pHeG!a;xN4M-!coWOA@+FF*QV+9Cq8ai;y0SfZxqsIgphe4{ z_aE(*Kca3Pnzof@3=8DYHBJ$4UqN@a`egNgk65d^ho7jBq|G(+Asx1GFx$EpA$Jmf z31WufjU`~E8sMHW%p(CSB>G|47q- zo}&}PLqnjir^C7pU;&ofw^N22F8D(ahTO5A?m7-&II`W3p#o+dD&Atr&W3_(-6 z3wv>J%Bc9zy3!7h4+6qHjB;C2G7u;Ua8r3cnI+C9^$w%+A-89F!^ff3{x(_j`T2RY zfv`^_0)wHy!`MBCADfHwfo{;TGhbH53(59olVUd%Gt1?vWRLpaUd$S^omYB#dz(y( zC8`DUp(((Tc7&A&h(zBL6Vr!SEQz~JC5XGojvWZERG>G*>So5$(h^B4)f$_|ifZA5 zkd^0{VK8;mVdfOH`@(YrINaOSl{`H?U9Q8+^?7gDiWeEuaF1ZTKgjNo_^@aw1HV5) zMMdSwt7iBzD6de)5R-JunI(H7zOYz&NG;J6d08Rmvw7zq$KnTG$@Cg&=~6 z5+b1>D5*$G2#OK{(ntwNcMK_|l%%4F3Q~eJNH-`5sB{jJ0@Bjm-+A2K|8Lprn`?J< z(V2N?-sd^bIrq8m`*3!cwoP2iRbXoy5^(JnvzC2T!1KnGC2ygC{_Qo+TOMo$lWCD> zs{|y9t~G>e8=u8sZblRu-vV-J#a92^6g1&$3xwS^nVFbw1GnGQ#NW_TbYjC^9tB-qYqt1o7;X-jwwve>hqzDiu5T$7)R(tWT<6V-Ki94Pm3mPh_>`?!f0Lh8A@0ky@~Q2@V>xK zI)TarS$-+^U((d~6EBjg8Uuq6Uf#m`x}>C}X>hWb%L}6QjIKA$KT@WY%e(v71V#Ny z9Y@9}=t7GVxO-pqfY$D)=-ncBOU&c(bYW_XzxZv(iWTPISV(3+wya>7`(xVgjApO* z=4T&c0)t(Un4x6^42`EEUmS6BRpvZ(7BvTAOV63xO#Ce7`6jNr?(w5FU9$MhsL|_{ zh6t{_@tq^#1cdObH=y^7s7cz7 z7H-Y-m-3n~0fe5V?J~)TB;KWtb1JZ>A@T!7;*X=x{HKGPaGOcwb%v6QfA!qv+bo52 z=9=^3LnOHEDRs;O7blcH0=HfZ0AOTCkq;2QC5P-O7Q78ga;R(SDw0+shcl2W}<8cLQW48}@tRQUA2 zej{oRs$4Tbqv7kNx}xXpOT4yY;(>X7s{Zuw_M2zsUCGOR+Stw)ravS~!3Tg0~fF{^>(GH!qBWm!v zFGUXCv=4&gAW^!Q)arAQJj)k;Y&sb(Qbp-EH0W+gUf(`h20A4`_qo`$$35PW&jI>~ zNQ&%+7+rFfwXbS#j$)inv8<*1`#13;Q2)upJ<3*+g}jlyd|BZY(cyUJ=z}&wHHsso z+*UUq`+fjuTY2zu|IWQ91A?@>ruIW(V3g}QkSI7p7F}!l*6~HNehI1n61O(zR;%E8 zYTKDf0?XZ6LRGpZWFz)2;P%S$>C>(`1M0-22W&oQ|7EF5@)krqPGm>YWHM?$T~P|SAgAf~*ZWA)m!&y$QE4J*aFdEnxM`59mOSnoNt zABOsT#>mFQt8e-WZe1=Kv*tTb6@bo6;Keru1lWZ9W8p}mduRv~n|mSS#5t41^Kgg# z*%qjM?N%k{iCSA0%Iq>G&dg#o5}Fr)-Hu{k?OK2Nbyl(4`^AH4W$!_MtOVLO!3MNTVlGg9sBvl?BKDh5mEz>uzV$PTj zI+P0Ojnpa3v%MN4m5V?5b#b+HiZ8<2XXLko>z%lwJ4bN%H8sNfO!;C}pLTLanfat! z2cJu+lX}hOQnipvtQuR7TTE$k(>fO@PhAr5&z<}8X+$Y*UN}zvjf6U`FuEQ$$J1dT zC%Ae_in9smYY(qton;TuVDuF{@8-z;#ck;~l%{ka%CCZlsjdIA6g8He%2WIt;ld_I=<*|j|nOOCI{%pY~XF}H0L6qj=mR7v?h(oX6c%Z0K*Lk zz->@k0KM?r4p>6+aa|PZ;ern+B$=#R^q?-_7vFQWlKevd<>qgS@+^HrY`7(s*Va*H z&sbl}t0$j6c`R$?#G&DM2EY{|_W?!)s8a6cB^|_EsR0jBK|#TucKN{yHz?Yh%c(>g z05*lP$|^7E^A4$KLtyxpL8beS5-=A4f&miYO;-Uh91mDML}E01?(_^LIM>M6NMVa+ z394a}u+vUkSsoe~ep2}{zS3Gv^_2v66*?>jqjf%Z4(qXz-ELuDT^HFRISB{~oI;AG zrkBYNW3~Y?K`Ie|;D9tpHZzInvH)->ySNCfnf`U1kffrYK!TZ(`X^@;*QbsJo!G6DgXcH4h*z&K zFJlv|Ppmys@(+whI&*41&YpG*X8jqs;FXn?8Ot5S=+VG!z?T7~u?*`V0p?i~QD*2W z8Ho{o-a!n>pdLNu)HhTvhSlf|@e}HW^;yemeXq)g5L00j^Ov!$ zDCc$j@6``;6*#U39s1QTvG?uNiA|jGsO#sHTBkjUS+8{? z{c9m-Lv~TGmwnTf3S7|w_2}10jj=@!whDS@a_*~BlPr8j?JWuJXmK0=a|uN8U(_>S z65PT34B5Ky*YowBf;*$0-g&EQK%QqOyk_4X&KY$x?${UN@nX}$UbiD7C0u0WvJ2O6 z(IKi<_kJCB`|EiaObNI)-p@;d|Mj#anVGWoI^rrYdqM5Vz$eQ>S0Z}>>J#t%1Ez69 zXTDXO6#C-*Z*%slAWrI^I&x`beA>m#~VTIbj`Pk+SU zqNBk&o-WGNuI%S$uL}Loi{U3MD#zY=<)14`^z}x=Ka3*%M{rp#>Z5j9i2#lf`(y_z9mzeSJSHe?7o-sJW*1b zs>InjGmh|8N0xhD-^+km9~uoqG~Dlula5-R8RgS=O!ZPA7{|27V$Q4z4tP`kChJ zRQJT2eK*yUhQ14rV|VNnMC2|Sj-R2G0ag{MU$9Bm!QZ&4&i#`N{B=u8=-%p*Kj!gQ zjTW=<@)b`Z^%LEHhOS4>-e>Q`@xk6ruJCkfUD#ezzSN{c>&d(Sg{oLzx12aYyDV`o z;`WL%BYSkj-CJuH_MhMka=LFs4_+Hec0X-=nxC%A-stcb`Ao$x9Q#fgy4f0quZ%B? zzqE~D&Ic#nJ9%vXJCSW*Wa}8u3x-Hy@XLLsi)Zg&Vb{dnF3L>2qnslCaR2v(FP45t zQ_p}#G?ve(_1wPi3FG~ha(Qx!^w}Ywmfl16ci1}2s@oSdt%Ua9ZxWo#_Z;7B&ZBfx zWj-Tf#TSdBUG`rv<^X}w*Ne|mZ7V_;=bt$JnkgenkkY)?v=L2OG;=q-HTqwxA0sM9 zKIes+{vTI)-8Pp$uKKP2wC00ktIVCYu{d^o|I`GMBVI~H1Y@r=Lrz;l^9#gHH`KN? z^G%i2#BIR-v>o7KJWG#Wi$aruGH2bhv|dY&??@EHllOnnPg!8l;76^;!pw~Cn$ItZ zT1Vj5OJ%)P&tA&<+s>bS8kYrImLTWyvG~~wif9{|-WZ`&E=k3?7 zrX!nC@M;p9LWTk-!D;~nJ~9Y68+3qPpMN*CUO#{=%XK2V_WuQ-p8(3NfpkTP6*!@+IZuiT(-hLv+rr1 zBrC5(HIl2ce_wX-Ra3*`ZrQE6!v48pR(xO1M(2B|&oSt%!D3*5YF;ug(9 z%-PAxy{$?Rv0g$}Y^?x63LM6{ucYZ9?UM>%%_luyB)}CZv-$b`$Go@=ryyUL8g!g+^t?$^HwYnAztGq ze06=B&k~^V4tg1iUIb-~B&G zyBx9_0x_~s(-3G9+X0v3hUT4?!w&-leF0v@AXy3U5JPRtZZT|0E(6frI`Uv z-pfnK;TGA)p}O!b^q`^cy$A?Avh4t@tgz2E5b?3|2Vs*{nGw+m zkT53$?gCQ$zrF69)0>mdBp2O5>^^@G-0G3i9vn7Pf#}O9IZ_+kj))GZD}XGIz#%3X z!LOFeQ<~>MI~yvpTU4>TlI7Tgbnuc2kaRMjKHFRHs%nl=W}W(m!>`(ZqEF=G5#dOx z7Qhffl<*8Ie$fmNPxDPXFN5oc&~Lj-tgIawg#%N$!5}2t-Psbf(1ErrvIhey#sn~c z{)n0e_jcD11AB9AE(`AW=5I&nnId||xJ{YP&Xj7&##kik)q>4i2OCKt=oG+^ff?Gu zEGp@o&{xT<*fi}2g}V#rmJlUt5?**ktrZ+&G8ZX)0}Tc)*J4$bc~k3Fu8$eZ{W~Jl zMW1{%O$iK9@Ikl=IPDaoZ*VnVe-AuLsjxq8o?vt^zJQ!na1WFL#0J7VgXFs^rx^Fm zl!R4NTku<3?AZf)7>gv(6QI(4QOAQ^dz<-JRfdWrikn7`p8m&|{Lee<-MsE=3Chq+ z2yYwaxyWQdvseKlYUo5*3c@k~C`x3f6@lfAyq^E)j-mB!7nWe2k-r}w?LsAfRj{OezC0}Go@cnCrA z_Z_Mlg@B_1vU7%S(CF0J9o4}Tu>9hGQg}@Vpr)_{XdpwwL&|jTovNy8>C75jx$qP& zD~4eb0LBB2$0maJpEq>z0D{GXy8tB02R6XY3gOF=;CU9Q?KI@$8N$NBL5x_C1%Ead zw1=S93QK?;x_P|dkSHNDb6pO{vdRg#L!FsRpI{AyCu&HyzmYbY?oIx0OpDwm$#`mA#Mx5>DZoa^=M z{S`5WZj!um-A6V?I0HIm(;$cLjN-RL8y^THl=V?A$Uiu1tEZ<2@mBAk&h~VH6(Ff$ z2@vyBfy7`&3&+9LifG`C4%Q9JnVFe=b;D%)@5@;+CAUy4NLP!4EWlVU@dcP;WFZS6 zuw+G&^m=oiX(o}4r-0+yFaDAg+F5QF4&4Li#$?$1PJL@&#hMHjkYNZMEOY~$F`NMc zxyfW(B2B1>^I}4@^BARM8}zo2=W#4eB+IyM8mI@|BTQ!4m1M>F_Maj1ULR%G&B1UD zVpNdY9&`bEz@uZ(uNwT~talAR7ww)zR+GAC+uVt=v@Zx2`6#tb?$77cm6>~#TZiy@6F@3a z2Y9=n6dI}daM+G)A-+FAv~57IL4L=D1?b>L0%9O$q4UcH&YYmjW|<(8O+g1i==DW^ z2+GicvWG6e{@(h+$O^KF8+nA-MzB7S!x0j!AYWz{=xk!KSlIAkJuIc=pd$cJA!|_) zLMxEJWB@HJ4L%pj9bmgMNP@^o8H#)Hsk8ov_ouTzRd3w5A;XTPLaLTY4v&pM26Qih zKo`|+ z&N~uR#cErDuh3})P3cUAKkTcy_b>(pN(Z7b=bnp_A-z^B{IXRgj)E3kk&W8D zN2!h+zis@n^s!$#<-U-IDUmGeVw<{jpkOu(JV8MJU_Yq_)Doav7=Q9Spc@@-1d_b| ztFn2ZA*(Vj_gb)ao~!}OG`^5aO!^# z&l4~WBrnO6##>bLI5HXp-3YoIEo`T9YxKWCQVizH;a4)jSK!7WvMuAE{(OVs)xiI~ z80HHX@Xh_IPtKTNM6*Qc*nRn^Pq=|L2Xz}j#*R7zKv?qYNP-R}WZ#UE;M3mWdEg-G zz9ZQQB*sYfWm!CWrcfWwgM9covR@@<*L(&b3mh(pcZAsN^z@&noj{ff2Lv!fk&_^( zb&K&;sR~fE zDi*`Dyc6X>J&7a)VZh9Zg)Tpge)!rw*wr=GRROM3pt4W_byju;aQ^^2gw(tp6g2i* zGlj0{ng9)@0vn{4&HG~h(cdAoBAJj_83R50dt)Q_Dk88gnVFa@Z1O=2h=upK1jbFV zbz1lC=`K$Th$I2aqj(0{njs512(JF(UE^I2FwHu&(XUH z?q)oeeaw<5B>}h2YT;TaCJ;{yT>4GG#piodlSA5S7x?%@#&LFfK+s9AJ{a z16=~@g+T{ac>U)=G&IH1tuQZd0?H?7tVN<^&@8i9;^2|v@@{VBU{sWEP=5xUcA&~b z#c(&R#_e3g#x{cpEyU|FhAj}501;jps*11#Bt4t~%D^%hHYtZKCvvz+LXL%|)gbCD z*vTUQPGn05#ws7+eJ&2$!L*=%9?ROSSp<1NkQ1_Hy-DL$M6rN~tH8~Ht7(D8?uDxo zKyydI9^6-4`zj$Ng(?Vj@dvlZc>BeikzO1a9Qj~)hd8>>@kLa->^;bi5fKZbAn<`R z0ce#}fMo!Jk8miz(IEg?m4Mr39-?$SubcR#>9PVPaBTq;`!2_+1X#vaz~jMU0~s!g}P3{wFV#`3?bT z0K2(tB8do5!&ms=e)63ISuSEk!}jR|S!Z)}I0N|Bp4H|1Q;$Q{U$wwll?hh3VIUkC zwb_Hh3dAZ6vr&KJr06S*^&?RA456bL4$sn*VW_q`H0?rcm&er73$g~c^&!8o1d#Po zoc?xRxBH{6_8O`^!oXh&TzAIv-`T}*-5mQBo->7P0#$!tB$WyqEfta+-A4>VXbugcML;w`wJ&0p0L{Y; z7CIW700~>X(5-)#544PrPfO+VTrP_%B;Z~*1aa%{aPjU;fI7)gf7P!Ovc@^2*PlNc?Az+?(GIfzJLz*DE9 zTLnLu3K5)b0U9;JC=fLXG7WTIK!08v>cDhq_F{(bT)@Qn=Mj6(OW=#3n5jP*p3Obv zPLIs*0PBDA=8XVUeMvlU%egCru~RQ0Lw^a!8IaGtvFvap*W%Eu4V=RXzv?1-NY#pF z06=en(kBfv!ux2_5$t8~H&cQ-8x9jhse@iG>Wim$bqlO)uFj-^5)5{yBr^U2heg@w z>nRX?A*82)e-~Q9hD}kFGb#T%QcEa@xae&0Yw7#+Si(E%HG%6Ah8)L`LBGWwLO;TK zsx<~d-BBe#K5m-|)OW;w6rTd9-uTzo=jfbBSd||HbOYs*$e;e!ty`!$Ju;E`{B*qH=B)zuH?D;l5 zvzhPO7lDfgpG|lVJ~QQvB7Ar7(VizNzdJn+1oEI*?V{zmK^@pB_kgv_095)f-4V~9 z>-J564OrPKcsNonUWWr*e&+7Q7l=;>=EoGhus_A4{}q=o=dg?nH$UPpd>G+B`<1`J zIpo1TdiDT>4-_`Sj{Rfq9%c`mIN+uWowq}NK~VZ5b`G2?(;yLwsL`A3umpVl4;4u-mLl(mDKLFXi2V2xg0V^b4P0TTlQGqkNB@S^c76%a|W0;{m;fr&la zHe#zqunNa9XgBP8b%1h;STcXA6YwJ~QKZeRFD+@(G9~_jj%Q>|4vn;kv45o_6K_gN zI!t2^&^;FO=N)KL2d!#B^9EKJvjX5k3?(1@ zgVu%v@Qz!9D7pGV-T~5r4sl3$i~+4dZ~`2^4-0z{^%#ODfRJu5VnhYxXT8}tO}k)J zuOfgCjP6?DUa3()?mw_X*{qG0|$tAM14oiT&Ncp)8ZC$JK zl~<5o<~z*X2ftBhkD^I?C}j3Lv4hITVY(F58j!KP>Yy25f%F6TIFFxvif>>6UPC$C2z>J}>*gvfDxmS1z>91B z`vYM<$A3RFe7DZ-l^wc@CEfI~~V^o|&16o(9`(d-X?84^>Aq8W8>WgG4y4mIhB~Ku55&e|C*e z4kq6iDm^b9;fWc^FI)A6&k98;{%Lx4$dZAUb9OxK+r!26{3TbN-Wi>})aGo`uJY;C z@=7roFHP~GqNXC1(xcKJs?wm1>xriu&A`BbDjh9>0-Z{CEdh2Ch~)0Qhqj82RsSzr z5ZxxQf73Rr)|AJhpI1~=UvWLe)pd;k9)EkxJZo>GM*ssUFN!X)g2;0givnaN5(c4{392oKYj&z=tPeDmXX zafM19N#qZ62aT={XXpn{Eo1APo$sIT9Na$EOfSFxTJ&zl#?cx*Yg(yn(m!{?4>;c^ zjiHRJ<-zThgp6L=Hq2Jr_8qHQaU#*$ys`t_1pV#vj zln!UI#1&c>5?}PBy8PI=e}5CvUt>tk_F9W@iNLGE5djrv!h9W^e00)$u$ciLPBbb> zShLWTaO>p!Qx7lSpYVHv3hZ`I`&z~32?N@ellxmGmZW#q8y{Z%_WUI)H?OmmqAF8j zl608HSNK^mTg23HM*g(wV&7iPUcN$XlwX>BgxoFjWA?||L$*NiQfD#HbBHv0nlHMU zzq4yIDl6=T+uZHY|G?c{4-F(ojmqXYSi;#U`%^AQnK3uz6GTlfrpTTv+|XFB0a70Uevtv3ZrP_Dv z_?I_>_gQ)?ce;&4D)7wDrPVlV@Z^u!M32p-5Zy@VKB?5*Q0K05fM0IVHBFS<99tAJ z*gNRdzozLII$umH6!XL5)c>t4_>Fg!#x1t28K%3dJhdHa!IFMlkPw9HF`ZwC)>GqU3T(?-I7T*-O2yNc)Fk*|5{M~5Z} zCx+7ZHZP=DiAWwAa1q=OH%vv71Zx~FIx*s$N}8muT5rE5bTWpVq?vVXH&=#>owtG* zmros9e?|N%fGM~0nEn@EFc^|l>zj0VGu0@{(adLO4!UmL_YwT%vL1V7I&B@CmOa0Jn@b38JqpWG(KleF8`w`&hPWg>!JIae{fsg;}WzV<4$+9#Lx(Erik{;a2olU1j^@NqdQ zL&>D$7SvX5M^B|s7jbl*XUOJ>nI$zlaC!U@UPj5-j2X^ipuknINhfA^bG1vAuLr9t zf=~U=UcJbb)%p(?;Lq!}T(EbfYtqpG<3JsHSj>JG$i}TIyq1HbIiAVCG1IUbth1wF z?=I+XCC1yo9f8eIU~bB(JiHAY17`LX{evePwomrrWh|aCr}gsg5+kbKh`i7_1T*^n zjorZ0ip*0h9X@;id`wicG2J|<`M5uHoz&EmwPVWSv(l6I0@Qd0!K;6fY5v|z!!Si> zk&@JIb`9605pyndsUy^EqPCqPT8w{SY?$TK$Rld6a_ z^d<%SvyE&`(>X-g{NH1lSqO~3>t?+27P{D5>e@SFXivWECX?a>JA51-QHKwyuiY%M z5paHb9d3)@)BJPW{=7oV`{lgLHs=bD+C5UOB`6?r36ZZh_^kA5`kQW%^_tI5H9*|{ zeyhEh@~x22c$sa!-Tu4yjq;4g@E$8XaY;UQH$l4Y;PsjT*~5gfM&d%|cTWE%c)TgN z<;>h@8*o(W`G=>TFG(iZUbcjh;M4!u*~xy`-3Xpg4|xSkH_CK4w159@xW4q8;mw);C-&M-DPziC??7^~kL_`c{UpZcpFlTuQGas0V8TW57@5Bd3hNW`Kvf_%`IzA7I z$CGj$fh=*~4#0s>Iyn6-QQ%yvx4SL$v!m*?5U;tls%Aat&AJ3+c{MUm7#KIhN!O@Q%O%|M-pnWyNAahUlT8sEA_^DKhh>U*1+{ zKD+-*NcS;iZi>LxFaE&W;3uK_E_hR=qr_+2M}dN!WHfGhU$@Tl;~9VBo3XyKY^EEc zhex*6k5q+HO+x&VH856*&+e`^GF>2Z8q={nkCiP46qF5gIh;P(T+T3K`d z8uB4)0(y7E!SyPg8&|5VnF;qTfLJjC`-fGuqg%NlH*b>Q?;iKxc+Xm8y`NijIb9yV zW+OLBG~($zxxf5tb(dF!4jc2t|9K_CaQUdpdIE_Je6~0;PQt{J^B@0n!5kfr4M)$d z(P@(od>8yZIyZCD_X*ejSE*vjTECfmbVRDE0ZV9Pc*4r(K1pU-!GXQ=`x2bk7NVNN zsWP8v@lG?dWW@pu*0P_<^D|xkL{0eZAD$d|l;>HRJ*jkyTK1n`pCp|nE`8V6xG64A zQ)RKPP-Pt#xUc;xNzUc!Cm#Eckonm2hdcd4KSe(9t$v(s0ngvR zPCdy#`zya@`>tECNyphhc8E|#t09m0KYJV#AlhtEL72bkTPjcJq?|V}K|-)cIxPc^_Q~Vspo_>#qtN3`S;y#i~*VKLZI~~D|5Lu!84zB zqZ7VTdMKX2c>A{FAMa_zAeW1VnX(f>VLn}Lb( z(j|UL!1!wO7#JBY3hc_=k=GN8ze0rZs()fH?j9Jk!?EW_U~;*r(}*VRfWHA|)Q^su;nLM^m|%?_%xU1ahV0{E z_?0|p*AM0dBkbnOQ&uo%%N83@OJj~1)VQD|rWX%rK;Nqvetq9wGpYp4`l&ib5N4bm z-wcTR>3Z!mADwm8hWlx$5Sn3`-_TV?^OKOvAb7g_`};poJ@)7A6ajI59p=7uHw@-u zWw68Cm+E$naP-Ue_(CTdaNS&NKVBI?k1tN#1mLl)k zDunqGl{UYYy(7~xuUj2>E�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 Date: Mon, 10 Jul 2023 16:35:12 +0800 Subject: [PATCH 256/257] TiFlash: update the JSON push-down instruction (#14224) --- data-type-json.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data-type-json.md b/data-type-json.md index cb6d72c303c9..8a5b183e1a48 100644 --- a/data-type-json.md +++ b/data-type-json.md @@ -27,7 +27,7 @@ SELECT id FROM city WHERE population >= 100; ## 使用限制 -- 暂不支持将 JSON 函数下推至 TiFlash。 +- 目前 TiDB 仅支持下推部分 JSON 函数到 TiFlash。详情请参考 [TiFlash 支持下推的表达式](/tiflash/tiflash-supported-pushdown-calculations.md#支持下推的表达式)。 - TiDB Backup & Restore(BR)在 v6.3.0 版本对 JSON 列的数据的编码进行了修改。因此不建议使用 BR 恢复包含 JSON 列的数据到 v6.3.0 之前的 TiDB 集群。 - 请勿使用任何同步工具同步非标准 JSON 类型(例如 DATE、DATETIME、TIME 等)的数据。 From 18d13c0f33ef05702c2d81fea686439a8496107b Mon Sep 17 00:00:00 2001 From: Yiding Cui Date: Tue, 11 Jul 2023 16:26:15 +0800 Subject: [PATCH 257/257] sql-statements: update the compability comment for `SHOW INDEX` (#14273) --- sql-statements/sql-statement-show-indexes.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sql-statements/sql-statement-show-indexes.md b/sql-statements/sql-statement-show-indexes.md index 6433dcc2675a..1387a36cab58 100644 --- a/sql-statements/sql-statement-show-indexes.md +++ b/sql-statements/sql-statement-show-indexes.md @@ -98,7 +98,7 @@ SHOW KEYS FROM t1; ## MySQL 兼容性 -MySQL 中的 `Cardinality` 列返回该索引上不同值的个数,而 TiDB 中的 `Cardinality` 列始终返回 `0`。 +`SHOW INDEXES [FROM|IN]` 语句与 MySQL 完全兼容。如发现任何兼容性差异,请在 GitHub 上提交 [issue](https://github.com/pingcap/tidb/issues/new/choose)。 ## 另请参阅
    -- 方式一:指定访问密钥 +- 方式一:指定共享访问签名 + + 在 URI 中配置 `account-name` 和 `sas-token`,则使用该参数指定的存储账户名和共享访问签名令牌。由于共享访问签名令牌中带有 `&` 的字符,需要将其编码为 `%26` 后再添加到 URI 中。你也可以直接对整个 `sas-token` 进行一次百分号编码。 + +- 方式二:指定访问密钥 - 在 URI 配置 `account-name` 和 `account-key`,则使用该参数指定的密钥。除了在 URI 中指定密钥文件外,还支持 br 命令行工具读取 `$AZURE_STORAGE_KEY` 的方式。 + 在 URI 中配置 `account-name` 和 `account-key`,则使用该参数指定的存储账户名和密钥。除了在 URI 中指定密钥文件外,还支持 br 命令行工具读取 `$AZURE_STORAGE_KEY` 的方式。 -- 方式二:使用 Azure AD 备份恢复 +- 方式三:使用 Azure AD 备份恢复 在 br 命令行工具运行环境配置环境变量 `$AZURE_CLIENT_ID`、`$AZURE_TENANT_ID` 和 `$AZURE_CLIENT_SECRET`。 From faf76e78a1842c15a5273f962402fe21572305f8 Mon Sep 17 00:00:00 2001 From: Ling Jin <7138436+3AceShowHand@users.noreply.github.com> Date: Wed, 21 Jun 2023 19:52:11 +0800 Subject: [PATCH 196/257] cdc: add ticdc integrity check golang implementation explanation. (#14289) --- ticdc/ticdc-integrity-check.md | 30 +++++++++++++++++++++++------- 1 file changed, 23 insertions(+), 7 deletions(-) diff --git a/ticdc/ticdc-integrity-check.md b/ticdc/ticdc-integrity-check.md index 1376722d5f26..e6ae5ed01a90 100644 --- a/ticdc/ticdc-integrity-check.md +++ b/ticdc/ticdc-integrity-check.md @@ -90,15 +90,31 @@ fn checksum(columns) { * BIT、ENUM 和 SET 类型会被转换为 UINT64 类型。 * BIT 类型按照二进制转换为 UINT64 类型。 - * ENUM 和 SET 类型按照其对应的 INT 值转换为 UINT64 类型。例如,`SET('a','b','c')` 类型 column 的数据值为 `'a,c'`,则该值将被编码为 `0b101`。 + * ENUM 和 SET 类型按照其对应的 INT 值转换为 UINT64 类型。例如,`SET('a','b','c')` 类型 column 的数据值为 `'a,c'`,则该值将被编码为 `0b101`,即 `5`。 - * TIMESTAMP、DATE、DURATION、DATETIME、JSON 和 DECIMAL 类型会被转换为 STRING 类型,然后转换为 UTF8 编码的字节。 - * VARBIANRY、BINARY 和 BLOB(包括 TINY、MEDIUM 和 LONG)类型会直接使用它的字节。 - * VARCHAR、CHAR 和 TEXT(包括 TINY、MEDIUM 和 LONG)类型会被编码为 UTF8 编码的字节。 + * TIMESTAMP、DATE、DURATION、DATETIME、JSON 和 DECIMAL 类型会被转换为 STRING 类型,然后转换为字节。 + * CHAR、VARCHAR、VARSTRING、STRING、TEXT、BLOB(包括 TINY、MEDIUM 和 LONG)等字符类型,会直接使用字节。 * NULL 和 GEOMETRY 类型不会被纳入到 Checksum 计算中,返回空字节。 +## 基于 Golang 的 Avro 数据消费和 Checksum 计算过程解释 + +TiCDC 提供了基于 Golang 的 Checksum 计算过程,你可以参考该过程实现自己的 Checksum 计算逻辑。主要代码逻辑位于 TiCDC Avro Decoder 中实现的 [NextRowChangedEvent](https://github.com/pingcap/tiflow/blob/eb04aecaf8e61f7f9d67597c2d2ef1f44583dd79/pkg/sink/codec/avro/decoder.go#L100) 方法。该方法的具体工作过程如下: + +1. 假设已经从 Kafka 读取到消息,并设置了 key 和 value 字段。分别对 key 和 value 进行解码操作,得到解码之后的数据值和 schema。具体的过程可以参考 [`decodeKey`](https://github.com/pingcap/tiflow/blob/eb04aecaf8e61f7f9d67597c2d2ef1f44583dd79/pkg/sink/codec/avro/decoder.go#L395) 和 [`decodeValue`](https://github.com/pingcap/tiflow/blob/eb04aecaf8e61f7f9d67597c2d2ef1f44583dd79/pkg/sink/codec/avro/decoder.go#L419) 方法。 +2. 使用解码后的 key、value 和 schema 等内容,重新构建每一列的数据内容 `RowChangedEvent`。详情可见 [`assembleEvent`](https://github.com/pingcap/tiflow/blob/eb04aecaf8e61f7f9d67597c2d2ef1f44583dd79/pkg/sink/codec/avro/decoder.go#L176) 方法。构建 `RowChangedEvent` 的过程如下: + + 1. 获取 schema 中所有的 `fields` 内容,遍历 `fields` 中的每一个元素 `field` 以构建对应的列。其中 `fields` 已经按照 Column ID 排序。 + 2. 利用 `field` 中包含的每一列的类型信息,重建每一列的 MySQL Type。并通过 keyMap 识别到 Handle Key 列,然后设置相应的 flag。 + 3. valueMap 中的值需要经过 [`getColumnValue`](https://github.com/pingcap/tiflow/blob/eb04aecaf8e61f7f9d67597c2d2ef1f44583dd79/pkg/sink/codec/avro/decoder.go#L299) 转换,这是因为在编码过程中,某些列允许为 NULL,此时会把 value 编码成一个 map。因此,解码时需要从 map 中获取具体的值,即 map 中的第一个元素。如果该列是 `mysql.TypeEnum` 或 `mysql.TypeSet` 类型,还需要映射到它们的数字形式表示上。 + 4. 遍历完 `fields` 后,就获取了所有列的数据。对于 Delete 事件,将解码得到的列设置为 `PreColumns`;对于 Insert 和 Update 事件,将解码得到的列设置为 `Columns`。 + +Checksum 计算和校验的过程如下: + +1. 调用 [`extractExpectedChecksum`](https://github.com/pingcap/tiflow/blob/eb04aecaf8e61f7f9d67597c2d2ef1f44583dd79/pkg/sink/codec/avro/decoder.go#L281) 方法,获取期望的 Checksum 值。如果该方法返回 `false`,则说明该事件不需要进行 Checksum 校验,因为上游并没有发送 Checksum。这可能发生在 TiCDC 开启了 Checksum 但 TiDB 没有开启该功能时,或者当前事件发生在 Checksum 校验功能开启之前等场景。 +2. 调用 [`calculateChecksum`](https://github.com/pingcap/tiflow/blob/eb04aecaf8e61f7f9d67597c2d2ef1f44583dd79/pkg/sink/codec/avro/decoder.go#L461) 方法,遍历之前重建出来的所有列。利用 [buildChecksumBytes](https://github.com/pingcap/tiflow/blob/eb04aecaf8e61f7f9d67597c2d2ef1f44583dd79/pkg/sink/codec/avro/decoder.go#L482) 方法将每一列的 value 和 MySQL Type 编码为一个字节切片,然后使用该字节切片更新 Checksum 值。 +3. 通过 [`verifyChecksum`](https://github.com/pingcap/tiflow/blob/eb04aecaf8e61f7f9d67597c2d2ef1f44583dd79/pkg/sink/codec/avro/decoder.go#L444) 方法,进行 Checksum 计算和校验。将步骤 2 计算的值与步骤 1 获取的期望值进行比较。如果不相等,则说明 Checksum 校验失败,数据可能存在损坏的情况。 + > **注意:** > -> 开启 Checksum 校验功能后,DECIMAL 和 UNSIGNED BIGINT 类型的数据会被转换为字符串类型。因此在下游消费者代码中需要将其转换为对应的数值类型,然后进行 Checksum 相关计算。 - -Golang 消费者代码实现了解码从 Kafka 读取到的数据、按照 schema fields 排序以及 Checksum 计算等步骤。详情请参考 [`avro/decoder.go`](https://github.com/pingcap/tiflow/blob/master/pkg/sink/codec/avro/decoder.go)。 +> - 开启 Checksum 校验功能后,DECIMAL 和 UNSIGNED BIGINT 类型的数据会被转换为字符串类型。因此在下游消费者代码中需要将其转换为对应的数值类型,然后进行 Checksum 相关计算。 +> - Delete 事件只含有 Handle Key 列的内容,而 Checksum 是基于所有列计算的,所以 Delete 事件不参与到 Checksum 的校验中。 \ No newline at end of file From d707905696b81838de665fb1ff41b0ec5eab52ed Mon Sep 17 00:00:00 2001 From: SeaRise Date: Sun, 25 Jun 2023 14:02:43 +0800 Subject: [PATCH 197/257] tiflash: add doc for tiflash pipeline model (#14188) --- TOC.md | 1 + media/tiflash/tiflash-pipeline-model.png | Bin 0 -> 387300 bytes system-variables.md | 18 ++++ tiflash/tiflash-pipeline-model.md | 122 +++++++++++++++++++++++ 4 files changed, 141 insertions(+) create mode 100644 media/tiflash/tiflash-pipeline-model.png create mode 100644 tiflash/tiflash-pipeline-model.md diff --git a/TOC.md b/TOC.md index ee49c73edf32..c0bc1d7c8fb4 100644 --- a/TOC.md +++ b/TOC.md @@ -628,6 +628,7 @@ - [TiFlash 数据落盘](/tiflash/tiflash-spill-disk.md) - [TiFlash 数据校验](/tiflash/tiflash-data-validation.md) - [TiFlash 兼容性说明](/tiflash/tiflash-compatibility.md) + - [TiFlash Pipeline Model 执行模型](/tiflash/tiflash-pipeline-model.md) - [系统变量](/system-variables.md) - 配置文件参数 - [tidb-server](/tidb-configuration-file.md) diff --git a/media/tiflash/tiflash-pipeline-model.png b/media/tiflash/tiflash-pipeline-model.png new file mode 100644 index 0000000000000000000000000000000000000000..f97c57c90524d090b039219f586fbb5f5ef7bbf2 GIT binary patch literal 387300 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

    KZ$@@s@pf5m|JV6xE0DA#g4Z&8pZ-nm& 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

    BFOaMLqbHyq1DFJKBnLdM{@PLVak?iWLuRqj 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

    e||c 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

    _hBVc8m)7yr!fY{kO( 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

    7`3J4{}~y}wbDhMW|7X$nssQj{p{7N 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 b|AZ-gcli6XeMr`I^gD9U#z6ksxI_N~Hyt_K literal 0 HcmV?d00001 diff --git a/system-variables.md b/system-variables.md index c20e8a28ed16..eacaeb793fe6 100644 --- a/system-variables.md +++ b/system-variables.md @@ -1932,6 +1932,24 @@ Query OK, 0 rows affected (0.09 sec) - 默认值:`OFF` - 这个变量用于动态地控制 TiDB 遥测功能是否开启,当前版本默认关闭 TiDB 的遥测功能。当所有 TiDB 实例都设置配置项 [`enable-telemetry`](/tidb-configuration-file.md#enable-telemetry-从-v402-版本开始引入) 为 `false` 时,将忽略该系统变量,并总是关闭 TiDB 遥测功能。参阅[遥测](/telemetry.md)了解该功能详情。 +### `tidb_enable_tiflash_pipeline_model` 从 v7.2.0 版本开始引入 + +- 作用域:SESSION | GLOBAL +- 是否持久化到集群:是 +- 类型:布尔型 +- 默认值:`OFF` +- 这个变量用来控制是否启用 TiFlash 新的执行模型 [Pipeline Model](/tiflash/tiflash-pipeline-model.md)。 +- 当设置该变量为 `OFF` 关闭 TiFlash Pipeline Model 时,下推到 TiFlash 的查询会使用 TiFlash 原有的执行模型 Stream Model 来执行。 +- 当设置该变量为 `ON` 开启 TiFlash Pipeline Model 时,下推到 TiFlash 的查询会使用 TiFlash 新的执行模型 Pipeline Model 来执行。 + +> **注意:** +> +> - TiFlash Pipeline Model 目前为实验特性,不建议在生产环境中使用。 +> - TiFlash Pipeline Model 目前不支持以下功能。当下列功能开启时,即使 `tidb_enable_tiflash_pipeline_model` 设置为 `ON`,下推到 TiFlash 的查询仍会使用原有的执行模型 Stream Model 来执行。 +> +> - [Join 算子落盘](#tidb_max_bytes_before_tiflash_external_join-从-v700-版本开始引入) +> - [TiFlash 存算分离架构与 S3](/tiflash/tiflash-disaggregated-and-s3.md) + ### `tidb_enable_tiflash_read_for_write_stmt` 从 v6.3.0 版本开始引入 - 作用域:SESSION | GLOBAL diff --git a/tiflash/tiflash-pipeline-model.md b/tiflash/tiflash-pipeline-model.md new file mode 100644 index 000000000000..e00a3952b4ae --- /dev/null +++ b/tiflash/tiflash-pipeline-model.md @@ -0,0 +1,122 @@ +--- +title: TiFlash Pipeline Model 执行模型 +summary: 介绍 TiFlash 新的执行模型 Pipeline Model。 +--- + +# TiFlash Pipeline Model 执行模型 + +本文介绍 TiFlash 新的执行模型 Pipeline Model。 + +从 v7.2.0 起,TiFlash 支持新的执行模型 Pipeline Model。你可以通过修改变量 [`tidb_enable_tiflash_pipeline_model`](/system-variables.md#tidb_enable_tiflash_pipeline_model-从-v720-版本开始引入) 来控制是否启用 TiFlash Pipeline Model。 + +Pipeline Model 主要借鉴了 [Morsel-Driven Parallelism: A NUMA-Aware Query Evaluation Framework for the Many-Core Age](https://dl.acm.org/doi/10.1145/2588555.2610507) 这篇论文,提供了一个精细的任务调度模型,有别于传统的线程调度模型,减少了操作系统申请和调度线程的开销以及提供精细的调度机制。 + +> **注意:** +> +> - TiFlash Pipeline Model 目前为实验特性,不建议在生产环境中使用。 +> - TiFlash Pipeline Model 目前不支持以下功能。当下列功能开启时,即使 `tidb_enable_tiflash_pipeline_model` 设置为 `ON`,下推到 TiFlash 的查询仍会使用原有的执行模型 Stream Model 来执行。 +> +> - [Join 算子落盘](/system-variables.md#tidb_max_bytes_before_tiflash_external_join-从-v700-版本开始引入) +> - [TiFlash 存算分离架构与 S3](/tiflash/tiflash-disaggregated-and-s3.md) + +## 启用和禁用 TiFlash Pipeline Model + +你可以使用系统变量 [`tidb_enable_tiflash_pipeline_model`](/system-variables.md#tidb_enable_tiflash_pipeline_model-从-v720-版本开始引入) 来开启或禁用 TiFlash Pipeline Model。该变量可以在 Session 级别和 Global 级别生效。默认情况下,`tidb_enable_tiflash_pipeline_model=OFF`,即关闭 TiFlash Pipeline Model。你可以通过以下语句来查看对应的变量信息: + +```sql +SHOW VARIABLES LIKE 'tidb_enable_tiflash_pipeline_model'; +``` + +``` ++------------------------------------+-------+ +| Variable_name | Value | ++------------------------------------+-------+ +| tidb_enable_tiflash_pipeline_model | OFF | ++------------------------------------+-------+ +``` + +```sql +SHOW GLOBAL VARIABLES LIKE 'tidb_enable_tiflash_pipeline_model'; +``` + +``` ++------------------------------------+-------+ +| Variable_name | Value | ++------------------------------------+-------+ +| tidb_enable_tiflash_pipeline_model | OFF | ++------------------------------------+-------+ +``` + +变量 `tidb_enable_tiflash_pipeline_model` 支持 session 级别和 global 级别的修改。 + +- 如果需要在当前 session 中开启 TiFlash Pipeline Model,可以通过以下语句设置: + + ```sql + SET SESSION tidb_enable_tiflash_pipeline_model=ON; + ``` + +- 如果需要在 global 级别开启 TiFlash Pipeline Model,可以通过以下语句设置: + + ```sql + SET GLOBAL tidb_enable_tiflash_pipeline_model=ON; + ``` + + 设置 global 级别后,新建的会话中 session 和 global 级别的 `tidb_enable_tiflash_pipeline_model` 都将默认启用新值。 + +如需关闭 TiFlash Pipeline Model,可以通过以下语句设置: + +```sql +SET SESSION tidb_enable_tiflash_pipeline_model=OFF; +``` + +```sql +SET GLOBAL tidb_enable_tiflash_pipeline_model=OFF; +``` + +## 设计实现 + +TiFlash 原有执行模型 Stream Model 是线程调度执行模型,每一个查询会独立申请若干条线程协同执行。 + +线程调度模型存在两个缺陷: + +- 在高并发场景下,过多的线程会引起较多上下文切换,导致较高的线程调度代价。 + +- 线程调度模型无法精准计量查询的资源使用量以及做细粒度的资源管控。 + +在新的执行模型 Pipeline Model 中进行了以下优化: + +- 查询会被划分为多个 pipeline 并依次执行。在每个 pipeline 中,数据块会被尽可能保留在缓存中,从而实现更好的时间局部性,从而提高整个执行过程的效率。 + +- 为了摆脱操作系统原生的线程调度模型,实现更加精细的调度机制,每个 pipeline 会被实例化成若干个 task,使用 task 调度模型,同时使用固定线程池,减少了操作系统申请和调度线程的开销。 + +TiFlash Pipeline Model 的架构如下: + +![TiFlash Pipeline Model Design](/media/tiflash/tiflash-pipeline-model.png) + +如上图所示,Pipeline Model 中有两个主要组成部分:Pipeline Query Executor 和 Task Scheduler。 + +- Pipeline Query Executor + + 负责将从 TiDB 节点发过来的查询请求转换为 pipeline dag。 + + 它会找到查询中的 pipeline breaker 算子,以 pipeline breaker 为边界将查询切分成若干个 pipeline,根据 pipeline 之间的依赖关系,将 pipeline 组装成一个有向无环图。 + + pipeline breaker 用于指代存在停顿/阻塞逻辑的算子,这一类算子会持续接收上游算子传来的数据块,直到所有数据块都被接收后,才会将处理结果返回给下游算子。这类算子会破坏数据处理流水线,所以被称为 pipeline breaker。pipeline breaker 的代表有 Aggregation,它会将上游算子的数据都写入到哈希表后,才对哈希表中的数据做计算返回给下游算子。 + + 在查询被转换为 pipeline dag 后,Pipeline Query Executor 会按照依赖关系依次执行每个 pipeline。pipeline 会根据查询并发度被实例化成若干个 task 提交给 Task Scheduler 执行。 + +- Task Scheduler + + 负责执行由 Pipeline Query Executor 提交过来的 task。task 会根据执行的逻辑的不同,在 Task Scheduler 里的不同组件中动态切换执行。 + + - CPU Task Thread Pool + + 执行 task 中 CPU 密集型的计算逻辑,比如数据过滤、函数计算等。 + + - IO Task Thread Pool + + 执行 task 中 IO 密集型的计算逻辑,比如计算中间结果落盘等。 + + - Wait Reactor + + 执行 task 中的等待逻辑,比如等待网络层将数据包传输给计算层等。 From 4f35c014ab6c71860cea178d1b9b57fab78fd1c7 Mon Sep 17 00:00:00 2001 From: lance6716 Date: Sun, 25 Jun 2023 16:07:04 +0800 Subject: [PATCH 198/257] add "latin1" encoding support for lightning (#14172) --- tidb-lightning/tidb-lightning-configuration.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tidb-lightning/tidb-lightning-configuration.md b/tidb-lightning/tidb-lightning-configuration.md index 91628721a636..0689bf66862b 100644 --- a/tidb-lightning/tidb-lightning-configuration.md +++ b/tidb-lightning/tidb-lightning-configuration.md @@ -207,6 +207,7 @@ data-source-dir = "/data/my_database" # - utf8mb4:表结构文件必须使用 UTF-8 编码,否则会报错。 # - gb18030:表结构文件必须使用 GB-18030 编码,否则会报错。 # - auto:自动判断文件编码是 UTF-8 还是 GB-18030,两者皆非则会报错(默认)。 +# - latin1:源数据文件使用 MySQL latin1 字符集编码(也被称为 Code Page 1252)。 # - binary:不尝试转换编码。 character-set = "auto" @@ -215,6 +216,7 @@ character-set = "auto" # - utf8mb4:源数据文件使用 UTF-8 编码。 # - GB18030:源数据文件使用 GB-18030 编码。 # - GBK:源数据文件使用 GBK 编码(GBK 编码是对 GB-2312 字符集的拓展,也被称为 Code Page 936)。 +# - latin1:源数据文件使用 MySQL latin1 字符集编码(也被称为 Code Page 1252)。 # - binary:不尝试转换编码(默认)。 # 留空此配置将默认使用 "binary",即不尝试转换编码。 # 需要注意的是,Lightning 不会对源数据文件的字符集做假定,仅会根据此配置对数据进行转码并导入。 From 5037576d8484483b1298fbfdf93cd9f45f62cf72 Mon Sep 17 00:00:00 2001 From: GMHDBJD <35025882+GMHDBJD@users.noreply.github.com> Date: Sun, 25 Jun 2023 17:46:04 +0800 Subject: [PATCH 199/257] dm: add description about strict-optimistic-shard-mode (#14232) --- dm/feature-shard-merge-optimistic.md | 4 ++-- dm/task-configuration-file-full.md | 1 + 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/dm/feature-shard-merge-optimistic.md b/dm/feature-shard-merge-optimistic.md index f830238cf8bd..17b9ca85e7b2 100644 --- a/dm/feature-shard-merge-optimistic.md +++ b/dm/feature-shard-merge-optimistic.md @@ -20,7 +20,7 @@ DM 支持在线上执行分库分表的 DDL 语句(通称 Sharding DDL), ## 乐观协调模式的配置 -在任务的配置文件中指定 `shard-mode` 为 `optimistic` 则使用“乐观协调”模式,示例配置文件可以参考 [DM 任务完整配置文件介绍](/dm/task-configuration-file-full.md)。 +在任务的配置文件中指定 `shard-mode` 为 `optimistic` 则使用“乐观协调”模式,可通过开启 `strict-optimistic-shard-mode` 限制“乐观协调”模式的行为,示例配置文件可以参考 [DM 任务完整配置文件介绍](/dm/task-configuration-file-full.md)。 ## 使用限制 @@ -41,7 +41,7 @@ DM 支持在线上执行分库分表的 DDL 语句(通称 Sharding DDL), - 增加没有默认值且非空的列:`ALTER TABLE table_name ADD COLUMN column_1 NOT NULL;`。 - 重命名索引:`ALTER TABLE table_name RENAME INDEX index_1 TO index_2;`。 -各分表在执行以上 DDL 时,若顺序不同将导致同步中断,例如下述场景: +各分表在执行以上 DDL 时,如果指定 `strict-optimistic-shard-mode: true`,会直接中断任务并报错。如果指定 `strict-optimistic-shard-mode: false` 或未指定,若分表 DDL 顺序不同,将导致同步中断,例如下述场景: - 分表 1 先重命名列,再修改列类型 1. 重命名列:`ALTER TABLE table_name RENAME COLUMN column_1 TO column_2;`。 diff --git a/dm/task-configuration-file-full.md b/dm/task-configuration-file-full.md index 9e7f2230383b..0b4e7d3ab28b 100644 --- a/dm/task-configuration-file-full.md +++ b/dm/task-configuration-file-full.md @@ -24,6 +24,7 @@ name: test # 任务名称,需要全局唯一 task-mode: all # 任务模式,可设为 "full" - "只进行全量数据迁移"、"incremental" - "Binlog 实时同步"、"all" - "全量 + Binlog 实时同步" shard-mode: "pessimistic" # 任务协调模式,可选的模式有 ""、"pessimistic、"optimistic"。默认值为 "" 即无需协调。如果是分库分表合并任务,请设置为悲观协调模式 "pessimistic"。 # 在 v2.0.6 版本后乐观模式逐渐成熟,深入了解乐观协调模式的原理和使用限制后,也可以设置为乐观协调模式 "optimistic" +strict-optimistic-shard-mode: false # 仅在乐观协调模式下生效,限制乐观协调模式的行为,默认值为 false。在 v7.2.0 中引入,详见 https://docs.pingcap.com/zh/tidb/v7.2/feature-shard-merge-optimistic meta-schema: "dm_meta" # 下游储存 `meta` 信息的数据库 # timezone: "Asia/Shanghai" # 指定数据迁移任务时 SQL Session 使用的时区。DM 默认使用目标库的全局时区配置进行数据迁移,并且自动确保同步数据的正确性。使用自定义时区依然可以确保整个流程的正确性,但一般不需要手动指定。 From 320b9c397115447cc71f38c715b30883c54d25fb Mon Sep 17 00:00:00 2001 From: dhysum <130652266+dhysum@users.noreply.github.com> Date: Sun, 25 Jun 2023 17:53:34 +0800 Subject: [PATCH 200/257] Add description on `admin pause ddl jobs` and `admin resume ddl jobs` (#14199) --- TOC.md | 2 + ddl-introduction.md | 8 +++ error-codes.md | 12 +++++ .../sql-statement-admin-pause-ddl.md | 51 ++++++++++++++++++ .../sql-statement-admin-resume-ddl.md | 52 +++++++++++++++++++ .../sql-statement-admin-show-ddl.md | 5 +- sql-statements/sql-statement-admin.md | 5 +- 7 files changed, 133 insertions(+), 2 deletions(-) create mode 100644 sql-statements/sql-statement-admin-pause-ddl.md create mode 100644 sql-statements/sql-statement-admin-resume-ddl.md diff --git a/TOC.md b/TOC.md index c0bc1d7c8fb4..ca0fe572b88e 100644 --- a/TOC.md +++ b/TOC.md @@ -689,7 +689,9 @@ - [`ADMIN CHECKSUM TABLE`](/sql-statements/sql-statement-admin-checksum-table.md) - [`ADMIN CHECK [TABLE|INDEX]`](/sql-statements/sql-statement-admin-check-table-index.md) - [`ADMIN CLEANUP`](/sql-statements/sql-statement-admin-cleanup.md) + - [`ADMIN PAUSE DDL`](/sql-statements/sql-statement-admin-pause-ddl.md) - [`ADMIN RECOVER INDEX`](/sql-statements/sql-statement-admin-recover.md) + - [`ADMIN RESUME DDL`](/sql-statements/sql-statement-admin-resume-ddl.md) - [`ADMIN SHOW DDL [JOBS|QUERIES]`](/sql-statements/sql-statement-admin-show-ddl.md) - [`ADMIN SHOW TELEMETRY`](/sql-statements/sql-statement-admin-show-telemetry.md) - [`ALTER DATABASE`](/sql-statements/sql-statement-alter-database.md) diff --git a/ddl-introduction.md b/ddl-introduction.md index 40926035ba6d..dd53120df1bd 100644 --- a/ddl-introduction.md +++ b/ddl-introduction.md @@ -178,6 +178,14 @@ absent -> delete only -> write only -> write reorg -> public 取消一个已经执行完成的 DDL 任务会在 `RESULT` 列看到 `DDL Job:90 not found` 的错误,表示该任务已从 DDL 等待队列中被移除。 +- `ADMIN PAUSE DDL JOBS job_id [, job_id]`:用于暂停正在执行的 DDL 任务。执行该命令后,执行 DDL 任务的 SQL 语句体现为正在执行,后台任务暂停执行。详情参阅 [`ADMIN PAUSE DDL JOBS`](/sql-statements/sql-statement-admin-pause-ddl.md)。(实验特性) + + 只有处于执行中或仍在等待中的 DDL 任务可以暂停,否则会在 `RESULT` 列看到 `Job 3 can't be paused now`。 + +- `ADMIN RESUME DDL JOBS job_id [, job_id]`:用于恢复已被暂停的 DDL 任务。执行该命令后,执行 DDL 任务的 SQL 语句体现为正在执行,后台任务正常执行。详情参阅 [`ADMIN RESUME DDL JOBS`](/sql-statements/sql-statement-admin-resume-ddl.md)。(实验特性) + + 你只能对暂停状态的 DDL 任务进行恢复操作,否则会在 `RESULT` 列看到 `Job 3 can't be resumed`。 + ## 常见问题 DDL 语句执行相关的常见问题,参考 [SQL FAQ - DDL 执行](/faq/sql-faq.md#ddl-执行)。 diff --git a/error-codes.md b/error-codes.md index 0c30520970e9..118dde438ed1 100644 --- a/error-codes.md +++ b/error-codes.md @@ -393,6 +393,18 @@ TiDB 兼容 MySQL 的错误码,在大多数情况下,返回和 MySQL 一样 在尝试消耗超过资源组的限制时返回该错误。一般出现该错误,是由于单次事务太大或者并发太多导致,需调整事务大小或减少客户端并发数。 +* Error Number: 8260 + + DDL 操作无法被 `ADMIN PAUSE` 暂停运行。 + +* Error Number: 8261 + + DDL 操作无法被 `ADMIN RESUME` 恢复运行。 + +* Error Number: 8262 + + DDL 已经被 `ADMIN PAUSE` 暂停,无法再次执行。 + * Error Number: 9001 完整的报错信息为 `ERROR 9001 (HY000) : PD Server Timeout`。 diff --git a/sql-statements/sql-statement-admin-pause-ddl.md b/sql-statements/sql-statement-admin-pause-ddl.md new file mode 100644 index 000000000000..8c0d4dc5c116 --- /dev/null +++ b/sql-statements/sql-statement-admin-pause-ddl.md @@ -0,0 +1,51 @@ +--- +title: ADMIN PAUSE DDL JOBS +summary: TiDB 数据库中 ADMIN PAUSE DDL JOBS 的使用概况。 +--- + +# ADMIN PAUSE DDL JOBS + +`ADMIN PAUSE DDL` 语句用于暂停当前正在运行的 DDL 作业。可以通过 [`ADMIN SHOW DDL JOBS`](/sql-statements/sql-statement-admin-show-ddl.md) 语句获取 DDL 作业的 `job_id`。 + +该语句可用于暂停已经发起但未执行完成的 DDL 任务。成功暂停后,执行 DDL 任务的 SQL 语句不会立即返回,表现为正在执行。如果尝试暂停一个已经完成的 DDL 任务,会在 `RESULT` 列看到 `DDL Job:90 not found` 的错误,表示该任务已从 DDL 等待队列中被移除。 + +> **注意:** +> +> + 该操作可以暂停 DDL 作业,但除版本升级外,其他操作和环境变更(例如机器重启、集群重启)不会暂停 DDL 作业。 +> + 版本升级时,正在运行的 DDL 作业将被暂停,同时在升级过程中发起的 DDL 作业也将被暂停。升级结束后,所有已暂停的 DDL 作业将恢复执行。升级过程中的操作为自动进行,详情查阅 [TiDB 平滑升级](/smooth-upgrade-tidb.md)。 +> + 该操作可以同时暂停多个 DDL 作业,可以通过 [`ADMIN SHOW DDL JOBS`](/sql-statements/sql-statement-admin-show-ddl.md) 语句来获取 DDL 作业的 `job_id`。 +> + 如果希望暂停的作业已经执行完毕或接近执行完毕,暂停操作将失败。 + +> **警告:** +> +> 该功能目前为实验特性,不建议在生产环境中使用。该功能可能会在未事先通知的情况下发生变化或删除。如果发现 bug,请在 GitHub 上提 [issue](https://github.com/pingcap/tidb/issues) 反馈。 + +## 语法图 + +```ebnf+diagram +AdminStmt ::= + 'ADMIN' ( 'SHOW' ( 'DDL' ( 'JOBS' Int64Num? WhereClauseOptional | 'JOB' 'QUERIES' NumList )? | TableName 'NEXT_ROW_ID' | 'SLOW' AdminShowSlow ) | 'CHECK' ( 'TABLE' TableNameList | 'INDEX' TableName Identifier ( HandleRange ( ',' HandleRange )* )? ) | 'RECOVER' 'INDEX' TableName Identifier | 'CLEANUP' ( 'INDEX' TableName Identifier | 'TABLE' 'LOCK' TableNameList ) | 'CHECKSUM' 'TABLE' TableNameList | 'CANCEL' 'DDL' 'JOBS' NumList | 'PAUSE' 'DDL' 'JOBS' NumList | 'RESUME' 'DDL' 'JOBS' NumList | 'RELOAD' ( 'EXPR_PUSHDOWN_BLACKLIST' | 'OPT_RULE_BLACKLIST' | 'BINDINGS' ) | 'PLUGINS' ( 'ENABLE' | 'DISABLE' ) PluginNameList | 'REPAIR' 'TABLE' TableName CreateTableStmt | ( 'FLUSH' | 'CAPTURE' | 'EVOLVE' ) 'BINDINGS' ) + +NumList ::= + Int64Num ( ',' Int64Num )* +``` + +## 示例 + +可以通过 `ADMIN PAUSE DDL JOBS` 语句暂停当前正在运行的 DDL 作业,并返回对应作业是否暂停成功,直到被 `ADMIN RESUME DDL JOBS` 恢复: + +```sql +ADMIN PAUSE DDL JOBS job_id [, job_id] ...; +``` + +如果暂停失败,会显示失败的具体原因。 + +## MySQL 兼容性 + +`ADMIN PAUSE DDL JOBS` 语句是 TiDB 对 MySQL 语法的扩展。 + +## 另请参阅 + +* [`ADMIN SHOW DDL [JOBS|QUERIES]`](/sql-statements/sql-statement-admin-show-ddl.md) +* [`ADMIN CANCEL DDL`](/sql-statements/sql-statement-admin-cancel-ddl.md) +* [`ADMIN RESUME DDL`](/sql-statements/sql-statement-admin-resume-ddl.md) diff --git a/sql-statements/sql-statement-admin-resume-ddl.md b/sql-statements/sql-statement-admin-resume-ddl.md new file mode 100644 index 000000000000..d34c01ebf2c6 --- /dev/null +++ b/sql-statements/sql-statement-admin-resume-ddl.md @@ -0,0 +1,52 @@ +--- +title: ADMIN RESUME DDL JOBS +summary: TiDB 数据库中 ADMIN RESUME DDL 的使用概况。 +--- + +# ADMIN RESUME DDL JOBS + +`ADMIN RESUME DDL` 语句用于恢复当前处于暂停中的 DDL 作业。可以通过 [`ADMIN SHOW DDL JOBS`](/sql-statements/sql-statement-admin-show-ddl.md) 语句获取 DDL 作业的 `job_id`。 + +该语句可用于恢复处于暂停中的 DDL 任务。成功恢复后,执行 DDL 任务的 SQL 语句会一直表现为正在执行。如果尝试恢复已经完成的 DDL 任务,会在 `RESULT` 列看到 `DDL Job:90 not found` 的错误,表示该任务已从 DDL 等待队列中被移除。 + +> **注意:** +> +> + 该操作可以恢复已被暂停的 DDL 作业。 +> + 版本升级时,正在运行的 DDL 作业将被暂停,同时在升级过程中发起的 DDL 作业也将被暂停。升级结束后,所有已暂停的 DDL 作业将恢复执行。升级过程中的操作为自动进行,详情查阅 [TiDB 平滑升级](/smooth-upgrade-tidb.md)。 +> + 该操作可以同时恢复多个 DDL 作业,可以通过 [`ADMIN SHOW DDL JOBS`](/sql-statements/sql-statement-admin-show-ddl.md) 语句来获取 DDL 作业的 `job_id`。 +> + 处于非暂停状态中的作业无法被恢复,操作将失败。 +> + 如果重复恢复同一个 DDL 作业,会报错 `Error Number: 8261`。 + +> **警告:** +> +> 该功能目前为实验特性,不建议在生产环境中使用。该功能可能会在未事先通知的情况下发生变化或删除。如果发现 bug,请在 GitHub 上提 [issue](https://github.com/pingcap/tidb/issues) 反馈。 + +## 语法图 + +```ebnf+diagram +AdminStmt ::= + 'ADMIN' ( 'SHOW' ( 'DDL' ( 'JOBS' Int64Num? WhereClauseOptional | 'JOB' 'QUERIES' NumList )? | TableName 'NEXT_ROW_ID' | 'SLOW' AdminShowSlow ) | 'CHECK' ( 'TABLE' TableNameList | 'INDEX' TableName Identifier ( HandleRange ( ',' HandleRange )* )? ) | 'RECOVER' 'INDEX' TableName Identifier | 'CLEANUP' ( 'INDEX' TableName Identifier | 'TABLE' 'LOCK' TableNameList ) | 'CHECKSUM' 'TABLE' TableNameList | 'CANCEL' 'DDL' 'JOBS' NumList | 'PAUSE' 'DDL' 'JOBS' NumList | 'RESUME' 'DDL' 'JOBS' NumList | 'RELOAD' ( 'EXPR_PUSHDOWN_BLACKLIST' | 'OPT_RULE_BLACKLIST' | 'BINDINGS' ) | 'PLUGINS' ( 'ENABLE' | 'DISABLE' ) PluginNameList | 'REPAIR' 'TABLE' TableName CreateTableStmt | ( 'FLUSH' | 'CAPTURE' | 'EVOLVE' ) 'BINDINGS' ) + +NumList ::= + Int64Num ( ',' Int64Num )* +``` + +## 示例 + +可以通过 `ADMIN RESUME DDL JOBS` 语句恢复当前处于暂停中的 DDL 作业,并返回对应作业是否恢复执行: + +```sql +ADMIN RESUME DDL JOBS job_id [, job_id] ...; +``` + +如果恢复失败,会显示失败的具体原因。 + +## MySQL 兼容性 + +`ADMIN RESUME DDL` 语句是 TiDB 对 MySQL 语法的扩展。 + +## 另请参阅 + +* [`ADMIN SHOW DDL [JOBS|QUERIES]`](/sql-statements/sql-statement-admin-show-ddl.md) +* [`ADMIN CANCEL DDL`](/sql-statements/sql-statement-admin-cancel-ddl.md) +* [`ADMIN PAUSE DDL`](/sql-statements/sql-statement-admin-pause-ddl.md) diff --git a/sql-statements/sql-statement-admin-show-ddl.md b/sql-statements/sql-statement-admin-show-ddl.md index 8e7f41c84553..0931ee8f6a9e 100644 --- a/sql-statements/sql-statement-admin-show-ddl.md +++ b/sql-statements/sql-statement-admin-show-ddl.md @@ -64,7 +64,8 @@ ADMIN SHOW DDL; - `synced`:表示该操作已经执行成功,且所有 TiDB 实例都已经同步该状态。 - `rollback done`:表示该操作执行失败,回滚完成。 - `rollingback`:表示该操作执行失败,正在回滚。 - - `cancelling`:表示正在取消该操作。这个状态只有在用 `ADMIN CANCEL DDL JOBS` 命令取消 DDL 任务时才会出现。 + - `cancelling`:表示正在取消该操作。这个状态只有在用 [`ADMIN CANCEL DDL JOBS`](/sql-statements/sql-statement-admin-cancel-ddl.md) 命令取消 DDL 任务时才会出现。 + - `paused`:表示 DDL 已被暂停运行。这个状态只有在用 [`ADMIN PAUSED DDL JOBS`](/sql-statements/sql-statement-admin-pause-ddl.md) 命令暂停 DDL 任务时才会出现。可以通过 [`ADMIN RESUME DDL JOBS`](/sql-statements/sql-statement-admin-resume-ddl.md) 命令进行恢复运行。 示例如下: @@ -190,3 +191,5 @@ ADMIN SHOW DDL JOB QUERIES LIMIT 3 OFFSET 4; # Retrieve rows 5-7 ## 另请参阅 * [ADMIN CANCEL DDL](/sql-statements/sql-statement-admin-cancel-ddl.md) +* [ADMIN PAUSE DDL](/sql-statements/sql-statement-admin-pause-ddl.md) +* [ADMIN RESUME DDL](/sql-statements/sql-statement-admin-resume-ddl.md) diff --git a/sql-statements/sql-statement-admin.md b/sql-statements/sql-statement-admin.md index 7ea9007c34b7..045f3db793ea 100644 --- a/sql-statements/sql-statement-admin.md +++ b/sql-statements/sql-statement-admin.md @@ -18,6 +18,8 @@ aliases: ['/docs-cn/dev/sql-statements/sql-statement-admin/','/docs-cn/dev/refer | 语句 | 功能描述 | |------------------------------------------------------------------------------------------|-----------------------------| | [`ADMIN CANCEL DDL JOBS`](/sql-statements/sql-statement-admin-cancel-ddl.md) | 取消当前正在运行的 DDL 作业 | +| [`ADMIN PAUSE DDL JOBS`](/sql-statements/sql-statement-admin-pause-ddl.md) | 暂停当前正在运行的 DDL 作业 | +| [`ADMIN RESUME DDL JOBS`](/sql-statements/sql-statement-admin-resume-ddl.md) | 恢复当前处于暂停中的 DDL 作业 | | [`ADMIN CHECKSUM TABLE`](/sql-statements/sql-statement-admin-checksum-table.md) | 计算表中所有行和索引的 CRC64 校验和 | | [ADMIN CHECK [TABLE\|INDEX]](/sql-statements/sql-statement-admin-check-table-index.md) | 校验表中数据和对应索引的一致性 | | [ADMIN SHOW DDL [JOBS\|QUERIES]](/sql-statements/sql-statement-admin-show-ddl.md) | 显示有关当前正在运行或最近完成的 DDL 作业的详细信息| @@ -211,7 +213,8 @@ ADMIN SHOW DDL JOBS 5 WHERE state != 'synced' AND db_name = 'test'; * `synced`:表示该操作已经执行成功,且所有 TiDB 实例都已经同步该状态。 * `rollback done`:表示该操作执行失败,回滚完成。 * `rollingback`:表示该操作执行失败,正在回滚。 - * `cancelling`:表示正在取消该操作。这个状态只有在用 `ADMIN CANCEL DDL JOBS` 命令取消 DDL 作业时才会出现。 + * `cancelling`:表示正在取消该操作。这个状态只有在用 [`ADMIN CANCEL DDL JOBS`](/sql-statements/sql-statement-admin-cancel-ddl.md) 命令取消 DDL 作业时才会出现。 + * `paused`:表示 DDL 已被暂停运行。这个状态只有在用 [`ADMIN PAUSED DDL JOBS`](/sql-statements/sql-statement-admin-pause-ddl.md) 命令暂停 DDL 任务时才会出现。可以通过 [`ADMIN RESUME DDL JOBS`](/sql-statements/sql-statement-admin-resume-ddl.md) 命令进行恢复运行。 ## MySQL 兼容性 From 4483edb8bb63d1b5b78244ac2cd7467ed6f217b1 Mon Sep 17 00:00:00 2001 From: xzhangxian1008 Date: Sun, 25 Jun 2023 18:20:34 +0800 Subject: [PATCH 201/257] `FIRST_VALUE` and `LAST_VALUE` pushdown (#14042) --- tiflash/tiflash-supported-pushdown-calculations.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tiflash/tiflash-supported-pushdown-calculations.md b/tiflash/tiflash-supported-pushdown-calculations.md index f7303d6f0905..07f6542c1f3e 100644 --- a/tiflash/tiflash-supported-pushdown-calculations.md +++ b/tiflash/tiflash-supported-pushdown-calculations.md @@ -22,7 +22,7 @@ TiFlash 支持部分算子的下推,支持的算子如下: * 只有在 [MPP 模式](/tiflash/use-tiflash-mpp-mode.md)下才能被下推 * 支持的 Join 类型包括 Inner Join、Left Join、Semi Join、Anti Semi Join、Left Semi Join、Anti Left Semi Join * 对于上述类型,既支持带等值条件的连接,也支持不带等值条件的连接(即 Cartesian Join 或者 Null-aware Semi Join);在计算 Cartesian Join 或者 Null-aware Semi Join 时,只会使用 Broadcast 算法,而不会使用 Shuffle Hash Join 算法 -* [Window](/functions-and-operators/window-functions.md):当前支持下推的窗口函数包括 `ROW_NUMBER()`、`RANK()`、`DENSE_RANK()`、`LEAD()` 和 `LAG()` +* [Window](/functions-and-operators/window-functions.md):当前支持下推的窗口函数包括 `ROW_NUMBER()`、`RANK()`、`DENSE_RANK()`、`LEAD()`、`LAG()`、`FIRST_VALUE()` 和 `LAST_VALUE()` 在 TiDB 中,算子之间会呈现树型组织结构。一个算子能下推到 TiFlash 的前提条件,是该算子的所有子算子都能下推到 TiFlash。因为大部分算子都包含有表达式计算,当且仅当一个算子所包含的所有表达式均支持下推到 TiFlash 时,该算子才有可能下推给 TiFlash。 From ea7e214a195a4b0935e2133bb2a3c8180b58355e Mon Sep 17 00:00:00 2001 From: Grace Cai Date: Sun, 25 Jun 2023 18:23:34 +0800 Subject: [PATCH 202/257] v7.2: Update the support info of optimize-filters-for-memory (#14274) --- releases/release-7.1.0.md | 2 -- tikv-configuration-file.md | 4 ++-- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/releases/release-7.1.0.md b/releases/release-7.1.0.md index e3a92048dd07..b93dcc04b55f 100644 --- a/releases/release-7.1.0.md +++ b/releases/release-7.1.0.md @@ -348,8 +348,6 @@ TiDB 7.1.0 为长期支持版本 (Long-Term Support Release, LTS)。 | TiDB | [`performance.force-init-stats`](/tidb-configuration-file.md#force-init-stats-从-v710-版本开始引入) | 新增 | 用于控制 TiDB 启动时是否在统计信息初始化完成后再对外提供服务。 | | TiDB | [`performance.lite-init-stats`](/tidb-configuration-file.md#lite-init-stats-从-v710-版本开始引入) | 新增 | 用于控制 TiDB 启动时是否采用轻量级的统计信息初始化。 | | TiDB | [`log.timeout`](/tidb-configuration-file.md#timeout-从-v710-版本开始引入) | 新增 | 用于控制 TiDB 写日志操作的超时时间,当磁盘故障导致日志无法写入时,该配置可以让 TiDB 进程崩溃而不是卡死。默认值为 `0`,即不设定超时时间。 | -| TiKV | [rocksdb.\[defaultcf\|writecf\|lockcf\].optimize-filters-for-memory](/tikv-configuration-file.md#optimize-filters-for-memory-从-v710-版本开始引入) | 新增 | 控制是否生成能够最小化内存碎片的 Bloom/Ribbon filter。 | -| TiKV | [rocksdb.\[defaultcf\|writecf\|lockcf\].ribbon-filter-above-level](/tikv-configuration-file.md#ribbon-filter-above-level-从-v710-版本开始引入) | 新增 | 控制是否对于大于等于该值的 level 使用 Ribbon filter,对于小于该值的 level,使用非 block-based bloom filter。 | | TiKV | [`split.byte-threshold`](/tikv-configuration-file.md#byte-threshold-从-v50-版本开始引入) | 修改 | 当 [`region-split-size`](/tikv-configuration-file.md#region-split-size) 大于等于 4 GB 时,默认值从 `30MiB` 修改为 `100MiB`。 | | TiKV | [`split.qps-threshold`](/tikv-configuration-file.md#qps-threshold) | 修改 | 当 [`region-split-size`](/tikv-configuration-file.md#region-split-size) 大于等于 4 GB 时,默认值从 `3000` 修改为 `7000`。 | | TiKV | [`split.region-cpu-overload-threshold-ratio`](/tikv-configuration-file.md#region-cpu-overload-threshold-ratio-从-v620-版本开始引入) | 修改 | 当 [`region-split-size`](/tikv-configuration-file.md#region-split-size) 大于等于 4 GB 时,默认值从 `0.25` 修改为 `0.75`。 | diff --git a/tikv-configuration-file.md b/tikv-configuration-file.md index d9880f79d54d..2e6b8bd0b4c5 100644 --- a/tikv-configuration-file.md +++ b/tikv-configuration-file.md @@ -1350,7 +1350,7 @@ rocksdb defaultcf、rocksdb writecf 和 rocksdb lockcf 相关的配置项。 + `writecf` 默认值:`false` + `lockcf` 默认值:`false` -### `optimize-filters-for-memory` 从 v7.1.0 版本开始引入 +### `optimize-filters-for-memory` 从 v7.2.0 版本开始引入 + 控制是否生成能够最小化内存碎片的 Bloom/Ribbon filter。 + 只有当 [`format-version`](#format-version-从-v620-版本开始引入) >= 5 时,该配置项才生效。 @@ -1374,7 +1374,7 @@ rocksdb defaultcf、rocksdb writecf 和 rocksdb lockcf 相关的配置项。 + 开启每个 block 建立 bloom filter 的开关。 + 默认值:false -### `ribbon-filter-above-level` 从 v7.1.0 版本开始引入 +### `ribbon-filter-above-level` 从 v7.2.0 版本开始引入 + 控制是否对于大于等于该值的 level 使用 Ribbon filter,对于小于该值的 level,使用非 block-based bloom filter。当该配置开启时,[`block-based-bloom-filter`](#block-based-bloom-filter) 将被忽略。 + 只有当 [`format-version`](#format-version-从-v620-版本开始引入) >= 5 时,该配置项才生效。 From 23a3fbf903d12a891e00f34e0f823635aad0ffbc Mon Sep 17 00:00:00 2001 From: xixirangrang Date: Mon, 26 Jun 2023 10:14:35 +0800 Subject: [PATCH 203/257] migration: add MyLoader version requirement (#14309) --- migrate-from-tidb-to-mysql.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/migrate-from-tidb-to-mysql.md b/migrate-from-tidb-to-mysql.md index 085f29e65753..6860365aa063 100644 --- a/migrate-from-tidb-to-mysql.md +++ b/migrate-from-tidb-to-mysql.md @@ -109,7 +109,9 @@ summary: 了解如何将数据从 TiDB 集群迁移至与 MySQL 兼容的数据 3. 恢复数据。 - 使用开源工具 MyLoader 导入数据到下游 MySQL。MyLoader 的安装和详细用例参见 [MyDumpler/MyLoader](https://github.com/mydumper/mydumper)。执行以下指令,将 Dumpling 导出的上游全量数据导入到下游 MySQL 实例: + 使用开源工具 MyLoader 导入数据到下游 MySQL。MyLoader 的安装和详细用例参见 [MyDumpler/MyLoader](https://github.com/mydumper/mydumper)。注意需要使用 MyLoader v0.10 或更早版本,否则会导致 MyLoader 无法处理 Dumpling 导出的 metadata 文件。 + + 执行以下指令,将 Dumpling 导出的上游全量数据导入到下游 MySQL 实例: ```shell myloader -h 127.0.0.1 -P 3306 -d ./dumpling_output/ From 6d03b72ef9d7b3da961f6f86bac407c740bb9880 Mon Sep 17 00:00:00 2001 From: fzzf678 <108643977+fzzf678@users.noreply.github.com> Date: Mon, 26 Jun 2023 10:37:06 +0800 Subject: [PATCH 204/257] Add description about check constraint (#14227) --- constraints.md | 83 +++++++++++++++++--- sql-statements/sql-statement-create-table.md | 1 - 2 files changed, 72 insertions(+), 12 deletions(-) diff --git a/constraints.md b/constraints.md index 3d8cb6e79c37..dbe0334fda2f 100644 --- a/constraints.md +++ b/constraints.md @@ -51,20 +51,81 @@ Query OK, 1 row affected (0.03 sec) ## `CHECK` 约束 -TiDB 会解析并忽略 `CHECK` 约束。该行为与 MySQL 5.7 的相兼容。 +`CHECK` 约束用于限制表中某个字段的值必须满足指定条件。当为表添加 `CHECK` 约束后,在插入或者更新表的数据时,TiDB 会检查约束条件是否满足,如果不满足,则会报错。 -示例如下: +TiDB 中 `CHECK` 约束的语法如下,与 MySQL 中一致: ```sql -DROP TABLE IF EXISTS users; -CREATE TABLE users ( - id INT NOT NULL PRIMARY KEY AUTO_INCREMENT, - username VARCHAR(60) NOT NULL, - UNIQUE KEY (username), - CONSTRAINT min_username_length CHECK (CHARACTER_LENGTH(username) >=4) -); -INSERT INTO users (username) VALUES ('a'); -SELECT * FROM users; +[CONSTRAINT [symbol]] CHECK (expr) [[NOT] ENFORCED] +``` + +语法说明: + +- `[]` 中的内容表示可选项。 +- `CONSTRAINT [symbol]` 表示 `CHECK` 约束的名称。 +- `CHECK (expr)` 表示约束条件,其中 `expr` 需要为一个布尔表达式。对于表中的每一行,该表达式的计算结果必须为 `TRUE`、`FALSE` 或 `UNKNOWN` (对于 `NULL` 值) 中的一个。对于某行数据,如果该表达式计算结果为 `FALSE`,则表示违反约束条件。 +- `[NOT] ENFORCED` 表示是否执行约束,可以用于启用或者禁用 `CHECK` 约束。 + +### 添加 `CHECK` 约束 + +在 TiDB 中,你可以在 [`CREATE TABLE`](/sql-statements/sql-statement-create-table.md) 或者 [`ALTER TABLE`](/sql-statements/sql-statement-modify-column.md) 语句中为表添加 `CHECK` 约束。 + +- 在 `CREATE TABLE` 语句中添加 `CHECK` 约束的示例: + + ```sql + CREATE TABLE t(a INT CHECK(a > 10) NOT ENFORCED, b INT, c INT, CONSTRAINT c1 CHECK (b > c)); + ``` + +- 在 `ALTER TABLE` 语句中添加 `CHECK` 约束的示例: + + ```sql + ALTER TABLE t ADD CONSTRAINT CHECK (1 < c); + ``` + +在添加或者启用 `CHECK` 约束时,TiDB 会对表中的存量数据进行校验。如果存在违反约束的数据,添加 `CHECK` 约束操作将失败并且报错。 + +在添加 `CHECK` 约束时,可以指定约束名,也可以不指定约束名。如果不指定约束名,那么 TiDB 会自动生成一个格式为 `_chk_<1, 2, 3...>` 的约束名。 + +### 查看 `CHECK` 约束 + +你可以通过 [`SHOW CREATE TABLE`](/sql-statements/sql-statement-show-create-table.md) 查看表中的约束信息。例如: + +```sql +SHOW CREATE TABLE t; ++-------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| Table | Create Table | ++-------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| t | CREATE TABLE `t` ( + `a` int(11) DEFAULT NULL, + `b` int(11) DEFAULT NULL, + `c` int(11) DEFAULT NULL, +CONSTRAINT `c1` CHECK ((`b` > `c`)), +CONSTRAINT `t_chk_1` CHECK ((`a` > 10)) /*!80016 NOT ENFORCED */, +CONSTRAINT `t_chk_2` CHECK ((1 < `c`)) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin | ++-------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +1 row in set (0.00 sec) +``` + +### 删除 `CHECK` 约束 + +删除 `CHECK` 约束时,你需要指定需要删除的约束名。例如: + +```sql +ALTER TABLE t DROP CONSTRAINT t_chk_1; +``` + +### 启用或禁用 `CHECK` 约束 + +在为表[添加 `CHECK` 约束](#添加-check-约束)的时候,可以指定当插入或者更新数据时 TiDB 是否执行约束检查。 + +- 如果指定了 `NOT ENFORCED`,当插入或者更新数据时,TiDB 不会检查约束条件。 +- 如果未指定 `NOT ENFORCED` 或者指定了 `ENFORCED`,当插入或者更新数据时,TiDB 会检查约束条件。 + +除了在添加约束时候指定 `[NOT] ENFORCED`,你还可以在 `ALTER TABLE` 语句中启用或者禁用 `CHECK` 约束。例如: + +```sql +ALTER TABLE t ALTER CONSTRAINT c1 NOT ENFORCED; ``` ## 唯一约束 diff --git a/sql-statements/sql-statement-create-table.md b/sql-statements/sql-statement-create-table.md index 60589ea29152..316cabcfad86 100644 --- a/sql-statements/sql-statement-create-table.md +++ b/sql-statements/sql-statement-create-table.md @@ -232,7 +232,6 @@ mysql> DESC t1; * `COMMENT` 属性不支持 `WITH PARSER` 选项。 * TiDB 在单个表中默认支持 1017 列,最大可支持 4096 列。InnoDB 中相应的数量限制为 1017 列,MySQL 中的硬限制为 4096 列。详情参阅 [TiDB 使用限制](/tidb-limitations.md)。 * 当前仅支持 Range、Hash 和 Range Columns(单列)类型的分区表,详情参阅[分区表](/partitioned-table.md)。 -* TiDB 会解析并忽略 `CHECK` 约束,与 MySQL 5.7 相兼容。详情参阅 [`CHECK` 约束](/constraints.md#check-约束)。 ## 另请参阅 From e219ed950cbada1966e498c5b610de619e77e979 Mon Sep 17 00:00:00 2001 From: wjHuang Date: Mon, 26 Jun 2023 10:38:34 +0800 Subject: [PATCH 205/257] add document for system variable "tidb_enable_fast_table_check" (#14185) --- system-variables.md | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/system-variables.md b/system-variables.md index eacaeb793fe6..81fcc46556b7 100644 --- a/system-variables.md +++ b/system-variables.md @@ -1527,6 +1527,19 @@ MPP 是 TiFlash 引擎提供的分布式计算框架,允许节点之间的数 - 这个变量用来控制是否启用统计信息快速分析功能。默认值 0 表示不开启。 - 快速分析功能开启后,TiDB 会随机采样约 10000 行的数据来构建统计信息。因此在数据分布不均匀或者数据量比较少的情况下,统计信息的准确度会比较低。这可能导致执行计划不优,比如选错索引。如果可以接受普通 `ANALYZE` 语句的执行时间,则推荐关闭快速分析功能。 +### `tidb_enable_fast_table_check` 从 v7.2.0 版本开始引入 + +> **注意:** +> +> 该功能对[多值索引](/sql-statements/sql-statement-create-index.md#多值索引)和前缀索引不生效。 + +- 作用域:SESSION | GLOBAL +- 是否持久化到集群:是 +- 类型:布尔型 +- 默认值:`ON` +- 这个变量用于控制是否使用基于校验和的方式来快速检查表中数据和索引的一致性。默认值 `ON` 表示该功能默认开启。 +- 开启后,TiDB 执行 [`ADMIN CHECK [TABLE|INDEX]`](/sql-statements/sql-statement-admin-check-table-index.md) 语句的速度更快。 + ### `tidb_enable_foreign_key` 从 v6.3.0 版本开始引入 - 作用域:GLOBAL From becb54b42816535a22c9d3e378d55de3b6b35e62 Mon Sep 17 00:00:00 2001 From: Hangjie Mo Date: Mon, 26 Jun 2023 10:40:05 +0800 Subject: [PATCH 206/257] system-variables: update upper limit for `last_insert_id` (#14278) --- system-variables.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/system-variables.md b/system-variables.md index 81fcc46556b7..1570d925de5f 100644 --- a/system-variables.md +++ b/system-variables.md @@ -481,7 +481,7 @@ mysql> SELECT * FROM t1; - 作用域:SESSION - 类型:整数型 - 默认值:`0` -- 取值范围:`[0, 9223372036854775807]` +- 取值范围:`[0, 18446744073709551615]` - 返回由 `INSERT` 语句产生的最新 `AUTO_INSCRENT` 或者 `AUTO_RANDOM` 值,与 `LAST_INSERT_ID()` 的返回的结果相同。与 MySQL 中的 `last_insert_id` 一致。 ### `last_plan_from_binding` 从 v4.0 版本开始引入 From 252be094f92c836ec97ee619668dca744420c3b5 Mon Sep 17 00:00:00 2001 From: Connor Date: Sun, 25 Jun 2023 20:07:05 -0700 Subject: [PATCH 207/257] resource_control: add runaway queries (#14242) --- error-codes.md | 8 ++ .../information-schema-resource-groups.md | 10 +- mysql-schema.md | 11 +- .../sql-statement-alter-resource-group.md | 50 ++++++-- .../sql-statement-create-resource-group.md | 40 +++++-- .../sql-statement-drop-resource-group.md | 12 +- tidb-resource-control.md | 109 +++++++++++++++++- 7 files changed, 205 insertions(+), 35 deletions(-) diff --git a/error-codes.md b/error-codes.md index 118dde438ed1..54843d25f6a7 100644 --- a/error-codes.md +++ b/error-codes.md @@ -393,6 +393,14 @@ TiDB 兼容 MySQL 的错误码,在大多数情况下,返回和 MySQL 一样 在尝试消耗超过资源组的限制时返回该错误。一般出现该错误,是由于单次事务太大或者并发太多导致,需调整事务大小或减少客户端并发数。 +* Error Number: 8253 + + 查询终止,因为满足 Runaway Queries 的条件。请参考 [Runaway Queries](/tidb-resource-control.md#管理资源消耗超出预期的查询-runaway-queries)。 + +* Error Number: 8254 + + 查询终止,因为被 Runaway Queries 免疫命中。请参考 [Runaway Queries](/tidb-resource-control.md#管理资源消耗超出预期的查询-runaway-queries)。 + * Error Number: 8260 DDL 操作无法被 `ADMIN PAUSE` 暂停运行。 diff --git a/information-schema/information-schema-resource-groups.md b/information-schema/information-schema-resource-groups.md index b1908094d58a..8751a0de4337 100644 --- a/information-schema/information-schema-resource-groups.md +++ b/information-schema/information-schema-resource-groups.md @@ -64,11 +64,11 @@ SELECT * FROM information_schema.resource_groups WHERE NAME = 'rg1'; -- 查看 ``` ```sql -+------+------------+----------+-----------+ -| NAME | RU_PER_SEC | PRIORITY | BURSTABLE | -+------+------------+----------+-----------+ -| rg1 | 1000 | MEDIUM | NO | -+------+------------+----------+-----------+ ++------+------------+----------+-----------+-------------+ +| NAME | RU_PER_SEC | PRIORITY | BURSTABLE | QUERY_LIMIT | ++------+------------+----------+-----------+-------------+ +| rg1 | 1000 | MEDIUM | NO | NULL | ++------+------------+----------+-----------+-------------+ 1 row in set (0.00 sec) ``` diff --git a/mysql-schema.md b/mysql-schema.md index 8308405e00ba..bf0905e3d733 100644 --- a/mysql-schema.md +++ b/mysql-schema.md @@ -56,9 +56,14 @@ aliases: ['/docs-cn/dev/system-tables/system-table-overview/','/docs-cn/dev/refe ## TTL 相关系统表 -* `mysql.tidb_ttl_table_status` 所有 TTL 表的上一次执行与正在执行的 TTL 任务 -* `mysql.tidb_ttl_task` 正在执行的 TTL 子任务 -* `mysql.tidb_ttl_job_history` 过去 90 天内 TTL 任务的执行历史 +* `tidb_ttl_table_status` 所有 TTL 表的上一次执行与正在执行的 TTL 任务 +* `tidb_ttl_task` 正在执行的 TTL 子任务 +* `tidb_ttl_job_history` 过去 90 天内 TTL 任务的执行历史 + +## Runaway Queries 相关系统表 + +* `tidb_runaway_queries` 过去 7 天内所有识别到的 Runaway Queries 的历史记录 +* `tidb_runaway_quarantined_watch` 最近活动的 Runaway Queries 的快速识别规则(包含当前有效规则,也可能还包含近期失效的规则) ## 其它系统表 diff --git a/sql-statements/sql-statement-alter-resource-group.md b/sql-statements/sql-statement-alter-resource-group.md index 75656bfcab1d..ef7012b34600 100644 --- a/sql-statements/sql-statement-alter-resource-group.md +++ b/sql-statements/sql-statement-alter-resource-group.md @@ -28,11 +28,34 @@ DirectResourceGroupOption ::= "RU_PER_SEC" EqOpt stringLit | "PRIORITY" EqOpt ResourceGroupPriorityOption | "BURSTABLE" +| "BURSTABLE" EqOpt Boolean +| "QUERY_LIMIT" EqOpt '(' ResourceGroupRunawayOptionList ')' +| "QUERY_LIMIT" EqOpt '(' ')' +| "QUERY_LIMIT" EqOpt "NULL" ResourceGroupPriorityOption ::= - LOW + LOW | MEDIUM | HIGH + +ResourceGroupRunawayOptionList ::= + DirectResourceGroupRunawayOption +| ResourceGroupRunawayOptionList DirectResourceGroupRunawayOption +| ResourceGroupRunawayOptionList ',' DirectResourceGroupRunawayOption + +DirectResourceGroupRunawayOption ::= + "EXEC_ELAPSED" EqOpt stringLit +| "ACTION" EqOpt ResourceGroupRunawayActionOption +| "WATCH" EqOpt ResourceGroupRunawayWatchOption "DURATION" EqOpt stringLit + +ResourceGroupRunawayWatchOption ::= + EXACT +| SIMILAR + +ResourceGroupRunawayActionOption ::= + DRYRUN +| COOLDOWN +| KILL ``` TiDB 支持以下 `DirectResourceGroupOption`, 其中 [Request Unit (RU)](/tidb-resource-control.md#什么是-request-unit-ru) 是 TiDB 对 CPU、IO 等系统资源统一抽象的单位。 @@ -42,10 +65,12 @@ TiDB 支持以下 `DirectResourceGroupOption`, 其中 [Request Unit (RU)](/tidb- | `RU_PER_SEC` | 每秒 RU 填充的速度 | `RU_PER_SEC = 500` 表示此资源组每秒回填 500 个 RU。 | | `PRIORITY` | 任务在 TiKV 上处理的绝对优先级 | `PRIORITY = HIGH` 表示优先级高。若未指定则默认为 `MEDIUM`。 | | `BURSTABLE` | 允许对应的资源组超出配额后使用空余的系统资源。 | +| `QUERY_LIMIT` | 当查询执行满足该条件时,识别该查询为 Runaway Query 并执行相应的操作 | `QUERY_LIMIT=(EXEC_ELAPSED='60s', ACTION=KILL, WATCH=EXACT DURATION='10m')` 表示当执行时间超过 60 秒后识别为 Runaway Query,对该查询执行终止操作,并在 10 分钟内对同样的 SQL 直接执行终止操作。`QUERY_LIMIT=()` 或 `QUERY_LIMIT=NULL` 则表示不进行 Runaway 控制。具体参数介绍参见[管理资源消耗超出预期的查询 (Runaway Queries)](/tidb-resource-control.md#管理资源消耗超出预期的查询-runaway-queries)。 | > **注意:** > > `ALTER RESOURCE GROUP` 语句只能在全局变量 [`tidb_enable_resource_control`](/system-variables.md#tidb_enable_resource_control-从-v660-版本开始引入) 参数设置为 `ON` 时才能执行。 +> `ALTER RESOURCE GROUP` 语句支持以增量方式修改,未指定的参数保持不变。但其中 `QUERY_LIMIT` 作为一个整体,无法部分修改其中的参数。 ## 示例 @@ -74,18 +99,19 @@ SELECT * FROM information_schema.resource_groups WHERE NAME ='rg1'; ``` ```sql -+------+------------+----------+-----------+ -| NAME | RU_PER_SEC | PRIORITY | BURSTABLE | -+------+------------+----------+-----------+ -| rg1 | 100 | MEDIUM | YES | -+------+------------+----------+-----------+ ++------+------------+----------+-----------+-------------+ +| NAME | RU_PER_SEC | PRIORITY | BURSTABLE | QUERY_LIMIT | ++------+------------+----------+-----------+-------------+ +| rg1 | 100 | MEDIUM | YES | NULL | ++------+------------+----------+-----------+-------------+ 1 rows in set (1.30 sec) ``` ```sql ALTER RESOURCE GROUP rg1 RU_PER_SEC = 200 - PRIORITY = LOW; + PRIORITY = LOW + QUERY_LIMIT = (EXEC_ELAPSED='1s' ACTION=COOLDOWN WATCH=EXACT DURATION '30s'); ``` ```sql @@ -97,11 +123,11 @@ SELECT * FROM information_schema.resource_groups WHERE NAME ='rg1'; ``` ```sql -+------+------------+----------+-----------+ -| NAME | RU_PER_SEC | PRIORITY | BURSTABLE | -+------+------------+----------+-----------+ -| rg1 | 200 | LOW | NO | -+------+------------+----------+-----------+ ++------+------------+----------+-----------+----------------------------------------------------+ +| NAME | RU_PER_SEC | PRIORITY | BURSTABLE | QUERY_LIMIT | ++------+------------+----------+-----------+----------------------------------------------------+ +| rg1 | 200 | LOW | YES | EXEC_ELAPSED=1s, ACTION=COOLDOWN, WATCH=EXACT[30s] | ++------+------------+----------+-----------+----------------------------------------------------+ 1 rows in set (1.30 sec) ``` diff --git a/sql-statements/sql-statement-create-resource-group.md b/sql-statements/sql-statement-create-resource-group.md index 63080f58c75f..87a0bb345e80 100644 --- a/sql-statements/sql-statement-create-resource-group.md +++ b/sql-statements/sql-statement-create-resource-group.md @@ -28,11 +28,34 @@ DirectResourceGroupOption ::= "RU_PER_SEC" EqOpt stringLit | "PRIORITY" EqOpt ResourceGroupPriorityOption | "BURSTABLE" +| "BURSTABLE" EqOpt Boolean +| "QUERY_LIMIT" EqOpt '(' ResourceGroupRunawayOptionList ')' +| "QUERY_LIMIT" EqOpt '(' ')' +| "QUERY_LIMIT" EqOpt "NULL" ResourceGroupPriorityOption ::= LOW | MEDIUM | HIGH + +ResourceGroupRunawayOptionList ::= + DirectResourceGroupRunawayOption +| ResourceGroupRunawayOptionList DirectResourceGroupRunawayOption +| ResourceGroupRunawayOptionList ',' DirectResourceGroupRunawayOption + +DirectResourceGroupRunawayOption ::= + "EXEC_ELAPSED" EqOpt stringLit +| "ACTION" EqOpt ResourceGroupRunawayActionOption +| "WATCH" EqOpt ResourceGroupRunawayWatchOption "DURATION" EqOpt stringLit + +ResourceGroupRunawayWatchOption ::= + EXACT +| SIMILAR + +ResourceGroupRunawayActionOption ::= + DRYRUN +| COOLDOWN +| KILL ``` 资源组的 `ResourceGroupName` 是全局唯一的,不允许重复。 @@ -43,7 +66,8 @@ TiDB 支持以下 `DirectResourceGroupOption`, 其中 [Request Unit (RU)](/tidb- |---------------|--------------|--------------------------------------| | `RU_PER_SEC` | 每秒 RU 填充的速度 | `RU_PER_SEC = 500` 表示此资源组每秒回填 500 个 RU。 | | `PRIORITY` | 任务在 TiKV 上处理的绝对优先级 | `PRIORITY = HIGH` 表示优先级高。若未指定,则默认为 `MEDIUM`。 | -| `BURSTABLE` | 允许对应的资源组超出配额后使用空余的系统资源。 | +| `BURSTABLE` | 允许对应的资源组超出配额后使用空余的系统资源。 | +| `QUERY_LIMIT` | 当查询执行满足该条件时,识别该查询为 Runaway Query 并进行相应的控制 | `QUERY_LIMIT=(EXEC_ELAPSED='60s', ACTION=KILL, WATCH=EXACT DURATION='10m')` 表示当执行时间超过 60 秒后识别为 Runaway Query,对该查询执行终止操作,并在 10 分钟内对同样的 SQL 直接执行终止操作。`QUERY_LIMIT=()` 或 `QUERY_LIMIT=NULL` 则表示不进行 Runaway 控制。具体参数介绍详见[管理资源消耗超出预期的查询 (Runaway Queries)](/tidb-resource-control.md#管理资源消耗超出预期的查询-runaway-queries)。 | > **注意:** > @@ -75,7 +99,7 @@ Query OK, 0 rows affected (0.08 sec) ```sql CREATE RESOURCE GROUP IF NOT EXISTS rg2 - RU_PER_SEC = 200; + RU_PER_SEC = 200 QUERY_LIMIT=(EXEC_ELAPSED='100ms', ACTION=KILL); ``` ```sql @@ -87,12 +111,12 @@ SELECT * FROM information_schema.resource_groups WHERE NAME ='rg1' or NAME = 'rg ``` ```sql -+------+------------+----------+-----------+ -| NAME | RU_PER_SEC | PRIORITY | BURSTABLE | -+------+------------+----------+-----------+ -| rg1 | 100 | HIGH | YES | -| rg2 | 200 | MEDIUM | NO | -+------+------------+----------+-----------+ ++------+------------+----------+-----------+---------------------------------+ +| NAME | RU_PER_SEC | PRIORITY | BURSTABLE | QUERY_LIMIT | ++------+------------+----------+-----------+---------------------------------+ +| rg1 | 100 | HIGH | YES | NULL | +| rg2 | 200 | MEDIUM | NO | EXEC_ELAPSED=100ms, ACTION=KILL | ++------+------------+----------+-----------+---------------------------------+ 2 rows in set (1.30 sec) ``` diff --git a/sql-statements/sql-statement-drop-resource-group.md b/sql-statements/sql-statement-drop-resource-group.md index ed18d671bedd..f52a2e56e52b 100644 --- a/sql-statements/sql-statement-drop-resource-group.md +++ b/sql-statements/sql-statement-drop-resource-group.md @@ -50,11 +50,11 @@ SELECT * FROM information_schema.resource_groups WHERE NAME ='rg1'; ``` ```sql -+------+------------+----------+-----------+ -| NAME | RU_PER_SEC | PRIORITY | BURSTABLE | -+------+------------+----------+-----------+ -| rg1 | 500 | MEDIUM | YES | -+------+------------+----------+-----------+ ++------+------------+----------+-----------+-------------+ +| NAME | RU_PER_SEC | PRIORITY | BURSTABLE | QUERY_LIMIT | ++------+------------+----------+-----------+-------------+ +| rg1 | 500 | MEDIUM | YES | NULL | ++------+------------+----------+-----------+-------------+ 1 row in set (0.01 sec) ``` @@ -82,4 +82,4 @@ MySQL 也支持 [DROP RESOURCE GROUP](https://dev.mysql.com/doc/refman/8.0/en/dr * [ALTER RESOURCE GROUP](/sql-statements/sql-statement-alter-resource-group.md) * [CREATE RESOURCE GROUP](/sql-statements/sql-statement-create-resource-group.md) -* [RU](/tidb-resource-control.md#什么是-request-unit-ru) \ No newline at end of file +* [RU](/tidb-resource-control.md#什么是-request-unit-ru) diff --git a/tidb-resource-control.md b/tidb-resource-control.md index f353f903ab52..5fffb685d9e5 100644 --- a/tidb-resource-control.md +++ b/tidb-resource-control.md @@ -160,6 +160,113 @@ SET RESOURCE GROUP rg1; SELECT /*+ RESOURCE_GROUP(rg1) */ * FROM t limit 10; ``` +### 管理资源消耗超出预期的查询 (Runaway Queries) + +> **警告:** +> +> 该功能目前为实验特性,不建议在生产环境中使用。该功能可能会在未事先通知的情况下发生变化或删除。如果发现 bug,请在 GitHub 上提 [issue](https://github.com/pingcap/tidb/issues) 反馈。 + +Runaway Queries 指那些执行时间或者消耗的资源超出预期的查询。自 v7.2.0 起,TiDB 资源管控引入了对 Runaway Queries 的管理。你可以针对某个资源组设置条件来识别 Runaway Queries,并自动发起应对操作,防止集群资源完全被 Runaway Queries 占用而影响其他正常查询。 + +你可以通过在 [`CREATE RESOURCE GROUP`](/sql-statements/sql-statement-create-resource-group.md) 或者 [`ALTER RESOURCE GROUP`](/sql-statements/sql-statement-alter-resource-group.md) 中配置 `QUERY_LIMIT` 字段,管理资源组的 Runaway Queries。 + +#### `QUERY_LIMIT` 参数说明 + +支持的条件设置: + +- `EXEC_ELAPSED`: 当查询执行的时间超限时,识别为 Runaway Query。 + +支持的应对操作 (`ACTION`): + +- `DRYRUN`:对执行 Query 不做任何操作,仅记录识别的 Runaway Query。主要用于观测设置条件是否合理。 +- `COOLDOWN`:将查询的执行优先级降到最低,查询仍旧会以低优先级继续执行,不占用其他操作的资源。 +- `KILL`:识别到的查询将被自动终止,报错 `Query execution was interrupted, identified as runaway query`。 + +为了避免并发的 Runaway Queries 太多,在被条件识别前就将系统资源耗尽,资源管控引入了一个快速识别的机制。借助子句 `WATCH`,当某一个查询被识别为 Runaway Query 之后,在接下来的一段时间里(通过 `DURATION` 定义) ,当前 TiDB 实例会将匹配到的查询直接标记为 Runaway Query,而不再等待其被条件识别,并按照当前应对操作执行。其中 `KILL` 操作报错 `Quarantined and interrupted because of being in runaway watch list`。 + +`WATCH` 有两种匹配方式: + +- `EXACT` 表示完全相同的 SQL 才会被快速识别 +- `SIMILAR` 表示会忽略字面值 (Literal),通过 Plan Digest 匹配所有模式 (Pattern) 相同的 SQL + +`QUERY_LIMIT` 具体格式如下: + +| 参数 | 含义 | 备注 | +|---------------|--------------|--------------------------------------| +| `EXEC_ELAPSED` | 当查询执行时间超过该值后被识别为 Runaway Query | EXEC_ELAPSED =`60s` 表示查询的执行时间超过 60 秒则被认为是 Runaway Query。 | +| `ACTION` | 当识别到 Runaway Query 时进行的动作 | 可选值有 `DRYRUN`,`COOLDOWN`,`KILL`。 | +| `WATCH` | 快速匹配已经识别到的 Runaway Query,即在一定时间内再碰到相同或相似查询直接进行相应动作 | 可选项,配置例如 `WATCH=SIMILAR DURATION '60s'`、`WATCH=EXACT DURATION '1m'`。 | + +#### 示例 + +1. 创建 `rg1` 资源组,限额是每秒 500 RU,并且定义超过 60 秒为 Runaway Query,并对 Runaway Query 降低优先级执行。 + + ```sql + CREATE RESOURCE GROUP IF NOT EXISTS rg1 RU_PER_SEC = 500 QUERY_LIMIT=(EXEC_ELAPSED='60s', ACTION=COOLDOWN); + ``` + +2. 修改 `rg1` 资源组,对 Runaway Query 直接终止,并且在接下来的 10 分钟里,把相同模式的查询直接标记为 Runaway Query。 + + ```sql + ALTER RESOURCE GROUP rg1 QUERY_LIMIT=(EXEC_ELAPSED='60s', ACTION=KILL, WATCH=SIMILAR DURATION='10m'); + ``` + +3. 修改 `rg1` 资源组,取消 Runaway Queries 检查。 + + ```sql + ALTER RESOURCE GROUP rg1 QUERY_LIMIT=NULL; + ``` + +#### 可观测性 + +可以通过以下系统表获得 Runaway 相关的更多信息: + ++ `mysql.tidb_runaway_queries` 表中包含了过去 7 天内所有识别到的 Runaway Queries 的历史记录。以其中一行为例: + + ```sql + MySQL [(none)]> SELECT * FROM mysql.tidb_runaway_queries LIMIT 1\G; + *************************** 1. row *************************** + resource_group_name: rg1 + time: 2023-06-16 17:40:22 + match_type: identify + action: kill + original_sql: select * from sbtest.sbtest1 + plan_digest: 5b7d445c5756a16f910192ad449c02348656a5e9d2aa61615e6049afbc4a82e + tidb_server: 127.0.0.1:4000 + ``` + + 其中,`match_type` 为该 Runaway Query 的来源,其值如下: + + - `identify` 表示命中条件。 + - `watch` 表示被快速识别机制命中。 + ++ `mysql.tidb_runaway_quarantined_watch` 表中包含了 Runaway Queries 的快速识别规则记录。以其中两行为例: + + ```sql + MySQL [(none)]> SELECT * FROM mysql.tidb_runaway_quarantined_watch LIMIT 2\G; + *************************** 1. row *************************** + resource_group_name: rg1 + start_time: 2023-06-16 17:40:22 + end_time: 2023-06-16 18:10:22 + watch: similar + watch_text: 5b7d445c5756a16f910192ad449c02348656a5e9d2aa61615e6049afbc4a82e + tidb_server: 127.0.0.1:4000 + *************************** 2. row *************************** + resource_group_name: rg1 + start_time: 2023-06-16 17:42:35 + end_time: 2023-06-16 18:12:35 + watch: exact + watch_text: select * from sbtest.sbtest1 + tidb_server: 127.0.0.1:4000 + ``` + + 其中: + + - `start_time` 和 `end_time` 表示该快速识别规则有效的时间范围。 + - `watch` 表示被快速识别机制命中,其值如下: + - `similar` 表示按照 Plan Digest 匹配,此时列 `watch_text` 显示的是 Plan Digest。 + - `exact` 表示按照 SQL 文本匹配,此时列 `watch_text` 显示的是 SQL 文本。 + ## 关闭资源管控特性 1. 执行以下命令关闭资源管控特性: @@ -184,7 +291,7 @@ TiDB Dashboard 中可以查看当前 [`RESOURCE_GROUPS`](/information-schema/inf ## 常见问题 -1. 如果我暂时不想使用资源组对资源进行管控,是否一定要关闭这个特性? +1. 如果我暂时不想使用资源组对资源进行管控,是否一定要关闭这个特性? 不需要。没有指定任何资源组的用户,将被放入系统预定义的 `default` 资源组,而 `default` 资源组默认拥有无限用量。当所有用户都属于 `default` 资源组时,资源分配方式与关闭资源管控时相同。 From 47a3cb4555d307bd31a3b7a32f51152c54949a6b Mon Sep 17 00:00:00 2001 From: Yifan Xu <30385241+xuyifangreeneyes@users.noreply.github.com> Date: Mon, 26 Jun 2023 11:29:35 +0800 Subject: [PATCH 208/257] add system variable tidb_analyze_skip_column_types (#14221) --- statistics.md | 5 +++-- system-variables.md | 54 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 57 insertions(+), 2 deletions(-) diff --git a/statistics.md b/statistics.md index 30491b51cbab..ec4c1ed4f3d2 100644 --- a/statistics.md +++ b/statistics.md @@ -131,7 +131,8 @@ ANALYZE TABLE TableNameList [WITH NUM BUCKETS|TOPN|CMSKETCH DEPTH|CMSKETCH WIDTH > **注意:** > -> 收集部分列的统计信息的功能仅适用于 `tidb_analyze_version = 2` 的情况。 +> - 收集部分列的统计信息的功能仅适用于 [`tidb_analyze_version = 2`](/system-variables.md#tidb_analyze_version-从-v510-版本开始引入) 的情况。 +> - TiDB v7.2.0 引入了系统变量 [`tidb_analyze_skip_column_types`](/system-variables.md#tidb_analyze_skip_column_types-从-v720-版本开始引入),该变量可以控制在执行 `ANALYZE` 命令收集统计信息时,跳过哪些类型的列的统计信息收集。该变量仅适用于 `tidb_analyze_version = 2` 的情况。 - 如果要收集指定列的统计信息,请使用以下语法: @@ -834,4 +835,4 @@ mysql> show warnings; * [DROP STATS](/sql-statements/sql-statement-drop-stats.md) * [LOCK STATS](/sql-statements/sql-statement-lock-stats.md) * [UNLOCK STATS](/sql-statements/sql-statement-unlock-stats.md) -* [SHOW STATS_LOCKED](/sql-statements/sql-statement-show-stats-locked.md) \ No newline at end of file +* [SHOW STATS_LOCKED](/sql-statements/sql-statement-show-stats-locked.md) diff --git a/system-variables.md b/system-variables.md index 1570d925de5f..9a34bb2acaca 100644 --- a/system-variables.md +++ b/system-variables.md @@ -839,6 +839,60 @@ MPP 是 TiFlash 引擎提供的分布式计算框架,允许节点之间的数 - 这个变量用于控制 TiDB 收集统计信息的行为。 - 在 v5.3.0 及之后的版本中,该变量的默认值为 `2`,具体可参照[统计信息简介](/statistics.md)文档。如果从 v5.3.0 之前版本的集群升级至 v5.3.0 及之后的版本,`tidb_analyze_version` 的默认值不发生变化。 +### `tidb_analyze_skip_column_types` 从 v7.2.0 版本开始引入 + +- 作用域:SESSION | GLOBAL +- 是否持久化到集群:是 +- 默认值:"json,blob,mediumblob,longblob" +- 可选值:"json,blob,mediumblob,longblob,text,mediumtext,longtext" +- 这个变量表示在执行 `ANALYZE` 命令收集统计信息时,跳过哪些类型的列的统计信息收集。该变量仅适用于 [`tidb_analyze_version = 2`](#tidb_analyze_version-从-v510-版本开始引入) 的情况。即使使用 `ANALYZE TABLE t COLUMNS c1, ..., cn` 语法指定列,如果指定的列的类型在 `tidb_analyze_skip_column_types` 中,也不会收集该列的统计信息。 + +```sql +mysql> SHOW CREATE TABLE t; ++-------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| Table | Create Table | ++-------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| t | CREATE TABLE `t` ( + `a` int(11) DEFAULT NULL, + `b` varchar(10) DEFAULT NULL, + `c` json DEFAULT NULL, + `d` blob DEFAULT NULL, + `e` longblob DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin | ++-------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +1 row in set (0.00 sec) + +mysql> SELECT @@tidb_analyze_skip_column_types; ++----------------------------------+ +| @@tidb_analyze_skip_column_types | ++----------------------------------+ +| json,blob,mediumblob,longblob | ++----------------------------------+ +1 row in set (0.00 sec) + +mysql> ANALYZE TABLE t; +Query OK, 0 rows affected, 1 warning (0.05 sec) + +mysql> SELECT job_info FROM mysql.analyze_jobs ORDER BY end_time DESC LIMIT 1; ++---------------------------------------------------------------------+ +| job_info | ++---------------------------------------------------------------------+ +| analyze table columns a, b with 256 buckets, 500 topn, 1 samplerate | ++---------------------------------------------------------------------+ +1 row in set (0.00 sec) + +mysql> ANALYZE TABLE t COLUMNS a, c; +Query OK, 0 rows affected, 1 warning (0.04 sec) + +mysql> SELECT job_info FROM mysql.analyze_jobs ORDER BY end_time DESC LIMIT 1; ++------------------------------------------------------------------+ +| job_info | ++------------------------------------------------------------------+ +| analyze table columns a with 256 buckets, 500 topn, 1 samplerate | ++------------------------------------------------------------------+ +1 row in set (0.00 sec) +``` + ### `tidb_auto_analyze_end_time` - 作用域:GLOBAL From 8d1c34e79d365e9f1bc1d15bf006d87bf8f16111 Mon Sep 17 00:00:00 2001 From: Roger Song Date: Mon, 26 Jun 2023 11:52:05 +0800 Subject: [PATCH 209/257] explicitly mention mysql 8.0 in MySQL compatibility (#14196) --- mysql-compatibility.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/mysql-compatibility.md b/mysql-compatibility.md index 08c09fb301c8..a46c6a64f50e 100644 --- a/mysql-compatibility.md +++ b/mysql-compatibility.md @@ -6,7 +6,7 @@ aliases: ['/docs-cn/dev/mysql-compatibility/','/docs-cn/dev/reference/mysql-comp # 与 MySQL 兼容性对比 -TiDB 高度兼容 MySQL 5.7 协议、MySQL 5.7 常用的功能及语法。MySQL 5.7 生态中的系统工具(PHPMyAdmin、Navicat、MySQL Workbench、mysqldump、Mydumper/Myloader)、客户端等均适用于 TiDB。 +TiDB 高度兼容 MySQL 协议,以及 MySQL 5.7 和 MySQL 8.0 常用的功能及语法。MySQL 生态中的系统工具(PHPMyAdmin、Navicat、MySQL Workbench、DBeaver 和[其他工具](/develop/dev-guide-third-party-support.md#gui))、客户端等均适用于 TiDB。 但 TiDB 尚未支持一些 MySQL 功能,可能的原因如下: @@ -46,6 +46,9 @@ TiDB 高度兼容 MySQL 5.7 协议、MySQL 5.7 常用的功能及语法。MySQL * `HANDLER` 语句 * `CREATE TABLESPACE` 语句 * "Session Tracker: 将 GTID 上下文信息添加到 OK 包中" +* 降序索引 [#2519](https://github.com/pingcap/tidb/issues/2519) +* `SKIP LOCKED` 语法 [#18207](https://github.com/pingcap/tidb/issues/18207) +* 横向派生表 [#40328](https://github.com/pingcap/tidb/issues/40328) ## 与 MySQL 有差异的特性详细说明 From 0aded415ae6923e1878e4c5b302c7e33ee4f3284 Mon Sep 17 00:00:00 2001 From: Zhou Kunqin <25057648+time-and-fate@users.noreply.github.com> Date: Mon, 26 Jun 2023 11:58:06 +0800 Subject: [PATCH 210/257] *: add a page and related description for the Optimizer Fix Control (#14187) --- TOC.md | 1 + control-execution-plan.md | 2 +- optimizer-fix-controls.md | 39 +++++++++++++++++++++++++++++++++++++++ system-variables.md | 2 +- 4 files changed, 42 insertions(+), 2 deletions(-) create mode 100644 optimizer-fix-controls.md diff --git a/TOC.md b/TOC.md index ca0fe572b88e..61445a2b60a5 100644 --- a/TOC.md +++ b/TOC.md @@ -263,6 +263,7 @@ - [Optimizer Hints](/optimizer-hints.md) - [执行计划管理](/sql-plan-management.md) - [优化规则及表达式下推的黑名单](/blocklist-control-plan.md) + - [Optimizer Fix Controls](/optimizer-fix-controls.md) - 教程 - [单区域多 AZ 部署](/multi-data-centers-in-one-city-deployment.md) - [双区域多 AZ 部署](/three-data-centers-in-two-cities-deployment.md) diff --git a/control-execution-plan.md b/control-execution-plan.md index bda403c24afd..d55f2a42cd48 100644 --- a/control-execution-plan.md +++ b/control-execution-plan.md @@ -11,4 +11,4 @@ SQL 性能调优的前两个章节介绍了如何理解 TiDB 的执行计划以 - 但是使用 Hint 会侵入性地更改 SQL,在一些场景下并不能简单的插入 Hint。在[执行计划管理](/sql-plan-management.md)中,我们会介绍 TiDB 如何使用另一种语法来非侵入地控制执行计划的生成,同时还会介绍后台自动对执行计划进行演进的手段。该手段可用来减轻诸如版本升级等原因造成的执行计划不稳定和集群性能下降的问题。 - 最后在[优化规则及表达式下推的黑名单](/blocklist-control-plan.md)中,我们会介绍黑名单的使用。 -除以上手段之外,执行计划还会被一部分系统变量所影响。通过在系统级或会话级对变量进行修改,能够控制执行计划的生成。自 v7.1.0 起,TiDB 引入了一个相对特殊的变量 [`tidb_opt_fix_control`](/system-variables.md#tidb_opt_fix_control-从-v710-版本开始引入)。这个变量能够接受多个控制项,用来更细粒度地控制优化器的行为,避免集群升级后优化器行为变化导致的性能回退。 +除以上手段之外,执行计划还会被一部分系统变量所影响。通过在系统级或会话级对变量进行修改,能够控制执行计划的生成。自 v7.1.0 起,TiDB 引入了一个相对特殊的变量 [`tidb_opt_fix_control`](/system-variables.md#tidb_opt_fix_control-从-v710-版本开始引入)。这个变量能够接受多个控制项,用来更细粒度地控制优化器的行为,避免集群升级后优化器行为变化导致的性能回退。详细介绍请参考 [Optimizer Fix Controls](/optimizer-fix-controls.md)。 diff --git a/optimizer-fix-controls.md b/optimizer-fix-controls.md new file mode 100644 index 000000000000..21513eeb2d7e --- /dev/null +++ b/optimizer-fix-controls.md @@ -0,0 +1,39 @@ +--- +title: Optimizer Fix Controls +summary: 了解 Optimizer Fix Controls 以及如何使用 `tidb_opt_fix_control` 细粒度地控制 TiDB 优化器的行为 +--- + +# Optimizer Fix Controls + +随着产品迭代演进,TiDB 优化器的行为会发生变化,进而生成更加合理的执行计划。但在某些特定场景下,新的行为可能会导致非预期结果。例如: + +- 部分行为的效果和场景相关。有的行为改变,能在大多数场景下带来改进,但可能在极少数场景下导致回退。 +- 有时,行为细节的变化和其导致的结果之间的关系十分复杂。即使是对某处行为细节的改进,也可能在整体上导致执行计划回退。 + +因此,TiDB 提供了 Optimizer Fix Controls 功能,允许用户通过设置一系列 Fix 控制 TiDB 优化器的行为细节。本文档介绍了 Optimizer Fix Controls 及其使用方法,并列举了当前 TiDB 支持调整的所有 Fix。 + +## `tidb_opt_fix_control` 介绍 + +从 TiDB v7.1.0 开始,提供了 [`tidb_opt_fix_control`](/system-variables.md#tidb_opt_fix_control-从-v710-版本开始引入) 系统变量来更细粒度地控制优化器的行为。 + +一个 Fix 是用于调整 TiDB 优化器中一处行为的控制项。它以一个数字编号表示,该数字编号对应一个 GitHub Issue,在 Issue 中会有对技术细节的描述。例如 Fix `44262` 对应 [Issue 44262](https://github.com/pingcap/tidb/issues/44262)。 + +`tidb_opt_fix_control` 支持设置多个 Fix,不同 Fix 之间使用逗号 (`,`) 分隔。格式形如 `"<#issue1>:,<#issue2>:,...,<#issueN>:"`,其中 `<#issueN>` 代表 Fix 编号。例如: + +```sql +SET SESSION tidb_opt_fix_control = '44262:ON,44389:ON'; +``` + +## Optimizer Fix Controls 参考 + +### [`44262`](https://github.com/pingcap/tidb/issues/44262) 从 v7.2.0 版本开始引入 + +- 默认值:`OFF` +- 可选值:`ON`、`OFF` +- 是否允许在缺少 [GlobalStats](/statistics.md#动态裁剪模式下的分区表统计信息) 的情况下使用[动态裁剪模式](/partitioned-table.md#动态裁剪模式)访问分区表。 + +### [`44389`](https://github.com/pingcap/tidb/issues/44389) 从 v7.2.0 版本开始引入 + +- 默认值:`OFF` +- 可选值:`ON`、`OFF` +- 对形如 `c = 10 and (a = 'xx' or (a = 'kk' and b = 1))` 的过滤条件,是否尝试为 `IndexRangeScan` 更加完整地构造扫描范围,即 `range`。 diff --git a/system-variables.md b/system-variables.md index 9a34bb2acaca..0a24eca3a0c1 100644 --- a/system-variables.md +++ b/system-variables.md @@ -3004,7 +3004,7 @@ mysql> desc select count(distinct a) from test.t; - 默认值:`""` - 这个变量用来控制优化器的一些内部行为。 - 一部分优化器行为的选择依赖用户场景或 SQL 编写方式。通过设置该变量,你可以更细粒度地控制优化器的行为,并且避免集群升级后优化器行为变化导致的性能回退。 -- 该变量支持设置多个控制项,不同控制项之间使用逗号 (`,`) 分隔。格式形如 `"<#issue1>:,<#issue2>:,...,<#issueN>:"`,其中 `<#issueN>` 代表控制项编号,对应链接 `https://github.com/pingcap/tidb/issues/<#issue>` 对该控制项进行说明,`` 是为该控制项设置的目标值。 +- 详细介绍请参考 [Optimizer Fix Controls](/optimizer-fix-controls.md)。 ### `tidb_opt_force_inline_cte` 从 v6.3.0 版本开始引入 From a6856e90ac7bad582330c19ab8e12a14d3159fb9 Mon Sep 17 00:00:00 2001 From: D3Hunter Date: Mon, 26 Jun 2023 12:07:05 +0800 Subject: [PATCH 211/257] lightning: add doc for send-kv-size (#14176) --- tidb-lightning/tidb-lightning-configuration.md | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/tidb-lightning/tidb-lightning-configuration.md b/tidb-lightning/tidb-lightning-configuration.md index 0689bf66862b..20ae80926d8d 100644 --- a/tidb-lightning/tidb-lightning-configuration.md +++ b/tidb-lightning/tidb-lightning-configuration.md @@ -52,7 +52,7 @@ table-concurrency = 6 # 数据的并发数。默认与逻辑 CPU 的数量相同。 # 混合部署的情况下可以将其大小配置为逻辑 CPU 数的 75%,以限制 CPU 的使用。 -# region-concurrency = +# region-concurrency = # I/O 最大并发数。I/O 并发量太高时,会因硬盘内部缓存频繁被刷新 # 而增加 I/O 等待时间,导致缓存未命中和读取速度降低。 @@ -136,8 +136,13 @@ addr = "172.16.31.10:8287" # 如果版本过低,则会启用 'none' 模式。 # 默认值为 'none'。 # duplicate-resolution = 'none' -# 物理导入模式一次请求中发送的 KV 数量。 +# 物理导入模式下,向 TiKV 发送数据时一次请求中最大 KV 数量。 +# 自 v7.2.0 开始,该参数废弃,设置后不再生效。如果希望调整一次请求中向 TiKV 发送的数据量,请使用 `send-kv-size` 参数。 # send-kv-pairs = 32768 +# 物理导入模式下,向 TiKV 发送数据时一次请求的最大大小。 +# 默认值为 "16K",一般情况下不建议调整该参数。 +# 该参数自 v7.2.0 开始引入。 +# send-kv-size = "16K" # 物理导入模式向 TiKV 发送 KV 时是否启用压缩。目前只支持 Gzip 压缩算法,可填写 "gzip" 或者 "gz"。默认不启用压缩。 # compress-kv-pairs = "" # 物理导入模式本地进行 KV 排序的路径。如果磁盘性能较低(如使用机械盘),建议设置成与 `data-source-dir` 不同的磁盘,这样可有效提升导入性能。 From 2aa1dc790742995650fd237c3fe78907ebec3d64 Mon Sep 17 00:00:00 2001 From: xixirangrang Date: Tue, 27 Jun 2023 10:56:35 +0800 Subject: [PATCH 212/257] sql: correct SELECT statement (#14316) --- read-historical-data.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/read-historical-data.md b/read-historical-data.md index b2f721112099..595d83a60632 100644 --- a/read-historical-data.md +++ b/read-historical-data.md @@ -219,6 +219,6 @@ SET GLOBAL tidb_gc_life_time="60m"; 如果想要恢复历史版本的数据,可以使用以下任意一种方法进行设置: -- 对于简单场景,在设置 `tidb_snapshot` 变量后使用 `SELECT` 语句并复制粘贴输出结果,或者使用 `SELECT ... INTO LOCAL OUTFLE` 语句并使用 `LOAD DATA` 语句来导入数据。 +- 对于简单场景,在设置 `tidb_snapshot` 变量后使用 [`SELECT`](/sql-statements/sql-statement-select.md) 语句并复制粘贴输出结果,或者使用 `SELECT ... INTO OUTFILE` 语句并使用 [`LOAD DATA`](/sql-statements/sql-statement-load-data.md) 语句来导入数据。 - 使用 [Dumpling](/dumpling-overview.md#导出-tidb-的历史数据快照) 导出 TiDB 的历史数据快照。Dumpling 在导出较大的数据集时有较好的性能。 From 0621677e2483456ec7e0ed82e7461bfe109310e7 Mon Sep 17 00:00:00 2001 From: Frank945946 <108602632+Frank945946@users.noreply.github.com> Date: Tue, 27 Jun 2023 12:38:34 +0800 Subject: [PATCH 213/257] lightning: refine some TiDB Lightning docs (#13993) --- dm/dm-open-api.md | 2 + migrate-aurora-to-tidb.md | 183 +++++++++++++-------------- tidb-lightning/tidb-lightning-faq.md | 10 +- 3 files changed, 99 insertions(+), 96 deletions(-) diff --git a/dm/dm-open-api.md b/dm/dm-open-api.md index fee4f3dbe154..fe5396bf59f1 100644 --- a/dm/dm-open-api.md +++ b/dm/dm-open-api.md @@ -28,6 +28,8 @@ TiDB Data Migration (DM) 提供 OpenAPI 功能,你可以通过 OpenAPI 方便 > - DM 提供符合 OpenAPI 3.0.0 标准的 [Spec 文档](https://github.com/pingcap/tiflow/blob/master/dm/openapi/spec/dm.yaml),其中包含了所有 API 的请求参数和返回体,你可自行复制到如 [Swagger Editor](https://editor.swagger.io/) 等工具中在线预览文档。 > > - 部署 DM-master 后,你可访问 `http://{master-addr}/api/v1/docs` 在线预览文档。 +> +> - 配置文件中支持的某些功能在 OpenAPI 中是不支持的,二者的功能没有完全对齐。在生产环境中,建议使用[配置文件](/dm/dm-config-overview.md)。 你可以通过 OpenAPI 完成 DM 集群的如下运维操作: diff --git a/migrate-aurora-to-tidb.md b/migrate-aurora-to-tidb.md index 4b6c428b4ff8..beef1d329203 100644 --- a/migrate-aurora-to-tidb.md +++ b/migrate-aurora-to-tidb.md @@ -8,109 +8,130 @@ aliases: ['/zh/tidb/dev/migrate-from-aurora-using-lightning/','/docs-cn/dev/migr 本文档介绍如何从 Amazon Aurora 迁移数据到 TiDB,迁移过程采用 [DB snapshot](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Aurora.Managing.Backups.html),可以节约大量的空间和时间成本。整个迁移包含两个过程: -- 使用 Lightning 导入全量数据到 TiDB +- 使用 TiDB Lightning 导入全量数据到 TiDB - 使用 DM 持续增量同步到 TiDB(可选) ## 前提条件 -- [安装 Dumpling 和 Lightning](/migration-tools.md)。 +- [安装 Dumpling 和 TiDB Lightning](/migration-tools.md)。如果你要在目标端手动创建相应的表,则无需安装 Dumpling。 - [获取 Dumpling 所需上游数据库权限](/dumpling-overview.md#需要的权限)。 -- [获取 Lightning 所需下游数据库权限](/tidb-lightning/tidb-lightning-faq.md#tidb-lightning-对下游数据库的账号权限要求是怎样的)。 +- [获取 TiDB Lightning 所需下游数据库权限](/tidb-lightning/tidb-lightning-faq.md#tidb-lightning-对下游数据库的账号权限要求是怎样的)。 ## 导入全量数据到 TiDB -### 第 1 步:导出 Aurora 快照文件到 Amazon S3 +### 第 1 步:导出和导入 schema 文件 -1. 在 Aurora 上,执行以下命令,查询并记录当前 binlog 位置: +如果你已经提前手动在目标库创建好了相应的表,则可以跳过本节内容。 - ```sql - mysql> SHOW MASTER STATUS; - ``` +#### 1.1 导出 schema 文件 - 你将得到类似以下的输出,请记录 binlog 名称和位置,供后续步骤使用: +因为 Amazon Aurora 生成的快照文件并不包含建表语句文件,所以你需要使用 Dumpling 自行导出 schema 并使用 TiDB Lightning 在下游创建 schema。 - ``` - +------------------+----------+--------------+------------------+-------------------+ - | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | - +------------------+----------+--------------+------------------+-------------------+ - | mysql-bin.000002 | 52806 | | | | - +------------------+----------+--------------+------------------+-------------------+ - 1 row in set (0.012 sec) - ``` +运行以下命令时,建议使用 `--filter` 参数仅导出所需表的 schema。命令中所用参数描述,请参考 [Dumpling 主要选项表](/dumpling-overview.md#dumpling-主要选项表)。 -2. 导出 Aurora 快照文件。具体方式请参考 Aurora 的官方文档:[Exporting DB snapshot data to Amazon S3](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/USER_ExportSnapshot.html). +```shell +export AWS_ACCESS_KEY_ID=${access_key} +export AWS_SECRET_ACCESS_KEY=${secret_key} +tiup dumpling --host ${host} --port 3306 --user root --password ${password} --filter 'my_db1.table[12],mydb.*' --consistency none --no-data --output 's3://my-bucket/schema-backup' +``` -请注意,上述两步的时间间隔建议不要超过 5 分钟,否则记录的 binlog 位置过旧可能导致增量同步时产生数据冲突。 +记录上面命令中导出的 schema 的 URI,例如 's3://my-bucket/schema-backup',后续导入 schema 时要用到。 -完成上述两步后,你需要准备好以下信息: +为了获取 Amazon S3 的访问权限,可以将该 Amazon S3 的 Secret Access Key 和 Access Key 作为环境变量传入 Dumpling 或 TiDB Lightning。另外,Dumpling 或 TiDB Lightning 也可以通过 `~/.aws/credentials` 读取凭证文件。使用凭证文件可以让这台机器上所有的 Dumpling 或 TiDB Lightning 任务无需再次传入相关 Secret Access Key 和 Access Key。 -- 创建快照点时,Aurora binlog 的名称及位置。 -- 快照文件的 S3 路径,以及具有访问权限的 SecretKey 和 AccessKey。 +#### 1.2 编写用于导入 schema 文件的 TiDB Lightning 配置文件 -### 第 2 步:导出 schema +新建 `tidb-lightning-schema.toml` 文件,将以下内容复制到文件中并替换对应的内容。 -因为 Aurora 生成的快照文件并不包含建表语句文件,所以你需要使用 Dumpling 自行导出 schema 并使用 Lightning 在下游创建 schema。你也可以跳过此步骤,并以手动方式在下游自行创建 schema。 +```toml +[tidb] -运行以下命令,建议使用 `--filter` 参数仅导出所需表的 schema: +# 目标 TiDB 集群信息。 +host = ${host} +port = ${port} +user = "${user_name}" +password = "${password}" +status-port = ${status-port} # TiDB 的“状态端口”,通常为 10080 +pd-addr = "${ip}:${port}" # 集群 PD 的地址,port 通常为 2379 -{{< copyable "shell-regular" >}} +[tikv-importer] +# 采用默认的物理导入模式 ("local")。注意该模式在导入期间下游 TiDB 无法对外提供服务。 +# 关于后端模式更多信息,请参阅:https://docs.pingcap.com/zh/tidb/stable/tidb-lightning-overview +backend = "local" + +# 设置排序的键值对的临时存放地址,目标路径必须是一个空目录,目录空间须大于待导入数据集的大小。 +# 建议设为与 `data-source-dir` 不同的磁盘目录并使用闪存介质,独占 IO 会获得更好的导入性能。 +sorted-kv-dir = "${path}" + +[mydumper] +# 设置从 Amazon Aurora 导出的 schema 文件的地址 +data-source-dir = "s3://my-bucket/schema-backup" +``` + +如果需要在 TiDB 开启 TLS,请参考 [TiDB Lightning 配置参数](/tidb-lightning/tidb-lightning-configuration.md)。 + +#### 1.3 导入 schema 文件 + +使用 TiDB Lightning 导入 schema 到下游的 TiDB。 ```shell -tiup dumpling --host ${host} --port 3306 --user root --password ${password} --filter 'my_db1.table[12],mydb.*' --consistency none --no-data --output 's3://my-bucket/schema-backup' +export AWS_ACCESS_KEY_ID=${access_key} +export AWS_SECRET_ACCESS_KEY=${secret_access_key} +nohup tiup tidb-lightning -config tidb-lightning-schema.toml > nohup.out 2>&1 & ``` -命令中所用参数描述如下。如需更多信息可参考 [Dumpling overview](/dumpling-overview.md)。 +### 第 2 步:导出和导入 Amazon Aurora 快照文件 + +本节介绍如何导出和导入 Amazon Aurora 快照文件。 -|参数 |说明| -|- |-| -|-u 或 --user |Aurora MySQL 数据库的用户| -|-p 或 --password |MySQL 数据库的用户密码| -|-P 或 --port |MySQL 数据库的端口| -|-h 或 --host |MySQL 数据库的 IP 地址| -|-t 或 --thread |导出的线程数| -|-o 或 --output |存储导出文件的目录,支持本地文件路径或[外部存储 URI 格式](/br/backup-and-restore-storages.md)| -|-r 或 --row |单个文件的最大行数| -|-F |指定单个文件的最大大小,单位为 MiB,建议值 256 MiB| -|-B 或 --database |导出指定数据库| -|-T 或 --tables-list |导出指定数据表| -|-d 或 --no-data |不导出数据,仅导出 schema| -|-f 或 --filter |导出能匹配模式的表,不可与 -T 一起使用,语法可参考[table filter](/table-filter.md)| -|--consistency |导出期间的一致性模式,Aurora 只能使用 `none`,即不加锁 dump,不保证一致性| +#### 2.1 导出 Amazon Aurora 快照文件到 Amazon S3 -### 第 3 步:编写 Lightning 配置文件 +1. 获取 Amazon Aurora binlog 的名称及位置以便于后续的增量迁移。在 Amazon Aurora 上,执行 `SHOW MASTER STATUS` 并记录当前 binlog 位置: -根据以下内容创建 `tidb-lightning.toml` 配置文件: + ```sql + SHOW MASTER STATUS; + ``` -{{< copyable "shell-regular" >}} + 你将得到类似以下的输出,请记录 binlog 名称和位置,供后续步骤使用: -```shell -vim tidb-lightning.toml -``` + ``` + +----------------------------+----------+--------------+------------------+-------------------+ + | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | + +----------------------------+----------+--------------+------------------+-------------------+ + | mysql-bin-changelog.018128 | 52806 | | | | + +----------------------------+----------+--------------+------------------+-------------------+ + 1 row in set (0.012 sec) + ``` -{{< copyable "" >}} +2. 导出 Amazon Aurora 快照文件。具体方式请参考 Amazon Aurora 的官方文档:[Exporting DB snapshot data to Amazon S3](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/USER_ExportSnapshot.html)。请注意,执行 `SHOW MASTER STATUS` 命令和导出 Amazon Aurora 快照文件的时间间隔建议不要超过 5 分钟,否则记录的 binlog 位置过旧可能导致增量同步时产生数据冲突。 + +#### 2.2 编写用于导入快照文件的 TiDB Lightning 配置文件 + +新建 `tidb-lightning-data.toml` 文件,将以下内容复制到文件中并替换对应的内容。 ```toml [tidb] -# 目标 TiDB 集群信息. -host = ${host} # 例如:172.16.32.1 -port = ${port} # 例如:4000 -user = "${user_name}" # 例如:"root" -password = "${password}" # 例如:"rootroot" -status-port = ${status-port} # 表结构信息在从 TiDB 的“状态端口”获取例如:10080 -pd-addr = "${ip}:${port}" # 集群 PD 的地址,lightning 通过 PD 获取部分信息,例如 172.16.31.3:2379。当 backend = "local" 时 status-port 和 pd-addr 必须正确填写,否则导入将出现异常。 +# 目标 TiDB 集群信息。 +host = ${host} +port = ${port} +user = "${user_name}" +password = "${password}" +status-port = ${status-port} # TiDB 的“状态端口”,通常为 10080 +pd-addr = "${ip}:${port}" # 集群 PD 的地址,port 通常为 2379 [tikv-importer] -# "local":默认使用该模式,适用于 TB 级以上大数据量,但导入期间下游 TiDB 无法对外提供服务。 -# "tidb":TB 级以下数据量也可以采用`tidb`后端模式,下游 TiDB 可正常提供服务。关于后端模式更多信息请参阅:https://docs.pingcap.com/tidb/stable/tidb-lightning-backends +# 采用默认的物理导入模式 ("local")。注意该模式在导入期间下游 TiDB 无法对外提供服务。 +# 关于后端模式更多信息请参阅:https://docs.pingcap.com/zh/tidb/stable/tidb-lightning-overview backend = "local" -# 设置排序的键值对的临时存放地址,目标路径必须是一个空目录,目录空间须大于待导入数据集的大小,建议设为与 `data-source-dir` 不同的磁盘目录并使用闪存介质,独占 IO 会获得更好的导入性能。 +# 设置排序的键值对的临时存放地址,目标路径必须是一个空目录,目录空间须大于待导入数据集的大小。 +# 建议设为与 `data-source-dir` 不同的磁盘目录并使用闪存介质,独占 IO 会获得更好的导入性能。 sorted-kv-dir = "${path}" [mydumper] -# 快照文件的地址 -data-source-dir = "${s3_path}" # eg: s3://my-bucket/sql-backup +# 设置从 Amazon Aurora 导出的快照文件的地址 +data-source-dir = "s3://my-bucket/sql-backup" [[mydumper.files]] # 解析 parquet 文件所需的表达式 @@ -120,37 +141,25 @@ table = '$2' type = '$3' ``` -如果需要在 TiDB 开启 TLS,请参考 [TiDB Lightning Configuration](/tidb-lightning/tidb-lightning-configuration.md)。 - -### 第 4 步:导入全量数据到 TiDB +如果需要在 TiDB 开启 TLS,请参考 [TiDB Lightning 配置参数](/tidb-lightning/tidb-lightning-configuration.md)。 -1. 使用 Lightning 在下游 TiDB 建表: +#### 2.3 导入全量数据到 TiDB - {{< copyable "shell-regular" >}} - - ```shell - tiup tidb-lightning -config tidb-lightning.toml -d 's3://my-bucket/schema-backup' - ``` - -2. 运行 `tidb-lightning`。如果直接在命令行中启动程序,可能会因为 `SIGHUP` 信号而退出,建议配合 `nohup` 或 `screen` 等工具,如: - - 将有权限访问该 Amazon S3 后端存储的账号的 SecretKey 和 AccessKey 作为环境变量传入 Lightning 节点。同时还支持从 `~/.aws/credentials` 读取凭证文件。 - - {{< copyable "shell-regular" >}} +1. 使用 TiDB Lightning 导入 Aurora Snapshot 的数据到 TiDB。 ```shell export AWS_ACCESS_KEY_ID=${access_key} - export AWS_SECRET_ACCESS_KEY=${secret_key} - nohup tiup tidb-lightning -config tidb-lightning.toml > nohup.out 2>&1 & + export AWS_SECRET_ACCESS_KEY=${secret_access_key} + nohup tiup tidb-lightning -config tidb-lightning-data.toml > nohup.out 2>&1 & ``` -3. 导入开始后,可以采用以下任意方式查看进度: +2. 导入开始后,可以采用以下任意方式查看进度: - 通过 `grep` 日志关键字 `progress` 查看进度,默认 5 分钟更新一次。 - 通过监控面板查看进度,请参考 [TiDB Lightning 监控](/tidb-lightning/monitor-tidb-lightning.md)。 - 通过 Web 页面查看进度,请参考 [Web 界面](/tidb-lightning/tidb-lightning-web-interface.md)。 -4. 导入完毕后,TiDB Lightning 会自动退出。查看 `tidb-lightning.log` 日志末尾是否有 `the whole procedure completed` 信息,如果有,表示导入成功。如果没有,则表示导入遇到了问题,可根据日志中的 error 提示解决遇到的问题。 +3. 导入完毕后,TiDB Lightning 会自动退出。查看 `tidb-lightning.log` 日志末尾是否有 `the whole procedure completed` 信息,如果有,表示导入成功。如果没有,则表示导入遇到了问题,可根据日志中的 error 提示解决遇到的问题。 > **注意:** > @@ -169,8 +178,6 @@ type = '$3' 1. 新建 `source1.yaml` 文件,写入以下内容: - {{< copyable "" >}} - ```yaml # 唯一命名,不可重复。 source-id: "mysql-01" @@ -187,8 +194,6 @@ type = '$3' 2. 在终端中执行下面的命令,使用 `tiup dmctl` 将数据源配置加载到 DM 集群中: - {{< copyable "shell-regular" >}} - ```shell tiup dmctl --master-addr ${advertise-addr} operate-source create source1.yaml ``` @@ -234,7 +239,7 @@ mysql-instances: block-allow-list: "listA" # 引入上面黑白名单配置。 # syncer-config-name: "global" # syncer 配置的名称 meta: # `task-mode` 为 `incremental` 且下游数据库的 `checkpoint` 不存在时 binlog 迁移开始的位置; 如果 checkpoint 存在,则以 `checkpoint` 为准。如果 `meta` 项和下游数据库的 `checkpoint` 都不存在,则从上游当前最新的 binlog 位置开始迁移。 - binlog-name: "mysql-bin.000004" # “Step 1. 导出 Aurora 快照文件到 Amazon S3” 中记录的日志位置,当上游存在主从切换时,必须使用 gtid。 + binlog-name: "mysql-bin.000004" # “Step 1. 导出 Amazon Aurora 快照文件到 Amazon S3” 中记录的日志位置,当上游存在主从切换时,必须使用 gtid。 binlog-pos: 109227 # binlog-gtid: "09bec856-ba95-11ea-850a-58f2b4af5188:1-9" @@ -251,16 +256,12 @@ mysql-instances: 在你启动数据迁移任务之前,建议使用 `check-task` 命令检查配置是否符合 DM 的配置要求,以降低后期报错的概率: -{{< copyable "shell-regular" >}} - ```shell tiup dmctl --master-addr ${advertise-addr} check-task task.yaml ``` 使用 `tiup dmctl` 执行以下命令启动数据迁移任务。 -{{< copyable "shell-regular" >}} - ```shell tiup dmctl --master-addr ${advertise-addr} start-task task.yaml ``` @@ -278,8 +279,6 @@ tiup dmctl --master-addr ${advertise-addr} start-task task.yaml 如需了解 DM 集群中是否存在正在运行的迁移任务及任务状态等信息,可使用 `tiup dmctl` 执行 `query-status` 命令进行查询: -{{< copyable "shell-regular" >}} - ```shell tiup dmctl --master-addr ${advertise-addr} query-status ${task-name} ``` diff --git a/tidb-lightning/tidb-lightning-faq.md b/tidb-lightning/tidb-lightning-faq.md index ef1e97cbd39e..201a058c8c6d 100644 --- a/tidb-lightning/tidb-lightning-faq.md +++ b/tidb-lightning/tidb-lightning-faq.md @@ -79,16 +79,18 @@ ADMIN CHECKSUM TABLE `schema`.`table`; 自 v5.1 起,TiDB Lightning 可以自动识别下游的库和表。如果你使用低于 v5.1 的 TiDB Lightning,需在配置文档中的 `[mydumper]` 部分将 `no-schema` 设置为 `true` 即可。`no-schema=true` 会默认下游已经创建好所需的数据库和表,如果没有创建,会报错。 -## 有些不合法的数据,能否通过关掉严格 SQL 模式 (Strict SQL Mode) 来导入? +## 如何禁止导入不合规的数据? -可以。TiDB Lightning 默认的 [`sql_mode`](https://dev.mysql.com/doc/refman/5.7/en/sql-mode.html) 为 `"STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION"`。 +可以通过开启严格 SQL 模式 (Strict SQL Mode) 来实现。 -这个设置不允许一些非法的数值,例如 `1970-00-00` 这样的日期。可以修改配置文件 `[tidb]` 下的 `sql-mode` 值。 +TiDB Lightning 默认的 [`sql_mode`](https://dev.mysql.com/doc/refman/5.7/en/sql-mode.html) 为 `"ONLY_FULL_GROUP_BY,NO_AUTO_CREATE_USER"`,允许导入某些不合规的数值,例如 `1970-00-00` 这样的日期。 + +如果要禁止导入不合规的数据,需要修改配置文件 `[tidb]` 下的 `sql-mode` 值为 `"STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION"`。 ```toml ... [tidb] -sql-mode = "" +sql-mode = "STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION" ... ``` From dd880a0ad0a37c117478a078a49a852171da4505 Mon Sep 17 00:00:00 2001 From: Aolin Date: Tue, 27 Jun 2023 12:49:05 +0800 Subject: [PATCH 214/257] =?UTF-8?q?tikv:=20update=20the=20default=20value?= =?UTF-8?q?=20of=20compaction-guard-min-output-file-si=E2=80=A6=20(#14308)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tikv-configuration-file.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tikv-configuration-file.md b/tikv-configuration-file.md index 2e6b8bd0b4c5..bed96e1a7289 100644 --- a/tikv-configuration-file.md +++ b/tikv-configuration-file.md @@ -573,7 +573,7 @@ I/O rate limiter 相关的配置项。 ### `retry-interval` -+ 初始化 PD 连接时的重试间隔。 ++ 设置 PD 连接的重试间隔。 + 默认值:`"300ms"` ### `retry-log-every` @@ -1525,7 +1525,7 @@ rocksdb defaultcf、rocksdb writecf 和 rocksdb lockcf 相关的配置项。 ### `compaction-guard-min-output-file-size` + 设置 compaction guard 启用时 SST 文件大小的最小值,防止 SST 文件过小。 -+ 默认值:8MB ++ 默认值:从 v7.2.0 起,默认值从 8MB 变更为 1MB。 + 单位:KB|MB|GB ### `compaction-guard-max-output-file-size` @@ -2284,4 +2284,4 @@ Raft Engine 相关的配置项。 + 默认值: + 当 [`region-split-size`](#region-split-size) 小于 4 GB 时,默认值为 `0.25`。 - + 当 [`region-split-size`](#region-split-size) 大于或等于 4 GB 时,默认值为 `0.75`。 \ No newline at end of file + + 当 [`region-split-size`](#region-split-size) 大于或等于 4 GB 时,默认值为 `0.75`。 From ce042f61ccf52a8923bd66b4dd0185b97a8c3592 Mon Sep 17 00:00:00 2001 From: Frank945946 <108602632+Frank945946@users.noreply.github.com> Date: Tue, 27 Jun 2023 15:49:06 +0800 Subject: [PATCH 215/257] Update dumpling-overview.md (#14327) --- dumpling-overview.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dumpling-overview.md b/dumpling-overview.md index 70d96534e6dd..ff38347cb167 100644 --- a/dumpling-overview.md +++ b/dumpling-overview.md @@ -75,7 +75,7 @@ dumpling -u root -P 4000 -h 127.0.0.1 --filetype sql -t 8 -o /tmp/test -r 200000 以上命令中: - `-h`、`-P`、`-u` 分别代表地址、端口、用户。如果需要密码验证,可以使用 `-p $YOUR_SECRET_PASSWORD` 将密码传给 Dumpling。 -- `-o`(或 `--output`)用于选择存储导出文件的目录,支持本地文件路径或[外部存储 URI 格式](/br/backup-and-restore-storages.md#uri-格式)。 +- `-o`(或 `--output`)用于选择存储导出文件的目录,支持本地文件的绝对路径或[外部存储 URI 格式](/br/backup-and-restore-storages.md#uri-格式)。 - `-t` 用于指定导出的线程数。增加线程数会增加 Dumpling 并发度提高导出速度,但也会加大数据库内存消耗,因此不宜设置过大。一般不超过 64。 - `-r` 用于指定单个文件的最大行数,指定该参数后 Dumpling 会开启表内并发加速导出,同时减少内存使用。当上游为 TiDB 且版本为 v3.0 或更新版本时,设置 `-r` 参数大于 0 表示使用 TiDB region 信息划分表内并发,具体取值不影响划分算法。对上游为 MySQL 且表的主键是 int 的场景,该参数也有表内并发效果。 - `-F` 选项用于指定单个文件的最大大小,单位为 `MiB`,可接受类似 `5GiB` 或 `8KB` 的输入。如果你想使用 TiDB Lightning 将该文件加载到 TiDB 实例中,建议将 `-F` 选项的值保持在 256 MiB 或以下。 @@ -345,7 +345,7 @@ SET GLOBAL tidb_gc_life_time = '10m'; | -s 或--statement-size | 控制 `INSERT` SQL 语句的大小,单位 bytes | | -F 或 --filesize | 将 table 数据划分出来的文件大小,需指明单位(如 `128B`, `64KiB`, `32MiB`, `1.5GiB`) | | --filetype| 导出文件类型(csv/sql) | "sql" | -| -o 或 --output | 导出本地文件路径或[外部存储 URI 格式](/br/backup-and-restore-storages.md#uri-格式) | "./export-${time}" | +| -o 或 --output | 导出本地文件的绝对路径或[外部存储 URI 格式](/br/backup-and-restore-storages.md#uri-格式) | "./export-${time}" | | -S 或 --sql | 根据指定的 sql 导出数据,该选项不支持并发导出 | | --consistency | flush: dump 前用 FTWRL
    snapshot: 通过 TSO 来指定 dump 某个快照时间点的 TiDB 数据
    lock: 对需要 dump 的所有表执行 `lock tables read` 命令
    none: 不加锁 dump,无法保证一致性
    auto: 对 MySQL 使用 --consistency flush;对 TiDB 使用 --consistency snapshot | "auto" | | --snapshot | snapshot tso,只在 consistency=snapshot 下生效 | From e862557a5ed12e902f04f3d93246c815b964bdbb Mon Sep 17 00:00:00 2001 From: Ran Date: Tue, 27 Jun 2023 16:36:20 +0800 Subject: [PATCH 216/257] br: add s3 params that were mistakenly deleted during refactor (#14331) * add s3 params that were mistakenly deleted during refactor Signed-off-by: Ran * Update br/backup-and-restore-storages.md Co-authored-by: xixirangrang --------- Signed-off-by: Ran Co-authored-by: xixirangrang --- br/backup-and-restore-storages.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/br/backup-and-restore-storages.md b/br/backup-and-restore-storages.md index cb319afe9378..b6eaeadcd983 100644 --- a/br/backup-and-restore-storages.md +++ b/br/backup-and-restore-storages.md @@ -55,6 +55,8 @@ BACKUP DATABASE * TO 's3://bucket-name/prefix' SEND_CREDENTIALS_TO_TIKV = FALSE; - `sse`:加密上传的服务端加密算法,可以设置为空、`AES256` 或 `aws:kms` - `sse-kms-key-id`:如果 `sse` 设置为 `aws:kms`,则使用该参数指定 KMS ID - `acl`:上传对象的标准 ACL (Canned ACL),例如 `private`、`authenticated-read` + - `role-arn`:当需要使用特定的 [IAM 角色](https://docs.aws.amazon.com/zh_cn/IAM/latest/UserGuide/id_roles.html)来访问第三方 Amazon S3 的数据时,使用这个参数来指定 IAM 角色的对应 [Amazon Resource Name (ARN)](https://docs.aws.amazon.com/zh_cn/general/latest/gr/aws-arns-and-namespaces.html)(例如 `arn:aws:iam::888888888888:role/my-role`)。关于使用 IAM 角色访问第三方 Amazon S3 数据的场景,请参考 [AWS 相关文档介绍](https://docs.aws.amazon.com/zh_cn/IAM/latest/UserGuide/id_roles_common-scenarios_third-party.html)。 + - `external-id`:当需要使用特定的 [IAM 角色](https://docs.aws.amazon.com/zh_cn/IAM/latest/UserGuide/id_roles.html)来访问第三方 Amazon S3 的数据时,可能需要同时提供正确的[外部 ID](https://docs.aws.amazon.com/zh_cn/IAM/latest/UserGuide/id_roles_create_for-user_externalid.html) 来确保用户有权限代入该 IAM 角色。这个参数用来指定对应的外部 ID,确保成功代入 IAM 角色。外部 ID 可以是任意字符串,并且不是必须的,一般由控制 Amazon S3 数据访问的第三方来指定。如果第三方对于 IAM 角色没有要求指定外部 ID,则可以不需要提供该参数也能顺利代入对应的 IAM 角色,从而访问对应的 Amazon S3 数据。