TiDB Global Sort
概述
TiDB Global Sort 功能增强了数据导入和 DDL(数据定义语言)操作的稳定性和效率。它作为 TiDB 分布式执行框架(DXF) 的通用操作符,为云端提供全局排序服务。
目前,Global Sort 功能支持使用 Amazon S3 作为云存储。
使用场景
Global Sort 功能提升了 IMPORT INTO
和 CREATE INDEX
的稳定性和效率。通过对任务处理的数据进行全局排序,改善了写入 TiKV 的稳定性、可控性和可扩展性。这为数据导入和 DDL 任务提供了更优的用户体验和更高质量的服务。
Global Sort 功能在统一的 DXF 中执行任务,确保数据在全局范围内高效、并行地排序。
限制
目前,Global Sort 功能尚未作为排序查询结果的查询执行过程中的组件使用。
用法
启用 Global Sort,请按照以下步骤操作:
通过将
tidb_enable_dist_task
设置为ON
来启用 DXF。从 v8.1.0 开始,该变量默认启用。对于新创建的 v8.1.0 或更高版本的集群,可以跳过此步骤。SET GLOBAL tidb_enable_dist_task = ON;
将
tidb_cloud_storage_uri
设置为正确的云存储路径。参见 示例。SET GLOBAL tidb_cloud_storage_uri = 's3://my-bucket/test-data?role-arn=arn:aws:iam::888888888888:role/my-role'
实现原理
Global Sort 功能的算法如下:
详细的实现原理如下:
Step 1: 扫描和准备数据
在 TiDB 节点扫描特定范围的数据后(数据源可以是 CSV 数据或 TiKV 中的表数据):
- TiDB 节点将其编码为 Key-Value 对。
- TiDB 节点将 Key-Value 对排序成多个块数据段(数据段在本地排序),每个段为一个文件,并上传到云存储。
同时,TiDB 节点还会为每个段记录一个连续的实际 Key-Value 范围(称为统计文件),这是实现可扩展排序的关键准备。这些文件会与实际数据一同上传到云存储。
Step 2: 排序和分发数据
从步骤 1,Global Sort 程序获得已排序块列表及其对应的统计文件,这些文件提供了本地排序块的数量。程序还拥有一个实际数据范围,可供 PD 用于拆分和分散。接下来执行:
- 将统计文件中的记录排序,划分为几乎相等的范围,这些范围作为子任务,将在并行中执行。
- 将子任务分发到 TiDB 节点进行执行。
- 每个 TiDB 节点独立地将子任务中的数据排序到范围内,并无重叠地导入到 TiKV。