全部产品
Search
文档中心

云原生数据库 PolarDB:无锁变更列类型

更新时间:Apr 03, 2025

鉴于普通方式修改列类型操作会阻塞之后的DML正常执行,所以PolarDB-X新增无锁变更列类型(Online Modify Column,简称OMC)功能,允许以无锁(在线)方式变更列类型。

版本限制

  • 无锁变更列类型需要内核版本5.4.18-17108394及以上。

  • 对于仅增加或删除列的无锁变更操作,需要内核版本5.4.20-20241224及以上。

  • 通过DMS(数据管理)执行无锁变更操作,需要内核版本5.4.20-20241224及以上。

说明

注意事项

  • 不支持修改拆分键、分区键以及主键的列名称,但支持修改这些列的类型。

  • 不支持删除拆分键、分区键以及主键包含的列。

  • 不支持新增列的列定义中包含UNIQUEKEY等关键字。

  • 不支持修改生成列以及生成列表达式中包含的列。

  • 仅支持MODIFY COLUMNCHANGE COLUMNDROP COLUMNADD COLUMN操作,其他变更类型均不支持,例如不支持ADD INDEXDROP INDEXSET 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模式数据库为您展示无锁变更列类型如何使用:

  1. 创建测试表t1

    CREATE TABLE t1(a INT PRIMARY KEY, b TINYINT, c VARCHAR(10)) PARTITION BY KEY(a);
  2. 修改t1表中b列和c列的列类型:

    ALTER TABLE t1 MODIFY COLUMN b INT, MODIFY COLUMN c VARCHAR(30), ALGORITHM=OMC;
  3. 修改t1表中b列的名称和类型,并新增BIGINT类型的e列:

    ALTER TABLE t1 CHANGE COLUMN b d INT, ADD COLUMN e BIGINT AFTER d, ALGORITHM=OMC;