我遇到了MySQL的问题。
我有一张大表(850万条记录),我执行了alter table add index
命令。当我这样做时,似乎所有的表都被锁定了。
当我执行list processlist
时,我可以看到所有进程都处于睡眠阶段并且alter正在运行。
为什么这会锁定数据库中的所有表?我开始收到超时错误。
我的配置错误是什么?我需要做什么才能再次发生这种情况?
答案 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将尝试使用此模式进行在线操作。