DDL异步IO

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

联系我们

若您对DDL操作有任何疑问,可通过钉钉搜索群号入群咨询。您可以直接@群内专家,并附上您要咨询的问题;同时群内也有PolarDB MySQL版小助手24*7小时在线回答您的问题。钉钉群号:15375044501。