全部产品
Search
文档中心

云数据库 RDS:Faster DDL

更新时间:Jul 15, 2026

优化DDL操作过程中的Buffer Pool管理机制,降低DDL操作带来的性能影响,提升在线DDL操作的并发数。

前提条件

实例版本如下:

背景信息

数据库经常会执行DDL操作,也经常会遇到DDL相关的问题,例如:

  • 为什么加索引会造成实例的抖动,影响正常的业务读写?

  • 为什么不到1 GB的表执行DDL有时需要十几分钟?

  • 为什么使用了临时表的连接退出时会造成实例抖动?

针对这些常见问题,RDS内核团队进行分析后发现MySQL在DDL操作期间的缓存维护逻辑存在性能缺陷,通过深入分析及多次测试,开发Faster DDL功能,优化了Buffer Pool页面管理策略,大幅减少DDL操作导致的锁争用,有效解决或缓解上述问题,让您的实例在正常业务压力下可以安心执行DDL操作。

开启Faster DDL

您可以在控制台修改参数loose_innodb_rds_faster_ddl为ON,开启Faster DDL。详情请参见设置实例参数。

DDL场景测试

  • 测试场景

    选取RDS MySQL 8.0支持的两种In Place Online DDL操作进行验证, 其中CREATE INDEX操作不需要重建表,OPTIMIZE TABLE操作需要重建表。

    操作

    Instant

    In Place

    重建表

    允许并发DML

    只修改元数据

    CREATE INDEX

    否

    是

    否

    是

    否

    OPTIMIZE TABLE

    否

    是

    是

    是

    否

  • 测试实例

    MySQL 8.0实例(8核、64 GB),执行DDL操作的表大小为600 MB。

  • 测试过程

    使用Sysbench模拟线上业务进行压力测试,在压测期间执行DDL操作,进行反复对比测试。

  • 测试结果

    操作

    平均执行时间(关闭优化)

    平均执行时间(开启优化)

    性能提升倍数

    Create Index

    56秒

    4.9秒

    11.4

    Optimize Table

    220秒

    17秒

    12.9

  • 测试小结

    在DDL场景下,优化后的AliSQL内核MySQL相比社区版本MySQL,DDL操作执行时间缩短了90%以上。

临时表场景测试

