使用普通方式執行修改列類型操作時,資料節點DN上會阻塞DML,影響業務執行。PolarDB-X新增無鎖變更列類型(Online Modify Column,簡稱OMC)功能,允許以無鎖方式變更列類型。
前提條件
僅核心版本在 5.4.18-17108394 及以上的PolarDB-X執行個體支援無鎖變更列類型。
使用限制
僅核心版本在5.4.18-17108394及以上的執行個體支援無鎖變更列類型。
不支援僅進行加減列時指定OMC演算法。
不支援修改拆分鍵、分區鍵以及主鍵的列名稱,但支援修改列類型。
不支援刪除拆分鍵、分區鍵以及主鍵包含的列。
不支援新增列的列定義中包含UNIQUE、KEY等關鍵字。
僅支援MODIFY COLUMN、CHANGE COLUMN、DROP COLUMN以及ADD COLUMN操作,其他動作均不支援,例如不支援ADD INDEX、DROP INDEX、SET DEFAULT等操作。
不支援修改產生列以及產生列運算式中包含的列。
文法
目前無鎖變更列類型的具體文法如下,使用無鎖變更列類型時,支援同時變更多個列的列類型,並且支援在變更列的同時進行加列和減列操作。
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]
}
使用方法
當ALTER TABLE
語句中未指定ALGORITHM演算法或指定為其它演算法,例如INPLACE或COPY時,預設使用普通的方式執行,會阻塞DML的執行。當ALGORITHM演算法指定為OMC時,則使用無鎖變更列類型方式執行。
樣本
說明
無鎖變更列類型功能支援AUTO和DRDS模式的資料庫,以下命令以在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;