添加列时AWS RDS内存不足错误

I.8*_*.83 6 php mysql innodb amazon-web-services aws-rds

我们在AWS RDS上使用innodb引擎获得MySQL数据库,MySQL版本为5.6.19.

尝试在表中添加列时,我们会收到以下错误消息:

ERROR 1041(HY000):内存不足; 检查mysqld或其他进程是否使用了所有可用内存; 如果没有,你可能必须使用'ulimit'来允许mysqld使用更多的内存,或者你可以添加更多的交换空间

我们运行到alter table的脚本如下:ALTER TABLE mytablenameADD COLUMN temp_colume varchar(255)NULL temp_firstcolumn;

我们的RDS在db.m3.2xlarge上,内存为30GB:我们的innodb缓冲区大小为DBInstanceClassMemory*3/4~ = 24GB

我们可以使用已经对其进行的列更改成功地重新创建表,但是在更改表时我们会收到错误.

有没有人遇到同样的问题?

小智 7

我最近看到RDS中的内部改变失败了.AWS支持建议将alter table语句修改为如下所示:

ALTER TABLE tbl ADD COLUMN abc varchar(123) AFTER zyx, ALGORITHM=COPY
Run Code Online (Sandbox Code Playgroud)

秘诀就是补充一下

, ALGORITHM=COPY
Run Code Online (Sandbox Code Playgroud)

到最后作为一种解决方法.

您还可以故障转移RDS实例 https://dev.mysql.com/doc/refman/5.7/en/alter-table.html


I.8*_*.83 2

只需重新启动 RDS 即可修复该错误。重新启动后,内存增加了 1.5 GB,我们的可用内存约为 3.5 GB,现在接近 5 GB。我猜测 RDS 本身(操作系统)缓存了一些内存,但仍然有点困惑为什么它在拥有 3.5 GB 可用内存而我们尝试更改的表只有 16KB 时给出错误消息。

另外,我还发现了另一个类似的问题。链接如下: https://dba.stackexchange.com/questions/74432/mysql-rds-instance-eating-up-memory-and-swapping