すべてのプロダクト
Search
ドキュメントセンター

PolarDB:DDL非同期I/O

最終更新日:May 28, 2024

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。 有効な値:
  • ON
  • オフ

性能テスト

  • テスト環境
    • 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消費時間 (秒)
    Enabled368
    無効485