sql >> データベース >  >> RDS >> PostgreSQL

HerokuでのPumaクラスター構成

    a)クラスターワーカーがフォークされているので、inUnicornのようなbefore_fork / after_fork構成が必要ですか?。

    通常はありませんが、preload_appを使用しているため 、 はい。アプリをプリロードすると、インスタンスが起動して実行され、ワー​​カー用のメモリスペースがフォークされます。その結果、初期化子は1回だけ実行されます(おそらくdb接続などを割り当てます)。この場合、on_worker_boot コードは適切です。 preload_appを使用していない場合 、次に各ワーカーが自身を起動します。この場合、初期化子を使用すると、実行しているようにカスタム接続をセットアップするのに理想的です。実際、preload_appなし 、on_worker_boot その時点でActiveRecordとその仲間がロードされていないため、ブロックはエラーになります。

    b)アプリケーションに応じてスレッド数を調整するにはどうすればよいですか?ドロップダウンする理由は何ですか? /どのような場合に違いが生じますか? 0:16はすでに最適化されていませんか?

    Heroku(および私のテスト)では、minと一致させるのが最適です。 / max スレッド、max <=DB_POOL 設定。 min スレッドを使用すると、負荷がかかっていないときにアプリケーションがリソースをスピンダウンできます。これは通常、サーバー上のリソースを解放するのに最適ですが、Herokuでは必要が少ない可能性があります。そのdynoはすでにWebリクエストの処理に専念しており、それらを準備しておくこともできます。 maxを設定している間 スレッド<=あなたのDB_POOL 環境変数は必要ありません。プール内のすべてのデータベース接続を消費するリスクがあります。次に、接続を必要とするスレッドがありますが、接続を取得できません。古い「ActiveRecord::ConnectionTimeoutError-できませんでした」を取得できます。 5秒以内にデータベース接続を取得します。」エラー。これはアプリケーションによって異なりますが、maxを使用することもできます。> DB_POOL そして元気になりなさい。あなたのDB_POOL 少なくともminと同じである必要があります 接続が熱心にロードされていなくても、スレッドの値(アプリがデータベースにヒットしない場合、5:5スレッドは5つの接続を開きません)。

    c)Herokuデータベースは500の接続を許可します。スレッド、ワーカー、dynoの数に応じて、DB_POOLの適切な値は何でしょうか。 -並列で作業する場合、dynoごとのワーカーごとのすべてのスレッドに唯一のDB接続が必要ですか?

    プロダクションティアでは、500を明確にすることができます:)

    dynoごとのワーカーごとのすべてのスレッド可能性があります すべてが同時にデータベースにアクセスしようとしているかどうかに応じて、接続を消費します。通常、接続は完了すると再利用されますが、b)で述べたように 、スレッドがプールよりも大きい場合は、悪い時間を過ごすことができます。接続は再利用されます。これらはすべてActiveRecordによって処理されますが、理想的ではない場合もあります。接続がアイドル状態になったり、停止したりすることがあります。そのため、デッド接続を検出して再利用するために、リーパーをオンにすることをお勧めします。



    1. SQL Serverのスパース列:時間とスペースへの影響

    2. 一般的なSQLServerの事故

    3. Linux / WindowsでPgBouncerログをローテーションする方法は?

    4. phpMyAdminが#2002をスローしていますmysqlサーバーにログインできませんphpmyadmin