-
Heap ดำเนินการฐานข้อมูล Postgres สำหรับงานวิเคราะห์ขนาดหลายเพตะไบต์
-
เมื่อเติบโตอย่างรวดเร็ว อัตราการใช้งานโหนดเกิน 80% ทำให้เกิดปัญหาด้านประสิทธิภาพในไปป์ไลน์การเก็บข้อมูล
-
สาเหตุของปัญหาคือ SSD มักมีแนวโน้มที่ประสิทธิภาพจะลดลงเมื่อการใช้งานเข้าใกล้ 100%
-
การใช้ ZFS ซึ่งเป็น CoW (Copy-on-Write) ทำให้ปัญหารุนแรงขึ้น
→ ทุกครั้งที่มีการอัปเดตบล็อก จะต้องเขียนสำเนาใหม่
- แน่นอนว่า CoW ก็มีข้อดีหลายอย่าง
→ การบีบอัดในระดับไฟล์ซิสเต็มทำได้สะดวกกว่าไฟล์ซิสเต็มอื่น จึงบีบอัดได้ 4-5x และประหยัดพื้นที่
→ มีความทนทานสูงกว่า จึงสามารถปิด full_page_writes ของ Postgres ได้ ส่งผลให้ประสิทธิภาพดีขึ้นและลด IO โดยรวม
→ มี Point-in-time snapshot ที่รับประกันความสอดคล้องได้ — เนื่องจากหน้าเพจไม่สามารถถูกเปลี่ยนแปลงย้อนหลังได้ จึงยังคงเก็บหน้าเดิมไว้ระหว่างการทำ snapshot
- แต่ไฟล์ซิสเต็มแบบ CoW อย่าง ZFS จะมีประสิทธิภาพลดลงเมื่อพื้นที่ใกล้เต็ม
→ ทุกครั้งที่อัปเดตหน้าเพจ block allocator ต้องหาบล็อกว่างใหม่ จึงยิ่งช้าลงมากเมื่ออัตราการใช้งานสูง
→ ต้องลบบล็อกที่เคยถูก unlink ออก และจัดให้ปะปนกับบล็อกเดิม
→ ยิ่งแย่ลงเพราะตั้งขนาดบล็อกไว้ใหญ่ถึง 64kb เพื่อให้ได้อัตราการบีบอัดที่สูงขึ้น
→ ด้วยเหตุผลเหล่านี้ จึงควรรักษาการใช้งานของ ZFS ไว้ไม่ให้เกิน 80%
- จึงลองอัปเกรดเป็น ZFS 2.x และเปลี่ยนจากการบีบอัดแบบ lz4 ไปเป็น Zstandard
→ lz4 เร็วมากและให้อัตราการบีบอัดราว ~4.4x
→ Zstandard ให้อัตราการบีบอัดได้ถึง ~5.5x จึงดีขึ้น 20%
→ แต่หลายเบนช์มาร์กบอกว่า Zstandard ช้ากว่า lz4
→ จึงตัดสินใจทดสอบอย่างเข้มงวดในสภาพแวดล้อมจริง
→ ผลการทดสอบพบว่าประสิทธิภาพของคิวรีไม่เปลี่ยนไป การใช้สตอเรจลดลง ~20% และเวลาคิวรีเขียนลดลงครึ่งหนึ่ง
- DB cluster ของ Heap แบ่งเป็น 5 โหนด และแต่ละโหนดอยู่ใน ASG ของตัวเอง
→ การเปลี่ยนโหนดทำได้ง่าย เพียงแยกออกจาก ASG แล้ว ASG จะสร้างโหนดใหม่ จากนั้นรีสโตร์จากแบ็กอัปล่าสุดและเข้าสู่โหมด warm standby
→ สร้าง AMI ด้วยการตั้งค่าใหม่ แล้วค่อย ๆ ทำทีละโหนด
→ โดยรวมแล้วการใช้งานลดลง ~21% เวลาเขียนลดลง 50% และประสิทธิภาพคิวรีแทบไม่เปลี่ยน
1 ความคิดเห็น
Arch Linux เปลี่ยนเครื่องมือบีบอัดแพ็กเกจจาก xz เป็น Zstandard https://th.news.hada.io/topic?id=1227
ยุคฟื้นฟูของอัลกอริทึมการบีบอัด https://th.news.hada.io/topic?id=1228
ในบทความไม่ได้พูดถึงการใช้ CPU แต่พอไปดูคอมเมนต์ของผู้เขียนต้นฉบับบน HN ก็เห็นว่ามันเพิ่มขึ้นจากประมาณ ~40% เป็น ~50% (หมายความว่า Zstd ใช้ CPU มากกว่า)