【问题标题】:AWS RDS out of memory error when adding column添加列时出现 AWS RDS 内存不足错误
【发布时间】:2016-05-20 07:02:50
【问题描述】:

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

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

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

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

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

我们可以成功地重新创建已更改列的表,但在更改表时出现错误。

有人遇到同样的问题吗?

【问题讨论】:

  • 在您执行ALTER TABLE 时,是否有很多更新?
  • 我还检查了显示数据库不忙的显示进程列表
  • 启动 MySQL 守护进程的进程中的ulimit -a 怎么样?您在处理失败之前查看了内存使用情况吗?
  • 如果你没有改变my.cnf中的任何设置,你应该用RDS写一个bug,声称他们的默认设置会导致“内存不足”。

标签: php mysql amazon-web-services innodb aws-rds


【解决方案1】:

我最近看到 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

【讨论】:

    【解决方案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

    【讨论】:

    • 这个答案对我有用。但我不明白的是 AWS 显示内存,或者它低于标准的百分比。我的意思是有足够的内存。而且我的桌子也没有那么大。那为什么会报这个错误呢。
    猜你喜欢
    • 2012-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-12
    • 1970-01-01
    • 2014-02-11
    相关资源
    最近更新 更多