在线DDL功能为即时和就地表更改以及并发DML提供支持。此功能的优点包括:
- 在繁忙的生产环境中提高响应速度和可用性是不切实际的,在生产环境中,使表在几分钟或几小时内不可用。
- 对于就地操作,使用
LOCK
子句在DDL操作期间调整性能与并发之间的平衡的能力。请参见 LOCK子句。 - 与表复制方法相比,磁盘空间使用量和I / O开销更少。
注意
ALGORITHM=INSTANT
ADD COLUMN
MySQL 8.0.12中提供了支持和其他操作。
通常,您无需执行任何特殊操作即可启用在线DDL。默认情况下,MySQL在允许的情况下立即执行操作或在适当的位置执行操作,并且锁定尽可能少。
您可以使用语句的ALGORITHM
and LOCK
子句控制DDL操作的各个方面ALTER TABLE
。这些子句放在语句的末尾,用逗号将它们与表和列的规范分隔开。例如:
ALTER TABLE tbl_name ADD PRIMARY KEY (column), ALGORITHM=INPLACE, LOCK=NONE;
该LOCK
子句可用于就地执行的操作,并且可用于微调操作期间对表的并发访问程度。仅LOCK=DEFAULT
支持立即执行的操作。该ALGORITHM
子句主要用于性能比较,并在遇到任何问题时作为对旧表复制行为的后备。例如:
- 为避免在就地
ALTER TABLE
操作期间意外使表不可用于读取,写入或两者都不可用,请在语句上指定一个子句,ALTER TABLE
例如LOCK=NONE
(允许读写)或LOCK=SHARED
(允许读取)。如果请求的并发级别不可用,该操作将立即停止。 - 为了比较算法之间的性能,运行与语句
ALGORITHM=INSTANT
,ALGORITHM=INPLACE
和ALGORITHM=COPY
。您还可以在old_alter_table
启用配置选项的情况下运行语句,以强制使用ALGORITHM=COPY
。 - 为避免使用
ALTER TABLE
复制表的操作绑定服务器,请使用includeALGORITHM=INSTANT
或ALGORITHM=INPLACE
。如果该语句不能使用指定的算法,则会立即暂停。