我有一个托管在智能云上的数据库(https://www.clever-cloud.com/pricing - MySQL插件大小LM:内存1GB&2 vCPUS)。我有一个使用InnoDb引擎的表,有188,000行,大约是311MB。
当我试图删除表的一列(此列没有索引)时,我在phpMyAdmin中得到以下错误:
2006年- MySQL服务器已经消失。
错误发生时的MySQL日志:https://gist.github.com/urcadox/038c180cefdcba20e1052e7418a43324
我已经看到,InnoDb引擎使用内存创建一个新表,在没有删除列的情况下复制数据,并切换旧表和新表来执行删除操作。
谢谢!
发布于 2016-08-03 15:25:26
为什么不在表更改查询中尝试ALGORITHM=COPY?它是更改表语法的一部分,它强制表被复制,而不是被修改到位。它的内存使用率可能会更低。但某些警告是适用的
任何使用ALGORITHM=COPY子句运行的ALTER操作都会阻止并发DML操作。仍然允许并发查询。也就是说,表复制操作总是至少包括LOCK=SHARED的并发限制(允许查询,而不是DML)。您可以通过指定LOCK=EXCLUSIVE来进一步限制此类操作的并发性,这可以防止DML和查询。
https://stackoverflow.com/questions/38747309
复制相似问题