18 ポイント 投稿者 xguru 2021-04-20 | 1件のコメント | WhatsAppで共有

プッシュ通知サービスの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件のコメント

 
xguru 2021-04-20