- 時々、特定のクエリが原因でDBが停止することがあり、PostgreSQLの最適化が必要だと言われました。これを達成するためのアイデアはありますか?
下の画面はDBリソースです。
- CPU: 4 vcpu
- メモリ: 22 GB
皆さん、こんにちは。@Abdelrahman_MoHamedさんと共同で作業しています。最近、約50万件のトピックと350万人のユーザーを持つサイトをDiscourseに移行しました。GCPでセルフホストしています。このプロセス中に、移行を支援してくれたパートナーが、DBから適切なパフォーマンスを得るためにPostgresを最適化することが理にかなっているかもしれないと述べました。私たちの想定では、DBは最初からDiscourse用に最適化されている(おそらくそうなのですか?)ということでしたが、パートナーの提案を踏まえ、ここでフォローアップしたいと思いました。
要するに、ここで提示したような数のDBに対してPostgresを最適化するための一般的な方法があるのでしょうか?
ご協力ありがとうございます!
DBがボトルネックである、あるいはCPU負荷の原因であるという、より詳細な証拠はありますか?例えば、psやtopの出力などです。
もしDBが原因であれば、どのクエリを処理しているか問い合わせる方法があるかと思います。
そのような詳細は役立つかもしれません。
@Ed_S様、ありがとうございます。まもなくさらにデータを追加します。今は状況を監視しています。ご返信に感謝いたします。
それは奇妙な組み合わせのように思えます…メモリは22GBなのにvCPUは4つだけですか?メモリは過剰ですが、コアは足りない可能性があります。
通常、GBあたりのvCPUが多いサーバーを使用します。
これは、Webサーバーは非常に並列であり、各ユニコーンには約1GBしか必要ないためです。
ユニコーンはそれぞれ別のコアで実行できると思います。
これがCPU使用率が簡単に100%に達する理由かもしれません。
16/16または8/8構成への移行を検討し、状況が改善するかどうかを確認することをお勧めします。
小さなサイドステップは許容されますか?ユニコーンはPHPのワーカーと似たようなものですか?あるドキュメントでは、ユニコーンは実際には独自のワーカーを持つHTTPサーバーであり、リクエストをRubyに配信するため、まったく異なると説明しようとしていました。しかし、どちらもHTTPリクエストを処理し、より多くの同時リクエストを可能にし、したがってより多くのPHPワーカーとより多くのユニコーンが必要になり、より多くのRAMが必要になります。私にとっては、これら2つはほとんど同じです。
正しいですか、それともひどく間違っていますか?PHPワーカーの調整方法、時期、理由を知っているので、原則を理解したいと思います。しかし、ユニコーンは私にとって神秘的で魔法のような生き物にすぎません。
はい、それは妥当な比較だと思います。
関連: 管理者は、Web トラフィックに対してユニコーンの数が少なすぎるか多すぎるかを知るにはどうすればよいですか?
関連: 管理者は、必要以上に多くの RAM を持っているかどうかを知るにはどうすればよいですか?
私の理解では、ユニコーンの数は一般的に CPU の数に応じてスケーリングされますが、そうである必要はありません。たとえば、セットアップ以降にホスト構成が変更された場合などです。
RAM の量は、必要に応じてスケーリングされるはずです。多数の投稿やユーザーの大規模なインポートが必ずしもより多くの RAM を必要とすることを意味するのかどうかはわかりません。質問は、各 Web リクエストまたは各通常のタスクを提供するために、データベースのどの程度がアクセスされるかということです。
私にとって、非常に低い使用率を背景にした 10 分間の最大 CPU 使用率のバーストは、問題を示すものではありません。(たとえば、スポーツ/ギャンブル フォーラムのような非常に忙しく時間的制約のあるフォーラムで、ピーク時のページ提供に遅延が生じる場合、それは問題になります。しかし、私のフォーラムは時間的制約もパフォーマンス制約もありません。)
最近の応答時間の範囲をどのように表にまとめることができるかわかりませんが、それは調べるのに良いデータになるかもしれません。Web サーバー側またはデータベース側のいずれかから。