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

PolarDB:DDL の非同期 I/O

最終更新日:Mar 28, 2026

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 は、以下には適用されません。

  • 全文検索インデックス

  • 空間インデックス

DDL 非同期 I/O の有効化

クラスターパラメータ設定で、innodb_polar_ddl_async_io パラメーターを ON に設定します。手順については、「クラスターおよびノードパラメーターの設定」をご参照ください。

パラメーターレベルデフォルト有効値説明
innodb_polar_ddl_async_ioグローバルOFFONOFFDDL 非同期 I/O を有効または無効にします

パフォーマンステスト

以下のテストでは、大規模テーブルでのインデックス作成に対する DDL 非同期 I/O の影響を測定します。

テスト環境

  • PolarDB for MySQL 8.0、CPU コア数 8、メモリ 32 GB、ストレージ容量 50 TB

スキーマ

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;

テストデータ

以下のストアドプロシージャは、table_1 に 100,000,000 行を挿入します。

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 を有効にした状態と無効にした状態でそれぞれ実行し、実行時間を比較します。

ALTER TABLE table_1 ADD INDEX name_index (seller_name);
DDL 非同期 I/O時間 (秒)
有効368
無効485

このテストでは、DDL 非同期 I/O を有効にすることで、インデックス作成時間が約 24 % 短縮されました。

お問い合わせ

DDL 操作についてご質問がある場合は、「テクニカルサポートへのお問い合わせ」をご利用ください。

次のステップ