TiDB グローバルソート
注記:
- 現在、グローバル ソート プロセスは、TiDB ノードのコンピューティング リソースとメモリリソースを大量に消費します。ユーザー ビジネス アプリケーションの実行中にオンラインでインデックスを追加するなどのシナリオでは、クラスターに新しい TiDB ノードを追加し、これらのノードの
tidb_service_scope
変数を構成し、これらのノードに接続してタスクを作成することをお勧めします。このようにして、分散フレームワークはこれらのノードにタスクをスケジュールし、他の TiDB ノードからワークロードを分離して、ADD INDEX
やIMPORT INTO
などのバックエンド タスクの実行がユーザー ビジネス アプリケーションに与える影響を軽減します。- グローバル ソート機能を使用する場合は、OOM を回避するために、少なくとも 16 コアの CPU と 32 GiB のメモリを備えた TiDB ノードを使用することをお勧めします。
注記:
この機能はTiDB Cloudサーバーレスクラスターでは使用できません。
概要
TiDB グローバル ソート機能は、データ インポートおよび DDL (データ定義言語) 操作の安定性と効率性を高めますTiDB 分散実行フレームワーク (DXF)の汎用演算子として機能し、クラウド上でグローバル ソート サービスを提供します。
現在、グローバルソート機能は、クラウドstorageとして Amazon S3 の使用をサポートしています。
ユースケース
グローバルソート機能は、 IMPORT INTO
とCREATE INDEX
の安定性と効率性を高めます。タスクによって処理されるデータをグローバルにソートすることで、TiKV へのデータ書き込みの安定性、制御性、スケーラビリティが向上します。これにより、データインポートおよび DDL タスクのユーザーエクスペリエンスが向上し、サービスの品質が向上します。
グローバル ソート機能は、統合された DXF 内でタスクを実行し、グローバル規模でデータの効率的かつ並列的なソートを保証します。
制限事項
現在、グローバル ソート機能は、クエリ結果のソートを担当するクエリ実行プロセスのコンポーネントとして使用されていません。
使用法
グローバルソートを有効にするには、次の手順に従います。
tidb_enable_dist_task
の値をON
に設定して DXF を有効にします。v8.1.0 以降では、この変数はデフォルトで有効になっています。v8.1.0 以降のバージョンで新しく作成されたクラスターの場合は、この手順をスキップできます。SET GLOBAL tidb_enable_dist_task = ON;
tidb_cloud_storage_uri
正しいクラウドstorageパスに設定します。3 例参照してください。SET GLOBAL tidb_cloud_storage_uri = 's3://my-bucket/test-data?role-arn=arn:aws:iam::888888888888:role/my-role'
注記:
IMPORT INTO
の場合、CLOUD_STORAGE_URI
オプションを使用してクラウドstorageパスを指定することもできます。tidb_cloud_storage_uri
とCLOUD_STORAGE_URI
両方に有効なクラウドstorageパスが設定されている場合、CLOUD_STORAGE_URI
の設定がIMPORT INTO
に有効になります。
実施原則
グローバル ソート機能のアルゴリズムは次のとおりです。
詳細な実装原則は次のとおりです。
ステップ1: データをスキャンして準備する
TiDB ノードが特定の範囲のデータをスキャンした後 (データ ソースは CSV データまたは TiKV のテーブル データのいずれかになります)、次のようになります。
- TiDB ノードはそれらをキーと値のペアにエンコードします。
- TiDB ノードは、キーと値のペアを複数のブロック データ セグメントに分類します (データ セグメントはローカルに分類されます)。各セグメントは 1 つのファイルであり、クラウドstorageにアップロードされます。
TiDB ノードは、各セグメントの実際のキーと値の範囲 (統計ファイルと呼ばれる) も連続して記録します。これは、スケーラブルなソートの実装に不可欠な準備です。これらのファイルは、実際のデータとともにクラウドstorageにアップロードされます。
ステップ2: データを分類して分配する
ステップ 1 から、グローバル ソート プログラムは、ソートされたブロックのリストとそれに対応する統計ファイルを取得します。これにより、ローカルにソートされたブロックの数が得られます。プログラムには、PD が分割および分散に使用できる実際のデータ スコープもあります。次の手順が実行されます。
- 統計ファイル内のレコードを並べ替えて、ほぼ等しいサイズの範囲に分割します。これは、並列で実行されるサブタスクです。
- サブタスクを TiDB ノードに分散して実行します。
- 各 TiDB ノードは、サブタスクのデータを範囲ごとに独立して分類し、重複することなく TiKV に取り込みます。