使用普通方式执行修改列类型操作时,数据节点DN上会阻塞DML,影响业务执行。PolarDB-X新增在线修改列类型(Online Modify Column,简称OMC)功能,允许以在线方式修改列类型。
注意事项
限制目前使用在线修改列类型时有如下限制:
- 仅5.4.15及以上版本支持该功能。
- 一条
ALTER TABLE
语句只支持对一列进行修改。 - 修改的列不能是自增列。
- 修改的列不能是主键中的列。
- 修改的列不能是主表或GSI的拆分键中的列。
- 修改的列不能是包含在GSI中的列(此项限制可以通过执行
/*+TDDL: cmd_extra(OMC_ALTER_TABLE_WITH_GSI=true)*/
解除)。 - 表中不能存在全文索引。
支持类型可以分为4类:
- 准确值类型:tinyint、tinyint unsigned、smallint、smallint unsigned、mediumint、mediumint unsigned、int、int unsigned、bigint、bigint unsigned、decimal。
- 近似值类型:float、double。
- 字符串类型:char、varchar、binary、varbinary。
- 日期时间类型:date、datetime、time、year。
对于以上4种类型,有以下限制:
- 只支持同一类类型之间的转换。
- 修改前后的类型不能相同(varchar、varbinary等类型长度不同视为不同类型)。
使用方法
当ALTER TABLE
语句中未指定ALGORITHM算法或指定为其它算法,例如INPLACE或COPY时,默认使用普通的方式执行,会阻塞DML的执行。当ALGORITHM算法指定为OMC时,则使用在线修改列类型方式执行。
- 执行以下命令,创建测试表t1:
CREATE TABLE t1(a int primary key, b tinyint) dbpartition by hash(a);
- 执行以下命令,修改t1表的列类型:
ALTER TABLE t1 MODIFY COLUMN b int, ALGORITHM=OMC;
- 执行以下命令,修改t1表中b列的名称和类型:
ALTER TABLE t1 CHANGE COLUMN b c bigint, ALGORITHM=OMC;
说明 如果在该列上创建了局部索引,那么在DDL执行过程中,执行
SHOW CREATE TABLE
时有可能看到DDL创建的临时局部索引。此外,如果SQL中使用FORCE INDEX指定了该列上的局部索引,那么在DDL的执行过程中,该SQL有可能会短暂执行失败。