Skip to content

Commit

Permalink
Global sort documents update (#16665)
Browse files Browse the repository at this point in the history
  • Loading branch information
Benjamin2037 committed Mar 22, 2024
1 parent 0689a9d commit cda6f69
Show file tree
Hide file tree
Showing 3 changed files with 8 additions and 12 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 @@ -25,12 +25,11 @@ summary: TiDB 数据库中 IMPORT INTO 的使用概况。

### `IMPORT INTO ... FROM FILE` 使用限制

- 目前该语句支持导入 10 TiB 以内的数据。
- 目前单个 `IMPORT INTO` 任务支持导入 10 TiB 以内的数据。启用[全局排序](/tidb-global-sort.md)后,单个 `IMPORT INTO` 任务支持导入 40 TiB 以内的数据。
- 在导入完成前会阻塞当前连接,如果需要异步执行,可以添加 `DETACHED` 选项。
- 每个集群上最多同时有 16 个 `IMPORT INTO` 任务(参考 [TiDB 分布式执行框架使用限制](/tidb-distributed-execution-framework.md#使用限制))在运行,当集群没有足够资源或者达到任务数量上限时,新提交的导入任务会排队等待执行。
- 当使用[全局排序](/tidb-global-sort.md)导入数据时,`THREAD` 选项值需要大于或等于 `16`
- 当使用[全局排序](/tidb-global-sort.md)导入数据时,单行数据的总长度不能超过 32 MiB。
- 当使用全局排序导入数据时,如果 TiDB 集群在导入任务尚未完成时被删除了,Amazon S3 上可能会残留用于全局排序的临时数据。该场景需要手动删除这些数据,以免增加 S3 存储成本。
- 未开启 [TiDB 分布式执行框架](/tidb-distributed-execution-framework.md)时创建的所有 `IMPORT INTO` 任务会直接在提交任务的节点上运行,后续即使开启了分布式执行框架,这些任务也不会被调度到其它 TiDB 节点上执行。开启分布式执行框架后,新创建的 `IMPORT INTO` 任务如果导入的是 S3 或 GCS 中的数据,则会自动调度或者 failover 到其它 TiDB 节点执行。

### `IMPORT INTO ... FROM SELECT` 使用限制
Expand Down Expand Up @@ -176,10 +175,6 @@ SET 表达式左侧只能引用 `ColumnNameOrUserVarList` 中没有的列名。
### 全局排序

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

在以下情况中,可能存在较多的 KV range 重叠:
Expand All @@ -188,7 +183,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)全局排序目前支持使用 Amazon S3 作为全局排序存储地址。开启全局排序后,`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 @@ -1453,9 +1453,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-global-sort.md)会使用大量 TiDB 节点的计算与内存资源。对于在线增加索引等同时有用户业务在运行的场景,建议为集群添加新的 TiDB 节点并设置这些 TiDB 节点的 [`tidb_service_scope`](/system-variables.md#tidb_service_scope-从-v740-版本开始引入) 变量为 `"background"`。这样分布式框架就会将任务调度到这些节点上,将工作负载与其他 TiDB 节点隔离,以减少执行后端任务(如 `ADD INDEX` 和 `IMPORT INTO`)对用户业务的影响

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

# TiDB 全局排序

> **Warning:**
> **注意:**
>
> 该功能目前为实验特性,不建议在生产环境中使用。该功能可能会在未事先通知的情况下发生变化或删除。如果发现 bug,请在 GitHub 上提 [issue](https://github.com/pingcap/tidb/issues) 反馈。
> - 目前,全局排序会使用大量 TiDB 节点的计算与内存资源。对于在线增加索引等同时有用户业务在运行的场景,建议为集群添加新的 TiDB 节点并设置这些 TiDB 节点的 [`tidb_service_scope`](/system-variables.md#tidb_service_scope-从-v740-版本开始引入) 变量为 `"background"`。这样分布式框架就会将任务调度到这些节点上,将工作负载与其他 TiDB 节点隔离,以减少执行后端任务(如 `ADD INDEX``IMPORT INTO`)对用户业务的影响。
> - 当需要使用全局排序功能时,为避免 OOM,建议 TiDB 节点的规格至少为 16 核 CPU、32 GiB 内存。
## 功能概览

TiDB 全局排序功能增强了数据导入和 DDL(数据定义语言)操作的稳定性和执行效率。全局排序作为[分布式执行框架](/tidb-distributed-execution-framework.md)中的通用算子,通过分布式执行框架,在云上提供全局排序服务。

全局排序目前仅支持使用 Amazon S3 作为云存储,未来将扩展支持多种共享存储接口,例如 POSIX,实现与不同存储系统的无缝集成。全局排序功能可以灵活地为各种使用场景提供高效且适配的数据排序服务
全局排序目前支持使用 Amazon S3 作为云存储。

## 目标

Expand Down

0 comments on commit cda6f69

Please sign in to comment.