全部產品
Search
文件中心

ApsaraDB RDS:Faster DDL

更新時間:Jul 16, 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_ddlON,開啟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 OperationsMySQL 5.7 Online DDL Operations

資料表空間管理

開關資料表空間加密。

釋放或刪除資料表空間。

丟棄資料表空間。

刪除表

釋放或刪除表。

Undo操作

釋放或刪除undo資料表空間。

重新整理表

重新整理表及髒頁。

Faster DDL解決的缺陷

Faster DDL完美解決了以下MySQL臨時缺陷: