章节15.12。
Online DDL支持即时和就地修改表和并发DML操作。这个功能的优点如下:
- 提高了在生产环境中的响应速度和可用性。在生产环境中,让一张表几分钟甚至几个小时不可用是不现实的。
- 对于就地操作,可以使用LOCK子句在DDL操作期间调整性能和并发性之间的平衡。见The LOCK clause。
- 相比表复制方法,占用更少的磁盘空间,I/O负载更低。
在MySQL8.0.12中,支持ADD COLUMN操作中使用ALGORITHM=INSERT。
通常,你不需要做任何特殊操作来启用Online DDL。如果条件允许的话,MySQL默认会即时或就地执行操作,尽可能的少使用锁。
你可以在ALTER TABLE 语句中使用ALGORITHM和LOCK子句来控制一个DDL操作。这些子句被放在语句末尾,使用逗号和前面的表及列分隔开。例如:
alter table tbl_name ADD PRIMARY KEY (column), ALGORITHM=INPLACE, LOCK=NONE;
LOCK子句可用于原地操作,并可用于对操作期间对表的并发访问进行微调。ALGORITHM子句主要用于性能比较,并且在你遇到问题时可以作为旧的表复制行为的备份。例如:
- 为了避免在就地ALTER TABLE操作期间表突然不可读写,在ALTER TABLE语句中使用LOCK=NONE(允许读和写)或LOCK=SHARED(允许读)。如果并发操作级别不可用,这个操作会立即停止(…)。
- 为了比较不同算法之间的性能,在执行语句时添加ALGORITHM=INSTANT,ALGORITHM=INPLACE,或ALGORITHM=COPY。你可以在通过old_alter_table设置选项来强制使用ALGORITHM=COPY。
- 为了避免复制表的ALTER TABLE操作造成服务器繁忙,使用ALGORITHM=INSTANT 或 ALGORITHM=INPLACE。如果无法使用指定的算法,操作会立即停止。