web-dev-qa-db-ja.com

Heroku "psql:FATAL:残りの接続スロットはレプリケーション以外のスーパーユーザー接続用に予約されています"

私は、HerokuでPostgresqlバックエンドを使用してアプリを開発しています。 CLIとサーバーのページのロードの両方からデータベースにアクセスしようとすると、定期的にこのエラーメッセージが表示されます。

psql: FATAL: remaining connection slots are reserved for non-replication superuser connections

誰もこれを前に見ましたか、正しい方向に私を指すのを助けてください?

92
nathancahill

max_connections構成設定を増やすか、(おそらくより良い) 接続プーリングを使用 のいずれかにより、より小さな接続プールを介して多数のユーザー要求をルーティングする必要があります。

https://wiki.postgresql.org/wiki/Number_Of_Database_Connections

43
kgrittn

Heroku“ psql:FATAL:残りの接続スロットは非レプリケーションスーパーユーザー接続用に予約されています” :を参照してください。

Herokuには、データベースの負荷分散に問題がある場合があります。

André Laszlomarkshizと私は全員、質問に対するコメントでそれを扱っていると報告しました。

サポートコールを節約するために、同様の問題に対してHerokuサポートから受け取った応答を以下に示します。

こんにちは、

趣味層データベースの制限の1つは、予告なしのメンテナンスです。多くの趣味のデータベースは単一の共有サーバー上で実行され、ハードウェアメンテナンスのためにそのサーバーを再起動したり、負荷分散のために別のサーバーにデータベースを移行したりする必要がある場合があります。その場合、ログにエラーが表示されるか、接続に問題が発生します。サーバーが再起動している場合、データベースがオンラインに戻るには15分以上かかる場合があります。

接続プールを保持するほとんどのアプリ(RailsのActiveRecordなど)は、データベースへの新しい接続を開くことができます。ただし、場合によっては、アプリは再接続できません。その場合は、アプリを再起動してオンラインに戻すことができます。

これは、重要な運用アプリケーションで趣味のデータベースを実行することをお勧めしない理由の1つです。標準およびプレミアムデータベースには、ダウンタイムイベントの通知が含まれており、一般的にパフォーマンスが向上し、安定しています。 pg:copyを使用して、標準プランまたはプレミアムプランに移行できます。

これが続く場合は、heroku addons:addを使用して(別のサーバーに)新しいデータベースをプロビジョニングしてから、pg:copyを使用してデータを移動できます。趣味の層のルールは、9ドルの基本プランと無料のデータベースに適用されることに注意してください。

ありがとう、ブラッドリー

7
Aur Saraf

この例外は、接続を閉じるのを忘れたときに発生しました

5
Sanyifejű

私は実際に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は私のオープンチケットに応答し、私のデータベースはネットワークで不適切に負荷分散されていると述べました。彼らは、彼らのシステムの改善が将来同様の問題を防ぐはずだと言った。それにもかかわらず、データベースを手動で再配置するサポートにより、パフォーマンスが著しく向上します。

3
markshiz

次のコマンドでpostgresデータベースを再起動します。

postgres -D /usr/local/var/postgres
1
Naveen Agarwal