Chúng tôi có một ứng dụng web đơn giản chạy trên máy ảo lưu dữ liệu của nó trong cơ sở dữ liệu MySQL 5.5 với công cụ InnoDB. Mọi thứ hoạt động tốt trong khoảng ba năm, nhưng đột nhiên nó trở nên cực kỳ chậm.
Ví dụ, tôi có một địa chỉ giữ bảng rất đơn giản:
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
Bảng này chứa khoảng 800 mục thực sự không nhiều. Nhưng chạy truy vấn
SELECT * FROM addresses
cho mục đích thử nghiệm, nó dường như không bao giờ kết thúc. Tôi đã kiểm tra điều này với mysql CLI trên máy chủ: Nó xuất ra một số hàng của bảng và sau đó đợi rất lâu cho đến khi nó xuất ra các hàng tiếp theo.
Vì vậy, có thể đó là một vấn đề trong giai đoạn gửi dữ liệu, nhưng tôi không chắc chắn.
VM có 2GB RAM và chỉ có 320 MB được sử dụng. CPU cũng chạy ở mức rất thấp 1 đến 2%. mytop không hiển thị bất kỳ truy vấn nào khác đang chặn máy chủ. Quản trị viên CNTT nói rằng họ không thay đổi bất cứ điều gì ở phía phần cứng.
Tôi đã thử một số thứ như khởi động lại máy chủ cơ sở dữ liệu, khởi động lại máy ảo. Không có gì giúp được.
biên tập:
EXPLAIN SELECT * FROM addresses
cho tôi kết quả này:
+----+-------------+-----------+------+---------------+------+---------+------+------+-------+
| 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
là đầu ra chậm, nhưng thêm `> test.txt`, nó chạy rất nhanh. Bây giờ đây có lẽ sẽ là một câu hỏi khác!? Làm thế nào tôi có thể điều tra về điều này?