• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • 在线DDL限制

    以下限制适用于联机DDL操作:

    • 在上创建索引时,将复制该表TEMPORARY TABLE
    • ALTER TABLE条款LOCK=NONE是否有不允许ON...CASCADEON...SET NULL放在桌子上的约束。
    • 在就地在线DDL操作完成之前,它必须等待持有表上元数据锁的事务提交或回滚。在线DDL操作可能在执行阶段短暂地要求在表上具有排他性元数据锁定,并且在更新表定义时始终在操作的最后阶段需要一个。因此,在表上持有元数据锁的事务可能导致在线DDL操作阻塞。在表上保留元数据锁的事务可能已经在联机DDL操作之前或期间启动。在表上保留元数据锁定的长时间运行或非活动事务可能导致联机DDL操作超时。
    • 当运行就地在线DDL操作时,运行该ALTER TABLE语句的线程将应用DML操作的在线日志,这些DML操作是在其他连接线程的同一表上同时运行的。应用DML操作时,即使重复输入只是临时的,并且会被联机日志中的后续输入还原,也可能会遇到重复的键输入错误(错误1062(23000):重复的输入)。这类似于外键约束检查的想法,InnoDB在该检查中,约束必须在事务处理期间保持。
    • OPTIMIZE TABLE用于InnoDB表被映射到ALTER TABLE操作以重建在聚簇索引表和更新索引的统计和自由未使用的空间。创建辅助索引的效率不高,因为键是按照它们在主键中出现的顺序插入的。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操作或限制联机DDL操作的I / O或CPU使用率。
      • 如果操作失败,则回滚在线DDL操作可能会非常昂贵。
      • 长时间运行的在线DDL操作可能导致复制滞后。在线DDL操作必须在主服务器上运行之前完成,然后再在主服务器上运行。此外,在从属服务器上的DDL操作完成之后,仅在从属服务器上处理在主服务器上同时处理的DML。

      有关在大表上运行在线DDL操作的其他信息,请参见“在线DDL性能和并发性”。