Skip to content
This repository has been archived by the owner on Sep 13, 2022. It is now read-only.

change timeouts-in-tidb.md to reflect gc is self-adaptive #74

Open
wants to merge 4 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -90,6 +90,20 @@ summary: 介绍如何设计数据库中的对象,如索引、字段类型等

- 当使用宽字段类型(如 Text、MediumBlob、MediumText)时,需注意读取并发度,以控制内存使用预防 OOM 。

关于 char 类型的特别说明:
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

能否考虑把「CHAR:仅仅只有单个字符的字段使用 CHAR(1) 类型,例如性别字段。」这一行放在「关于 char 类型的特别说明:」正上方?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

每一行上下都需要空一行

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

能否考虑把「CHAR:仅仅只有单个字符的字段使用 CHAR(1) 类型,例如性别字段。」这一行放在「关于 char 类型的特别说明:」正上方?

1. 新框架 ( new_collations_enabled_on_first_bootstrap)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

是否可以明确下是什么新框架?TiDB 排序规则新框架?


在 4.0 版本之前,TiDB 只提供了旧的排序规则框架,能够在语法上支持的绝大部分 MySQL 排序规则,但语义上所有的排序规则都当成二进制排序规则。4.0 版本中,TiDB 增加了新的排序规则框架用于在语义上支持不同的排序规则,保证字符串比较时严格遵循对应的排序规则。
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

缩进 8 个空格,这里多了一个空格。下同


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 的默认值。
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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 的信息,请参考官网文档:<https://pingcap.com/docs-cn/stable/reference/garbage-collection/overview/>
Expand Down