全部產品
Search
文件中心

ApsaraDB RDS:秒級加列

更新時間:Feb 07, 2026

RDS MySQL的秒級加列功能通過變更中繼資料實現快速加列操作,避免全表資料重建,可在秒級內完成,且與表資料量大小無關。秒級加列幾乎不消耗額外系統資源,也不會對業務造成鎖表或阻塞的影響,適用於需要頻繁擴充表結構且對商務持續性要求較高的情境。

功能說明

RDS MySQL的秒級加列(Instant Add Column)通過變更資料字典的中繼資料來最佳化ADD COLUMN 操作。該功能避免了傳統DDL操作對全表資料的修改或重建,實現加列操作在秒級內完成,且不受表資料量影響。

秒級加列與傳統加列的核心優勢對比:

對比項

傳統加列(Copy或Inplace模式)

RDS秒級加列(Instant模式)

加列耗時

需要全表資料重建,耗時與表大小成正比。

僅修改中繼資料,操作時間長度可控制在秒級。

資源消耗

臨時佔用大量系統資源(如IO、記憶體)。

幾乎不消耗額外資源。

業務影響

長事務或高並發情境可能阻塞線上業務。

無鎖表或阻塞影響。

表大小限制

無法支援大錶快速加列。

支援任意大小錶快速加列。

適用範圍

如需使用秒級加列功能,執行個體版本要求如下,當小版本不符合要求時,可以升級核心小版本

  • MySQL 8.0:所有核心小版本均支援。

  • MySQL 5.7:核心小版本大於等於20250331。

使用秒級加列功能時有以下限制:

  • 引擎節流:僅支援InnoDB引擎。

  • 表類型限制:不支援壓縮表、帶全文索引的表和暫存資料表。

  • 操作限制:不支援多操作合并,例如在添加列的同時添加索引。

  • 唯讀執行個體限制:掛載了唯讀執行個體的高可用主執行個體使用秒級加列功能時,需要在主執行個體和唯讀執行個體上均設定loose_innodb_instant_ddl_enabled參數為ON,否則會導致唯讀執行個體複製中斷。

  • 預設加列位置

    MySQL版本

    核心小版本

    加列位置

    5.7

    大於等於20250331

    預設最後一列。

    8.0

    低於20230630

    預設最後一列。

    大於等於20230630

    支援在新增列時指定列位置。

  • MySQL 5.7或MySQL 8.0(低於20230630版本)執行個體使用秒級加列時,需要保證資料表中不存在隱式主鍵。

開啟秒級加列

MySQL 8.0預設開啟秒級加列,您無需修改參數即可使用該功能。MySQL 5.7需參考以下步驟開啟秒級加列:

  1. 訪問RDS執行個體列表,選擇地區並單擊目標執行個體ID。

  2. 在左側導覽列,單擊參數設定

  3. 可修改參數頁簽中搜尋loose_innodb_instant_ddl_enabled參數,並在該參數的運行參數值列,修改參數值為ON

    說明

    修改loose_innodb_instant_ddl_enabled參數可以立即生效且無需重啟執行個體。

  4. 單擊提交參數,在彈出的對話方塊中,選擇生效的時間段,完成後單擊確定

相關操作

使用秒級加列

  • 指定ALGORITHM=INSTANT強制使用秒級加列:

    ALTER TABLE <table_name> ADD COLUMN <column_name> <data_type> <constraints>, ALGORITHM = INSTANT;
  • 不指定 ALGORITHM,RDS MySQL運行時根據條件選擇最優模式:

    ALTER TABLE <table_name> ADD COLUMN <column_name> <data_type> <constraints>;

查看已執行秒級加列的表

  • MySQL 5.7:

    SELECT * FROM INFORMATION_SCHEMA.INNODB_SYS_TABLES WHERE INSTANT_COLS > 0;
  • MySQL 8.0:

    -- 核心小版本低於20230630
    SELECT * FROM INFORMATION_SCHEMA.INNODB_TABLES WHERE INSTANT_COLS > 0;
    
    -- 核心小版本大於等於20230630
    SELECT * FROM INFORMATION_SCHEMA.INNODB_TABLES WHERE TOTAL_ROW_VERSIONS > 0;

查看通過秒級加列添加的列

  • MySQL 5.7:

    5.7版本在INFORMATION_SCHEMA庫中新增了INNODB_SYS_INSTANT_COLUMNS表,通過如下SQL查看秒級加列功能添加的列資訊。

    SELECT * FROM INFORMATION_SCHEMA.INNODB_SYS_INSTANT_COLUMNS WHERE TABLE_ID = 
    (SELECT TABLE_ID FROM INFORMATION_SCHEMA.INNODB_SYS_TABLES WHERE NAME = "<database_name>/<table_name>");
  • MySQL 8.0:

    通過如下SQL查看錶的列資訊,若查詢結果中HAS_DEFAULT列為1,則說明該列是通過秒級加列功能添加的。

    SELECT * FROM INFORMATION_SCHEMA.INNODB_COLUMNS WHERE TABLE_ID = 
    (SELECT TABLE_ID FROM INFORMATION_SCHEMA.INNODB_TABLES WHERE NAME = "<database_name>/<table_name>");

常見問題

Q1:執行個體滿足秒級加列適用範圍,但添加列時依然報錯:Feature not supported: 1845 ALGORITHM=INSTANT is not supported for this operation. Try ALGORITHM=COPY/INPLACE

A:

原因:如果表上沒有主鍵或唯一鍵,為保證複製效率,RDS MySQL預設會給表加一個隱式主鍵,隱式主鍵預設是表的最後一列,所以這會導致Instant加列語句變成指定位置加列(要保證隱式主鍵是最後一列),但是 MySQL 5.7或MySQL 8.0(低於20230630版本)執行個體不支援指定位置加列,所以產生該報錯。

解決方案:MySQL 5.7或MySQL 8.0(低於20230630版本)執行個體使用秒級加列時,需要保證資料表中不存在隱式主鍵。