PolarDB MySQL版新增Online Copy DDL功能,有效緩解傳統Copy DDL(如MODIFY COLUMN、普通表與分區表互轉等)在執行過程中因全程持有MDL鎖而導致的業務阻塞問題。
背景資訊
在標準Copy DDL執行期間,MySQL會持有MDL-SNW(Shared No Write)鎖,導致表上的所有寫操作(INSERT/UPDATE/DELETE)被持續阻塞。這可能引發Business Connectivity堆積,嚴重時甚至造成系統雪崩。Online Copy DDL通過最佳化資料拷貝階段的鎖機制,在保證資料一致性的前提下,允許並發讀寫操作,顯著提升DDL執行期間的業務可用性。
適用範圍
PolarDB MySQL版8.0.2版本且修訂版本為8.0.2.2.33.1及以上,可通過查詢版本號碼確認叢集版本。
Online Copy DDL功能目前處於灰階發布階段。如需使用,請前往配額中心,根據配額ID polarm_82_online_copy_ddl找到配額名稱,在對應的操作列單擊申請來開通該功能。申請時請提供需要開通的叢集ID(形如pc-xxx)。
使用限制
支援的操作:
普通表與分區表互相轉換。
MODIFY COLUMN語句(不支援同時修改列位置)。
不支援的操作或對象:
含有JSON類型列的表。
含有空間索引(SPATIAL INDEX)的表。
含有全域二級索引(GSI)的表。
混合分區(Hybrid Partitioning)表。
表上已執行過
LOCK TABLES的會話。顯式指定
ALGORITHM=COPY且LOCK=SHARED或LOCK=EXCLUSIVE的DDL。
您可以在執行DDL操作前使用EXPLAIN DDL功能,直觀地判斷當前DDL操作是否支援Online Copy DDL。
使用方法
您可以先通過loose_polar_support_online_copy_ddl_algorithm參數開啟Online Copy DDL功能。針對MODIFY COLUMN語句,需要額外開啟loose_polar_support_online_copy_ddl_algorithm_for_modify參數。具體操作請參見設定叢集參數和節點參數。參數說明如下:
參數 | 層級 | 說明 |
| Global | Online Copy DDL主開關。取值範圍如下:
|
| Global | 專用於
|
方式一:顯式指定演算法(推薦)
通過ALGORITHM=COPY, LOCK=NONE強制使用Online Copy DDL:
CREATE TABLE t(a int);
ALTER TABLE t MODIFY COLUMN a BIGINT DEFAULT NULL, ALGORITHM=COPY, LOCK=NONE;使用上述語句時,若返回ERROR 1846 (0A000): LOCK=NONE is not supported. Reason: COPY algorithm requires a lock. Try LOCK=SHARED.的錯誤,表示當前修改欄位類型操作無法使用Online Copy DDL演算法執行。建議您查看loose_polar_support_online_copy_ddl_algorithm參數是否已開啟,並仔細核對使用限制。
方式二:自動選擇最優演算法(預設行為)
不指定演算法或使用DEFAULT,系統將自動選擇最合適的執行方式:
-- 方法1:顯式DEFAULT
ALTER TABLE t MODIFY COLUMN a BIGINT DEFAULT NULL, ALGORITHM=DEFAULT, LOCK=DEFAULT;
-- 方法2:完全省略(等效)
ALTER TABLE t MODIFY COLUMN a BIGINT DEFAULT NULL;系統優先嘗試Online Copy DDL。若不滿足條件,則自動回退到傳統Copy DDL(會鎖表),確保DDL最終能完成。