十分な数のリクエストが発生すると、Web アプリでデータベースへの接続スロットが不足します。これは、保守的なサイズの接続プールを実行するように設定しているにもかかわらずであり、プロセス、スレッドの数を制限しています。接続プールはスレッド間で共有されますが、プロセスでは共有されないというのは正しいですか? また、DB 接続の不足を回避しながら、接続プールのサイズ、プロセス数、およびスレッド数の適切な組み合わせを選択するための優れた戦略は何ですか?
私が見ているエラー:
OperationalError: (OperationalError) FATAL: 残りの接続スロットは非レプリケーション スーパーユーザー接続用に予約されています
/etc/postgresql/9.1/main/postgresql.conf:
max_connections = 100
app.ini:
sqlalchemy.pool_size = 1
sqlalchemy.max_overflow = 5
アパッチ構成:
WSGIDaemonProcess test1 processes=5 threads=10 maximum-requests=10000
WSGIProcessGroup test1
プロセスを見る: $ ps aux |grep postgres |wc 多くの接続がアイドル状態でエラーが発生するにもかかわらず、これは妥当な負荷の下で 102 まで増加し、そこにとどまる可能性があります。