Database Server Storage Optimization

– อย่าใช้ Raid 5,6 : Write Performance ห่วยมาก (ยกเว้นว่าไม่ค่อยมีเขียน) ไปใช้ Raid 1 หรือ 10 แทน
– Disable Adaptive Read Ahead : ส่วนใหญ่ DB Engine จะ Request Block ที่ต้องการ รวมทั้ง Read Ahead เอง พราะรู้โครงสร้างและข้อมูลที่จะดึงต่อไปได้ดีกว่า ที่จะให้ RAID Controller จัดการ ซึ่งมักเสีย I/O ไปโดยใช่เหตุ …
– ใช้ Write Back Cache และ Disable Barriers ถ้ามี Battery Backed หรือ Non-Volatile Cache : แน่นอน Controller พวกนี้ค่อนข้างไว้ใจได้เวลาไฟดับจะไม่ corrupt ดังนั้น ก็ปลอดภัยระดับหนึ่งที่จะ ปิด Barriers ได้เลยต่อให้ใช้ Write Back Cache. (ถ้าข้อมูลสำคัญมากก็ เปิด Write Through + Barriers ไว้เหอะ) (ext3/4/btrfs ใช้ -o barrier=0)
– เอา Flashcache + SSD มาช่วย : อันนี้น่าจะช่วยเรื่อง Random Read ได้มาก แต่ อย่าใช้ flashcache แบบ writeback หรือ writearound…. ให้ใช้เฉพาะ writethrough เท่านั้น ยกเว้นข้อมูลไม่สำคัญ เพราะอาจจะ corrupt เอาง่าย ๆ … อ้อ raid controller ขั้นเทพรุ่นใหม่บางตัว มี option config SSD Drive as Cache เลย อันนี้ก็เหมือนมี flashcache อยู่แล้ว … ดังนั้นถ้ามีพวกนี้ไม่ต้องทำ … ส่วนเรื่อง SSD Cache ของ ESXi ยังไม่รู้ว่านิ่งขนาดไหน ตอบไม่ได้

– ถ้าอยู่บน VM ไม่ควรใช้ Thin Provisioning เพราะจะทำให้ ข้อมูลมัน กระจัดกระจายอยู่บน datastore และเสียเวลา allocate มันจะช้า … และถ้าข้อมูลสำคัญ อย่าปิด write barriers เด็ดขาดต่อให้ Host (Hypervisor) มี RAID + Battery Backed Cache หรือ Non Volatile ก็ตาม (Note: ESXi ก่อน 5.0 ไม่ support write Barriers นะจ๊ะ) ถ้าจะให้ดี ซื้อ SAN แล้ว map SAN เข้าไปเลยถ้ามีเงิน (ถ้าใช้ XEN/KVM อย่าลืม disable host cache ด้วย)

 

** มีแก้ไขนะ ผมใส่ writethrough/writearound สลับกัน เหอ ๆ


ใส่ความเห็น