ERSTE BEMERKUNGEN
- Die Prozess-ID 42686 bereitet die Ausführung einer SELECT-Abfrage vor
- Es gibt einige Schlafverbindungen
- Alle anderen Prozesse können keine Tabellensperre erhalten
- Ich hätte erwartet, dass ein UPDATE, DELETE oder INSERT die Sperre durchführt. Es besteht kein Anspruch auf Eigentum an der betreffenden Tabelle.
- Kann nicht die vollständige Abfrage in Prozess - ID siehe 42686, aber ich vermute , es handelt
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
oder ORDER 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:
Wenn Ihnen beim Hinzufügen von Zeilen zu einer MyISAM-Tabelle nicht genügend Speicherplatz zur Verfügung steht, tritt kein Fehler auf. Der Server unterbricht den Vorgang, bis Speicherplatz verfügbar ist, und schließt den Vorgang dann ab.
Ich habe diese Situation schon einmal besprochen
Etwas sagt mir, dass Sie eine dieser beiden Situationen haben
- festplattenbasierte temporäre Tabellen für Ihre SELECTs und Konkurrenz um Speicherplatz mit Ihren regulären Daten
- Wenn temporäre Tabellen
/tmp
in der Root-Partition landen , ist der Speicherplatz knapp
VORSCHLÄGE
Vorschlag 1: Ordnen Sie tmpdir einer anderen Festplatte zu
[mysqld]
tmpdir = /another/disk/besides/root/partition
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.
RAMDISK_SIZE=32g
service mysql stop
mkdir /var/tmpfs
echo "none /var/tmpfs tmpfs defaults,size=${RAMDISK_SIZE} 1 2" >> /etc/fstab
mount -t tmpfs -o size=${RAMDISK_SIZE} none /var/tmpfs
cp -R /var/lib/mysql/* /var/tmpfs
mv /var/lib/mysql /var/lib/mysql_old
ln -s /var/tmpfs /var/lib/mysql
chown -R mysql:mysql /var/tmpfs
chown -R mysql:mysql /var/lib/mysql
service mysql start
Ordnen Sie dann tmpdir zu/var/tmpfs
VERSUCHE ES !!!
mysqldump
. Haben Sie zu diesem Zeitpunkt ein Backup ausgeführt?