使用普通方式执行修改列类型操作时,数据节点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;