From 304b9dbf9457f70c92ac2e8933cd714d49079a9e Mon Sep 17 00:00:00 2001 From: jinwhu Date: Mon, 10 Jan 2022 17:01:18 +0800 Subject: [PATCH 1/3] char_padding --- .../database-object-design.md | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/zh/tidb-database-development-specification/database-object-design.md b/zh/tidb-database-development-specification/database-object-design.md index ceab3a9..17d8473 100644 --- a/zh/tidb-database-development-specification/database-object-design.md +++ b/zh/tidb-database-development-specification/database-object-design.md @@ -90,6 +90,20 @@ summary: 介绍如何设计数据库中的对象,如索引、字段类型等 - 当使用宽字段类型(如 Text、MediumBlob、MediumText)时,需注意读取并发度,以控制内存使用预防 OOM 。 + 关于 char 类型的特别说明: + 1. 新框架 ( new_collations_enabled_on_first_bootstrap) + + 在 4.0 版本之前,TiDB 只提供了旧的排序规则框架,能够在语法上支持的绝大部分 MySQL 排序规则,但语义上所有的排序规则都当成二进制排序规则。4.0 版本中,TiDB 增加了新的排序规则框架用于在语义上支持不同的排序规则,保证字符串比较时严格遵循对应的排序规则。 + + 2. 定长字符串的存储结果自动补全功能: + + 在新旧框架下都不支持:即:一个字段 char(5) ,假设其显式写入是 'ab', 如果希望存储结果在 TiDB 上得到形如 Oracle或者 MySQL 的自动补全 'ab+3个空格补全'的形式,目前在新旧框架下都是不支持的。 + + 3. 定长字符串的查询的 Padding 功能: + + 只有在新框架下支持,即:一个字段 char(5) ,显式写入是 'ab ', 底层存储只能是'ab',而不是自动补齐的 'ab ' 形式。 + 并且只有在新框架下,可以按照 'ab '的条件找到这一行数据。 + ## 3. 字段默认值 1. 在一个数据类型描述中的 DEFAULT value 段描述了一个列的默认值。这个默认值必须是常量,不可以是一个函数或者是表达式。但是对于时间类型,可以例外的使用NOW、CURRENT_TIMESTAMP、LOCALTIME、LOCALTIMESTAMP 等函数作为 DATETIME 或者 TIMESTAMP 的默认值。 From e791ccf796a98b39e2dbfdc65934d8b812b0bb7d Mon Sep 17 00:00:00 2001 From: jinwhu <88138777+jinwhu@users.noreply.github.com> Date: Mon, 14 Feb 2022 16:03:03 +0800 Subject: [PATCH 2/3] Update timeouts-in-tidb.md --- .../timeouts-in-tidb.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/zh/tidb-database-development-specification/timeouts-in-tidb.md b/zh/tidb-database-development-specification/timeouts-in-tidb.md index 8e08cc3..749e9bd 100644 --- a/zh/tidb-database-development-specification/timeouts-in-tidb.md +++ b/zh/tidb-database-development-specification/timeouts-in-tidb.md @@ -9,9 +9,11 @@ summary: 介绍 TiDB 中的各种超时设置和使用方式。 TiDB 的事务的实现采用了 MVCC(多版本并发控制)机制,当新写入的数据覆盖旧的数据时,旧的数据不会被替换掉,而是与新写入的数据同时保留,并以时间戳来区分版本。TiDB 通过定期 GC 的机制来清理不再需要的旧数据。 -默认配置下 TiDB 可以保障每个 MVCC 版本(一致性快照)保存 10 分钟,读取时间超过 10 分钟的事务,会收到报错 `GC life time is shorter than transaction duration` +默认配置下 TiDB 可以保障每个 MVCC 版本(一致性快照)保存 10 分钟。、 +在 TiDB V4.0 之前,如果事务的读取时间超过 10 分钟,会收到报错 `GC life time is shorter than transaction duration` ; +在 TiDB V4.0 之后,垃圾回收 (GC) 不会影响到正在执行的事务,因为 GC 会自适应事务的长度,也即事务会阻止 GC 推进。 -当用户确信自己需要更长的读取时间时,比如在使用了 Mydumper 做全量备份的场景中(Mydumper 备份的是一致性的快照),可以通过调整 TiDB 中 +另外,在 TiDB 4.0之前,当用户确信自己需要更长的读取时间时,比如在使用了 Mydumper 做全量备份的场景中(Mydumper 备份的是一致性的快照),可以通过调整 TiDB 中 `mysql.tidb` 表中的 `tikv_gc_life_time` 的值来调大 MVCC 版本保留时间,需要注意的是 tikv_gc_life_time 的配置是立刻影响全局的,调大它会为当前所有存在的快照增加生命时长,调小它会立即缩短所有快照的生命时长。过多的 MVCC 版本会拖慢 TiKV 的处理效率,在使用 Mydumper 做完全量备份后需要及时把 tikv_gc_life_time 调整回之前的设置。 更多关于 GC 的信息,请参考官网文档: From 3217fba4747bca5d5478b2da1e653a0c6c899226 Mon Sep 17 00:00:00 2001 From: jinwhu <88138777+jinwhu@users.noreply.github.com> Date: Mon, 14 Feb 2022 16:03:26 +0800 Subject: [PATCH 3/3] Update timeouts-in-tidb.md --- zh/tidb-database-development-specification/timeouts-in-tidb.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/zh/tidb-database-development-specification/timeouts-in-tidb.md b/zh/tidb-database-development-specification/timeouts-in-tidb.md index 749e9bd..3a22ba6 100644 --- a/zh/tidb-database-development-specification/timeouts-in-tidb.md +++ b/zh/tidb-database-development-specification/timeouts-in-tidb.md @@ -9,7 +9,7 @@ summary: 介绍 TiDB 中的各种超时设置和使用方式。 TiDB 的事务的实现采用了 MVCC(多版本并发控制)机制,当新写入的数据覆盖旧的数据时,旧的数据不会被替换掉,而是与新写入的数据同时保留,并以时间戳来区分版本。TiDB 通过定期 GC 的机制来清理不再需要的旧数据。 -默认配置下 TiDB 可以保障每个 MVCC 版本(一致性快照)保存 10 分钟。、 +默认配置下 TiDB 可以保障每个 MVCC 版本(一致性快照)保存 10 分钟。 在 TiDB V4.0 之前,如果事务的读取时间超过 10 分钟,会收到报错 `GC life time is shorter than transaction duration` ; 在 TiDB V4.0 之后,垃圾回收 (GC) 不会影响到正在执行的事务,因为 GC 会自适应事务的长度,也即事务会阻止 GC 推进。