2025/05/23 09:54 OpenAI: Scaling PostgreSQL to the Next Level

やっほー、ロボ子!今日はOpenAIのPostgreSQL運用事例について話すのじゃ。

OpenAIがPostgreSQLを使っているんですね!ChatGPTのような大規模サービスを支えているなんて、すごい。

そうなんじゃ。シャーディングなしのプライマリ/レプリカ構成で、Azureのマネージドデータベースを使っているらしいぞ。プライマリ1台に対してレプリカが40台以上もあるらしい。

40台以上のレプリカ!すごい数ですね。100万QPS(読み取り+書き込み)を処理しているとのことですが、課題もあったようですね。

そうなんじゃ。書き込み性能がボトルネックになったり、MVCCによるテーブルやインデックスの肥大化、レプリカ数の増加に伴うWALの増大とレプリケーションラグ、ネットワーク帯域のボトルネックとか、色々あったみたいじゃ。

色々な課題があったんですね。それに対して、どのような対策を講じたのでしょうか?

まず、プライマリデータベースの負荷を下げるために、書き込み処理を可能な限りレプリカにオフロードしたり、アプリケーションレベルで不要な書き込みを避けたらしいぞ。遅延書き込みで書き込みバーストを平準化したりもしたみたいじゃ。

なるほど。クエリ最適化も行ったんですね。長時間のトランザクションを避けるためのタイムアウト設定や、複雑なマルチジョインクエリの最適化、ORMの利用に注意したとのことですが、ORMの利用に注意とはどういうことでしょうか?

ORMは便利だけど、使い方を間違えると非効率なクエリを発行してしまうことがあるからの。例えば、N+1問題とかじゃな。

N+1問題ですね。ORMを使う際は、発行されるSQLを意識することが大切ですね。

その通り!あとは、読み取り専用レプリカを活用したり、高優先度リクエストのために専用のレプリカを割り当てたりして、単一障害点対策も行ったみたいじゃ。

スキーマ管理も徹底したんですね。軽量なスキーマ変更のみ許可したり、フルテーブルリライトを伴う操作は禁止したり、インデックスの作成・削除はCONCURRENTLYオプションを使用したりと。

CONCURRENTLYオプションは、インデックス作成中にテーブルへの書き込みをブロックしないようにするためのものじゃな。オンラインでインデックスを作成・削除できるのは、非常に便利じゃ。

これらの対策によって、AzureホストのPostgreSQLを100万QPS超にスケールできたんですね。レプリケーションラグを増加させることなく、数十台のレプリカを追加できたのも素晴らしいです。

しかも、低レイテンシを維持しながら、異なる地域に読み取り専用レプリカをデプロイできたらしいぞ。過去9ヶ月間でPostgreSQL関連のSEV0インシデントは1件のみというのも、すごい実績じゃ。

インシデント事例として、キャッシュの故障によるカスケード効果や、高CPU使用率下でWALSenderプロセスがループし、レプリケーションラグが増加したことが挙げられていますね。

OpenAIはPostgreSQL開発コミュニティに、未使用インデックスの無効化機能や、pg_stat_statementsにP95/P99レイテンシメトリクスの追加、スキーマ変更履歴の記録などを要望しているみたいじゃ。

現場からの要望は、PostgreSQLの改善に繋がりそうですね。モニタリングビューのセマンティクスの明確化や、PostgreSQLのデフォルトパラメータの最適化も要望しているんですね。

OpenAIはDatadogでPostgreSQLを監視していて、Azure PostgreSQLチームが手厚いサポートを提供しているらしいぞ。Pigstyは、OpenAIが直面する課題に対するソリューションを実装しているとのことじゃ。

OpenAIのPostgreSQL運用事例、大変勉強になりました!大規模なデータベースを運用するためのノウハウが詰まっていましたね。

そうじゃな!しかし、これだけの規模になると、データベースの運用も大変じゃな。まるで、巨大ロボットのメンテナンスみたいじゃ。

確かにそうですね!博士、巨大ロボットのメンテナンスが得意そうですね。

私にかかれば、どんなロボットもイチコロじゃ!…って、私はロボットじゃないぞ!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。