Oracle Memory Tuning

Database ช้า → Disk ทำงานเต็ม — แต่สาเหตุไม่ได้อยู่ที่ข้อมูล

ระบบตอบสนองช้าและ I/O ของ Disk พุ่งสูง แม้ Buffer Cache ดูปกติ เพราะ PGA target ต่ำ ทำให้ Workarea ต้อง spill ไปที่ Tempfile.

🏢 ระบบองค์กรบน Unix (ปกปิดองค์กร) 💽 Oracle Database 9i · Parameter Snapshot 🔑 PGA_AGGREGATE_TARGET · V$PGA_TARGET_ADVICE 📈 Direct‑Path Read/Write Temp

สถานการณ์

Parameter Snapshot พบ pga_aggregate_target เพียง 32 MiB ขณะที่ระบบทำงานหนักด้วย Workarea ที่ต้องใช้หน่วยความจำมาก ทำให้เกิด direct path read/write temp รอ I/O ที่ Disk สูงถึง 90%.

🚨
หลักฐานที่ยืนยันแล้ว
PGA Target Advice แสดง Over‑allocation
  • 32 MiB (ค่าปัจจุบัน) ESTD_OVERALLOC_COUNT=993
  • 128 MiB ประเมิน 540 ครั้ง; 192 MiB 160 ครั้ง
  • 256 MiB ประมาณ 0 ครั้ง → แสดงว่าขนาดนี้เพียงพอสำหรับ workload
🔍
การวิเคราะห์
Advisor ชี้ว่า Workarea memory ไม่พอ
ยืนยันแล้ว
PGA target มี Estimated Over‑allocation
ค่าไม่เป็นศูนย์หมายถึง target ไม่พอรองรับ Workarea workload ที่บันทึกไว้
เป็นไปได้
Workarea concurrency ทำให้ PGA target ไม่พอ
Sort, Hash Join หรือ Group By ใช้ Temp space มาก ควรตรวจ histogram, extra bytes read/write
🛠️
แนวทางตรวจสอบอย่างปลอดภัย
ปรับ PGA ทีละขั้น
  • เก็บ Baseline Workarea executions, extra bytes, DB Time, Temp I/O
  • ตรวจระบบปฏิบัติการ Memory, paging, headroom
  • ทดลองเพิ่ม PGA ใช้ Advisor เป็นข้อมูลประกอบ เปลี่ยนค่า PGA_AGGREGATE_TARGET ในช่วงควบคุมแล้วเปรียบเทียบ
  • แยก SGA จาก PGA อย่าลด Java Pool หรือเพิ่ม Buffer Cache เพียงอย่างเดียว
💡
ผลลัพธ์
ระบบดีขึ้นโดยไม่ใช้สูตร Memory ตายตัว
💡

ผลลัพธ์หลังปรับ PGA target

Disk I/O ลดจาก 90% เหลือ 30% ระบบตอบสนองเร็วขึ้น 2‑3 เท่า งานที่เคยช้าแล้วทำงานได้ตามคาด