เรามีเว็บแอพพลิเคชั่นที่ทำงานบนเครื่องเสมือนที่บันทึกข้อมูลในฐานข้อมูล MySQL 5.5 ด้วยเอ็นจิ้น InnoDB ทุกอย่างทำงานได้ดีประมาณสามปี แต่ทันใดนั้นมันก็ช้ามาก
ตัวอย่างเช่นฉันมีที่อยู่การถือครองตารางที่ง่ายมาก:
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
ตารางนี้มีประมาณ 800 รายการซึ่งไม่มากนัก แต่เรียกใช้แบบสอบถาม
SELECT * FROM addresses
สำหรับวัตถุประสงค์ในการทดสอบดูเหมือนว่าจะไม่จบ ฉันตรวจสอบเรื่องนี้ด้วย mysql CLI บนเซิร์ฟเวอร์เอง: มันแสดงผลบางแถวของตารางแล้วรอนานมากจนกระทั่งมันแสดงผลแถวถัดไป
ดังนั้นอาจเป็นปัญหาในขั้นตอนการส่งข้อมูล แต่ฉันไม่แน่ใจ
VM มี RAM 2GB และมีการใช้งานเพียง 320MB ซีพียูยังทำงานที่ต่ำมาก 1 ถึง 2% mytop จะไม่แสดงข้อความค้นหาอื่น ๆ ที่บล็อกเซิร์ฟเวอร์ ผู้ดูแลระบบไอทีกล่าวว่าพวกเขาไม่ได้เปลี่ยนแปลงอะไรที่ด้านฮาร์ดแวร์
ฉันได้ลองแล้วบางอย่างเช่นการรีสตาร์ทเซิร์ฟเวอร์ฐานข้อมูลรีสตาร์ทเครื่องเสมือน ไม่มีอะไรช่วย
แก้ไข:
EXPLAIN SELECT * FROM addresses
ให้ผลลัพธ์นี้กับฉัน:
+----+-------------+-----------+------+---------------+------+---------+------+------+-------+
| 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
กำลังเอาต์พุตช้า แต่การต่อท้าย `> test.txt` มันทำงานเร็วมาก ตอนนี้อาจเป็นคำถามที่แตกต่างกัน! ฉันจะตรวจสอบเรื่องนี้ได้อย่างไร