データベースの接続制限をどのように決定できますか?

connection-pooling database pylons python sqlalchemy
データベースの接続制限をどのように決定できますか?

私の組織では、PostgreSQLデータベースはポリシーの問題として20接続制限で作成されています。 これは、接続プールを使用する複数のアプリケーションが動作している場合、相互作用が不十分になる傾向があります。これは、それらの多くが接続の完全なスイートを開き、アイドル状態に保つためです。

DBと接続しているアプリケーションが2つ以上あるとすぐに、予想どおり接続が不足します。

プーリング動作はここでは新しいことです。これまで、WebベースのDBゲートウェイ(?!)を介してアクセスへのアクセスをシリアル化するか、まったくプールしないことにより、プールされた接続を管理してきました。 結果として、プーリングがどのように機能するかを何度も何度も説明する必要があります(文字通り、プロジェクトの過程で1人から5つのトラブルチケットが発生します)。

私が欲しいのは次のいずれかです:

  1. 利用可能な数を増やすための強固で議論の余地のない根拠
    プールとうまく遊ぶためのデータベースへの接続。 +その場合、安全な制限は何ですか? 20に制限する理由はありますか?

  2. 私が間違っている理由、私たちはプールのサイズを削減する必要があります
    それらを完全に排除します。

価値のあるものについては、ここにコンポーネントがあります。 これらの1つがどのように構成されているかに関連する場合は、以下を考慮してください。

DB:PostgreSQL 8.2。 いいえ、この一環としてアップグレードすることはありません。 + Webサーバー:Python 2.7、Pylons 1.0、SQLAlchemy 0.6.5、psycopg2

  • これは、システムへのアクセスのいくつかの側面により、複雑になります
    手動で構成されたエンジンを使用するSQLAlchemy ORMを使用するデータ、古いPHP APIと一致するオブジェクトで接続をラップするアソシエイトの1人によって記述された別のエンジンファクトリ(Still sqlalchemy)を使用してデータにアクセスするユーザーもいます。

タスクランナー:Python 2.7、セロリ2.1.4、SQLAlchemy 0.6.5、psycopg2

  3  3


ベストアンサー

同時アクティビティごとに1つの接続を要求するのが合理的であり、同時HTTPリクエストが同時に実行されると仮定するのは合理的だと思います。

これで、処理する同時HTTPリクエストの数は、a)サーバーの負荷、およびb)利用可能なCPUの数に応じてスケーリングする必要があります。 すべてうまくいけば、各リクエストはどこか(Webサーバー、アプリケーションサーバー、またはデータベースサーバー)でCPU時間を消費します。つまり、CPUを超えるリクエストを同時に処理することはできません。 実際には、すべてがうまくいくというわけではありません。一部の要求は、ある時点でIOを待機し、CPUを消費しません。 そのため、CPUを持っているよりも多くのリクエストを同時に処理しても構いません。

それでも、たとえば4つのCPUがあり、20の同時要求を許可すると仮定すると、すでにかなりの負荷がかかります。 同時に処理できるリクエストの数を増やすよりも、HTTPリクエストを抑制したいです。 単一のリクエストに複数の接続が必要であることがわかった場合、アプリケーションに欠陥があります。

したがって、制限に対処し、アイドル接続が多すぎないことを確認することをお勧めします(実際に同時に処理している要求の数と比較して)。

2


タイトルとURLをコピーしました