我ALTER
在一个有 6000 万行的大表上的 MySQL 5.6 数据库上运行以下命令:
ALTER TABLE `large_table` ADD COLUMN `note` longtext NULL,
ALGORITHM=INPLACE, LOCK=NONE;
尽管同时指定了ALGORITHM=INPLACE
和LOCK=NONE
,但该表仍会被锁定并基本上关闭应用程序,直到迁移完成。
我通过检查命令In_use
输出中列的值来验证表确实被锁定。SHOW OPEN TABLES
它被设置为1
。
根据我在 MySQL 文档中收集的信息,此操作不应锁定表。而且,如果没有锁就无法继续执行,MySQL 应该会导致命令失败。我将数据库升级到 MySQL 5.7 看看它是否更好,但我在 5.7 上也面临同样的问题。
这是预期的行为吗?我如何找出这里出了什么问题?