14.13 InnoDB 和在线 DDL
联机 DDL 功能为就地 table 更改和并发 DML 提供支持。此功能的优点包括:
-
在繁忙的生产环境中提高响应速度和可用性是不切实际的,因为生产环境无法使 table 在数分钟或数小时内不可用。
-
使用
LOCK
子句在 DDL 操作期间调整性能和并发性之间平衡的能力。参见LOCK 子句。 -
比 table 复制方法更少的磁盘空间使用和 I/O 开销。
通常,您无需执行任何特殊操作即可启用在线 DDL。默认情况下,MySQL 会在允许的情况下在适当的位置执行操作,并尽可能减少锁定。
您可以使用ALTER TABLE语句的ALGORITHM
和LOCK
子句来控制 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=INPLACE
和ALGORITHM=COPY
运行语句。或者,在禁用和启用old_alter_table配置选项的情况下运行语句。 -
为避免使用复制 table 的ALTER TABLE操作绑定服务器,请包含
ALGORITHM=INPLACE
。如果无法使用就地机制,该语句将立即暂停。