Nous avons une application Web simple fonctionnant sur une machine virtuelle qui enregistre ses données dans une base de données MySQL 5.5 avec le moteur InnoDB. Tout a bien fonctionné pendant environ trois ans, mais soudain, cela est devenu extrêmement lent.
Par exemple, j'ai une table très simple contenant des adresses:
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
Ce tableau contient environ 800 entrées, ce qui n'est vraiment pas beaucoup. Mais exécuter la requête
SELECT * FROM addresses
à des fins de test, il semble ne jamais finir. J'ai vérifié cela avec la CLI mysql sur le serveur lui-même: il sort quelques lignes de la table puis attend très longtemps jusqu'à ce qu'il sorte les lignes suivantes.
C'est peut-être un problème dans la phase d'envoi de données, mais je ne suis pas sûr.
La machine virtuelle a 2 Go de RAM et seulement 320 Mo sont utilisés. Le CPU fonctionne également à très faible 1 à 2%. mytop n'affiche aucune autre requête bloquant le serveur. L'administrateur informatique a déclaré qu'il n'avait rien changé du côté matériel.
J'ai déjà essayé quelque chose comme redémarrer le serveur de base de données, redémarrer la machine virtuelle. Rien n'a aidé.
Éditer:
EXPLAIN SELECT * FROM addresses
me donne ce résultat:
+----+-------------+-----------+------+---------------+------+---------+------+------+-------+
| 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
est lente, mais en ajoutant `> test.txt`, elle s'exécute très rapidement. Maintenant, ce serait probablement une question différente!? Comment pourrais-je enquêter là-dessus?