線上 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
。如果無法使用指定的演算法,該語句會立即停止。