无锁变更列类型

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