鑒於普通方式修改列類型操作會阻塞之後的DML正常執行,所以PolarDB-X新增無鎖變更列類型(Online Modify Column,簡稱OMC)功能,允許以無鎖(線上)方式變更列類型。
版本限制
無鎖變更列類型需要核心版本5.4.18-17108394及以上。
對於僅增加或刪除列的無鎖變更操作,需要核心版本5.4.20-20241224及以上。
通過DMS(資料管理)執行無鎖變更操作,需要核心版本5.4.20-20241224及以上。
注意事項
不支援修改拆分鍵、分區鍵以及主鍵的列名稱,但支援修改這些列的類型。
不支援刪除拆分鍵、分區鍵以及主鍵包含的列。
不支援新增列的列定義中包含
UNIQUE、KEY等關鍵字。不支援修改產生列以及產生列運算式中包含的列。
僅支援
MODIFY COLUMN、CHANGE COLUMN、DROP COLUMN、ADD COLUMN操作,其他變更類型均不支援,例如不支援ADD INDEX、DROP INDEX、SET DEFAULT等操作。
功能特點
支援AUTO和DRDS模式的資料庫。
支援同時變更多個列的列類型。
支援在同一條語句中修改列類型以及增加或刪除列。
文法
ALTER TABLE語句只有當ALGORITHM=OMC時,才會以無鎖變更的方式執行。該演算法為PolarDB-X特有實現。未指定時預設採用標準MySQL演算法(可能會產生中繼資料鎖阻塞DML)。
ALTER TABLE tbl_name
alter_option [, alter_option] ...
ALGORITHM = OMC
alter_option: {
table_options
| ADD [COLUMN] col_name column_definition
[FIRST | AFTER col_name]
| CHANGE [COLUMN] old_col_name new_col_name column_definition
[FIRST | AFTER col_name]
| DROP [COLUMN] col_name
| MODIFY [COLUMN] col_name column_definition
[FIRST | AFTER col_name]
}樣本
本例以AUTO模式資料庫為您展示無鎖變更列類型如何使用:
建立測試表
t1:CREATE TABLE t1(a INT PRIMARY KEY, b TINYINT, c VARCHAR(10)) PARTITION BY KEY(a);修改
t1表中b列和c列的列類型:ALTER TABLE t1 MODIFY COLUMN b INT, MODIFY COLUMN c VARCHAR(30), ALGORITHM=OMC;修改
t1表中b列的名稱和類型,並新增BIGINT類型的e列:ALTER TABLE t1 CHANGE COLUMN b d INT, ADD COLUMN e BIGINT AFTER d, ALGORITHM=OMC;