Tenemos una aplicación web simple que se ejecuta en una máquina virtual que guarda sus datos en una base de datos MySQL 5.5 con el motor InnoDB. Todo funcionó bien durante unos tres años, pero de repente se volvió extremadamente lento.
Por ejemplo, tengo una tabla muy simple que contiene direcciones:
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
Esta tabla contiene alrededor de 800 entradas, lo que realmente no es mucho. Pero ejecutando la consulta
SELECT * FROM addresses
para fines de prueba, parece que nunca termina. Verifiqué esto con la CLI de mysql en el propio servidor: genera algunas filas de la tabla y luego espera mucho tiempo hasta que genera las siguientes filas.
Entonces, tal vez sea un problema en la fase de envío de datos, pero no estoy seguro.
La VM tiene 2 GB de RAM y solo se utilizan 320 MB. La CPU también funciona a muy bajo 1 a 2%. mytop no muestra ninguna otra consulta que esté bloqueando el servidor. El administrador de TI dijo que no cambiaron nada en el lado del hardware.
Ya probé algo como reiniciar el servidor de la base de datos, reiniciar la máquina virtual. Nada ayudó
editar:
EXPLAIN SELECT * FROM addresses
me da este resultado:
+----+-------------+-----------+------+---------------+------+---------+------+------+-------+
| 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
es lenta, pero agregando `> test.txt`, se ejecuta muy rápido. ¡¿Ahora esta probablemente sería una pregunta diferente ?! ¿Cómo podría investigar sobre esto?