全部產品
Search
文件中心

ApsaraDB RDS:Faster DDL

更新時間:Jun 19, 2024

最佳化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操作需要重建表。

    操作InstantIn Place重建表允許並發DML只修改中繼資料
    CREATE INDEX
    OPTIMIZE TABLE
  • 測試執行個體

    MySQL 8.0執行個體(8核、64 GB),執行DDL操作的表大小為600 MB。

  • 測試過程

    使用Sysbench類比線上業務進行壓力測試,在壓測期間執行DDL操作,進行反覆對比測試。

  • 測試結果
    操作平均執行時間(關閉最佳化)平均執行時間(開啟最佳化)效能提升倍數
    Create Index56秒4.9秒11.4
    Optimize Table220秒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,00040,000<10,000

    壓測過程中的秒級效能資料如下圖所示(紅線處為關閉DDL加速功能):

    TPS效能
  • 測試小結

    原生MySQL在每次暫存資料表線程退出時出現劇烈的效能抖動,TPS下降超過70%,開啟最佳化之後效能影響降低至5%。

最佳化效果

Faster DDL加速功能支援RDS MySQL 5.6、5.7、8.0三個版本,但是不同版本支援加速的DDL類型不同,詳情請參見下表。

分類DDL操作MySQL 5.6MySQL 5.7MySQL 8.0
In Place DDL詳情請參見MySQL 8.0 Online DDL OperationsMySQL 5.7 Online DDL Operations
資料表空間管理開關資料表空間加密。
釋放或刪除資料表空間。
丟棄資料表空間。
刪除表 釋放或刪除表。
Undo操作釋放或刪除undo資料表空間。
重新整理表重新整理表及髒頁。

Faster DDL解決的缺陷

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