วิธีค้นหาและแก้ไข Query ที่ช้าหรือไม่ index ใน MySQL
ผมทำในระบบปฎิบัติการ Centos ที่มาพร้อมกับ DirectAdmin นะครับ
- ไปตั้งค่าใน /etc/my.cnf ครับโดยใส่ 3 บรรทัดนี้ครับ
log-slow-queries = slow.mysql.log
log_queries_not_using_indexes
long_query_time = 10 - Restart MySQL ครับ
- พิมพ์คำสั่ง updatedb ลงใน shell ครับเสร็จแล้วต่อด้วย locate slow.mysql.log ครับ
- จะเจอไฟล์ log ซึ่งของผมในที่นี้อยู่ที่ /var/lib/mysql/slow.mysql.log
- เข้าไปดูไฟล์ผ่าน editor หรือแล้วแต่ถนัดได้เลยครับ แต่ในที่นี้ผมใช้
tail /var/lib/mysql/slow.mysql.log - เสร็จแล้วเราจะเห็น Query ที่ช้าหรือไม่มีการทำ index วิธีคือ copy query ไปลอง EXPLAIN query ดู
- ตัวอย่างเช่น EXPLAIN SELECT * FROM `tests` WHERE source = ‘test.com’
- เสร็จแล้วมันจะบอกว่า Query นี้ได้ใช้ Index หรือยัง ถ้ายังก็ไปทำ Index แต่ถ้าทำแล้ว ลองหาวิธี Query แบบอื่นจะได้เร็วขึ้น
- ลอง EXPLAIN ดูอีกครั้งว่าใช้ Index รึยังด้วยก่อนจะทำอันอื่นต่อ
- Repeat ข้อ 5-9 ทำจนกว่า log สุดท้ายจะเป็นอันล่าสุดที่เราแก้
ปล. การทำ Index จะทำให้เปลื้องพวก key_buffer_size กับ innodb_buffer_pool_size ยังไงก็อย่าลืมปรับ config ส่วนนี้ด้วย
| Tweet |
เนื้อหาคล้ายกันที่น่าสนใจ
