当我在一个大表上执行alter table命令时,MySQL会锁定所有内容

时间:2013-06-10 18:39:04

标签: mysql processlist

我遇到了MySQL的问题。

我有一张大表(850万条记录),我执行了alter table add index命令。当我这样做时,似乎所有的表都被锁定了。

当我执行list processlist时,我可以看到所有进程都处于睡眠阶段并且alter正在运行。

为什么这会锁定数据库中的所有表?我开始收到超时错误。

我的配置错误是什么?我需要做什么才能再次发生这种情况?

1 个答案:

答案 0 :(得分:0)

也许解决方案就像在ALGORITHM = INPLACE命令中添加ALTER TABLE...ADD INDEX子句一样简单。

去年Online ALTER TABLE in MySQL 5.6的介绍旨在最大限度地减少您报告的影响类型,此类DDL命令可能会导致其他流程出现延迟和超时。

certain limitations影响可能不会影响您的情况,现在可以将更改桌面上的独占锁定所需的时间段缩短为两个“开始和结束时的短暂时间段”。

Overview of Online DDL概述了创建索引(或删除它们)的一些历史和机制,而不需要在以前的某些版本中使用耗时的表复制。

ALTER TABLE的详细语法显示ALGORITHM = INPLACE落在此命令方案中的位置。上面链接的概述有a Summary Grid for Online Status of DDL Operations。虽然ALTER TABLE语法允许您指定LOCK=NONE(或LOCK=SHARED),但默认情况下MySQL 5.6将尝试使用此模式进行在线操作。