แต่เมื่อเร็วๆนี้ต้องเข้ามาแก้ปัญหา performance ใน MySQL ที่มี data ปริมาณค่อนข้างมาก อาการคือ mysqld จะกินทรัพยากรเครื่องสูงเกินไปในบางช่วงเวลา ซึ่งก็ไม่สามารถระบุได้ว่าสาเหตุเกิดจากอะไร รู้เพียงว่าหากรอสักพักใหญ่ๆ มันจะกลับมาเป็นปกติ ในช่วงเวลาที่ mysqld กินทรัพยากรสูง (high load average) นั้นเอง ทำให้ระบบไม่สามารถทำงานได้
หลังจากพยายามหาวิธีในการ debug หาสาเหตุต้นตอของปัญหานี้ก็ได้พานพบกับวิธีหนึ่งที่รู้สึกว่าน่าจะดี และ น่าจะช่วยแก้ปัญหาได้ตรงจุด
MySQL สามารถ log sql query ที่ทำงานช้าเกินกว่าค่าที่เรากำหนด หรือ sql query ที่ไม่ได้ใช้ index ได้ โดยสามารถ config ได้ใน /etc/mysql/my.cnf
log_slow_queries = /var/log/mysql/mysql-slow.log
long_query_time = 5
log-queries-not-using-indexes
จาก log ที่ได้เราจะรู้ว่า sql query ใดที่ทำงานช้า เราจะได้ optimize มันเสีย ไม่ว่าจะด้วยการทำ index หรือการปรับ query ; )
0 comments:
Post a Comment