5년간 PostgreSQL 스케일링 하면서 배운 것
(onesignal.com)푸시알림 서비스 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로 샤딩 했음
ㅤ→ 현재는 파티션과 샤드를 인식하는 데이터 프록시를 만드는 중
- PostgreSQL의 결함들 https://news.hada.io/topic?id=1829
- PostgreSQL V12의 잘 안알려진 기능들 https://news.hada.io/topic?id=988
- PostgreSQL DB 공간 절약하기 https://news.hada.io/topic?id=3674