我们在AWS RDS上使用innodb引擎获得MySQL数据库,MySQL版本为5.6.19。
尝试在表格中添加列时,我们会收到以下错误消息:
错误1041(HY000):内存不足;检查mysqld或其他进程是否使用了所有可用内存;如果没有,您可能必须使用'ulimit'来允许mysqld使用更多内存,或者您可以添加更多交换空间
我们运行alter table的脚本如下:
ALTER TABLE mytablename
ADD COLUMN temp_colume varchar(255)NULL after temp_firstcolumn;
我们的RDS位于带有30GB内存的db.m3.2xlarge上: 我们的innodb缓冲区大小是DBInstanceClassMemory * 3 / 4~ = 24GB
我们可以使用已经对其进行的列更改成功地重新创建表,但是在更改表时我们会收到错误。
有没有人遇到同样的问题?
答案 0 :(得分:7)
我最近看到RDS中的内部变化失败了。 AWS支持建议将alter table语句修改为如下所示:
ALTER TABLE tbl ADD COLUMN abc varchar(123) AFTER zyx, ALGORITHM=COPY
秘诀是添加
, ALGORITHM=COPY
到最后作为解决方法。
您还可以故障转移RDS实例 https://dev.mysql.com/doc/refman/5.7/en/alter-table.html
答案 1 :(得分:2)
只需重新启动RDS即可解决错误。重新启动后,内存增加1.5 GB,我们有可用内存~3.5 GB,现在几乎是〜5 GB。我猜测RDS本身(OS)缓存了一些内存,但仍然有点困惑,为什么它在有3.5 GB可用内存时给出错误消息,而我们试图改变的表只有16KB。
另外,我发现了另一个类似的问题。链接如下: https://dba.stackexchange.com/questions/74432/mysql-rds-instance-eating-up-memory-and-swapping