DDL多方向マージおよびソート機能がPolarDBに追加されました。 DDLステートメントを実行して大きなテーブルにインデックスを作成するには時間がかかります。 DDLマージおよびソート機能を使用して、インデックスのソート時間を短縮できます。
前提条件
PolarDBクラスターは、次のいずれかの要件を満たす必要があります。
- リビジョンバージョンが8.0.2.2.5以降のPolarDB for MySQL 8.0.2のクラスター。
- リビジョンバージョンが8.0.1.1.28以降のPolarDB for MySQL 8.0.1のクラスター。
- リビジョンバージョンが5.7.1.0.23以降のPolarDB for MySQL 5.7のクラスター。
クラスターバージョンを確認する方法の詳細については、「エンジンバージョンの照会」をご参照ください。
注意事項
- DDLマルチウェイマージおよびソート機能は、フルテキストインデックスおよび空間インデックスではサポートされていません。
- DDLマルチウェイマージおよびソート機能は、クラスターのメモリ使用量をわずかに増加させます。 マージとソートのためにN個のウェイをアクティブにすると、クラスターの占有メモリサイズは
(N + 1) × innodb_sort_buffer_size
バイトになります。
Usage
innodb_polar_parallel_merge_waysパラメーターを設定することで、マージとソートの方法の数を指定できます。
パラメーター | レベル | 説明 |
innodb_polar_parallel_merge_ways | セッション | マージとソートの方法の数。 有効な値: 2 ~ 16。 デフォルト値:2 デフォルトでは、双方向のマージとソートが使用されます。 2より大きい値を指定した場合、複数方向のマージおよびソート機能が有効になります。 |
性能テスト
- テスト環境
- 8 CPUコアと32 GBメモリを持つPolarDB for MySQL 8.0のクラスター。
- クラスターのストレージ容量は50テラバイトです。
- Schema
次のステートメントを実行して、
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、主要なキー ('id') ) エンジン=InnoDB;
- Data
次の文を実行してテストデータを生成します。
区切り文字 | | CREATE PROCEDURE populate_0 (INNUM INT) 開始 DECLARE sid INT; DECLAREサフィックス_名INT; DECLARE i INT; SET sid=1000; SET suffix_name=10; セットi=1; トランザクションを開始します。i <= NUMである間 やる INSERT INTO table_1(seller_id,seller_name,gmt_create,update_time) VALUES(sid,CONCAT ('selername', suffix_name),NOW(),NOW()); SET suffix_name=suffix_name + 1; SET sid=sid + 1; セットi=i + 1; END WHILE; COMMIT; エンド | | 区切り文字; CALL populate_0(100000000) ;
- テスト方法とテスト結果テーブルにデータが入力されたら、マージとソートの2つの方法と8つの方法を指定します。
alter table table_1 add index name_index (seller_name);
ステートメントを実行し、2つのケースでステートメントの実行効率を比較します。マージとソートの方法 消費時間 (秒) 8ウェイのマージとソート 353 双方向のマージとソート 485