私は、HerokuでPostgresqlバックエンドを使用してアプリを開発しています。 CLIとサーバーのページのロードの両方からデータベースにアクセスしようとすると、定期的にこのエラーメッセージが表示されます。
psql: FATAL: remaining connection slots are reserved for non-replication superuser connections
誰もこれを前に見ましたか、正しい方向に私を指すのを助けてください?
max_connections
構成設定を増やすか、(おそらくより良い) 接続プーリングを使用 のいずれかにより、より小さな接続プールを介して多数のユーザー要求をルーティングする必要があります。
https://wiki.postgresql.org/wiki/Number_Of_Database_Connections
Heroku“ psql:FATAL:残りの接続スロットは非レプリケーションスーパーユーザー接続用に予約されています” :を参照してください。
Herokuには、データベースの負荷分散に問題がある場合があります。
André Laszlo
、markshiz
と私は全員、質問に対するコメントでそれを扱っていると報告しました。
サポートコールを節約するために、同様の問題に対してHerokuサポートから受け取った応答を以下に示します。
こんにちは、
趣味層データベースの制限の1つは、予告なしのメンテナンスです。多くの趣味のデータベースは単一の共有サーバー上で実行され、ハードウェアメンテナンスのためにそのサーバーを再起動したり、負荷分散のために別のサーバーにデータベースを移行したりする必要がある場合があります。その場合、ログにエラーが表示されるか、接続に問題が発生します。サーバーが再起動している場合、データベースがオンラインに戻るには15分以上かかる場合があります。
接続プールを保持するほとんどのアプリ(RailsのActiveRecordなど)は、データベースへの新しい接続を開くことができます。ただし、場合によっては、アプリは再接続できません。その場合は、アプリを再起動してオンラインに戻すことができます。
これは、重要な運用アプリケーションで趣味のデータベースを実行することをお勧めしない理由の1つです。標準およびプレミアムデータベースには、ダウンタイムイベントの通知が含まれており、一般的にパフォーマンスが向上し、安定しています。 pg:copyを使用して、標準プランまたはプレミアムプランに移行できます。
これが続く場合は、heroku addons:addを使用して(別のサーバーに)新しいデータベースをプロビジョニングしてから、pg:copyを使用してデータを移動できます。趣味の層のルールは、9ドルの基本プランと無料のデータベースに適用されることに注意してください。
ありがとう、ブラッドリー
この例外は、接続を閉じるのを忘れたときに発生しました
私は実際にDjangoエンドに接続プーリングを実装しようとしました:
https://github.com/gmcguire/Django-db-pool
ただし、利用可能な接続数を20のオープン接続の標準開発DBクォータ未満に下げたにもかかわらず、このエラーを受け取りました。
PostgresqlデータベースをAmazon EC2の無料/格安の階層に移動する方法についての記事があります。これにより、max_connections
を高く設定できます。これにより、PGBouncerを使用してデータベースレベルで接続をプールすることもできます。
http://www.askthepony.com/blog/2011/07/getting-Django-on-heroku-prancing-8-times-faster/
UPDATE:
Herokuは私のオープンチケットに応答し、私のデータベースはネットワークで不適切に負荷分散されていると述べました。彼らは、彼らのシステムの改善が将来同様の問題を防ぐはずだと言った。それにもかかわらず、データベースを手動で再配置するサポートにより、パフォーマンスが著しく向上します。
次のコマンドでpostgresデータベースを再起動します。
postgres -D /usr/local/var/postgres