鉴于普通方式修改列类型操作会阻塞之后的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;
该文章对您有帮助吗?