Wir haben die Datenbank bereits zweimal hängen lassen und versucht, eine Ursache zu finden.
show processlist
Waiting for global read lock | INSERT INTO {myisam_table} ...
Hier war der Speicherplatz voll, so dass wir dachten, das Problem sei vorbei, nachdem wir ihm etwas mehr gegeben hatten, aber am nächsten Tag um die Mittagszeit hing es wieder:
show processlist
Waiting for table level lock | UPDATE {myisam_table} ...
Was könnte es verursachen?
MySQL-Standard-Engine: InnoDB.
Die Datenbank enthält eine Mischung aus Tabellen mit MyISAM- und InnoDB-Engines.
Log hier gepostet:
http://arturito.net/2013/08/28/mysql-waiting-for-table-level-lock-errors/
mysqldump
. Haben Sie zu diesem Zeitpunkt ein Backup ausgeführt?SHOW FULL PROCESSLIST
eher, alsSHOW PROCESSLIST
dass wir die gesamte Abfrage für jeden Thread sehen können ... aber so wie es jetztMyISAM
aussieht , wenn es sich um Tabellen handelt, sieht es so aus, als ob die lang laufendeSELECT
Abfrage in 42686 dieUPDATE
Abfrage in 43506 blockiert Dies blockiert wiederum jedeSELECT
darauf folgende Abfrage.Antworten:
ERSTE BEMERKUNGEN
JOIN
,GROUP BY
oderORDER BY
ARBEITSTHEORIE
Wenn Ihnen mit der von Ihnen angegebenen Prozessliste der Speicherplatz ausgeht, können wir die MyISAM-Speicher-Engine dafür verantwortlich machen. Warum?
In Ihrem speziellen Fall ist es nicht eine Ihrer Tabellen. Wenn a
JOIN
,GROUP BY
oderORDER BY
ausgeführt wurde und eine temporäre Tabelle auf die Festplatte geschrieben wurde (auf temporären Datenträgertabellen wird die MyISAM-Speicher-Engine verwendet), friert MySQL einfach ein, wenn nicht genügend Speicherplatz vorhanden ist. Woher weiß ich das ?Gemäß MySQL 5.0 Certification Study Guide
In Abschnitt 29.2 Bulletpoint 11 heißt es:
Ich habe diese Situation schon einmal besprochen
Apr 05, 2013
: "Site Offline" MySQL-Server kann nicht gestartet und gestoppt werdenDec 17, 2012
: Wie löse ich MySQL-Fehler 1114 "Die Tabelle ist voll" mit Amazon RDS?Apr 25, 2012
: Sehr große ProtokolldateienMar 15, 2012
: Warum stürzen MySQL-Tabellen ab? Wie verhindere ich das?Etwas sagt mir, dass Sie eine dieser beiden Situationen haben
/tmp
in der Root-Partition landen , ist der Speicherplatz knappVORSCHLÄGE
Vorschlag 1: Ordnen Sie tmpdir einer anderen Festplatte zu
Vorschlag 2: Erstellen Sie eine RAM-Disk
Führen Sie diesen Code aus, um eine RAM-Disk zu installieren, die beim Linux-Neustart verfügbar ist.
Ordnen Sie dann tmpdir zu
/var/tmpfs
VERSUCHE ES !!!
quelle