gpt4 book ai didi

MySQL 5.6 - 即使使用 ALGORITHM=inplace 表也会锁定

转载 作者:可可西里 更新时间:2023-11-01 06:37:41 27 4
gpt4 key购买 nike

我正在 MySQL 5.6 数据库上的一个包含 6000 万行的大表上运行以下 ALTER 命令:

ALTER TABLE `large_table` ADD COLUMN `note` longtext NULL, 
ALGORITHM=INPLACE, LOCK=NONE;

尽管同时指定了 ALGORITHM=INPLACELOCK=NONE,但表会被锁定并实质上关闭应用程序,直到迁移完成。

我通过检查 SHOW OPEN TABLES 命令输出中 In_use 列的值验证了该表确实被锁定。它被设置为 1

根据我在 MySQL 文档中收集到的信息,此操作不应锁定表。并且,如果 MySQL 在没有锁的情况下无法继续执行,则该命令应该失败。我将数据库升级到 MySQL 5.7 看它是否更好,但我在 5.7 上也面临同样的问题。

这是预期的行为吗?我如何找出这里出了什么问题?

最佳答案

我假设您几乎同时没有在该表上执行其他 DDL?

对于 future :

8.0.12 为 ADD COLUMN 提供了 ALTER TABLE .. ALGORITHM=INSTANT。参见 DiscussionALTER ReferenceOnline DDL Reference

当使用 INSTANT 算法添加列时,以下限制适用:

  • 添加列不能与不支持 ALGORITHM=INSTANT 的其他 ALTER TABLE 操作合并在同一语句中。
  • 一列只能添加为表格的最后一列。不支持将一列添加到其他列中的任何其他位置。
  • 无法将列添加到使用 ROW_FORMAT=COMPRESSED 的表中。
  • 不能将列添加到包含 FULLTEXT 索引的表中。
  • 不能将列添加到临时表中。临时表仅支持 ALGORITHM=COPY。
  • 无法将列添加到驻留在数据字典表空间中的表。
  • 添加列时不评估行大小限制。但是,在向表中插入和更新行的 DML 操作期间会检查行大小限制。

可以在同一个 ALTER TABLE 语句中添加多个列。

如果您无法升级,请考虑 Percona 的 pt-online-schema-change 或一个新的竞争产品 gh-ost(使用 binlog)。

关于MySQL 5.6 - 即使使用 ALGORITHM=inplace 表也会锁定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54667071/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com