Skip to content

Commit

Permalink
Global sort documents update (#15885)
Browse files Browse the repository at this point in the history
  • Loading branch information
Benjamin2037 authored Jan 11, 2024
1 parent 14f3137 commit f160225
Show file tree
Hide file tree
Showing 3 changed files with 6 additions and 11 deletions.
9 changes: 2 additions & 7 deletions sql-statements/sql-statement-import-into.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ summary: TiDB 数据库中 IMPORT INTO 的使用概况。

## 使用限制

- 目前该语句支持导入 10 TiB 以内的数据。
- 目前该语句支持导入 10 TiB 以内的数据,启用[全局排序](/tidb-global-sort.md)后能支持 100 TiB 数据导入
- 只支持导入数据到数据库中已有的空表。
- 不支持事务,也无法回滚。在显式事务 (`BEGIN`/`END`) 中执行会报错。
- 在导入完成前会阻塞当前连接,如果需要异步执行,可以添加 `DETACHED` 选项。
Expand All @@ -30,7 +30,6 @@ summary: TiDB 数据库中 IMPORT INTO 的使用概况。
- 一个导入任务只支持导入数据到一张目标表中。如需导入数据到多张目标表,需要在一张目标表导入完成后,再新建一个任务导入下一张目标表。
- TiDB 集群升级期间不支持使用该语句。
- 当使用[全局排序](/tidb-global-sort.md)导入数据时,单行数据的总长度不能超过 32 MiB。
- 当使用全局排序导入数据时,如果 TiDB 集群在导入任务尚未完成时被删除了,Amazon S3 上可能会残留用于全局排序的临时数据。该场景需要手动删除这些数据,以免增加 S3 存储成本。
- 所需导入的数据不能存在主键或非空唯一索引冲突的记录,否则会导致任务失败。
- 对于基于分布式执行框架调度的 `IMPORT INTO` 任务,如该任务已运行,不支持被调度到新的 TiDB 节点上执行。当前在执行导入任务的 TiDB 节点如果重启,该 TiDB 节点不会再执行该导入任务,而是被转移到其他 TiDB 节点继续执行。如果是导入 TiDB 节点本地的数据,任务异常后不会被 failover 到其他 TiDB 节点。
- 已知问题:在 TiDB 节点配置文件中的 PD 地址与当前集群 PD 拓扑不一致时(如曾经缩容过 PD,但没有对应更新 TiDB 配置文件或者更新该文件后未重启 TiDB 节点),执行 `IMPORT INTO` 会失败。
Expand Down Expand Up @@ -152,10 +151,6 @@ SET 表达式左侧只能引用 `ColumnNameOrUserVarList` 中没有的列名。
## 全局排序

> **警告:**
>
> 全局排序为实验特性,不建议在生产环境中使用。
`IMPORT INTO` 会将源数据文件的导入拆分到多个子任务中,各个子任务独立进行编码排序并导入。如果各个子任务编码后的 KV (TiDB 将数据编码为 KV 的方式,参考 [TiDB 数据库的计算](/tidb-computing.md)) range 重叠过多,导入时 TiKV 需要不断地进行 compaction,会降低导入的性能和稳定性。

在以下情况中,可能存在较多的 KV range 重叠:
Expand All @@ -164,7 +159,7 @@ SET 表达式左侧只能引用 `ColumnNameOrUserVarList` 中没有的列名。
- 说明:`IMPORT INTO` 会按数据文件遍历顺序来划分子任务,一般遍历文件按文件名字典序来排列。
- 如果目标表索引较多,或索引列值在数据文件中较分散,那么各个子任务编码后产生的索引 KV 也会存在重叠。

当开启 [TiDB 分布式执行框架](/tidb-distributed-execution-framework.md) 时,可通过 `IMPORT INTO``CLOUD_STORAGE_URI` 参数,或者使用系统变量 [`tidb_cloud_storage_uri`](/system-variables.md#tidb_cloud_storage_uri-从-v740-版本开始引入) 指定编码后的 KV 数据的目标存储地址来开启[全局排序](/tidb-global-sort.md)。注意目前仅支持使用 S3 作为全局排序存储地址。开启全局排序后,`IMPORT INTO` 会将编码后的 KV 数据写入云存储,并在云存储进行全局排序,之后再将全局排序后的索引数据和表数据并行导入到 TiKV,从而避免因 KV 重叠导致的问题,以提升导入的稳定性。
当开启 [TiDB 分布式执行框架](/tidb-distributed-execution-framework.md) 时,可通过 `IMPORT INTO``CLOUD_STORAGE_URI` 参数,或者使用系统变量 [`tidb_cloud_storage_uri`](/system-variables.md#tidb_cloud_storage_uri-从-v740-版本开始引入) 指定编码后的 KV 数据的目标存储地址来开启[全局排序](/tidb-global-sort.md)。注意目前仅支持使用 S3 和 GCS 作为全局排序存储地址。开启全局排序后,`IMPORT INTO` 会将编码后的 KV 数据写入云存储,并在云存储进行全局排序,之后再将全局排序后的索引数据和表数据并行导入到 TiKV,从而避免因 KV 重叠导致的问题,以提升导入的稳定性。

全局排序对内存资源的使用较高,在数据导入开始前,建议先设置 [`tidb_server_memory_limit_gc_trigger`](/system-variables.md#tidb_server_memory_limit_gc_trigger-从-v640-版本开始引入)[`tidb_server_memory_limit`](/system-variables.md#tidb_server_memory_limit-从-v640-版本开始引入) 两个变量,避免频繁触发 golang GC 从而影响导入效率:

Expand Down
4 changes: 2 additions & 2 deletions system-variables.md
Original file line number Diff line number Diff line change
Expand Up @@ -1417,9 +1417,9 @@ mysql> SELECT job_info FROM mysql.analyze_jobs ORDER BY end_time DESC LIMIT 1;

### `tidb_cloud_storage_uri` <span class="version-mark">从 v7.4.0 版本开始引入</span>

> **警告**
> **注意**
>
> 该变量目前为实验特性,不建议在生产环境中使用。该功能可能会在未事先通知的情况下发生变化或删除。如果发现 bug,请在 GitHub 上提 [issue](https://github.com/pingcap/tidb/issues) 反馈。
> 目前全局排序会使用大量 TiDB 节点的计算与内存资源,对于在线增加索引等同时有用户业务在运行的场景,建议用户扩展出新的 TiDB 节点并设置这些 TiDB 节点的 `tidb_service_scope``"background"`,这样分布式框架就会将任务调度到这些节点上,减少执行后端任务对用户业务的影响。

- 作用域:GLOBAL
- 是否持久化到集群:是
Expand Down
4 changes: 2 additions & 2 deletions tidb-global-sort.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,9 @@ summary: 了解 TiDB 全局排序功能的使用场景、限制、使用方法

# TiDB 全局排序

> **Warning:**
> **注意:**
>
> 该功能目前为实验特性,不建议在生产环境中使用。该功能可能会在未事先通知的情况下发生变化或删除。如果发现 bug,请在 GitHub 上提 [issue](https://github.com/pingcap/tidb/issues) 反馈
> 目前全局排序会使用大量 TiDB 节点的计算与内存资源,对于在线增加索引等同时有用户业务在运行的场景,建议用户扩展出新的 TiDB 节点并设置这些 TiDB 节点的 `tidb_service_scope``"background"`,这样分布式框架就会将任务调度到这些节点上,减少执行后端任务对用户业务的影响
## 功能概览

Expand Down

0 comments on commit f160225

Please sign in to comment.