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
→ 高速なレプリカ昇格のためにhaproxyの背後に配置
- Partitioning
→ 最近のバージョンのPostgreSQLにはテーブルパーティショニング機能が内蔵
→ パーティショニングが必要な場合は、可能であれば多数のパーティションに分割することを推奨
OneSignal は16から256、さらに4096へとパーティショニングする予定
- Sharding
→ 内蔵サポートはなし
→ もともとはv4 UUIDを範囲ごとに分けたTenant IDでシャーディングしていた
→ 現在はパーティションとシャードを認識するデータプロキシを構築中
1件のコメント
PostgreSQLの欠点 https://ja.news.hada.io/topic?id=1829
PostgreSQL V12のあまり知られていない機能 https://ja.news.hada.io/topic?id=988
PostgreSQL DBの容量を節約する https://ja.news.hada.io/topic?id=3674