1

我在使用 MySQL 时遇到问题。

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

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

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

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

4

1 回答 1

1

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

去年在 MySQL 5.6中引入的 Online ALTER TABLE 旨在最大限度地减少您报告的影响,其中此类 DDL 命令可能导致其他进程延迟和超时。

受限于可能不会影响您的某些限制,正在更改的表上的独占锁所需的时间现在可以减少到两个“开始和结束的短暂时间”。

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

ALTER TABLE的详细语法显示ALGORITHM = INPLACE了该命令方案的位置。上面链接的概述有一个 DDL 操作在线状态的摘要网格。尽管ALTER TABLE语法允许您指定LOCK=NONE(or LOCK=SHARED),但默认情况下 MySQL 5.6 将尝试使用此模式进行在线操作。

于 2013-06-10T23:14:00.393 回答