Documentation Home
MySQL 8.4 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 39.8Mb
PDF (A4) - 39.9Mb
Man Pages (TGZ) - 257.9Kb
Man Pages (Zip) - 364.9Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 8.4 Reference Manual  /  ...  /  Online DDL Limitations

17.12.8 在线 DDL 限制

在线 DDL 操作存在以下限制:

  • 在创建索引时,对临时表进行复制。

  • ALTER TABLE 子句LOCK=NONE 不允许在表上存在ON...CASCADEON...SET NULL约束时。

  • 在线 DDL 操作完成前,必须等待对该表持有元数据锁的事务提交或回滚。在线 DDL 操作在执行阶段可能需要对表的元数据进行短暂的独占锁,并且总是需要在操作结束时更新表定义时对表的元数据进行独占锁。因此,持有表元数据锁的事务可以导致在线 DDL 操作阻塞。这些持有表元数据锁的事务可能是在在线 DDL 操作开始前或期间启动的。长时间运行或 inactive 的事务,如果持有表元数据锁,可以导致在线 DDL 操作超时。

  • 在执行在线DDL操作时,运行ALTER TABLE语句的线程将应用于同一张表上的其他连接线程同时运行的DML操作的在线日志。当应用DML操作时,即使是临时的重复键错误(ERROR 1062 (23000): Duplicate entry),也可能出现,后续在线日志中的一个条目将会撤销该重复键。这种情况类似于InnoDB中外键约束检查的概念,在事务中约束必须保持有效。

  • OPTIMIZE TABLE语句对InnoDB表进行映射,以重建表、更新索引统计信息和释放聚簇索引中的未使用空间。次要索引不像主键那样高效地创建,因为键是在主键顺序中插入的。OPTIMIZE TABLE支持了在线DDL重建常规和分区InnoDB表的功能。

  • 在 MySQL 5.6 之前创建的表,如果包含时间戳列(DATEDATETIMETIMESTAMP)且未使用ALGORITHM=COPY重建,则不支持ALGORITHM=INPLACE。在这种情况下,执行ALTER TABLE ... ALGORITHM=INPLACE操作将返回以下错误:

    ERROR 1846 (0A000): ALGORITHM=INPLACE is not supported.
    Reason: Cannot change column type INPLACE. Try ALGORITHM=COPY.
  • 对大型表进行在线 DDL 操作时通常存在的一些限制是:

    • 没有机制可以暂停在线 DDL 操作或控制 I/O 或 CPU 使用率以执行在线 DDL 操作。

    • 在线 DDL 操作回滚可能会很昂贵,如果操作失败。

    • 长时间运行的在线 DDL 操作可能会导致复制延迟。在线 DDL 操作在源服务器上完成后才能在副本服务器上执行。此外,在源服务器上并发处理的 DML 只有在副本服务器上的 DDL 操作完成后才会被处理。

    有关运行在线 DDL 操作的大型表的详细信息,请参阅第17.12.2节,“在线 DDL 性能和并发性”