DDL非同期I/O機能がPolarDBに追加されました。 DDLステートメントを実行して大きなテーブルにインデックスを作成するには時間がかかります。 DDL非同期I/O機能を使用して、インデックスの作成時間を短縮できます。
前提条件
PolarDBクラスターは、次のいずれかの要件を満たす必要があります。
- リビジョンバージョンが8.0.2.2.6以降のPolarDB for MySQL 8.0.2のクラスター。
- リビジョンバージョンが8.0.1.1.29以降のPolarDB for MySQL 8.0.1のクラスター。
クラスターバージョンを確認する方法の詳細については、「エンジンバージョンの照会」をご参照ください。
注意事項
DDL非同期I/O機能は、フルテキストインデックスと空間インデックスではサポートされていません。
Usage
innodb_polar_ddl_async_ioパラメーターを使用して、DDL非同期I/O機能を設定できます。 詳細については、「クラスターとノードパラメーターの設定」をご参照ください。
パラメーター | レベル | 説明 |
innodb_polar_ddl_async_io | グローバル | DDL非同期I/O機能を有効にするかどうかを指定します。 デフォルト値: OFF。 有効な値:
|
性能テスト
- テスト環境
- 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) ;
- テスト方法とテスト結果テーブルにデータが入力されたら、DDL非同期I/O機能を有効または無効にします。
alter table table_1 add index name_index (seller_name);
ステートメントを実行し、2つのケースでステートメントの実行効率を比較します。DDL非同期I/O 消費時間 (秒) Enabled 368 無効 485