Abbiamo una semplice applicazione Web in esecuzione su una macchina virtuale che salva i suoi dati in un database MySQL 5.5 con il motore InnoDB. Tutto ha funzionato bene per circa tre anni, ma improvvisamente è diventato estremamente lento.
Ad esempio, ho una tabella molto semplice con indirizzi:
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
Questa tabella contiene circa 800 voci, il che in realtà non è molto. Ma eseguendo la query
SELECT * FROM addresses
a scopo di test, sembra non finire mai. L'ho verificato con l'interfaccia della riga di comando mysql sul server stesso: restituisce alcune righe della tabella e quindi attende molto a lungo fino a quando non restituisce le righe successive.
Quindi forse è un problema nella fase di invio dei dati, ma non ne sono sicuro.
La VM ha 2 GB di RAM e vengono utilizzati solo 320 MB. La CPU funziona anche con un minimo dell'1-2%. mytop non mostra altre query che bloccano il server. L'amministratore IT ha affermato di non aver cambiato nulla dal lato hardware.
Ho già provato qualcosa come riavviare il server di database, riavviare la macchina virtuale. Niente ha aiutato.
modificare:
EXPLAIN SELECT * FROM addresses
mi dà questo risultato:
+----+-------------+-----------+------+---------------+------+---------+------+------+-------+
| 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
è molto lenta, ma aggiungendo `> test.txt`, funziona molto velocemente. Ora questa sarebbe probabilmente una domanda diversa !? Come potrei indagare su questo?