Performance tuning : AWR คืออะไร

This-is-the-way
G-Able
Published in
3 min readMay 24, 2023

เมื่อนักพัฒนาอย่างเราๆทำแอปพลิเคชันเสร็จ สิ่งที่จะบอกได้ว่าระบบทำงานได้ดีหรือไม่นั้น ก็คือต้องผ่านการทดสอบ 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 ข้อ

  1. TOP SQL Statement
  2. Undersize PGA
  3. Hard Parse Due to Literal Usage

โดยเราสามารถดูคำแนะนำเป็นภาษามนุษย์ด้านล่างสุด ลากลงไปเลยยย

แน่นอนข้อนี้คือ SQL หนักที่ควรปรับปรุง จงไปปรับให้ดีขึ้นนะ ซึ่ง Oracle ก็จะแสดง SQL Statement ที่ต้องปรับแล้วชีวิตจะดีขึ้นมาเป็นตัวๆเลย

ถัดมา Undersize PGA มีแนะนำจำนวนปัจจุบันว่ามีค่าเท่าไหร่ และควรปรับเป็นเท่าไหร่จึงจะสามารถรองรับการโหลดได้

ส่วนที่ 3 : Database Resource Limit

ข้อมูลนี้จะบอกว่าค่า SGA และ PGA ตั้งไว้เท่าไหร่

ส่วนที่ 4 : เมนูที่จะพาไปยังส่วนต่างๆของ Report

สามารถคลิก Link ได้เลยโดยส่วนสำคัญๆสำหรับการจูนระบบก็คือ SQL Statistics ตามมาดูกัน คลิกเลย..

  1. SQL ordered by Elapsed Time : แสดง SQL เรียงลำดับใช้เวลามาก-น้อย
  2. SQL ordered by CPU Time : แสดง SQL เรียงลำดับใช้เวลา cpu มาก-น้อย
  3. SQL ordered by User I/O Wait Time : แสดง SQL เรียงลำดับ I/O มาก-น้อย
  4. SQL ordered by Gets : แสดง SQL เรียงลำดับตาม Get Buffer มาก-น้อย
  5. SQL ordered by Reads : แสดง SQL เรียงลำดับตามการ Read มาก-น้อย
  6. SQL ordered by Physical Reads (UnOptimized) : แสดง SQL เรียงลำดับตามการ Read มาก-น้อยที่ยังไม่ได้ Optimized
  7. SQL ordered by Executions : แสดง SQL เรียงลำดับตาม Execute มาก-น้อย
  8. SQL ordered by Parse Calls : แสดง SQL เรียงลำดับตามชั้นการเรียกมาก-น้อย
  9. SQL ordered by Sharable Memory : แสดง SQL เรียงลำดับตาม Share Memory กันจากมาก-น้อย
  10. SQL ordered by Version Count : แสดง SQL เรียงลำดับตาม Version Count
  11. 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 :)

--

--