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

PolarDB:パラレルDDL

最終更新日:May 24, 2024

PolarDBは、並列DDL機能をサポートしています。 使用可能なハードウェアリソースがクラスターに存在する場合、並列DDL機能はDDL操作の実行を高速化できます。 これにより、後続のDML操作がブロックされず、DDL操作の実行ウィンドウが短くなります。

前提条件

セカンダリインデックスを作成する場合、PolarDBクラスターは次のいずれかの要件を満たす必要があります。
  • リビジョンバージョンが8.0.2.1.7以降のPolarDB for MySQL 8.0.2のクラスター。
  • リビジョンバージョンが8.0.1.1.10以降のPolarDB for MySQL 8.0.1のクラスター。
  • リビジョンバージョンが5.7.1.0.7以降のPolarDB for MySQL 5.7のクラスター。
プライマリキーインデックスを作成する場合、PolarDBクラスターは次のいずれかの要件を満たす必要があります。
  • リビジョンバージョンが8.0.2.2.9以降のPolarDB for MySQL 8.0.2のクラスター。
  • リビジョンバージョンが8.0.1.1.31以降のPolarDB for MySQL 8.0.1のクラスター。

クラスターバージョンを確認する方法の詳細については、「エンジンバージョンの照会」をご参照ください。

Usage

並列DDL機能を有効にすると、同時スレッドの数が増えるにつれて、CPU、メモリ、I/Oなどのハードウェアリソースがより多く占有されます。 これは、並列DDL操作と同じ期間に実行される他のSQL操作に影響を与える可能性があります。 そのため、オフピーク時やハードウェアリソースが十分な場合は、並列DDL機能を使用することをお勧めします。

制限事項

並列DDL機能では、プライマリキーインデックスとセカンダリインデックスの作成に使用されるDDL操作のみを高速化できます。 セカンダリインデックスには、フルテキストインデックス、空間インデックス、および仮想列のセカンダリインデックスは含まれません。

背景

従来のDDL操作は、シングルコアおよび従来のハードディスクに基づいて設計されています。 その結果、大きなテーブルでDDL操作を実行するのに時間がかかり、レイテンシが長くなります。 たとえば、DDL操作を実行してセカンダリインデックスを作成すると、DDL操作の待ち時間が長いため、新しいインデックスに依存する後続のDMLクエリがブロックされます。 マルチコアプロセッサは、より多くのスレッドを使用するための並列DDL機能のハードウェアサポートを提供します。 さらに、ランダムアクセス待ち時間がシーケンシャルアクセス待ち時間に近いように、ソリッドステートディスク (SSD) が広く使用されている。 この場合、並列DDL機能を使用して、大きなテーブルにインデックスを作成するプロセスを高速化できます。

並列DDL機能を使用する

  • innodb_polar_parallel_ddl_スレッド

    パラレルDDL機能を有効にするには、innodb_polar_parallel_ddl_threadsパラメーターを指定します。

    パラメーターレベル説明
    innodb_polar_parallel_ddl_スレッドセッション各DDL操作の同時スレッド数。 有効な値: 1 ~ 16。 デフォルト値1は、シングルスレッドDDL操作が実行されることを示します。

    このパラメーターの値が1でない場合、または実行されたDDL操作を使用してセカンダリインデックスを作成する場合、並列DDL機能は自動的に有効になります。

    説明 このパラメーターの値が1の場合、各DDL操作で2つの同時スレッドが使用されます。
  • innodb_parallel_build_primary_index
    innodb_parallel_build_primary_indexパラメーターを指定すると、主キーインデックスを作成するときに並列DDL機能を許可できます。
    説明 このパラメータはカナリアリリースにあります。 パラメーターのトライアル使用を申請するには、Quota Centerに移動します。 PolarDB hotspot行パラメーター調整に対応する [操作] 列の [適用] をクリックします。
    パラメーターレベル説明
    innodb_parallel_build_primary_indexグローバル主キーインデックスの作成時に並列DDL機能を許可するかどうかを指定します。 デフォルト値: OFF。 有効な値:
    • ON
    • オフ
  • innodb_polar_use_sample_sort

    それでも並列DDL機能が要件を満たせない場合は、innodb_polar_use_sample_sortパラメーターを使用して、インデックスの作成時に並べ替えを最適化できます。

    パラメーターレベル説明
    innodb_polar_use_sample_sortセッションサンプルソート最適化機能を有効にするかどうかを指定します。 デフォルト値: OFF。 有効な値:
    • ON
    • オフ
  • innodb_polar_use_parallel_bulk_load

    それでもサンプルのソート最適化機能が要件を満たせない場合は、innodb_polar_use_parallel_bulk_loadパラメーターを使用して、インデックスツリーの作成プロセスを最適化できます。

    パラメーターレベル説明
    innodb_polar_use_parallel_bulk_loadセッションバルクロード最適化機能を有効にするかどうかを指定します。 デフォルト値: OFF。 有効な値:
    • ON
    • オフ

性能テスト

  • テスト環境
    • 16 CPUコアと128 GBのメモリを備えたPolarDB for MySQL 8.0クラスター。 クラスターはcluster Editionを実行します。
    • クラスターのストレージ容量は50テラバイトです。
  • Schema

    t0という名前のテーブルを作成します。

    作成テーブルt0 (
    INT PRIMARYキー、b INT) エンジン=InnoDB; 
  • Data

    テストデータを生成します。

    DELIMITER //
    CREATE PROCEDURE populate_t0()
    開始
         DECLARE i int DEFAULT 1;
         WHILE (i <= $table_size)
                 t0値 (i、1000000 * RAND()) に挿入します。
                 セットi = i + 1;
         END WHILE;
    END //
    DELIMITER;
    CALL populate_t0() ; 
    説明
    • 実際のテストでは、$table_sizeを、テーブルに必要なレコード数 (1000000など) に置き換えます。
    • このテストでは、100万行、100万行、10億行のデータを含むテーブルと、1テラバイトのデータを格納するテーブルを使用します。
    • 1テラバイトのデータを格納するテストテーブルは、SysBenchツールによって生成されます。 SysBenchツールの使用方法の詳細については、「テストツール」をご参照ください。
  • テスト方法

    次の条件で、INTデータ型のbフィールドにセカンダリインデックスを作成するDDL操作の実行効率の向上をテストします。innodb_polar_parallel_ddl_threadsが1、2、4、8、16、および32に設定されている場合、同時スレッドの数が異なります。 パラレルDDL機能は、データ量が異なるテーブルに対して有効になります。

  • テスト結果
    • 次の図は、innodb_polar_parallel_ddl_threadsパラメーターのみがONに設定された後のパラレルDDLの高速化率を示しています。 A
    • 次の図は、innodb_polar_parallel_ddl_threadsinnodb_polar_use_sample_sortパラメーターの両方をONに設定した後の並列DDLの高速化率を示しています。 Acceleration ratio of parallel DDL
    • 次の図は、innodb_polar_parallel_ddl_threadsinnodb_polar_use_sample_sort、およびinnodb_polar_use_parallel_bulk_loadパラメーターがONに設定された後の並列DDLの高速化率を示しています。 B