PolarDB は、DDL のための非同期 I/O 機能を提供します。大規模なデータベーステーブルにインデックスを作成するデータ定義言語 (DDL) 操作は、通常、時間がかかります。DDL のための非同期 I/O を使用すると、インデックスの作成に必要な時間を短縮できます。
前提条件
PolarDB クラスターは、次のいずれかのバージョン要件を満たす必要があります。
PolarDB for MySQL 8.0.2、リビジョンバージョン 8.0.2.2.6 以降。
PolarDB for MySQL 8.0.1、リビジョンバージョン 8.0.1.1.29 以降。
クラスターバージョンの確認方法の詳細については、「エンジンバージョンのクエリ」をご参照ください。
注意事項
DDL のための非同期 I/O は、全文索引または空間インデックスではサポートされていません。
使用方法
次の innodb_polar_ddl_async_io パラメーターを設定することで、DDL のための非同期 I/O を設定できます。手順については、「クラスターパラメーターとノードパラメーターの設定」をご参照ください。
パラメーター | レベル | 説明 |
innodb_polar_ddl_async_io | グローバル | DDL のための非同期 I/O を有効にするかどうかを指定します。有効な値:
|
パフォーマンス テスト
テスト環境
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) ;テスト方法と結果
データが挿入された後、DDL のための非同期 I/O を有効または無効にして SQL ステートメント
alter table table_1 add index name_index (seller_name);を実行し、DDL 実行効率の向上を測定します。DDL のための非同期 I/O のステータス
時間 (秒)
DDL のための非同期 I/O が有効
368
DDL のための非同期 I/O が無効
485
お問い合わせ
DDL 操作についてご不明な点がある場合は、お問い合わせください。