Instant DDL

最近更新时间:2024-07-09 14:15:51

我的收藏

适用场景

该功能主要针对在线业务的超大表 DDL 操作实现秒级变更。

功能介绍

通过 instant 算法来避免数据拷贝,进而实现大表快速修改列的功能,不拷贝数据,不占用磁盘空间和磁盘 I/O,业务高峰期可以实现秒级变更。

版本限制

MySQL 5.7 内核小版本2.1.3及以上版本支持此功能。
MySQL 8.0 内核小版本3.1.1及以上版本支持此功能。

使用说明

目前 Instant DDL 支持的操作为 ADD COLUMN。

Instant Add Column 操作说明

MySQL 5.7 内核小版本2.1.3及以上
MySQL 8.0 内核小版本3.1.1至3.1.10
MySQL 8.0 内核小版本3.1.12及以上
2. 在集群列表找到目标集群,在集群管理 > 参数设置页面,查询 innodb_alter_table_default_algorithm 参数的运行值是否为 instant。

若该参数运行值为 instant,则加列操作执行语句如下:
ALTER TABLE t1 ADD COLUMN c INT, ADD COLUMN d INT DEFAULT 1000;
若该参数运行值为 inplace,则加列操作执行语句如下:
ALTER TABLE t1 ADD COLUMN c INT, ADD COLUMN d INT DEFAULT 1000, ALGORITHM=INSTANT;
MySQL 8.0 内核小版本3.1.1至3.1.10,不支持 innodb_alter_table_default_algorithm 参数。 Alter Table 操作支持 algorithm = instant 子句,可通过该子句指定 instant 算法,加列操作执行语句如下:
ALTER TABLE t1 ADD COLUMN c INT, ADD COLUMN d INT DEFAULT 1000, ALGORITHM=INSTANT;
2. 在集群列表找到目标集群,在集群管理 > 参数设置页面,查询 innodb_alter_table_default_algorithm 参数的运行值是否为 instant。

若该参数运行值为 instant,则加列操作执行语句如下:
ALTER TABLE t1 ADD COLUMN c INT, ADD COLUMN d INT DEFAULT 1000;
若该参数运行值为 inplace,则加列操作执行语句如下:
ALTER TABLE t1 ADD COLUMN c INT, ADD COLUMN d INT DEFAULT 1000, ALGORITHM=INSTANT;

Instant Add Column 限制

一条语句中只有加列操作,不支持有其他的操作在同一条语句的情况。
新增列将会放到最后,不支持改变列的顺序。
不支持在行格式为 COMPRESSED 的表上快速加列。
不支持在已经有全文索引的表上快速加列。
不支持在临时表上快速加列。