以下限制适用于在线DDL操作:
在创建索引时,该表将复制
临时表
.这
改变表
条款锁定=无
如果有是不允许的在……级联
或者在…设置为空
在表上的约束。在就地在线DDL操作之前,它必须等待在表上保存元数据锁的事务来提交或回滚。在线DDL操作可能在执行阶段期间简要要求在表中的独占元数据锁定,并且在更新表定义时始终需要在操作的最终阶段中的一个。因此,持有表上元数据锁的事务可能导致在线DDL操作阻止。在在线DDL操作之前或期间,可以启动表格上的元数据锁的交易。在表上保存元数据锁定的长期运行或非活动事务可能会导致在线DDL操作到超时。
在进行就地在线DDL操作时,运行的线程
改变表
声明应用从其他连接线程同时运行的DML操作的在线日志。应用DML操作时,可以遇到重复的密钥输入错误(错误1062(23000):重复的条目),即使重复的条目只是临时的,并将由在线日志中的稍后条目恢复。这类似于外键约束签入的概念Innodb.
在事务期间,约束必须保持。优化表
为Innodb.
表被映射到改变表
操作要重建表并在群集索引中更新索引统计信息和免费未使用的空间。辅助索引不是有效地创建的,因为按照它们在主键中出现的顺序插入键。优化表
通过添加在线DDL支持来重建常规和分区Innodb.
表。MySQL 5.6之前创建的表,包括时态列(
日期
那DATETIME
或者时间戳
),尚未重建使用算法=拷贝
不支持算法= inplace.
.在这种情况下ALTER TABLE……算法= inplace.
操作返回以下错误:ERROR 1846 (0A000): ALGORITHM=INPLACE不支持。原因:不能更改列类型INPLACE。试算法=复制。
以下限制通常适用于对大型表进行的在线DDL操作,这些操作需要重新构建表:
没有机制可以暂停在线DDL操作或限制在线DDL操作的I/O或CPU使用。
如果操作失败,则回滚在线DDL操作可能昂贵。
长期运行在线DDL操作可能导致复制滞后。在源之前必须在源上运行在线DDL操作。此外,在副本上的DDL操作完成后,同时处理的DML仅在源上处理。
有关在大型表上运行在线DDL操作的其他信息,请参阅第15.12.2节,“在线DDL性能和并发性”.