2017-09-29 11 views
0

私はOSE、5ポッド、ポッドごとに1つのコンテナで実行されているRailsアプリケーションを持っています。 Railsアプリケーションは、デフォルトのスレッド設定(最小:0、最大:16)でPuma Webサーバーを使用します。私のdatabase.ymlでは、私は接続を定義しましたpool:は10です。PumaスレッドはどのようにPostgres接続プールとやりとりしますか?

私の最大PG接続フットプリントは何ですか?

私の現在の理論は、次のとおりです。

5 pods X 1 container X 16 threads X 10 connection pool = 800 possible PostgreSQL connections

しかし、16個のPumaスレッドのそれぞれが同じPG接続プールから共有するかどうか質問していますか?その場合の公式は、

5 podsxx= 50 possible PostgreSQL connectionsとなります。 (この数学は私のアプリがより要求より多くの接続を提供することができるかもしれないので、スレッドごとに1で、6つの以上のプールの提供の問題だろう正しいかどうプーマ16のスレッドを持つもちろん、。)

誰でも私の主題に関する決定的な文書を指摘できますか?ありがとう!

答えて

1

接続プールがプロセス内にあり、スレッド間でデータベース接続を切断し、すべてのデータベース接続がビジー状態のときにスレッドが待機する場合は、2番目が正しい。そうでなければ、最初のもの。いずれにしても、それは実際にはさらに悪くなる可能性があります。ローリング展開を使用している場合は、再起動時に1つのポッドをアクティブにすることができます。

PostgreSQLデータベースインスタンスの前にpgbouncer(https://pgbouncer.github.io/)を使用してみてください。私の理解では、アプリケーションで何もすることなくデータベース接続のプールを管理できるという柔軟性を提供しています。代わりにpgbouncerで扱っています。

関連する問題