Ошибка AWS RDS в памяти при добавлении столбца

Мы получили базу данных MySQL на AWS RDS с движком innodb, версия MySQL 5.6.19.

При попытке добавить столбец в таблицу мы получаем сообщение об ошибке ниже:

ОШИБКА 1041 (HY000): недостаточно памяти; проверьте, использует ли mysqld или какой-либо другой процесс всю доступную память; если нет, вам, возможно, придется использовать ‘ulimit’, чтобы позволить mysqld использовать больше памяти, или вы можете добавить больше пространства подкачки

Сценарий, который мы запускаем для изменения таблицы, приведен ниже:
ALTER TABLE mytablename ДОБАВИТЬ КОЛОННУ temp_colume varchar (255) НЕДЕЙСТВИТЕЛЬНО ПОСЛЕ temp_firstcolumn;

Наш RDS на db.m3.2xlarge с 30 ГБ памяти:
Наш размер буфера innodb равен DBInstanceClassMemory * 3/4 ​​~ = 24 ГБ.

Мы можем успешно воссоздать таблицу с уже внесенными в нее изменениями столбцов, но при изменении таблиц получаем ошибку.

Кто-нибудь встречал такую ​​же проблему?

6

Решение

Я видел, как изменения в 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

7

Другие решения

Ошибка была исправлена ​​простой перезагрузкой нашей RDS. После перезагрузки память увеличивается на 1,5 ГБ, у нас было свободной памяти ~ 3,5 ГБ, а сейчас это почти ~ 5 ГБ. Я предполагаю, что сама RDS (ОС) кэшировала часть памяти, но все еще немного смущена, почему она выдает сообщение об ошибке, когда имеется 3,5 ГБ свободной памяти и таблица, которую мы пытались изменить, составляла всего 16 КБ.

Также я нахожу еще одну похожую проблему. Ссылка ниже:
https://dba.stackexchange.com/questions/74432/mysql-rds-instance-eating-up-memory-and-swapping

2