2016-05-20 10 views
6

Wir haben MySQL-Datenbank auf AWS RDS mit InnoDB-Engine ist die MySQL-Version 5.6.19.AWS RDS aus Speicherfehler beim Hinzufügen von Spalte

Wenn eine Spalte in einer Tabelle hinzuzufügen versuchen, erhalten wir die Fehlermeldung unter:

ERROR 1041 (HY000): Nicht genügend Arbeitsspeicher; Überprüfen Sie, ob mysqld oder ein anderer Prozess den gesamten verfügbaren Speicher verwendet; wenn nicht, können Sie ‚ulimit‘ verwenden, um mysqld zu erlauben mehr Arbeitsspeicher zu verwenden, oder Sie können den Swap-Bereich

Das Skript wir Tabelle ausführen hinzufügen zu ändern ist unten: ALTER TABLE mytablename ADD COLUMN temp_colume varchar (255) NULL NACH temp_firstcolumn;

Unser RDS ist auf db.m3.2xlarge mit 30GB Speicher: Unsere innodb Puffergröße DBInstanceClassMemory ist * 3/4 ​​~ = 24GB

Wir können erfolgreich die Tabelle mit den Spaltenänderungen neu erstellt bereits gemacht es, aber wir bekommen Fehler beim Ändern von Tabellen.

Hat das gleiche Problem jemand treffen?

+0

möglicherweise eine Menge Updates auf dem Tisch gibt, während Sie den 'ALTEN TABLE' tun? –

+0

Ich habe auch die SHOW PROCESS LIST überprüft, die zeigt, dass die DB nicht beschäftigt ist. –

+0

Wie wäre es mit 'ulimit -a' aus dem Prozess, der den MySQL-Daemon startet? Haben Sie sich die Speicherauslastung während der Verarbeitung angesehen, bevor sie fehlgeschlagen ist? –

Antwort

2

Der Fehler wurde durch einfaches Fest unserer RDS Neustart. Nach dem Neustart erhöht sich der Speicher um 1,5 GB, wir hatten einen freien Speicher von ~ 3,5 GB und jetzt sind es fast ~ 5 GB. Ich vermute, das RDS selbst (OS) zwischengespeichert etwas Speicher, aber immer noch ein wenig verwirrt, warum gab es Fehlermeldung, wenn 3,5 GB freier Speicher und die Tabelle, die wir versuchten zu ändern, das war nur 16KB.

Auch finde ich ein ähnliches Problem. Der Link ist unten: https://dba.stackexchange.com/questions/74432/mysql-rds-instance-eating-up-memory-and-swapping

+1

Diese Antwort funktionierte für mich. Aber was ich nicht verstanden habe, ist AWS Show-Speicher, oder sein Prozentsatz unter Par. Ich meine, es gab genug Speicher. Und mein Tisch war auch nicht so groß. Warum also diesen Fehler geben. –

7

Ich habe Inplace-Alter in RDS zuletzt fehlgeschlagen gesehen. AWS Unterstützung empfohlen, die alte table-Anweisung modifiziert wie folgt aussehen:

ALTER TABLE tbl ADD COLUMN abc varchar(123) AFTER zyx, ALGORITHM=COPY 

Das Geheimnis

, ALGORITHM=COPY 

bis zum Ende als Arbeits um hinzuzufügen ist.

Sie könnten auch die Instanz RDS Failover https://dev.mysql.com/doc/refman/5.7/en/alter-table.html

+0

das hat es für mich dank! – Rippo

Verwandte Themen