2553-07-27

การทำ Performance Tuning SQL Query เบื้องต้น (1)

ถ้าติดปัญหาเรื่อง Database ช้าหล่ะก็ บทความนี้คิดว่าคงพอจะช่วยให้หลายๆ ท่านที่กำลังประสบปัญหาอยู่ คงจะบรรเทาเบาบางลงได้บ้างนะครับ
จะไปแล้วการ tuning เนี่ยจะว่าง่ายก็ง่ายจะว่ายากก็ยาก แต่สุดท้ายก็อยู่ที่การสังเกตุและปรับปรุงระบบอยู่ตลอดเวลาน่ะแหล่ะครับ

หลักการที่ผมยึดเอาไว้เป็นแนวทางเสมอก็คือพยายาม tuning ระบบให้ใช้เงินน้อยที่สุดแต่เกิดผลลัพธ์มากที่สุด และที่สำคัญ เสร็จเร็วตามกำหนดครับ (ในชีวิตจริงๆ อาจจะทำได้บ้างไม่ได้บ้าง ก็แล้วแต่ Permission และ Policy ของแต่ละบริษัทแหล่ะครับ)

แนวทางการ Tuning
การ tuning database นั้นแบ่งแนวทางการ tune เป็น 2 แนวทางใหญ่ๆ คือ

1.Hardware

2.Software

Hardware Tuning
การ tuning ทาง hardware นั้นมีข้อดีคือง่าย และก็ไม่ยุ่งยาก แต่ข้อเสียนั้นก็คือใช้เงินเยอะกว่าแบบ software ไงครับ ยกตัวอย่างเช่น เปลี่ยน CPU, เพิ่ม RAM เป็นต้น ซึ่งในทางปฏิบัติอาจจะขอเงินเจ้านายยากหน่อย เพราะว่าเดี๋ยวนี้ อะไรก็ต้องประหยัดกันทั้งนั้น จริงไหมครับ

แต่เคยไหมครับ พอระบบเรามีปัญหาปั้บ บางท่านอาจจะเคยขอซื้อ RAM เพิ่ม แต่พอซื้อมาแล้ว ใส่ลงไปใน server แล้ว ปรากฎว่าช้าเหมือนเดิม (ฮา)

ประเด็นหลักจะอยู่ที่เราจะต้องหาคอขวด (Bottle Neck) ให้ได้ก่อน ว่าระบบของเราช้าที่ตรงไหน (วิธีการหาผมจะอธิบายในบทความต่อไปครับ) หลังจากนั้นเราถึงจะแก้ไขปัญหาได้ตรงจุดจริงๆ ครับ เหมือนกับเราไปหาหมอ ก่อนที่หมอจะจ่ายยา หมอจะต้องแน่ใจว่าเราเป็นโรคอะไรก่อน ถึงจะจ่ายยาให้หรือรักษาเราได้ตรงจุดครับ ไม่เช่นนั้น ก็มีแต่ได้ลองทานยาไปเรื่อยๆ แน่นอน

จริงๆ แล้วผมชอบวิธีการ tuning ด้วย hardware นะครับ เพราะว่าทำได้ง่ายและรวดเร็ว และที่แน่ๆ database เร็วขึ้นชัวร์ๆ โดยที่ไม่ไปแก้ logic ใดๆ ของระบบเลย แต่ส่วนใหญ่ลูกค้าผมมักไม่ค่อยจะชอบเท่าไหร่ เพราะว่าต้องจ่ายเงินซื้อ hardware เพื่อ upgrade ในราคาที่สูงพอดูทีเดียวเชียวครับ ก็เลยไม่ค่อย happy กัน

Software Tuning
ส่วนใหญ่เวลาที่ผมเข้าไป tuning ระบบให้กับลูกค้าในบริษัทต่างๆ มักจะเจอคำถามบ่อยๆ ว่า "อยากจะดู Query Syntax ไหมครับ ว่าทางพวกผมเขียนดีหรือเปล่า" ก็แปลว่าคนส่วนใหญ่มักจะชอบหาวิธีที่จะทำยังไงให้ เขียน Query ที่รันได้เร็วมั้งครับ จริงๆ แล้วก็ถูกส่วนนึงครับ แต่ยังไม่ถูกทั้งหมด เพราะว่าในจุดที่เราจะทำ tuning software นันมีอีกหลายจุดครับ เช่น DB Engine, ODBC Driver, Client Application, Protocal, DB Configuration เป็นต้นครับ

ตามหลักการแล้ว ผมจะพยายามแก้ปัญหาในจุดที่คิดว่าทำได้ง่ายที่สุดก่อน ในความคิดผม Query Syntax เป็นจุดที่ยากที่สุดจุดนึงเลยครับ เพราะว่า query ตัวไหนที่เขียนไปแล้ว รันไปได้แล้ว ไม่มีปัญหา พยายามอย่าแก้เด็ดขาด ถ้าไม่จำเป็น รับรองว่าสยองมากๆ

แนวทางที่ผมจะเสนอก็คือการที่จะทำยังไงก็ได้ โดยไม่ไปยุ่งกับระบบเดิมหรือเข้าไปแก้ไข logic เดิมให้น้อยที่สุด หรือพูดอีกนัยหนึ่งก็คือ อย่าไปยุ่งกับ Query โดยเด็ดขาดถ้าไม่จำเป็นครับ

credit: http://yongyutde.spaces.live.com/blog/cns!A1F444837F369955!543.entry

ไม่มีความคิดเห็น:

แสดงความคิดเห็น