PolarDB は、DDL 多方向マージおよびソート機能を導入しています。大規模なテーブルにインデックスを作成する DDL 操作は通常、時間がかかります。DDL 多方向マージおよびソートを使用すると、インデックス作成中のインデックスのソートにかかる時間を短縮できます。
前提条件
PolarDB クラスターは、次のいずれかのバージョン要件を満たす必要があります:
リビジョンバージョンが 8.0.2.2.5 以降の PolarDB for MySQL 8.0.2。
PolarDB for MySQL 8.0.1、リビジョンバージョン 8.0.1.1.28 以降。
リビジョンバージョンが 5.7.1.0.23 以降の PolarDB for MySQL 5.7。
クラスターのバージョンを確認するには、「エンジンバージョンの照会」をご参照ください。
注意事項
DDL 多方向マージソートは、全文索引または空間インデックスではサポートされていません。
DDL 多方向マージソートを使用すると、クラスターのメモリ使用量がわずかに増加します。N 方向マージソートを有効にした場合、ソート中にクラスターが使用するメモリ量は
(N+1)*innodb_sort_buffer_sizeバイトです。
使用方法
次の innodb_polar_parallel_merge_ways パラメーターを使用して、マージソートの方向数を指定します:
パラメーター | レベル | 説明 |
innodb_polar_parallel_merge_ways | セッション | インデックス作成時のマージソートの方向数を指定します。有効な値: 2~16。デフォルト値: 2 (2 方向マージソートを示します)。2 より大きい値を設定すると、多方向マージソートが有効になります。 |
性能テスト
テスト環境
8 コア、32 GB メモリの PolarDB for MySQL 8.0 クラスター。
クラスターのストレージ容量は 50 TB です。
テストテーブルのスキーマ
次のステートメントを使用して、テーブル
table_1を作成します:CREATE TABLE `table_1` ( `id` int(11) NOT NULL AUTO_INCREMENT, `seller_id` bigint(20) DEFAULT NULL, `seller_name` varchar(100) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL, `gmt_create` varchar(30) DEFAULT NULL, `update_time` varchar(30) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB;テストテーブルのデータ
次のステートメントを使用してテストデータを生成します:
delimiter || CREATE PROCEDURE populate_0(IN NUM INT) BEGIN DECLARE sid INT; DECLARE suffix_name INT; DECLARE i INT; SET sid=1000; SET suffix_name=10; SET i=1; START TRANSACTION; WHILE i <= NUM DO INSERT INTO table_1(seller_id,seller_name,gmt_create,update_time) VALUES(sid,CONCAT('sellername',suffix_name),NOW(),NOW()); SET suffix_name=suffix_name+1; SET sid=sid+1; SET i=i+1; END WHILE; COMMIT; END || delimiter ; CALL populate_0(100000000) ;テスト方法と結果
データの挿入後、8 方向マージソートと 2 方向マージソートをそれぞれ設定し、SQL ステートメント
alter table table_1 add index name_index (seller_name);を実行して、DDL 実行効率の改善を検証します:マージソートの方向数
所要時間 (秒)
8 方向マージソート
353
2 方向マージソート
485
お問い合わせ
DDL 操作についてご質問がある場合は、「お問い合わせ」をご利用ください。