Мы получили базу данных 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 ГБ.
Мы можем успешно воссоздать таблицу с уже внесенными в нее изменениями столбцов, но при изменении таблиц получаем ошибку.
Кто-нибудь встречал такую же проблему?
Я видел, как изменения в 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
Ошибка была исправлена простой перезагрузкой нашей RDS. После перезагрузки память увеличивается на 1,5 ГБ, у нас было свободной памяти ~ 3,5 ГБ, а сейчас это почти ~ 5 ГБ. Я предполагаю, что сама RDS (ОС) кэшировала часть памяти, но все еще немного смущена, почему она выдает сообщение об ошибке, когда имеется 3,5 ГБ свободной памяти и таблица, которую мы пытались изменить, составляла всего 16 КБ.
Также я нахожу еще одну похожую проблему. Ссылка ниже:
https://dba.stackexchange.com/questions/74432/mysql-rds-instance-eating-up-memory-and-swapping