文档主页
MySQL 8.4 参考手册
相关文档 下载本手册
PDF (US Ltr) - 39.9Mb
PDF (A4) - 40.0Mb
手册页 (TGZ) - 258.5Kb
手册页 (Zip) - 365.5Kb
信息 (Gzip) - 4.0Mb
信息 (Zip) - 4.0Mb


MySQL 8.4 参考手册  /  InnoDB 存储引擎  /  InnoDB 与在线 DDL

17.12 InnoDB 与在线 DDL

在线 DDL 功能支持即时和就地表更改以及并发 DML。此功能的优势包括:

  • 在繁忙的生产环境中提高了响应速度和可用性,在这些环境中,使表不可用几分钟或几小时是不切实际的。

  • 对于就地操作,可以使用 LOCK 子句在 DDL 操作期间调整性能和并发性之间的平衡。请参阅LOCK 子句

  • 与表复制方法相比,磁盘空间使用量和 I/O 开销更少。

通常,您不需要执行任何特殊操作即可启用在线 DDL。默认情况下,MySQL 会在允许的情况下立即或就地执行操作,并尽可能减少锁定。

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

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

LOCK 子句可用于就地执行的操作,并且可用于微调操作期间对表的并发访问程度。对于即时执行的操作,仅支持 LOCK=DEFAULTALGORITHM 子句主要用于性能比较,以及在遇到任何问题时回退到旧的表复制行为。例如:

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

  • 要比较算法之间的性能,请使用 ALGORITHM=INSTANTALGORITHM=INPLACEALGORITHM=COPY 运行语句。您还可以使用启用了 old_alter_table 配置选项的语句来强制使用 ALGORITHM=COPY

  • 为避免使用复制表的 ALTER TABLE 操作占用服务器,请包含 ALGORITHM=INSTANTALGORITHM=INPLACE。如果无法使用指定的算法,则该语句将立即停止。