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のクラスター。
クラスターバージョンを確認する方法の詳細については、「エンジンバージョン5.6、5.7、8.0」をご参照ください。
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の高速化率を示しています。
次の図は、innodb_polar_parallel_ddl_threadsとinnodb_polar_use_sample_sortパラメーターの両方をONに設定した後の並列DDLの高速化率を示しています。
次の図は、innodb_polar_parallel_ddl_threads、innodb_polar_use_sample_sort、およびinnodb_polar_use_parallel_bulk_loadパラメーターがONに設定された後の並列DDLの高速化率を示しています。