เรากำลังใช้งาน MySQL 5.1 บน Windows Server 2008 R2
เราทำการวิเคราะห์บางอย่างในฐานข้อมูลของเราล่าช้าและพบสิ่งรบกวนที่เราไม่สามารถอธิบายได้ เราเพิ่มรหัสเพื่อเข้าสู่ระบบเมื่อเรามีการสืบค้นที่ใช้เวลานาน (> 2000ms) ผลลัพธ์น่าประหลาดใจ (และอาจเป็นคำอธิบายสำหรับการหยุดชะงักของเรา)
แบบสอบถามเป็นครั้งคราวซึ่งโดยปกติจะใช้เวลาน้อยมาก (<10ms) ใช้เวลาตั้งแต่ 4 ถึง 13 วินาที เพื่อความชัดเจนนี่คือข้อความค้นหาที่ทำงานอย่างต่อเนื่อง (หลาย ๆ ครั้งต่อวินาที) และไม่ได้รับผลกระทบจากเวลาในการค้นหาเหล่านี้
เราผ่านดัชนีของเราเพื่อค้นหาข้อผิดพลาดที่ชัดเจนและไม่มีโชคมาก
ปรับปรุง
ตารางผู้คน:
| people | CREATE TABLE `people` (
`people_id` bigint(20) NOT NULL AUTO_INCREMENT,
`company_id` bigint(20) NOT NULL,
`name` varchar(255) DEFAULT NULL,
`password` varchar(255) DEFAULT NULL,
`temp_password` varchar(10) DEFAULT NULL,
`reset_password_hash` varchar(255) DEFAULT NULL,
`email` varchar(255) DEFAULT NULL,
`phone` varchar(32) DEFAULT NULL,
`mobile` varchar(32) DEFAULT NULL,
`iphone_device_id` varchar(160) DEFAULT NULL,
`iphone_device_time` datetime DEFAULT NULL,
`last_checkin` datetime DEFAULT NULL,
`location_lat` double DEFAULT NULL,
`location_long` double DEFAULT NULL,
`gps_strength` smallint(6) DEFAULT NULL,
`picture_blob_id` bigint(20) DEFAULT NULL,
`authority` int(11) NOT NULL DEFAULT '0',
`active` tinyint(1) NOT NULL DEFAULT '1',
`date_created` datetime NOT NULL,
`last_login` datetime NOT NULL,
`panic_mode` tinyint(1) NOT NULL DEFAULT '0',
`battery_level` double DEFAULT NULL,
`battery_state` varchar(32) DEFAULT NULL,
PRIMARY KEY (`people_id`),
KEY `email` (`email`),
KEY `company_id` (`company_id`),
KEY `iphone_device_id` (`iphone_device_id`),
KEY `picture_blob_id` (`picture_blob_id`),
CONSTRAINT `people_ibfk_1` FOREIGN KEY (`company_id`) REFERENCES `companies` (`company_id`) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT `people_ibfk_2` FOREIGN KEY (`picture_blob_id`) REFERENCES `blobs` (`blob_id`) ON UPDATE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=4658 DEFAULT CHARSET=utf8 |
ดัชนี:
+--------+------------+------------------+--------------+------------------+-----------+-------------+----------+--------+------+------------+---------+
| Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment |
+--------+------------+------------------+--------------+------------------+-----------+-------------+----------+--------+------+------------+---------+
| people | 0 | PRIMARY | 1 | people_id | A | 3502 | NULL | NULL | | BTREE | |
| people | 1 | email | 1 | email | A | 3502 | NULL | NULL | YES | BTREE | |
| people | 1 | company_id | 1 | company_id | A | 3502 | NULL | NULL | | BTREE | |
| people | 1 | iphone_device_id | 1 | iphone_device_id | A | 3502 | NULL | NULL | YES | BTREE | |
| people | 1 | picture_blob_id | 1 | picture_blob_id | A | 3502 | NULL | NULL | YES | BTREE | |
+--------+------------+------------------+--------------+------------------+-----------+-------------+----------+--------+------+------------+---------+
เรามีแถว 5,000 แถวในตารางบนเซิร์ฟเวอร์ที่ทำให้เรามีปัญหา