TiDB グローバル ソート
注記:
現在、この機能は TiDB 専用クラスターにのみ適用されます。 TiDB サーバーレス クラスターでは使用できません。
概要
TiDB グローバル ソート機能は、データ インポートと DDL (データ定義言語) 操作の安定性と効率を強化します。 分散実行フレームワークの総合事業者としてクラウド上でグローバルソートサービスを提供しています。
グローバル ソート機能は現在、クラウドstorageとして Amazon S3 の使用のみをサポートしています。将来のリリースでは、POSIX などの複数の共有storageインターフェイスをサポートするように拡張され、さまざまなstorageシステムとのシームレスな統合が可能になります。この柔軟性により、さまざまなユースケースに合わせて効率的かつ適応性のあるデータの並べ替えが可能になります。
ユースケース
グローバル ソート機能により、 IMPORT INTO
とCREATE INDEX
の安定性と効率が向上します。タスクによって処理されるデータをグローバルに並べ替えることにより、TiKV へのデータ書き込みの安定性、制御性、拡張性が向上します。これにより、データ インポートおよび DDL タスクのユーザー エクスペリエンスが向上し、さらに高品質のサービスが提供されます。
グローバル ソート機能は、統合された分散並列実行フレームワーク内でタスクを実行し、グローバル スケールでのデータの効率的かつ並列ソートを保証します。
制限事項
現在、グローバル ソート機能は、クエリ結果の並べ替えを担当するクエリ実行プロセスのコンポーネントとしては使用されていません。
使用法
グローバル ソートを有効にするには、次の手順に従います。
値
tidb_enable_dist_task
~ON
を設定して、分散実行フレームワークを有効にします。SET GLOBAL tidb_enable_dist_task = ON;
tidb_cloud_storage_uri
を正しいクラウドstorageパスに設定します。 例を参照してください。
注記:
IMPORT INTO
の場合、CLOUD_STORAGE_URI
オプションを使用してクラウドstorageパスを指定することもできます。tidb_cloud_storage_uri
とCLOUD_STORAGE_URI
の両方が有効なクラウドstorageパスで構成されている場合、CLOUD_STORAGE_URI
の構成はIMPORT INTO
にも有効になります。
tidb_cloud_storage_uri
を正しいクラウドstorageパスに設定します。 例を参照してください。
```sql
SET GLOBAL tidb_cloud_storage_uri = 's3://my-bucket/test-data?role-arn=arn:aws:iam::888888888888:role/my-role'
```
実装原則
グローバル ソート機能のアルゴリズムは次のとおりです。
詳細な実装原則は次のとおりです。
ステップ 1: データをスキャンして準備する
TiDB ノードが特定範囲のデータをスキャンした後 (データ ソースは CSV データまたは TiKV のテーブル データのいずれかです):
- TiDB ノードは、それらをキーと値のペアにエンコードします。
- TiDB ノードは、Key-Value ペアをいくつかのブロック データ セグメントに分類します (データ セグメントはローカルに分類されます)。各セグメントは 1 つのファイルであり、クラウドstorageにアップロードされます。
TiDB ノードは、各セグメント (統計ファイルと呼ばれる) のシリアルの実際の Key-Value 範囲も記録します。これは、スケーラブルな並べ替え実装の重要な準備となります。これらのファイルは、実際のデータとともにクラウドstorageにアップロードされます。
ステップ 2: データの分類と配布
ステップ 1 から、グローバル ソート プログラムは、ソートされたブロックのリストと、ローカルでソートされたブロックの数を提供するそれに対応する統計ファイルを取得します。このプログラムには、PD が分割および分散するために使用できる実際のデータ スコープもあります。次の手順が実行されます。
- 統計ファイル内のレコードを並べ替えて、ほぼ同じサイズの範囲に分割します。これらの範囲は、並行して実行されるサブタスクです。
- サブタスクを TiDB ノードに分散して実行します。
- 各 TiDB ノードは、サブタスクのデータを個別に範囲にソートし、重複することなく TiKV に取り込みます。