RDS for MySQL 5.6 使用 alter table 修改大表时锁表时间过长的解决方法

RDS for MySQL 5.6 使用 alter table 修改大表时锁表时间过长的解决方法

更新时间:2017-06-07 13:26:11

 

从MySQL5.6开始,Online DDL特性被引进。增强了很多种类的 alter Table操作, 避免拷贝表和锁表,在运行 alter table 操作的同时允许运行 select,insert,update,delete语句。

因此在最新版本,我们可以通过使用 ALGORITHM 和 LOCK 选项抑制文件拷贝和加锁。但是即使在MySQL5.6,仍然有一些 alter table 操作需要重建表,比如增加/删除列,增加/删除主键,改变数据类型等。

通过 ALGORITHM=INPLACE 和 ALGORITHM=COPY 两种不同算法模式下, 分别删除和新增一个字段。

1. ALGORITHM=INPLACE(online ddl) 模式中, 删除和增加字段时可以进行DML操作,但是由于数据要重组,alter table 时间比较长。

2.  在ALGORITHM=COPY 模式中,因为要拷贝表和锁表, 所以在执行过程中DML操作都会等待metadata lock,但是执行Alter时间要比ALGORITHM=INPLACE短很多。

总结: 建议 alter table 时加上algorithm = copy 可以大大缩短锁等待时间. 

示例: 对 表ttt添加sid 列,默认为0

alter table ttt algorithm=copy, add column sid int not null default 0 ;

 

 

 

如果问题还未能解决,请联系售后技术支持