Performance tuning : AWR คืออะไร
เมื่อนักพัฒนาอย่างเราๆทำแอปพลิเคชันเสร็จ สิ่งที่จะบอกได้ว่าระบบทำงานได้ดีหรือไม่นั้น ก็คือต้องผ่านการทดสอบ Performance และหากลูกค้ากระเป๋าหนักใช้ Database เจ้าใหญ่อย่าง Oracle Enterprise ละก็ เราจะมีเครื่องมือช่วยดูว่ามีจุดตรงไหนบ้างที่ทำให้ Database ยังทำงานไม่ดี และก็เป็นที่มาในวันนี้ว่า
AWR คืออะไรและอ่านอย่างไร
AWR ย่อมาจาก Automatic Workload Repository
เป็น Feature หรือเครื่องมือที่มาพร้อมกับ Oracle Enterprise ใช้เก็บผลการทำงานของระบบเพื่อเป็นข้อมูลวิเคราะห์การทำงานต่างๆของ Oracle โดยปรากฏกายใน version 10g เป็นครั้งแรก
เอาหล่ะ!! เพื่อเป็นการไม่เสียเวลาเรามาดูถึงส่วนต่างๆของ Feature AWR นี้กัน
ส่วนที่ 1 : Information ของ Database server
ส่วนนี้จะบอกว่า Database Server ชื่ออะไร อยู่บน OS อะไร มี CPU เท่าไหร่ แล้ว RAM มีขนาดใหญ่แค่ไหน
สำหรับเครื่องนี้เป็น Oracle EE version 19.0.0.0.0 รันบน Linux มี CPU 8 core และ RAM 128 Gb ถือว่าสเปกแรงเลยทีเดียว
ส่วนที่ 2 : Report Summary
ส่วนนี้จะเป็นผลการวิเคราะห์จากระบบ Oracle แล้วว่าจุดไหนบ้างที่ยังทำงานไม่ดี และเป็นสิ่งที่ต้องปรับปรุงในที่นี้มี 3 ข้อ
- TOP SQL Statement
- Undersize PGA
- Hard Parse Due to Literal Usage
โดยเราสามารถดูคำแนะนำเป็นภาษามนุษย์ด้านล่างสุด ลากลงไปเลยยย
แน่นอนข้อนี้คือ SQL หนักที่ควรปรับปรุง จงไปปรับให้ดีขึ้นนะ ซึ่ง Oracle ก็จะแสดง SQL Statement ที่ต้องปรับแล้วชีวิตจะดีขึ้นมาเป็นตัวๆเลย
ถัดมา Undersize PGA มีแนะนำจำนวนปัจจุบันว่ามีค่าเท่าไหร่ และควรปรับเป็นเท่าไหร่จึงจะสามารถรองรับการโหลดได้
ส่วนที่ 3 : Database Resource Limit
ข้อมูลนี้จะบอกว่าค่า SGA และ PGA ตั้งไว้เท่าไหร่
ส่วนที่ 4 : เมนูที่จะพาไปยังส่วนต่างๆของ Report
สามารถคลิก Link ได้เลยโดยส่วนสำคัญๆสำหรับการจูนระบบก็คือ SQL Statistics ตามมาดูกัน คลิกเลย..
- SQL ordered by Elapsed Time : แสดง SQL เรียงลำดับใช้เวลามาก-น้อย
- SQL ordered by CPU Time : แสดง SQL เรียงลำดับใช้เวลา cpu มาก-น้อย
- SQL ordered by User I/O Wait Time : แสดง SQL เรียงลำดับ I/O มาก-น้อย
- SQL ordered by Gets : แสดง SQL เรียงลำดับตาม Get Buffer มาก-น้อย
- SQL ordered by Reads : แสดง SQL เรียงลำดับตามการ Read มาก-น้อย
- SQL ordered by Physical Reads (UnOptimized) : แสดง SQL เรียงลำดับตามการ Read มาก-น้อยที่ยังไม่ได้ Optimized
- SQL ordered by Executions : แสดง SQL เรียงลำดับตาม Execute มาก-น้อย
- SQL ordered by Parse Calls : แสดง SQL เรียงลำดับตามชั้นการเรียกมาก-น้อย
- SQL ordered by Sharable Memory : แสดง SQL เรียงลำดับตาม Share Memory กันจากมาก-น้อย
- SQL ordered by Version Count : แสดง SQL เรียงลำดับตาม Version Count
- Complete List of SQL Text : แสดง SQL ทั้งหมดที่ capture ได้สามารถเอาไปรันได้ต่อ
มาดูตัวอย่างการอ่านตาราง SQL ordered by Elapsed Time
Elapsed Time (s) : ช่องแรกเป็นเวลารวมทั้งหมดของ SQL นั้นๆเป็นวินาที
Executions : จำนวนครั้งการรัน
Elapsed Time per Exec (s) : เวลารันต่อ 1 ครั้ง
%Total : % รวมเวลาที่ SQL นั้นใช้
%CPU : % cpu ที่ SQL นั้นใช้
%IO : % IO ที่ SQL นั้นใช้
SQL Id : รหัสของ SQL สามารถกดเพื่อลิ้งค์ไปยัง SQL ตัวเต็มได้
SQL Module : โมดูลที่ SQL นั้นใช้งาน
SQL Text : ตัวอย่างสั้นๆของ SQL ถ้าเห็นอาจจะพอจำได้ว่ามาจากแอปเราจริงหรือไม่
หลังจากนี้วิธีจูน SQL ก็อาจจะนำเอาไปใช้ Explain เพื่อดู Cost หรือไปรันผ่าน SQL Tuning Advisor ของ Oracle EE ก็สุดแท้แต่ละบุลคลแล้วละครับ
สุดท้ายนี้ ก็ขอให้นักพัฒนาทุกคนโชคดี รันระบบรวดเร็ว ผ่านการทดสอบ Performance ได้อย่างราบรื่น :)
AWR ยังมีข้อมูลรายละเอียดส่วนอื่นๆที่ใช้วิเคราะห์การทำงานของระบบได้อีกหลายส่วน เอาไว้หากมีเวลาเอื้ออำนวยจะนำมาบอกเล่าให้ได้อ่านอีกครับ…
This is the way :)