alter 添加字段
5.7 默认是algorithm=inplace以及lock=none来进行DDL操作,但是添加列整个执行过程中也会部分涉及到Copy Table。
如果有碎片比较大,因为会copy表会碎片整理, 添加字段成功后有可能磁盘使用空间降低,添加过程中磁盘使用量上生
是否支持Inplace方式:对应DDL语句的Algorithm选项,通过Inplace方式执行DDL。相比Copy Table的方式,可以减少空间和I/O消耗。
是否需要Copy Table:对应DDL语句的Algorithm选项,通过Copy Table的方式执行DDL。DDL执行期间会占用更大的磁盘空间和消耗更多的I/O。
是否允许并发DML:对应DDL语句的Lock选项,DDL执行期间是否支持并发DML操作。
是否允许并发查询:DDL语句执行期间是否支持并发查询操作(通常都是支持的)。
MySQL官方文档请参见Online DDL 概览。
DDL操作执行时需要修改表的元数据(metadata),有可能会遇到等待表元数据锁的情况(waiting for table metadata lock),该情况的处理方式请参见解决MDL锁导致无法操作数据库的问题。
Inplace和Copy Table是相反的2种处理方式;但即使DDL支持Inplace选项,某些操作在整个执行过程中也会部分涉及到Copy Table,例如上表中的添加列操作。
。
https://help.aliyun.com/zh/rds/apsaradb-rds-for-mysql/how-do-i-perform-ddl-operations-online-on-apsaradb-rds-for-mysql?scm=20140722.S_help%40%40%E6%96%87%E6%A1%A3%40%402632475.S_BB2%40bl%2BRQW%40ag0%2BBB1%40ag0%2Bos0.ID_2632475-RL_INPLACE-LOC_doc%7EUND%7Eab-OR_ser-V_4-P0_1&spm=a2c4g.11186623.0.i11
https://dev.mysql.com/doc/refman/5.7/en/innodb-online-ddl-operations.html