TiDB 高速テーブル作成
TiDB v7.6.0 では、テーブル作成の高速化をサポートするシステム変数tidb_ddl_versionが導入され、バルク テーブル作成の効率が向上しました。v8.0.0 以降では、このシステム変数の名前がtidb_enable_fast_create_tableに変更されています。
TiDB は、オンライン非同期スキーマ変更アルゴリズムを使用してメタデータを変更します。すべての DDL ジョブはmysql.tidb_ddl_jobテーブルに送信され、所有者ノードが DDL ジョブをプルして実行します。オンライン DDL アルゴリズムの各フェーズを実行した後、DDL ジョブは完了としてマークされ、 mysql.tidb_ddl_historyテーブルに移動されます。したがって、DDL ステートメントは所有者ノードでのみ実行でき、線形に拡張することはできません。
ただし、一部の DDL ステートメントでは、オンライン DDL アルゴリズムに厳密に従う必要はありません。たとえば、 CREATE TABLEステートメントでは、ジョブの状態はnoneとpublic 2 つだけです。そのため、TiDB は DDL の実行プロセスを簡素化し、テーブル作成を高速化するために、所有者以外のノードでCREATE TABLEステートメントを実行します。
TiDBツールとの互換性
- ティCDC
tidb_enable_fast_create_tableによって作成されたテーブルの複製をサポートしていません。
制限
パフォーマンス最適化は、 CREATE TABLEステートメントでのみテーブル作成に使用できるようになり、このステートメントには外部キー制約を含めることはできません。
テーブル作成を高速化するには、 tidb_enable_fast_create_tableを使用します。
システム変数tidb_enable_fast_create_tableの値を指定することにより、テーブル作成のパフォーマンス最適化を有効または無効にすることができます。
テーブル作成のパフォーマンス最適化を有効にするには、この変数の値をONに設定します。
SET GLOBAL tidb_enable_fast_create_table = ON;
テーブル作成のパフォーマンス最適化を無効にするには、この変数の値をOFFに設定します。
SET GLOBAL tidb_enable_fast_create_table = OFF;
実施原則
テーブル作成のパフォーマンス最適化の詳細な実装原則は次のとおりです。
CREATE TABLEジョブを作成します。CREATE TABLEステートメントを解析することによって、対応する DDL ジョブが生成されます。CREATE TABLEジョブを実行します。CREATE TABLEステートメントを受信した TiDB ノードはそれを直接実行し、テーブル構造を TiKV に永続化します。同時に、CREATE TABLEジョブは完了としてマークされ、mysql.tidb_ddl_historyテーブルに挿入されます。テーブル情報を同期します。
TiDB は、新しく作成されたテーブル構造を同期するように他のノードに通知します。