สิ่งที่เรียนรู้จากการสเกล PostgreSQL ตลอด 5 ปี
(onesignal.com)สิ่งที่ OneSignal ซึ่งเป็นบริการพุชแจ้งเตือน ได้เรียนรู้จากการดูแลข้อมูลขนาด 75TB บนเซิร์ฟเวอร์ฐานข้อมูล 40 เครื่อง
-
ภาพรวมข้อมูล: ตาราง subscribers และ notifications มีขนาดใหญ่ที่สุด
-
Bloat: ปรากฏการณ์ที่ใช้พื้นที่มากขึ้น ทำงานช้าลง และต้องใช้พลังประมวลผลมากขึ้น
→ Table bloat: VACUUM
→ Index bloat: การเพิ่มประสิทธิภาพ Heap Only Tuple(HOT)
→ เปิดใช้ autovacuum
→ ทำให้การแบ่งพาร์ทิชันตารางเป็นอัตโนมัติด้วยส่วนขยาย pg_partman
→ pg_repack และ pgcompacttable
- การอัปเกรดฐานข้อมูล
→ pg_upgrdae ต้องให้ฐานข้อมูลออฟไลน์ จึงไม่สามารถเลือกใช้ได้
→ ตั้งค่าเซิร์ฟเวอร์ PostgreSQL เวอร์ชันใหม่แยกต่างหาก และใช้ logical replication ผ่านส่วนขยาย pglogical
- XID Wraparound
→ ฟีเจอร์ MVCC(Multi Version Concurrency Control) ของ PostgreSQL ใช้ transaction ID แบบ 32 บิต จึงอาจวนครบได้อย่างรวดเร็วหากมีทรานแซกชันจำนวนมาก
→ การมอนิเตอร์ XID ที่เหลืออยู่เป็นเรื่องสำคัญ
→ autovacuum_freeze_max_age
- Replica Promotion
→ เพื่อให้โปรโมต Replica ได้รวดเร็ว จึงวางไว้หลัง haproxy
- Partitioning
→ PostgreSQL เวอร์ชันล่าสุดมีฟีเจอร์แบ่งพาร์ทิชันตารางมาในตัว
→ หากจำเป็นต้องทำพาร์ทิชัน แนะนำให้แบ่งเป็นหลายพาร์ทิชันให้มากที่สุดเท่าที่ทำได้
→ OneSignal มีแผนจะเปลี่ยนการแบ่งพาร์ทิชันจาก 16 เป็น 256 และต่อไปเป็น 4096
- Sharding
→ ไม่มีการรองรับแบบ built-in
→ เดิมทีทำชาร์ดโดยใช้ Tenant ID ที่แยกช่วงจาก v4 UUID
→ ปัจจุบันกำลังสร้าง data proxy ที่รับรู้ทั้งพาร์ทิชันและชาร์ด
1 ความคิดเห็น
ข้อบกพร่องของ PostgreSQL https://th.news.hada.io/topic?id=1829
ฟีเจอร์ที่ไม่ค่อยเป็นที่รู้จักของ PostgreSQL V12 https://th.news.hada.io/topic?id=988
ประหยัดพื้นที่ DB ของ PostgreSQL https://th.news.hada.io/topic?id=3674