秒级加字段

更新时间:2025-04-02 05:43:04

使用传统方法执行加列操作时,需重建整个表的数据,这将占用大量的系统资源。PolarDB MySQL集群支持秒级加字段(Instant add column)功能,可以帮助您快速完成对任意大小表的加列操作。

秒级加字段功能采用INSTANT算法执行DDL操作,只需修改数据字典中的元数据,不需要修改或复制存量数据,也不需要重建表。因此,该过程不受表大小的限制,整个DDL操作可在秒级内完成。

前提条件

集群版本需为以下版本之一:

  • PolarDB MySQL5.6版本,且修订版本为5.6.1.0.43及以上。

    说明

    PolarDB MySQL5.6版本的秒级加列功能目前处于灰度阶段。如需使用,请前往配额中心,根据配额IDpolardb_mysql_iac_56找到配额名称,在对应的操作列单击申请来开通该功能。

  • PolarDB MySQL5.7版本,且修订版本为5.7.1.0.6及以上。

    说明

    您需要先开启loose_innodb_support_instant_add_column参数才能在PolarDB MySQL5.7版本的集群上使用该功能。

  • PolarDB MySQL8.0版本。

    说明

    PolarDB MySQL8.0版本的集群默认支持秒级加字段功能,无需配置任何参数。

您可以通过查询版本号来确认集群的修订版本。

使用限制

  • 新增列只能为表的最后一列。

  • 添加虚拟列:

    • PolarDB MySQL5.6版本与5.7版本:不支持

    • PolarDB MySQL8.0版本:支持

  • 分区表秒级添加字段:

    • PolarDB MySQL5.6版本:不支持。

    • PolarDB MySQL5.7版本与8.0版本:支持。

      说明

      PolarDB MySQL5.7版本的分区表秒级添加字段功能目前处于灰度阶段。如需使用,请前往配额中心,根据配额IDpolarM_57_iac_on_partition_table找到配额名称,在对应的操作列单击申请来开通该功能。

  • 不支持使用了全文索引的表。

  • 支持在存在列存索引的表上执行秒级加字段操作,但需满足如下条件:

    • PolarDB MySQL8.0.1.1.42以下版本、8.0.2.2.23以下版本: 需将参数imci_enable_add_column_instant_ddl设置为ON。开启该参数后,执行秒级加字段操作会导致列存索引在后台静默重建,重建期间列存索引不可用。

    • PolarDB MySQL8.0.1.1.42及以上版本、8.0.2.2.23及以上版本: 需将参数imci_enable_add_column_instant_ddl设置为OFF

  • 不支持开启了implicit_primary_key选项且未自定义主键的表。

  • 不支持在同一条SQL中同时执行其它DDL操作(如添加索引等)和秒级加字段操作。

使用方法

参数配置

  • PolarDB MySQL5.6版本和5.7版本的集群:您需要开启参数loose_innodb_support_instant_add_column来使用秒级加字段功能。

    参数

    级别

    说明

    参数

    级别

    说明

    loose_innodb_support_instant_add_column

    Global

    秒级加字段功能的开关,取值范围如下:

    1. ON:开启秒级加字段功能。

    2. OFF(默认):关闭秒级加字段功能。

  • PolarDB MySQL8.0版本的集群:您无需配置该参数即可直接使用秒级加字段功能。

使用语法

  • 通过指定ALGORITHM=INSTANT以强制使用秒级加字段功能,语句示例如下:

    ALTER TABLE <table_name> ADD COLUMN <column_name> int, ALGORITHM=INSTANT;
    说明

    使用上述语句时,若返回ERROR 0A000: ALGORITHM=INSTANT is not supported for this operation. Try ALGORITHM=COPY/INPLACE. 的错误,表示当前加列操作不能以INSTANT算法执行。建议您查看loose_innodb_support_instant_add_column参数是否已开启,并仔细核对使用限制

  • 不指定ALGORITHM或指定ALGORITHM=DEFAULTPolarDB会自行选择执行速度最快的算法来执行加列操作,语句示例如下:

    ALTER TABLE <table_name> ADD COLUMN <column_name> int, ALGORITHM=DEFAULT;
    ALTER TABLE <table_name> ADD COLUMN <column_name> int;
    说明

    PolarDB算法选择的优先级为INSTANT>INPLACE>COPY。

查看通过INSTANT算法增加的列信息

  • PolarDB MySQL5.6版本和5.7版本的集群INFORMATION_SCHEMA数据库中新增了INNODB_SYS_INSTANT_COLUMNS表。该表记录了使用INSTANT算法增加的列信息,例如列名、列序号和默认值(二进制方式存储)等。您可通过如下语句查看该表详情来确认新增的列信息。

    SELECT * FROM INFORMATION_SCHEMA.INNODB_SYS_INSTANT_COLUMNS;
    说明

    对目标表使用了INSTANT算法增加列后,如果执行了重建表的DDL操作(如DROP COLUMN)后,INNODB_SYS_INSTANT_COLUMNS表中该表的所有INSTANT列记录将被清除。

  • PolarDB MySQL8.0版本的集群:您可通过如下语句查看表的列信息,若查询结果中has_default列为1,则说明该列是通过INSTANT算法增加的。

    SELECT * FROM INFORMATION_SCHEMA.INNODB_COLUMNS WHERE TABLE_ID = (SELECT TABLE_ID FROM INFORMATION_SCHEMA.INNODB_TABLES WHERE NAME = "<database_name>/<table_name>");

相关视频

秒级加字段

联系我们

若您对DDL操作有任何疑问,可通过钉钉搜索群号入群咨询。您可以直接@群内专家,并附上您要咨询的问题;同时群内也有PolarDB MySQL小助手24*7小时在线回答您的问题。钉钉群号:15375044501。

  • 本页导读 (1)
  • 前提条件
  • 使用限制
  • 使用方法
  • 参数配置
  • 使用语法
  • 查看通过INSTANT算法增加的列信息
  • 相关视频
  • 联系我们