PolarDBは、並列DDL機能をサポートしています。 使用可能なハードウェアリソースがクラスターに存在する場合、並列DDL機能はDDL操作の実行を高速化できます。 これにより、後続のDML操作がブロックされず、DDL操作の実行ウィンドウが短くなります。
前提条件
- リビジョンバージョンが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のクラスター。
- リビジョンバージョンが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_indexinnodb_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の高速化率を示しています。