線上 DDL 功能提供即時和就地表格變更以及並行 DML 的支援。此功能的優點包括
在繁忙的生產環境中提高回應能力和可用性,在這些環境中,使表格無法使用幾分鐘或幾小時是不切實際的。
對於就地操作,能夠使用
LOCK子句調整 DDL 操作期間效能和並行性之間的平衡。請參閱 LOCK 子句。比表格複製方法使用更少的磁碟空間和 I/O 負擔。
通常,您不需要執行任何特殊操作來啟用線上 DDL。預設情況下,MySQL 會在允許的情況下盡可能以最少的鎖定立即或就地執行操作。
您可以使用 ALTER TABLE 陳述式的 ALGORITHM 和 LOCK 子句來控制 DDL 操作的各個方面。這些子句位於陳述式的末尾,並以逗號與表格和資料行規格分隔。例如
ALTER TABLE tbl_name ADD PRIMARY KEY (column), ALGORITHM=INPLACE;LOCK 子句可以用於就地執行的操作,並且適用於在操作期間微調對表格的並行存取程度。只有 LOCK=DEFAULT 支援立即執行的操作。ALGORITHM 子句主要用於效能比較,以及在您遇到任何問題時回退到較舊的表格複製行為。例如
為了避免在就地
ALTER TABLE操作期間意外使表格無法讀取、寫入或同時無法讀寫,請在ALTER TABLE陳述式上指定子句,例如LOCK=NONE(允許讀寫)或LOCK=SHARED(允許讀取)。如果要求的並行等級不可用,則操作會立即停止。為了比較不同演算法的效能,請使用
ALGORITHM=INSTANT、ALGORITHM=INPLACE和ALGORITHM=COPY執行語句。您也可以在啟用old_alter_table設定選項的情況下執行語句,以強制使用ALGORITHM=COPY。為了避免
ALTER TABLE操作複製表格而佔用伺服器資源,請包含ALGORITHM=INSTANT或ALGORITHM=INPLACE。如果無法使用指定的演算法,該語句會立即停止。