すべてのプロダクト
Search
ドキュメントセンター

PolarDB:並列 DDL

最終更新日:Oct 13, 2026

PolarDB は並列 DDL 機能をサポートしています。データベースのハードウェアリソースがアイドル状態のときに並列 DDL を使用すると、DDL の実行を高速化し、後続の関連する DML 操作のブロッキングを回避し、DDL 操作の実行ウィンドウを短縮できます。

適用範囲

セカンダリインデックスを作成するには、PolarDB クラスターのバージョンが次のいずれかの条件を満たしている必要があります。

  • PolarDB for MySQL 8.0.2、リビジョンバージョン 8.0.2.1.7 以降。

  • PolarDB for MySQL 8.0.1、リビジョンバージョン 8.0.1.1.10 以降。

  • PolarDB for MySQL 5.7、リビジョンバージョン 5.7.1.0.7 以降。

プライマリキーインデックスを作成するには、PolarDB クラスターのバージョンが次のいずれかの条件を満たしている必要があります。

  • PolarDB for MySQL 8.0.2、リビジョンバージョン 8.0.2.2.9 以降。

  • PolarDB for MySQL 8.0.1、リビジョンバージョン 8.0.1.1.31 以降。

クラスターのバージョンの確認方法については、「Query the engine version」をご参照ください。

考慮事項

並列 DDL を有効にすると、並列スレッド数に応じて CPU、メモリ、I/O などのハードウェアリソースの消費が増加します。これにより、同時に実行される他の SQL 操作に影響する場合があります。並列スレッド数を多く設定すると、プロセスが使用するメモリ量も増加します。利用可能なメモリが不足している場合、メモリ不足 (OOM) エラーが発生してクラスターの安定性に影響する可能性があります。そのため、オフピーク時やハードウェアリソースが十分な場合に並列 DDL を使用してください。

制限事項

並列 DDL の高速化は、プライマリキーインデックスおよびセカンダリインデックスを作成する DDL 操作に対応しています (全文インデックス、空間インデックス、および仮想列上のセカンダリインデックスを除く)。

背景

従来の DDL 操作はシングルコアおよび従来型ハードディスクドライブを前提に設計されているため、大規模テーブルに対する DDL 操作は長時間を要し、レイテンシも過度に高くなります。たとえば、セカンダリインデックスを作成する際、レイテンシが過度に高い DDL 操作は、新しいインデックスに依存する後続の DML クエリ操作をブロックします。マルチコアプロセッサの発展により、並列 DDL がより多くのスレッドを使用するためのハードウェアサポートが提供されるようになり、ソリッドステートドライブ (SSD) の採用により、ランダムアクセスのレイテンシはシーケンシャルアクセスのレイテンシに近づきました。そのため、並列 DDL を使用して大規模テーブルのインデックス作成を高速化することが特に重要です。

使用方法

  • innodb_polar_parallel_ddl_threads

    次の innodb_polar_parallel_ddl_threads パラメーターを使用して並列 DDL を有効にできます。

    パラメーター

    レベル

    説明

    innodb_polar_parallel_ddl_threads

    セッション

    各 DDL 操作の並列スレッド数です。有効値:1~16。デフォルト値:1。

    このパラメーターの値が 1 以外の場合、セカンダリインデックスの作成時に並列 DDL が自動的に有効になります。

    説明

    このパラメーターの値が 1 の場合、システムはデフォルトで 2 つの並列スレッドを有効にします。

  • innodb_parallel_build_primary_index

    次の innodb_parallel_build_primary_index パラメーターを使用して、プライマリキーインデックス作成時に並列 DDL を許可するかどうかを制御できます。

    説明

    並列プライマリキーインデックス作成機能を使用するには、クォータセンターに移動します。[クォータ ID] が [polardb_mysql_pddl_for_pk] である行を見つけ、[操作] 列で [申請] をクリックしてトライアルを申請します。

    パラメーター

    レベル

    説明

    innodb_parallel_build_primary_index

    グローバル

    プライマリキーインデックス作成時に並列 DDL を許可するかどうかを指定します。有効値:

    • ON:プライマリキーインデックス作成時に並列 DDL を許可します。

    • OFF:プライマリキーインデックス作成時に並列 DDL を許可しません (デフォルト)。

  • innodb_polar_use_sample_sort

    並列 DDL の有効化だけでは要件を満たさない場合は、innodb_polar_use_sample_sort パラメーターを使用して、インデックス作成時に実行されるソート処理をさらに最適化できます。

    パラメーター

    レベル

    説明

    innodb_polar_use_sample_sort

    セッション

    サンプルソート最適化機能を有効にするかどうかを指定します。有効値:

    • ON:サンプルソート最適化機能を有効にします。

    • OFF:サンプルソート最適化機能を無効にします (デフォルト)。

  • innodb_polar_use_parallel_bulk_load

    前述の機能でも要件を満たさない場合は、innodb_polar_use_parallel_bulk_load パラメーターを使用して、インデックスツリーの構築をさらに最適化することもできます。

    パラメーター

    レベル

    説明

    innodb_polar_use_parallel_bulk_load

    セッション

    並列バルクロード最適化機能を有効にするかどうかを指定します。有効値:

    • ON:並列バルクロード最適化機能を有効にします。

    • OFF:並列バルクロード最適化機能を無効にします (デフォルト)。

パフォーマンステスト

  • テスト環境

    • 16 コア、128 GB のメモリを備えた PolarDB for MySQL 8.0 Standard Edition クラスター。

    • クラスターのストレージ容量は 50 TB です。

  • テストテーブルのスキーマ

    次のステートメントを使用して、t0 という名前のテーブルを作成します:

    CREATE TABLE t0(
    a INT PRIMARY KEY,
    b INT) ENGINE=InnoDB;
  • テストテーブルデータ

    次のステートメントを使用してテストデータを生成します。

    DELIMITER //
    CREATE PROCEDURE populate_t0()
    BEGIN
         DECLARE i int DEFAULT 1;
         WHILE (i <= $table_size) DO
                 INSERT INTO t0 VALUES (i, 1000000 * RAND());
                 SET i = i + 1;
         END WHILE;
    END //
    DELIMITER ;
    CALL populate_t0() ;
    説明
    • 実際のテストでは、$table_size を 1000000 などのテーブル内の実際のレコード数に置き換えます。

    • このテストでは、1,000,000、10,000,000、100,000,000、1,000,000,000 件のレコードを含むテーブルと、1 TB のデータを含むテーブルを使用します。

    • 1 TB のデータを含むテストテーブルは Sysbench を使用して生成します。Sysbench の使用方法の詳細については、「Test tools」をご参照ください。

  • テスト方法

    このテストでは、innodb_polar_parallel_ddl_threads パラメーターを 1、2、4、8、16、32 に設定して並列スレッド数を変更し、データ量の異なるテーブルで並列 DDL を有効にして、データ型が INT で名前が b のカラムにセカンダリインデックスを作成した場合の DDL 実行効率の向上率を測定します。

  • テスト結果

    • 次の図は、innodb_polar_parallel_ddl_threads パラメーターのみを有効にした場合の並列 DDL の高速化率を示します。A

    • 次の図は、innodb_polar_parallel_ddl_threads および innodb_polar_use_sample_sort パラメーターの両方を有効にした場合の並列 DDL の高速化率を示します。Speedup results

    • 次の図は、innodb_polar_parallel_ddl_threads、innodb_polar_use_sample_sort、および innodb_polar_use_parallel_bulk_load パラメーターを有効にした場合の並列 DDL の高速化率を示します。B

お問い合わせ

DDL 操作についてご不明な点がある場合は、お問い合わせください。