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 は、新しく作成されたテーブル構造を同期するように他のノードに通知します。