14.13 InnoDB 和在线 DDL

联机 DDL 功能为就地 table 更改和并发 DML 提供支持。此功能的优点包括:

  • 在繁忙的生产环境中提高响应速度和可用性是不切实际的,因为生产环境无法使 table 在数分钟或数小时内不可用。

  • 使用LOCK子句在 DDL 操作期间调整性能和并发性之间平衡的能力。参见LOCK 子句

  • 比 table 复制方法更少的磁盘空间使用和 I/O 开销。

通常,您无需执行任何特殊操作即可启用在线 DDL。默认情况下,MySQL 会在允许的情况下在适当的位置执行操作,并尽可能减少锁定。

您可以使用ALTER TABLE语句的ALGORITHMLOCK子句来控制 DDL 操作的各个方面。这些子句放在语句的末尾,用逗号将其与 table 和列的规范分隔开。例如:

ALTER TABLE tbl_name ADD PRIMARY KEY (column), ALGORITHM=INPLACE, LOCK=NONE;

LOCK子句可用于微调对 table 的并发访问程度。 ALGORITHM子句主要用于性能比较,并作为在遇到任何问题时对较早的 table 复制行为的后备。例如:

  • 为避免意外使 table 不可用于读取和/或写入,请在ALTER TABLE语句上指定一个子句,例如LOCK=NONE(允许读取和写入)或LOCK=SHARED(允许读取)。如果请求的并发级别不可用,该操作将立即停止。

  • 要比较算法之间的性能,请使用ALGORITHM=INPLACEALGORITHM=COPY运行语句。或者,在禁用和启用old_alter_table配置选项的情况下运行语句。

  • 为避免使用复制 table 的ALTER TABLE操作绑定服务器,请包含ALGORITHM=INPLACE。如果无法使用就地机制,该语句将立即暂停。