Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Update garbage collection docs #5856

Merged
Merged
Show file tree
Hide file tree
Changes from 19 commits
Commits
Show all changes
29 commits
Select commit Hold shift + click to select a range
9d766ca
Update garbage collection docs #4552
qiancai Mar 26, 2021
d9a7af3
Add a blank line to fix lint errors
qiancai Mar 26, 2021
bcdacbf
Update sql-statement-flashback-table.md
qiancai Mar 26, 2021
64f71b9
Update tidb-troubleshooting-map.md
qiancai Mar 26, 2021
6dbffb8
Update system-variables.md
qiancai Mar 26, 2021
3fb0a78
Update read-historical-data.md
qiancai Mar 26, 2021
1e26924
Update sql-statements/sql-statement-flashback-table.md
qiancai Mar 26, 2021
d546c14
Implement comments from @MyonKeminta
qiancai Mar 26, 2021
14321da
Merge branch 'translate-#4552-Update-garbage-collection-docs' of http…
qiancai Mar 26, 2021
b85868a
Add the version mark span
qiancai Mar 26, 2021
576c15f
Merge remote-tracking branch 'upstream/master' into translate-#4552-U…
qiancai Mar 29, 2021
834ce5e
Implement comments from 3pointer
qiancai Mar 29, 2021
3ae99af
Update br/backup-and-restore-tool.md
qiancai Mar 29, 2021
da31fe5
Update faq/sql-faq.md
qiancai Mar 29, 2021
0bec7f5
Update garbage-collection-configuration.md
qiancai Mar 29, 2021
c896ca5
Update system-variables.md
qiancai Mar 29, 2021
d0c5409
Update system-variables.md
qiancai Mar 29, 2021
a9450a2
Update garbage-collection-configuration.md
qiancai Mar 29, 2021
5c9c083
Update system-variables.md
qiancai Mar 29, 2021
d30a4a0
Add the warning for not recommending PHYSICAL
qiancai Mar 29, 2021
4aa8425
Remove the rule for `TiDB_tikvclient_gc_action_fail` according to the…
qiancai Mar 29, 2021
e520bfb
Update sql-faq.md
qiancai Mar 29, 2021
c54945a
Fixed broken anchors
qiancai Mar 29, 2021
920c1bb
Fixed broken anchors
qiancai Mar 29, 2021
c1a52c5
Fixed the roken anchor
qiancai Mar 29, 2021
c8be132
Fixed broken anchors
qiancai Mar 29, 2021
29a5721
Fix the broken anchor for resolve-locks清理锁
qiancai Mar 29, 2021
5cb4a94
Add a blank line
qiancai Mar 29, 2021
8cec584
Update garbage-collection-overview.md
qiancai Mar 29, 2021
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
4 changes: 2 additions & 2 deletions alert-rules.md
Original file line number Diff line number Diff line change
Expand Up @@ -435,7 +435,7 @@ aliases: ['/docs-cn/dev/alert-rules/','/docs-cn/dev/reference/alert-rules/']

* 处理方法:

1. 执行 `select VARIABLE_VALUE from mysql.tidb where VARIABLE_NAME="tikv_gc_leader_desc"` 来找到 gc leader 对应的 `tidb-server`;
1. 执行 `SELECT VARIABLE_VALUE FROM mysql.tidb WHERE VARIABLE_NAME="tikv_gc_leader_desc"` 来找到 gc leader 对应的 `tidb-server`;
2. 查看该 `tidb-server` 的日志,grep gc_worker tidb.log;
3. 如果发现这段时间一直在 resolve locks(最后一条日志是 `start resolve locks`)或者 delete ranges(最后一条日志是 `start delete {number} ranges`),说明 GC 进程是正常的。否则需要报备开发人员 [[email protected]](mailto:[email protected]) 进行处理。

Expand Down Expand Up @@ -621,7 +621,7 @@ aliases: ['/docs-cn/dev/alert-rules/','/docs-cn/dev/reference/alert-rules/']
* 处理方法:

