คู่มือนี้จะอธิบายวิธีการตั้งค่า "Slow Query Logging" ใน MySQL เพื่อให้คุณสามารถระบุคำสั่งที่ทำให้ฐานข้อมูลทำงานช้าลงได้
หากคุณดูแลเซิร์ฟเวอร์ MySQL ในระบบจริง (Production) น่าจะเคยเจอปัญหาที่เซิร์ฟเวอร์ทำงานช้าลงบ้าง การค้นหาสาเหตุพื้นฐานอาจใช้เวลานานมาก MySQL มีฟีเจอร์ช่วยแก้ปัญหานี้คือการบันทึกคำสั่งที่ทำงานช้า (Slow Query Log) เมื่อเซิร์ฟเวอร์ทำงานช้าลง คุณสามารถเปิดไฟล์ล็อกนี้ในโปรแกรมแก้ไขข้อความเพื่อดูว่าคำสั่งไหนทำงานช้า
ขั้นตอนการตั้งค่า
- เปิดไฟล์การตั้งค่า MySQL (my.cnf) ใน Linux จะอยู่ที่
/etc/my.cnfหรือ/etc/mysql/my.cnf - ค้นหาพารามิเตอร์
slow_query_logหากยังไม่ได้ตั้งค่า ให้เพิ่มบรรทัดต่อไปนี้:
หมายเหตุ: ในเวอร์ชันเก่าใช้slow_query_log = 1 slow_query_log_file = /var/log/mysql/mysql-slow.loglog-slow-queriesแต่เวอร์ชันใหม่ใช้slow_query_logแทน - ตั้งค่าเวลาที่ถือว่าเป็น "Slow Query" โดยใช้พารามิเตอร์
long_query_timeตัวอย่างตั้งค่าเป็น 2 วินาที (ค่าเริ่มต้นคือ 10 วินาที):long_query_time = 2 - รีสตาร์ทเซิร์ฟเวอร์ MySQL เพื่อให้การตั้งค่ามีผล:
sudo systemctl restart mysql - ตรวจสอบไฟล์ล็อก ที่
/var/log/mysql/mysql-slow.logคำสั่งที่ทำงานนานกว่าที่ตั้งค่าจะถูกบันทึกไว้
เคล็ดลับเพิ่มเติม
- ตั้งค่า
log_queries_not_using_indexes = 1เพื่อบันทึกคำสั่งที่ไม่ได้ใช้ดัชนี (Index) ด้วย - ใช้คำสั่ง
mysqldumpslowเพื่อวิเคราะห์ไฟล์ Slow Query Log ให้อ่านง่ายขึ้น - ตั้งค่า Cron Job เพื่อส่งไฟล์ล็อกมาทางอีเมลทุกไม่กี่วัน
- ตรวจสอบไฟล์ล็อกเป็นระยะเพื่อปรับปรุงประสิทธิภาพฐานข้อมูล
การตั้งค่า Slow Query Logging จะช่วยให้การแก้ไขปัญหาประสิทธิภาพ MySQL ง่ายและรวดเร็วขึ้นมาก