TiDB 分散実行フレームワーク (DXF)
注記:
この機能はTiDB Cloudサーバーレスクラスターでは使用できません。
TiDB は、優れたスケーラビリティと弾力性を備えたコンピューティングとストレージの分離アーキテクチャを採用しています。v7.1.0 以降、TiDB は分散アーキテクチャのリソースの利点をさらに活用するために、分散実行フレームワーク (DXF) を導入しています。DXF の目標は、タスクの統一されたスケジュールと分散実行を実装し、全体と個々のタスクの両方に統一されたリソース管理機能を提供することです。これにより、リソース使用に関するユーザーの期待をよりよく満たすことができます。
このドキュメントでは、DXF の使用例、制限事項、使用方法、実装の原則について説明します。
ユースケース
データベース管理システムには、コアとなるトランザクション処理 (TP) と分析処理 (AP) のワークロードに加えて、DDL 操作、IMPORT INTO、TTL、分析、バックアップ/復元などの重要なタスクがあります。これらのタスクは、データベース オブジェクト (テーブル) 内の大量のデータを処理する必要があるため、通常は次の特性があります。
- スキーマまたはデータベース オブジェクト (テーブル) 内のすべてのデータを処理する必要があります。
- 定期的に実行する必要があるかもしれませんが、頻度は低くなければなりません。
- リソースが適切に制御されていない場合、TP および AP タスクに影響を与え、データベース サービスの品質が低下する可能性があります。
DXF を有効にすると上記の問題が解決され、次の 3 つの利点があります。
- このフレームワークは、高いスケーラビリティ、高可用性、高パフォーマンスを実現する統合機能を提供します。
- DXF はタスクの分散実行をサポートしており、TiDB クラスター全体の利用可能なコンピューティング リソースを柔軟にスケジュールできるため、TiDB クラスター内のコンピューティング リソースをより有効に活用できます。
- DXF は、全体タスクと個々のタスクの両方に対して、統合されたリソースの使用および管理機能を提供します。
現在、DXF はADD INDEX
とIMPORT INTO
ステートメントの分散実行をサポートしています。
ADD INDEX
インデックスを作成するために使用される DDL ステートメントです。例:ALTER TABLE t1 ADD INDEX idx1(c1); CREATE INDEX idx1 ON table t1(c1);IMPORT INTO
、CSV
、SQL
、PARQUET
などの形式のデータを空のテーブルにインポートするために使用されます。詳細については、IMPORT INTO
参照してください。
制限
DXF は、一度にADD INDEX
タスクの分散実行のみをスケジュールできます。現在のADD INDEX
分散タスクが完了する前に新しいADD INDEX
タスクが送信された場合、新しいタスクはトランザクションを通じて実行されます。
前提条件
DXF を使用してADD INDEX
タスクを実行する前に、 高速オンラインDDLモードを有効にする必要があります。
高速オンライン DDL に関連する次のシステム変数を調整します。
tidb_ddl_enable_fast_reorg
: 高速オンライン DDL モードを有効にするために使用されます。TiDB v6.5.0 以降ではデフォルトで有効になっています。tidb_ddl_disk_quota
: 高速オンライン DDL モードで使用できるローカル ディスクの最大クォータを制御するために使用されます。
使用法
DXFを有効にするには、値を
tidb_enable_dist_task
ON
設定します。SET GLOBAL tidb_enable_dist_task = ON;DXF タスクの実行中、フレームワークでサポートされているステートメント (
ADD INDEX
やIMPORT INTO
など) が分散方式で実行されます。すべての TiDB ノードはデフォルトで DXF タスクを実行します。一般に、DDL タスクの分散実行に影響を与える可能性のある次のシステム変数については、デフォルト値を使用することをお勧めします。
tidb_ddl_reorg_worker_cnt
: デフォルト値4
を使用します。推奨される最大値は16
です。tidb_ddl_reorg_priority
tidb_ddl_error_count_limit
tidb_ddl_reorg_batch_size
: デフォルト値を使用します。推奨される最大値は1024
です。
v7.4.0 以降、TiDB Self-Managed では、実際のニーズに応じて DXF タスクを実行する TiDB ノードの数を調整できます。TiDB クラスターを展開した後、クラスター内の各 TiDB ノードに対してインスタンス レベルのシステム変数
tidb_service_scope
設定できます。TiDB ノードのtidb_service_scope
background
に設定すると、TiDB ノードは DXF タスクを実行できます。TiDB ノードのtidb_service_scope
デフォルト値 "" に設定すると、TiDB ノードは DXF タスクを実行できません。クラスター内のどの TiDB ノードにもtidb_service_scope
設定されていない場合、DXF はデフォルトですべての TiDB ノードがタスクを実行するようにスケジュールします。注記:
- 複数の TiDB ノードを持つクラスターでは、2 つ以上の TiDB ノードに
tidb_service_scope
~background
設定することを強くお勧めします。1 つの TiDB ノードにのみtidb_service_scope
設定されている場合、ノードが再起動されるか障害が発生すると、タスクはbackground
設定されていない他の TiDB ノードに再スケジュールされ、これらの TiDB ノードに影響を及ぼします。 - 分散タスクの実行中、
tidb_service_scope
構成への変更は現在のタスクには適用されませんが、次のタスクからは適用されます。
- 複数の TiDB ノードを持つクラスターでは、2 つ以上の TiDB ノードに
実施原則
DXF のアーキテクチャは次のとおりです。
上の図に示すように、DXF でのタスクの実行は主に次のモジュールによって処理されます。
- ディスパッチャ: 各タスクの分散実行プランを生成し、実行プロセスを管理し、タスク ステータスを変換し、実行時のタスク情報を収集してフィードバックします。
- スケジューラ: TiDB ノード間で分散タスクの実行を複製し、タスク実行の効率を向上させます。
- サブタスク エグゼキュータ: 分散サブタスクの実際の実行者。また、サブタスク エグゼキュータはサブタスクの実行ステータスをスケジューラに返し、スケジューラはサブタスクの実行ステータスを統一的に更新します。
- リソース プール: 上記のモジュールのコンピューティング リソースをプールすることにより、リソースの使用状況と管理を定量化するための基礎を提供します。