MySQL 8.4 Release Notes
17.12 InnoDB 和在线 DDL
在线 DDL 功能提供了实时和在位表结构更改的支持,同时也支持并发 DML。该功能的优点包括:
-
在繁忙生产环境中提高响应性和可用性,避免将表 unavailable数分钟或小时。
-
对于在位操作,可以使用
LOCK
子句调整性能和并发性之间的平衡。请参阅The LOCK 子句。 -
使用在线 DDL 可以减少磁盘空间使用和 I/O 过head比传统的表复制方法。
通常,您不需要执行任何特殊操作来启用在线 DDL。默认情况下,MySQL 会尽量快速或在位地执行操作,以尽量减少锁定。
您可以使用ALTER TABLE
语句的ALGORITHM
和LOCK
子句来控制DDL操作的某些方面。这些子句位于语句末尾,使用逗号分隔表名和列名。例如:
ALTER TABLE tbl_name ADD PRIMARY KEY (column), ALGORITHM=INPLACE;
LOCK
子句用于在原地执行的操作,可以用来 fine-tuning 表中的并发访问程度。在瞬间执行的操作中,只支持LOCK=DEFAULT
。ALGORITHM
子clause主要用于性能比较和作为fallback,用于在遇到问题时恢复旧的表副本行为。例如:
-
为了避免意外地使表不可读写或同时不可读写,在执行原地
ALTER TABLE
操作时,指定LOCK=NONE
(允许读写)或LOCK=SHARED
(允许读)子句。如果请求的并发级别不可用,操作将立即中止。 -
为了比较算法的性能,运行一个语句使用
ALGORITHM=INSTANT
、ALGORITHM=INPLACE
和ALGORITHM=COPY
。您还可以使用old_alter_table
配置选项来强制使用ALGORITHM=COPY
。 -
为了避免将服务器锁定在一个
ALTER TABLE
操作中,该操作将复制表,包括ALGORITHM=INSTANT
或ALGORITHM=INPLACE
。如果语句不能使用指定的算法,它将立即停止。