diff --git a/sql-statements/sql-statement-import-into.md b/sql-statements/sql-statement-import-into.md index 6697737943e4..e5cb27719bcd 100644 --- a/sql-statements/sql-statement-import-into.md +++ b/sql-statements/sql-statement-import-into.md @@ -18,7 +18,7 @@ summary: TiDB 数据库中 IMPORT INTO 的使用概况。 ## 使用限制 -- 目前该语句支持导入 10 TiB 以内的数据。 +- 目前该语句支持导入 10 TiB 以内的数据,启用[全局排序](/tidb-global-sort.md)后能支持 100 TiB 数据导入。 - 只支持导入数据到数据库中已有的空表。 - 不支持事务,也无法回滚。在显式事务 (`BEGIN`/`END`) 中执行会报错。 - 在导入完成前会阻塞当前连接,如果需要异步执行,可以添加 `DETACHED` 选项。 @@ -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` 会失败。 @@ -152,10 +151,6 @@ SET 表达式左侧只能引用 `ColumnNameOrUserVarList` 中没有的列名。 ## 全局排序 -> **警告:** -> -> 全局排序为实验特性,不建议在生产环境中使用。 - `IMPORT INTO` 会将源数据文件的导入拆分到多个子任务中,各个子任务独立进行编码排序并导入。如果各个子任务编码后的 KV (TiDB 将数据编码为 KV 的方式,参考 [TiDB 数据库的计算](/tidb-computing.md)) range 重叠过多,导入时 TiKV 需要不断地进行 compaction,会降低导入的性能和稳定性。 在以下情况中,可能存在较多的 KV range 重叠: @@ -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 从而影响导入效率: diff --git a/system-variables.md b/system-variables.md index 9722a4d32455..f637d42c2e8a 100644 --- a/system-variables.md +++ b/system-variables.md @@ -1417,9 +1417,9 @@ mysql> SELECT job_info FROM mysql.analyze_jobs ORDER BY end_time DESC LIMIT 1; ### `tidb_cloud_storage_uri` 从 v7.4.0 版本开始引入 -> **警告:** +> **注意:** > -> 该变量目前为实验特性,不建议在生产环境中使用。该功能可能会在未事先通知的情况下发生变化或删除。如果发现 bug,请在 GitHub 上提 [issue](https://github.com/pingcap/tidb/issues) 反馈。 +> 目前全局排序会使用大量 TiDB 节点的计算与内存资源,对于在线增加索引等同时有用户业务在运行的场景,建议用户扩展出新的 TiDB 节点并设置这些 TiDB 节点的 `tidb_service_scope` 为 `"background"`,这样分布式框架就会将任务调度到这些节点上,减少执行后端任务对用户业务的影响。 - 作用域:GLOBAL - 是否持久化到集群:是 diff --git a/tidb-global-sort.md b/tidb-global-sort.md index 8130faf3597b..e5a70e2a6cce 100644 --- a/tidb-global-sort.md +++ b/tidb-global-sort.md @@ -5,9 +5,9 @@ summary: 了解 TiDB 全局排序功能的使用场景、限制、使用方法 # TiDB 全局排序 -> **Warning:** +> **注意:** > -> 该功能目前为实验特性,不建议在生产环境中使用。该功能可能会在未事先通知的情况下发生变化或删除。如果发现 bug,请在 GitHub 上提 [issue](https://github.com/pingcap/tidb/issues) 反馈。 +> 目前全局排序会使用大量 TiDB 节点的计算与内存资源,对于在线增加索引等同时有用户业务在运行的场景,建议用户扩展出新的 TiDB 节点并设置这些 TiDB 节点的 `tidb_service_scope` 为 `"background"`,这样分布式框架就会将任务调度到这些节点上,减少执行后端任务对用户业务的影响。 ## 功能概览