6

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

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

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

我们运行更改表的脚本如下: ALTER TABLE mytablenameADD COLUMN temp_colume varchar(255) NULL AFTER temp_firstcolumn;

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

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

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

4

2 回答 2

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

于 2017-09-07T16:21:45.020 回答
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

于 2016-05-25T23:07:42.143 回答