https://onesignal.com/blog/lessons-learned-from-5-years-of-scaling-postgresql/
푸시알림 서비스 OneSignal이 75TB 데이터를 40대의 DB서버에서 운영하며 배운 것들 - 데이터 오버뷰 : subscribers, notifications 테이블이 가장 큼
- Bloat : 더 많은 용량을 차지하고, 느려지고, 컴퓨팅 파워를 더 필요로 하게 되는 현상 ㅤ→ Table bloat : VACUUM ㅤ→ Index bloat : Heap Only Tuple(HOT) optimization ㅤ→ autovacuum 켜기 ㅤ→ pg_partman 확장으로 테이블 파티셔닝 자동화 ㅤ→ pg_repack 과 pgcompacttable
- Database Upgrades ㅤ→ pg_upgrdae 는 데이터베이스 오프라인을 필요로 하므로 선택 불가 ㅤ→ 새 버전 PostgreSQL 서버를 따로 셋업하고 pglogical 확장으로 logical replication 사용
- XID Wraparound ㅤ→ PostgreSQL 의 MVCC(Multi Version Concurrency Control) 기능은 32비트 트랜잭션 ID를 사용하므로 트랜잭션이 많으면 금방 넘어갈수 있음 ㅤ→ 남은 XID 모니터링은 중요 ㅤ→ autovacuum_freeze_max_age
- Replica Promotion ㅤ→ 빠른 Replica 의 승격을 위해서 haproxy 뒤에 둠
- Partitioning ㅤ→ 최근 버전 PostgreSQL은 테이블 파티셔닝 기능을 내장 ㅤ→ 파티셔닝이 필요할때 가능하면 다수의 파티션으로 분할하는 것을 추천 ㅤㅤㅤOneSignal 은 16 에서 256, 다시 4096으로 파티셔닝 할 예정
- Sharding ㅤ→ 내장 지원은 없음 ㅤ→ 원래는 v4 UUID 를 범위에 따라서 구분한 Tenant ID로 샤딩 했음 ㅤ→ 현재는 파티션과 샤드를 인식하는 데이터 프록시를 만드는 중 음성 기능은 200자로 제한됨 |