InnoDB motoru ile verilerini MySQL 5.5 veritabanına kaydeden sanal bir makinede çalışan basit bir web uygulamamız var. Her şey yaklaşık üç yıl boyunca iyi çalıştı, ama aniden aşırı yavaşladı.
Örneğin, adresleri tutan çok basit bir tablo var:
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
Bu tablo yaklaşık 800 giriş tutmaktadır ki bu gerçekten fazla değildir. Ancak sorguyu çalıştırmak
SELECT * FROM addresses
Test amaçlı olarak, hiç bitmiyor gibi görünüyor. Bunu sunucunun üzerindeki mysql CLI ile kontrol ettim: Tablonun bazı satırlarını çıktılar ve daha sonra sonraki satırları çıkana kadar çok bekler.
Bu yüzden belki de veri gönderme aşamasında bir problemdir, ama emin değilim.
VM 2GB RAM'e sahiptir ve sadece 320MB kullanılır. CPU ayrıca çok düşük% 1-2 oranında çalışır. mytop sunucuyu engelleyen başka sorguları göstermez. BT yöneticisi donanım tarafında hiçbir şey değiştirmediklerini söyledi.
Zaten veritabanı sunucusunu yeniden başlatmak, sanal makineyi yeniden başlatmak gibi bir şey denedim. Hiçbir şey yardımcı olmadı.
Düzenle:
EXPLAIN SELECT * FROM addresses
bana bu sonucu verir:
+----+-------------+-----------+------+---------------+------+---------+------+------+-------+
| 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
yavaş çıktı, ancak "> test.txt` eklenir, çok hızlı çalışır. Şimdi bu muhtemelen farklı bir soru olurdu !? Bunu nasıl araştırabilirim?