文件首頁
MySQL 8.4 參考手冊
相關文件 下載本手冊
PDF (美式信紙) - 39.9Mb
PDF (A4) - 40.0Mb
Man Pages (TGZ) - 258.5Kb
Man Pages (Zip) - 365.5Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 8.4 參考手冊  /  ...  /  線上 DDL 限制

17.12.8 線上 DDL 限制

以下限制適用於線上 DDL 操作

  • TEMPORARY TABLE 上建立索引時,會複製資料表。

  • 如果資料表上有 ON...CASCADEON...SET NULL 限制,則不允許 ALTER TABLE 子句 LOCK=NONE

  • 在原地線上 DDL 操作完成之前,它必須等待持有資料表上中繼資料鎖定的交易提交或回滾。線上 DDL 操作在其執行階段可能會短暫需要資料表上的獨佔中繼資料鎖定,並且在更新資料表定義的操作最終階段始終需要一個。因此,持有資料表上中繼資料鎖定的交易可能會導致線上 DDL 操作被封鎖。持有資料表上中繼資料鎖定的交易可能是在線上 DDL 操作之前或期間開始的。持有資料表上中繼資料鎖定的長時間執行或非活動交易可能會導致線上 DDL 操作逾時。

  • 當執行原地線上 DDL 操作時,執行 ALTER TABLE 陳述式的執行緒會套用從其他連線執行緒同時在同一個資料表上執行的 DML 操作的線上日誌。當套用 DML 操作時,即使重複的項目只是暫時性的,並且會被線上日誌中的後續項目還原,也可能會遇到重複的鍵值項目錯誤 (ERROR 1062 (23000): 項目重複)。這類似於 InnoDB 中外鍵限制檢查的概念,其中限制必須在交易期間保持有效。

  • 對於 InnoDB 資料表,OPTIMIZE TABLE 會對應到 ALTER TABLE 操作,以重建資料表並更新叢集索引中的索引統計資料和釋放未使用的空間。次要索引的建立效率不高,因為鍵值是按照它們在主要鍵值中出現的順序插入的。OPTIMIZE TABLE 支援使用線上 DDL 支援來重建常規和分割的 InnoDB 資料表。

  • 在 MySQL 5.6 之前建立的資料表,其中包含時間類型欄 (DATEDATETIMETIMESTAMP),並且未使用 ALGORITHM=COPY 重建的,則不支援 ALGORITHM=INPLACE。在這種情況下,ALTER TABLE ... ALGORITHM=INPLACE 操作會傳回以下錯誤

    ERROR 1846 (0A000): ALGORITHM=INPLACE is not supported.
    Reason: Cannot change column type INPLACE. Try ALGORITHM=COPY.
  • 以下限制通常適用於涉及重建資料表的大型資料表上的線上 DDL 操作

    • 沒有機制可以暫停線上 DDL 操作,或限制線上 DDL 操作的 I/O 或 CPU 使用率。

    • 如果操作失敗,線上 DDL 操作的回滾可能會很昂貴。

    • 長時間執行的線上 DDL 操作可能會導致複寫延遲。線上 DDL 操作必須先在來源端執行完成,才能在複本端執行。此外,在來源端同時處理的 DML,也必須等到複本端的 DDL 操作完成後,才會在複本端處理。

    有關在大型資料表上執行線上 DDL 操作的更多資訊,請參閱第 17.12.2 節,「線上 DDL 效能與並行」