鉴于普通方式修改列类型操作会阻塞之后的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;