
ปัญหาที่พบเจอจากการ review การใช้งาน PostgreSQL ของระบบงานหนึ่ง
คือการใช้ disk ที่สูงมาก ๆ CPU สูง แถวขึ้น ๆ ลง ๆ
ทั้ง ๆ ที่จำนวนคนใช้งานไม่เยอะ !!
ดังนั้นจึงเข้าไปดูหน่อยว่า มีการใช้งาน database เป็นอย่างไรบ้าง ?
เพื่อจะได้แก้ไขปัญหา หรือ ลดปัญหาลงไปได้บ้าง
ตัวอย่างการเข้าไปดูการใช้งานและทำงานของ database
- Slow query log ตรงนี้ก็ปรับหรือลดกันไป แก้ไข query และ ANALYZE กันวนไป
- การวิเคราะห์ query ต่าง ๆ ซึ่งก็พบพวก N+1 problem ด้วย ก็จัดการด้วย join ก็พอทน
- มีงานที่ชอบตื่นมาทำตอนกลางคืน (batch job) หรือ ทำทุก ๆ ชั่วโมง เยอะ !! ปิดเลยดีไหม ?
ซึ่งทำให้เรารู้และเห็นปัญหา ก็พอแก้ไขได้
จากนั้นลงไปดูข้อมูลที่จัดเก็บใน database หน่อยว่า เป็นอย่างไร ?
- แต่ละ table มีจำนวน row เท่าไร มี size ของข้อมูลเท่าไร
- จากนั้นก็ดูว่า table นั้น ๆ ที่มัน size ใหญ่ ๆ มีรายละเอียดอย่างไร เช่น table vs index size เป็นต้น
มาลองดูกัน ซึ่งใช้งาน PostgreSQL database นะครับ
จากข้อมูลพบว่า ทำไม index มันถึงมีขนาดใหญ่กว่าข้อมูลจริง ๆ นะ ?
น่าสนใจเรื่องนี้มาก ๆ
มาดูในรายละเอียดกันต่อไปดีกว่า

คำถามที่น่าสนใจคือ ทำไม index มันถึงมีขนาดใหญ่แบบนั้น ?
เลยลองดูรายละเอียดนิดหน่อย
เพื่อดูว่าในแต่ละ table มี index อะไร ขนาดเท่าไนร และ ถูกเรียกใช้งานหรือไม่
เมื่อได้ข้อมูลแบบนี้มา ก็เกิดคำถามง่าย ๆ ขึ้นมาคือ ทำไม index ที่สร้างขึ้นมา
ถึงไม่ถูกเรียกใช้งาน !!
มันเกิดอะไรขึ้น ?
สร้าง index แบบมั่ว ๆ หรือไม่ ?
หรือ business logic เปลี่ยนไปแล้ว แต่ไม่ยอมลบ หรือ แก้ไข index ?
ดังนั้นก็ลบมันทิ้งไปซะ ก็ได้ space ของระบบกลับคืนมาเยอะแล้ว
จากนั้นก็หาปัญหาต่อไป …
บ่อยครั้งเรื่องพื้นฐานมันก็สำคัญมาก ๆ
ก่อนจะใช้เครื่องมืออะไร ต้องเข้าใจมันก่อนเสมอ
Reference websites