全部產品
Search
文件中心

PolarDB:DDL非同步IO

更新時間:Jul 06, 2024

PolarDB新增DDL非同步IO功能。資料庫大表中建立索引的DDL操作通常非常耗時,您可以通過DDL非同步IO功能, 縮短建立索引的DDL操作時間。

前提條件

PolarDB叢集版本需滿足如下條件之一:

  • PolarDB MySQL版8.0.2版本且修訂版本為8.0.2.2.6及以上。

  • PolarDB MySQL版8.0.1版本且修訂版本為8.0.1.1.29及以上。

如何確認叢集版本,詳情請參見查詢版本號碼

注意事項

當前不支援對全文索引和空間索引進行DDL非同步IO。

使用方法

您可以通過如下innodb_polar_ddl_async_io參數設定DDL非同步IO功能。具體操作請參見設定叢集參數和節點參數

參數

層級

說明

innodb_polar_ddl_async_io

Global

DDL非同步IO功能開關。取值範圍如下:

  • ON:開啟DDL非同步IO功能。

  • OFF:關閉DDL非同步IO功能(預設值)。

效能測試

  • 測試環境

    • 一個規格為8核32 GB的PolarDB 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非同步IO和關閉DDL非同步IO,通過執行SQLalter table table_1 add index name_index (seller_name);來測試DDL執行效率的提升比例:

    DDL非同步IO開關狀態

    耗時(秒)

    開啟DDL非同步IO

    368

    關閉DDL非同步IO

    485