1. 一般是因为并行 GC 开的太高了,可以适当降低 GC 并行度。你需要先确认 GC 失败是由于服务器繁忙导致的。
qiancai marked this conversation as resolved.
Show resolved Hide resolved
2. 通过执行 `update set VARIABLE_VALUE=”{number}” where VARIABLE_NAME=”tikv_gc_concurrency”` 适当降低并行度
2. 通过修改系统变量 [`tikv_db_concurrency`](/system-variables.md#tidb_gc_concurrency) 的值适当降低并行度

### 警告级别报警项

Expand Down
18 changes: 9 additions & 9 deletions backup-and-restore-using-dumpling-lightning.md
Original file line number Diff line number Diff line change
Expand Up @@ -56,30 +56,30 @@ Could not read data from testSchema.testTable: GC life time is shorter than tran
{{< copyable "sql" >}}

```sql
SELECT * FROM mysql.tidb WHERE VARIABLE_NAME = 'tikv_gc_life_time';
SHOW GLOBAL VARIABLES LIKE 'tidb_gc_life_time';
```

```sql
+-----------------------+------------------------------------------------------------------------------------------------+
| VARIABLE_NAME | VARIABLE_VALUE |
+-----------------------+------------------------------------------------------------------------------------------------+
| tikv_gc_life_time | 10m0s |
+-----------------------+------------------------------------------------------------------------------------------------+
1 rows in set (0.02 sec)
+-------------------+-------+
| Variable_name | Value |
+-------------------+-------+
| tidb_gc_life_time | 10m0s |
+-------------------+-------+
1 row in set (0.03 sec)
```

{{< copyable "sql" >}}

```sql
UPDATE mysql.tidb SET VARIABLE_VALUE = '720h' WHERE VARIABLE_NAME = 'tikv_gc_life_time';
SET GLOBAL tidb_gc_life_time = '720h';
```

2. 执行 `dumpling` 命令后,将 TiDB 集群的 GC 值恢复到第 1 步中的初始值:

{{< copyable "sql" >}}

```sql
UPDATE mysql.tidb SET VARIABLE_VALUE = '10m' WHERE VARIABLE_NAME = 'tikv_gc_life_time';
SET GLOBAL tidb_gc_life_time = '10m';
```

## 向 TiDB 恢复数据
Expand Down
21 changes: 4 additions & 17 deletions br/backup-and-restore-tool.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ aliases: ['/docs-cn/dev/br/backup-and-restore-tool/','/docs-cn/dev/reference/too

# 备份与恢复工具 BR 简介

[BR](https://github.com/pingcap/br) 全称为 Backup & Restore,是 TiDB **分布式备份恢复**的命令行工具,用于对 TiDB 集群进行数据备份和恢复。**BR 只支持在 TiDB v3.1 及以上版本使用。**
[BR](https://github.com/pingcap/br) 全称为 Backup & Restore,是 TiDB **分布式备份恢复**的命令行工具,用于对 TiDB 集群进行数据备份和恢复。

相比 [`dumpling`](/backup-and-restore-using-dumpling-lightning.md),BR 更适合**大数据量**的场景。

Expand Down Expand Up @@ -50,21 +50,15 @@ SST 文件以 `storeID_regionID_regionEpoch_keyHash_cf` 的格式命名。格式
> **注意:**
>
> - 如果没有挂载网盘或者使用其他共享存储,那么 BR 备份的数据会生成在各个 TiKV 节点上。由于 BR 只备份 leader 副本,所以各个节点预留的空间需要根据 leader size 来预估。
> - 同时由于 v4.0 默认使用 leader count 进行平衡,所以会出现 leader size 差别大的问题,导致各个节点备份数据不均衡。
> - 同时由于 TiDB 默认使用 leader count 进行平衡,所以会出现 leader size 差别大的问题,导致各个节点备份数据不均衡。

### 使用限制

下面是使用 BR 进行备份恢复的几条限制:

- BR 只支持在 TiDB v3.1 及以上版本使用。
- BR 恢复到 TiCDC / Drainer 的上游集群时,恢复数据无法由 TiCDC / Drainer 同步到下游。
- BR 只支持在 `new_collations_enabled_on_first_bootstrap` [开关值](/character-set-and-collation.md#排序规则支持)相同的集群之间进行操作。这是因为 BR 仅备份 KV 数据。如果备份集群和恢复集群采用不同的排序规则,数据校验会不通过。所以恢复集群时,你需要确保 `select VARIABLE_VALUE from mysql.tidb where VARIABLE_NAME='new_collation_enabled';` 语句的开关值查询结果与备份时的查询结果相一致,才可以进行恢复。

- 对于 v3.1 集群,TiDB 尚未支持 new collation,因此可以认为 new collation 未打开
- 对于 v4.0 集群,请通过 `SELECT VARIABLE_VALUE FROM mysql.tidb WHERE VARIABLE_NAME='new_collation_enabled';` 查看 new collation 是否打开。

例如,数据备份在 v3.1 集群。如果恢复到 v4.0 集群中,查询恢复集群的 `new_collation_enabled` 的值为 `true`,则说明创建恢复集群时打开了 new collation 支持的开关。此时恢复数据,可能会出错。

## 兼容性

BR 和 TiDB 集群的兼容性问题分为以下两方面:
Expand Down Expand Up @@ -122,18 +116,11 @@ BR 内置版本会在执行备份和恢复操作前,对 TiDB 集群版本和

#### 通过 SQL 语句

在 v4.0.2 及以上版本的 TiDB 中,支持直接通过 SQL 语句进行备份恢复,具体使用示例见:

- [Backup 语法](/sql-statements/sql-statement-backup.md#backup)
- [Restore 语法](/sql-statements/sql-statement-restore.md#restore)
TiDB 支持使用 SQL 语句 [`BACKUP`](/sql-statements/sql-statement-backup.md#backup) 和 [`RESTORE`](/sql-statements/sql-statement-restore.md#restore) 进行备份恢复。如果要查看备份恢复的进度,你可以使用 [`SHOW BACKUPS|RESTORES`](/sql-statements/sql-statement-show-backups.md) 语句。

#### 通过命令行工具

在 v3.1 以上的 TiDB 版本中,支持通过命令行工具进行备份恢复。

首先需要下载一个 BR 工具的二进制包,详见[下载链接](/download-ecosystem-tools.md#备份和恢复-br-工具)。

通过命令行工具进行备份恢复的具体操作见[使用备份与恢复工具 BR](/br/use-br-command-line-tool.md)。
TiDB 支持使用 BR 命令行工具进行备份恢复(需[手动下载](/download-ecosystem-tools.md#备份和恢复-br-工具))。关于 BR 命令行工具的具体使用方法,请参阅[使用备份与恢复工具 BR](/br/use-br-command-line-tool.md)。

#### 在 Kubernetes 环境下

Expand Down
22 changes: 4 additions & 18 deletions br/backup-and-restore-use-cases.md
Original file line number Diff line number Diff line change
Expand Up @@ -78,26 +78,12 @@ BR 可以直接将命令下发到 TiKV 集群来执行备份和恢复,不依

### 备份前的准备工作

如果你使用的是 TiDB v4.0.8 及以上版本,相应版本的 BR 工具已支持自适应 GC。你只需要将 `backupTS` 注册到 PD 的 `safePoint`,保证 `safePoint` 在备份期间不会向前移动,即可避免手动设置 GC
关于 `br backup` 命令的具体使用方法,参见[使用备份与恢复工具 BR](/br/use-br-command-line-tool.md)

如果你使用的是 TiDB v4.0.7 及以下版本,则需要在 BR 备份前后,按照以下步骤手动设置 GC
运行 `br backup` 命令前,请确保以下条件

1. 运行 [`br backup` 命令](/br/use-br-command-line-tool.md#br-命令行描述)前,查询 TiDB 集群的 [`tikv_gc_life_time`](/garbage-collection-configuration.md#tikv_gc_life_time) 配置项的值,并使用 MySQL 客户端将该项调整至合适的值,确保备份期间不会发生 [Garbage Collection](/garbage-collection-overview.md) (GC)。

{{< copyable "sql" >}}

```sql
SELECT * FROM mysql.tidb WHERE VARIABLE_NAME = 'tikv_gc_life_time';
UPDATE mysql.tidb SET VARIABLE_VALUE = '720h' WHERE VARIABLE_NAME = 'tikv_gc_life_time';
```

2. 在备份完成后,将该参数调回原来的值。

{{< copyable "sql" >}}

```sql
UPDATE mysql.tidb SET VARIABLE_VALUE = '10m' WHERE VARIABLE_NAME = 'tikv_gc_life_time';
```
1. TiDB 集群中没有正在运行中的 DDL。
2. 用于创建备份的存储设备有足够的空间。

### 恢复前的准备工作

Expand Down
13 changes: 0 additions & 13 deletions br/use-br-command-line-tool.md
Original file line number Diff line number Diff line change
Expand Up @@ -63,19 +63,6 @@ BR 由多层命令组成。目前,BR 包含 `backup`、`restore` 和 `version`

使用 `br backup` 命令来备份集群数据。可选择添加 `full` 或 `table` 子命令来指定备份的范围:全部集群数据或单张表的数据。

如果 BR 的版本低于 v4.0.8,而且备份时间可能超过设定的 [`tikv_gc_life_time`](/garbage-collection-configuration.md#tikv_gc_life_time)(默认 `10m0s`,即表示 10 分钟),需要手动将该参数调大。

例如,将 `tikv_gc_life_time` 调整为 `720h`:

{{< copyable "sql" >}}

```sql
mysql -h${TiDBIP} -P4000 -u${TIDB_USER} ${password_str} -Nse \
"update mysql.tidb set variable_value='720h' where variable_name='tikv_gc_life_time'";
```

自 v4.0.8 起 BR 已经支持自适应 GC,无需手动调整 `tikv_gc_life_time`。

### 备份全部集群数据

要备份全部集群数据,可使用 `br backup full` 命令。该命令的使用帮助可以通过 `br backup full -h` 或 `br backup full --help` 来获取。
Expand Down
4 changes: 2 additions & 2 deletions dumpling-overview.md
Original file line number Diff line number Diff line change
Expand Up @@ -303,15 +303,15 @@ Dumpling 导出 TiDB 较大单表时,可能会因为导出数据过大导致 T
{{< copyable "sql" >}}

```sql
update mysql.tidb set VARIABLE_VALUE = '720h' where VARIABLE_NAME = 'tikv_gc_life_time';
SET GLOBAL tidb_gc_life_time = '720h';
```

在操作结束之后,再将 GC 时间调回原样(默认是 `10m`):

{{< copyable "sql" >}}

```sql
update mysql.tidb set VARIABLE_VALUE = '10m' where VARIABLE_NAME = 'tikv_gc_life_time';
SET GLOBAL tidb_gc_life_time = '10m';
```

最后,所有的导出数据都可以用 [TiDB Lightning](/tidb-lightning/tidb-lightning-backends.md) 导入回 TiDB。
Expand Down
12 changes: 4 additions & 8 deletions error-codes.md
Original file line number Diff line number Diff line change
Expand Up @@ -119,7 +119,7 @@ TiDB 兼容 MySQL 的错误码,在大多数情况下,返回和 MySQL 一样

* Error Number: 8048

设置了不支持的隔离级别,如果是使用第三方工具或框架等无法修改代码进行适配的情况,可以考虑通过 `tidb_skip_isolation_level_check` 来绕过这一检查。
设置了不支持的隔离级别,如果是使用第三方工具或框架等无法修改代码进行适配的情况,可以考虑通过 [`tidb_skip_isolation_level_check`](/system-variables.md#tidb_skip_isolation_level_check) 来绕过这一检查。

{{< copyable "sql" >}}

Expand All @@ -141,13 +141,9 @@ TiDB 兼容 MySQL 的错误码,在大多数情况下,返回和 MySQL 一样

* Error Number: 8055

当前快照过旧,数据可能已经被 GC。可以调大 `tikv_gc_life_time` 的值来避免该问题。新版本的 TiDB 会自动为长时间运行的事务保留数据,一般不会遇到该错误。有关 GC 的介绍和配置可以参考 [GC 机制简介](/garbage-collection-overview.md)和 [GC 配置](/garbage-collection-configuration.md)文档。

{{< copyable "sql" >}}

```sql
update mysql.tidb set VARIABLE_VALUE="24h" where VARIABLE_NAME="tikv_gc_life_time";
```
当前快照过旧,数据可能已经被 GC。可以调大 [`tidb_gc_life_time`](/system-variables.md#tidb_gc_life_time) 的值来避免该问题。从 TiDB v4.0.8 版本起, TiDB 会自动为长时间运行的事务保留数据,一般不会遇到该错误。

有关 GC 的介绍和配置可以参考 [GC 机制简介](/garbage-collection-overview.md)和 [GC 配置](/garbage-collection-configuration.md)文档。

* Error Number: 8059

Expand Down
9 changes: 4 additions & 5 deletions faq/migration-tidb-faq.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,10 @@ TiDB 支持绝大多数 MySQL 语法,一般不需要修改代码。

### 如何导出 TiDB 数据?

TiDB 目前暂时不支持 `select into outfile`,可以通过以下方式导出 TiDB 数据:参考 [MySQL 使用 mysqldump 导出某个表的部分数据](https://blog.csdn.net/xin_yu_xin/article/details/7574662),使用 mysqldump 加 where 条件导出,使用 MySQL client 将 select 的结果输出到一个文件。
你可以通过以下方式导出 TiDB 数据:

- 参考 [MySQL 使用 mysqldump 导出某个表的部分数据](https://blog.csdn.net/xin_yu_xin/article/details/7574662),使用 mysqldump 加 where 条件导出。
- 使用 MySQL client 将 select 的结果输出到一个文件。

### 如何从 DB2、Oracle 数据库迁移到 TiDB?

Expand Down Expand Up @@ -117,7 +120,3 @@ DELETE,TRUNCATE 和 DROP 都不会立即释放空间。对于 TRUNCATE 和 DRO

- 目前已开发分布式导入工具 [TiDB Lightning](/tidb-lightning/tidb-lightning-overview.md),需要注意的是数据导入过程中为了性能考虑,不会执行完整的事务流程,所以没办法保证导入过程中正在导入的数据的 ACID 约束,只能保证整个导入过程结束以后导入数据的 ACID 约束。因此适用场景主要为新数据的导入(比如新的表或者新的索引),或者是全量的备份恢复(先 Truncate 原表再导入)。
- TiDB 的数据加载与磁盘以及整体集群状态相关,加载数据时应关注该主机的磁盘利用率,TiClient Error/Backoff/Thread CPU 等相关 metric,可以分析相应瓶颈。

### 对数据做删除操作之后,空间回收比较慢,如何处理?

可以设置并行 GC,加快对空间的回收速度。默认并发为 1,最大可调整为 tikv 实例数量的 50%。可使用 `update mysql.tidb set VARIABLE_VALUE="3" where VARIABLE_NAME="tikv_gc_concurrency";` 命令来调整。
3 changes: 2 additions & 1 deletion faq/sql-faq.md
Original file line number Diff line number Diff line change
Expand Up @@ -131,7 +131,8 @@ DELETE,TRUNCATE 和 DROP 都不会立即释放空间。对于 TRUNCATE 和 DRO

## 对数据做删除操作之后,空间回收比较慢,如何处理?

可以设置并行 GC,加快对空间的回收速度。默认并发为 1,最大可调整为 TiKV 实例数量的 50%。可使用 `update mysql.tidb set VARIABLE_VALUE="3" where VARIABLE_NAME="tikv_gc_concurrency";` 命令来调整。
TiDB 采用了多版本并发控制 (MVCC),为了使并发事务能查看到早期版本的数据,删除数据不会立即回收空间,而是推迟一段时间后再进行垃圾回收 (GC)。你可以通过修改系统变量 [`tidb_gc_life_time`](/system-variables.md#tidb_gc_life_time)的值(默认值为 `10m0s`)配置历史数据的保留时限。


## `SHOW PROCESSLIST` 是否显示系统进程号?

Expand Down
4 changes: 2 additions & 2 deletions faq/tidb-faq.md
Original file line number Diff line number Diff line change
Expand Up @@ -127,12 +127,12 @@ TiKV 操作繁忙,一般出现在数据库负载比较高时,请检查 TiKV

#### 3.1.7 ERROR 9006 (HY000) : GC life time is shorter than transaction duration

`GC Life Time` 间隔时间过短,长事务本应读到的数据可能被清理了,可使用如下命令增加 `GC Life Time`
`GC Life Time` 间隔时间过短,长事务本应读到的数据可能被清理了。你可以使用如下命令修改 [`tidb_gc_life_time`](/system-variables.md#tidb_gc_life_time) 的值

{{< copyable "sql" >}}

```sql
update mysql.tidb set variable_value='30m' where variable_name='tikv_gc_life_time';
SET GLOBAL tidb_gc_life_time = '30m';
```

其中 30m 代表仅清理 30 分钟前的数据,这可能会额外占用一定的存储空间。
Expand Down
Loading