2016-05-20 2 views
6

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

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

ERROR 1041 (HY000): Из памяти; проверьте, использует ли mysqld или какой-либо другой процесс всю доступную память; если нет, то вы, возможно, придется использовать «ULIMIT», чтобы позволить туздЫ использовать больше памяти или вы можете добавить больше пространства подкачки

Сценарий мы бежим, чтобы изменить таблицу ниже: ALTER TABLE mytablename ADD COLUMN temp_colume VARCHAR (255) NULL AFTER temp_firstcolumn;

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

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

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

+0

Есть ли возможно много обновлений на столе в то время как вы делаете 'ALTER TABLE'? –

+0

Я также проверил список SHOW PROCESS LIST, который показывает, что DB не занят –

+0

Как насчет 'ulimit -a' из процесса, который запускает демон MySQL? Вы рассматривали использование памяти, поскольку она обрабатывалась, прежде чем она не удалась? –

ответ

2

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

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

+1

Этот ответ сработал для меня. Но то, что я не понял, - это память AWS, или ее процент ниже номинала. Я имею в виду, что хватило памяти. И мой стол тоже был не таким большим. Тогда зачем давать эту ошибку. –

7

Я видел, как в последнее время меняются в RDS. поддержка AWS рекомендуется модифицировать альтер заявление таблицы, чтобы выглядеть следующим образом:

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

+0

это получило это за меня спасибо! – Rippo

Смежные вопросы