MySQL在很多情况下会使用临时表,例如查询information_schema库里的表、 加速复杂SQL执行时自动创建临时表。在线程退出时系统会集中清理用过的临时表,这也属于一种特殊类型的DDL操作,同样会导致实例的性能抖动。 详情请参见Temp ibt tablespace truncation at disconnection stuck InnoDB under large BP。

  • 测试实例

    MySQL 8.0实例(8核、64 GB)。

  • 测试过程

    使用tpcc-mysql进行压力测试,将Buff Pool基本用满,然后发起单线程短连接的临时表请求。

  • 测试结果

    对比项

    正常情况(无DDL操作)

    开启优化

    关闭优化

    每秒事务数(TPS)

    42,000

    40,000

    <10,000

    压测过程中的秒级性能数据如下所示(红线处为关闭DDL加速功能):

    其中 IUD(Insert/Update/Delete)列和 Cmit(Commit)列的数值变化最为显著,反映了关闭 DDL 加速功能前后的 TPS 差异。

    
    05/28 17:49:53  0.01  1/6 0/0 1/6  8.36 70GB 7094   219  260   87  107    2 40.7%     0  5.6MB  2MB 4.6MB  0B
    05/28 17:49:54  0.01  2/6 0/0 2/2  8.43 70GB 6828   219  259   86  130    4 40.4%     0  5.6MB  2MB 4.6MB  0B
    05/28 17:49:55  0.04  1/7 0/0 1/6  8.36 70GB 7629   219  259   91  117    2 42.3%     0  6.2MB 2.1MB 4.8MB  0B
    05/28 17:49:56  0.04  2/4 0/0 2/4  8.12 70GB 6616   219  259   95  119    2 38.4%     0  5.2MB 1.9MB 3.8MB  0B
    05/28 17:49:57  0.04  1/5 0/0 1/5  8.43 70GB 7094   219  259  119    0 41K      0  5.1MB 1.8MB 3.6MB  0B
    05/28 17:49:58  0.04  1/6 0/0 1/6  8.43 70GB 7155   219  259   95  124    0 41K      0  5.1MB 1.8MB 3.5MB  0B
    05/28 17:49:59  0.04  1/7 0/0 1/5  8.43 70GB 7011   219  259   84  115    2 40.5%     0  5.1MB 1.8MB 3.5MB  0B
    05/28 17:50:00  0.17  1/6 0/0 1/4  8.4  70GB 7051   219  259   84  120    2 40.8%     0  5.6MB  2MB 4.5MB  0B
    05/28 17:50:01  ---OS--- -----------Process-----------                       ---MySQL---
                  Load SY/US/WI/IR SY/US CpuR  Mem  IOPS  THD  Conn  Cre  Run  Sel   IUD  Cmit LongQ ByteI ByteO Blog Dump Aply
    05/28 17:50:01  0.17  1/6 0/0 1/5  6.46 70GB 6874   219  259   81  125    0 39.8k    0  4.4MB 1.9MB 4.5MB  0B
    05/28 17:50:02  0.17  2/6 0/0 2/6  8.26 70GB 7205   261   91  259  125    0 40.0k    0  5.6MB  2MB 4.5MB  0B
    05/28 17:50:03  0.17  1/5 0/0 1/5  6.46 70GB 7117   219  259   87  125    0 41.3%     0  5.6MB  2MB 4.5MB  0B
    05/28 17:50:04  0.17  1/6 0/0 1/6  6.46 70GB 7088   219  259   99  120    0 41.6%     0  5.7MB  2MB 4.6MB  0B
    05/28 17:50:05  0.17  1/6 0/0 1/6  8.43 70GB 7088   219  259   98  118    0 39.9%     0  5.5MB  2MB 4.5MB  0B
    05/28 17:50:06  0.17  1/7 0/0 1/7  8.31 70GB 3638   225  289   35  129    2 21.4k     0  3.5MB 1.1MB 2.4MB  0B
    05/28 17:50:07  0.14  1/4 0/0 1/4  8.43 70GB 1388   249  302   13  132    0  8325      0  1.1MB 425KB 950KB  0B
    05/28 17:50:08  0.14  1/8 0/0 1/8  8.24 70GB 1202   296  399    3  130    0  7232      0  1.5MB 385KB 817KB  0B
    05/28 17:50:09  0.14  3/4 0/0 3/4  8.46 70GB  785   287  314    7  151    2  4524      0  636KB 276KB 536KB  0B
    05/28 17:50:10  0.14  1/4 0/0 1/4  8.43 70GB 1087   294    9  122    3  6809      0  959KB 348KB 416KB  0B
    05/28 17:50:11  0.14  2/4 0/0 2/4  8.43 70GB  305   229    3  147    0  3456      0  416KB 256KB 416KB  0B
    05/28 17:50:12  0.14  1/4 0/0 1/4  8.24 70GB  305   287    7  139    3  3259      0  461KB 256KB 416KB  0B
    05/28 17:50:13  0.14  0/4 0/0 0/4  8.26 70GB  361   302    3   76    0  1512      0  197KB  81KB 166KB  0B
    05/28 17:50:14  0.14  0/7 0/0 0/6  8.26 70GB 1815   305    3   86    0 15.7%     0 2.1MB 796KB 1.7MB  0B
    05/28 17:50:15  0.14  0/6 0/0 0/5  8.26 70GB 2009   305    9   86    2 16.2%     0 2.2MB 891KB 1.3MB  0B
    05/28 17:50:16  0.14  1/4 0/0 1/4  8.26 70GB  351   354    4  194    0  2925     78 352KB 127KB 306KB  0B
    05/28 17:50:17  0.14  0/3 0/0 0/3  8.43 70GB  657   354    4  232    2  2506      0 352KB 127KB 306KB  0B
    05/28 17:50:18  0.14  1/4 0/0 1/4  8.24 70GB  345   358    4  232    1   192      0  25KB 132KB  2KB  15KB  0B
    05/28 17:50:19  0.14  1/3 0/0 1/3  8.4  70GB  346   354    4  119    0   -        0  25KB 132KB  2KB  15KB  0B
    05/28 17:50:20  0.14  0/7 0/0 0/7  8.4  70GB  346   354    4  176    0  7897    239  1MB 807KB  15KB   0B
  • 测试小结

    原生MySQL在每次临时表线程退出时出现剧烈的性能抖动,TPS下降超过70%,开启优化之后性能影响降低至5%。

优化效果

Faster DDL加速功能支持RDS MySQL 5.6、5.7、8.0三个版本,但是不同版本支持加速的DDL类型不同,详情请参见下表。

分类

DDL操作

MySQL 5.6

MySQL 5.7

MySQL 8.0

In Place DDL

详情请参见MySQL 8.0 Online DDL Operations和MySQL 5.7 Online DDL Operations。

否

是

是

表空间管理

开关表空间加密。

否

是

是

释放或删除表空间。

否

是

是

丢弃表空间。

是

是

是

删除表

释放或删除表。

是

是

是

Undo操作

释放或删除undo表空间。

否

否

是

刷新表

刷新表及脏页。

是

是

是

Faster DDL解决的缺陷

Faster DDL完美解决了以下MySQL临时缺陷: