Wir haben eine einfache Webanwendung, die auf einer virtuellen Maschine ausgeführt wird, die ihre Daten in einer MySQL 5.5-Datenbank mit der InnoDB-Engine speichert. Etwa drei Jahre lang hat alles gut funktioniert, aber plötzlich wurde es extrem langsam.
Zum Beispiel habe ich eine sehr einfache Tabelle mit Adressen:
CREATE TABLE `addresses` (
`address_id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(64) CHARACTER SET latin1 NOT NULL,
`firstname` varchar(64) CHARACTER SET latin1 NOT NULL,
`street` varchar(64) CHARACTER SET latin1 NOT NULL,
`housenumber` varchar(16) CHARACTER SET latin1 NOT NULL,
`zip` varchar(5) CHARACTER SET latin1 NOT NULL,
`city` varchar(64) CHARACTER SET latin1 NOT NULL,
`email` varchar(64) CHARACTER SET latin1 NOT NULL,
`phone` varchar(16) CHARACTER SET latin1 NOT NULL,
`birthdate` date NOT NULL,
PRIMARY KEY (`address_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin
Diese Tabelle enthält ungefähr 800 Einträge, was wirklich nicht viel ist. Aber die Abfrage ausführen
SELECT * FROM addresses
zu Testzwecken scheint es nie zu Ende zu sein. Ich habe dies mit der MySQL-CLI auf dem Server selbst überprüft: Sie gibt einige Zeilen der Tabelle aus und wartet dann sehr lange, bis die nächsten Zeilen ausgegeben werden.
Vielleicht ist es ein Problem in der Datenversandphase, aber ich bin mir nicht sicher.
Die VM verfügt über 2 GB RAM und es werden nur 320 MB verwendet. Die CPU läuft auch mit sehr niedrigen 1 bis 2%. mytop zeigt keine anderen Abfragen an, die den Server blockieren. Der IT-Administrator sagte, dass er auf der Hardwareseite nichts geändert habe.
Ich habe bereits versucht, den Datenbankserver neu zu starten und die virtuelle Maschine neu zu starten. Nichts hat geholfen.
bearbeiten:
EXPLAIN SELECT * FROM addresses
gibt mir dieses Ergebnis:
+----+-------------+-----------+------+---------------+------+---------+------+------+-------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-----------+------+---------------+------+---------+------+------+-------+
| 1 | SIMPLE | addresses | ALL | NULL | NULL | NULL | NULL | 793 | |
+----+-------------+-----------+------+---------------+------+---------+------+------+-------+
1 row in set (0.00 sec)
mysql -u username -ppassword mydb -e 'SELECT * FROM addresses
wird langsam ausgegeben, aber das Anhängen von `> test.txt` wird sehr schnell ausgeführt. Nun wäre das wahrscheinlich eine andere Frage!? Wie könnte ich das untersuchen?