# 5년간 PostgreSQL 스케일링 하면서 배운 것

> Clean Markdown view of GeekNews topic #4101. Use the original source for factual precision when an external source URL is present.

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=4101](https://news.hada.io/topic?id=4101)
- GeekNews Markdown: [https://news.hada.io/topic/4101.md](https://news.hada.io/topic/4101.md)
- Type: news
- Author: [xguru](https://news.hada.io/@xguru)
- Published: 2021-04-20T09:16:01+09:00
- Updated: 2021-04-20T09:16:01+09:00
- Original source: [onesignal.com](https://onesignal.com/blog/lessons-learned-from-5-years-of-scaling-postgresql/)
- Points: 18
- Comments: 1

## Topic Body

푸시알림 서비스 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로 샤딩 했음

ㅤ→ 현재는 파티션과 샤드를 인식하는 데이터 프록시를 만드는 중

## Comments



### Comment 4928

- Author: xguru
- Created: 2021-04-20T09:17:01+09:00
- Points: 4

- 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
