it-swarm.com.de

Heroku "psql: FATAL: verbleibende Verbindungssteckplätze sind für Nicht-Replikations-Superuser-Verbindungen reserviert"

Ich entwickle eine App auf Heroku mit einem Postgresql-Backend. Wenn ich versuche, auf die Datenbank zuzugreifen, erhalte ich diese Fehlermeldung regelmäßig sowohl von der CLI als auch vom Laden einer Seite auf dem Server

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

Wer hat das schon mal gesehen oder kann mich in die richtige Richtung weisen?

83
nathancahill

Sie müssen entweder die Konfigurationseinstellung max_connections erhöhen oder (wahrscheinlich besser) Verbindungspooling verwenden , um eine große Anzahl von Benutzeranforderungen durch einen kleineren Verbindungspool zu leiten.

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

40
kgrittn

Siehe Heroku "psql: FATAL: Die verbleibenden Verbindungssteckplätze sind für Nicht-Replikations-Superuser-Verbindungen reserviert." :

Heroku hat manchmal ein Problem mit dem Datenbank-Lastausgleich.

André Laszlo, markshiz und ich haben alle berichtet, dass sie sich in Kommentaren zu der Frage damit befassen.

Um Ihnen den Support-Anruf zu ersparen, hier die Antwort, die ich vom Heroku Support für ein ähnliches Problem erhalten habe:

Hallo,

Eine der Einschränkungen der Hobby-Tier-Datenbanken ist die unangekündigte Wartung. Viele Hobby-Datenbanken laufen auf einem einzigen gemeinsam genutzten Server, und wir müssen diesen Server gelegentlich neu starten, um die Hardware zu warten, oder Datenbanken zum Lastausgleich auf einen anderen Server migrieren. In diesem Fall wird in den Protokollen ein Fehler angezeigt oder es treten Probleme beim Verbindungsaufbau auf. Wenn der Server neu startet, kann es 15 Minuten oder länger dauern, bis die Datenbank wieder online ist.

Die meisten Apps, die einen Verbindungspool unterhalten (wie ActiveRecord in Rails), können lediglich eine neue Verbindung zur Datenbank herstellen. In einigen Fällen kann eine App jedoch keine erneute Verbindung herstellen. In diesem Fall können Sie Ihre App neu starten, um sie wieder online zu schalten.

Dies ist einer der Gründe, warum wir Hobby-Datenbanken für kritische Produktionsanwendungen verwenden sollten. Standard- und Premium-Datenbanken enthalten Benachrichtigungen zu Ausfallzeiten und sind im Allgemeinen wesentlich leistungsfähiger und stabiler. Sie können pg: copy verwenden, um zu einem Standard- oder Prämienplan zu migrieren.

Wenn dies so weitergeht, können Sie versuchen, eine neue Datenbank (auf einem anderen Server) mit heroku-Addons bereitzustellen: fügen Sie sie hinzu und verschieben Sie die Daten mit pg: copy. Beachten Sie, dass Hobby-Tier-Regeln sowohl für den $ 9-Basisplan als auch für die kostenlose Datenbank gelten.

Vielen Dank, Bradley

6
Aur Saraf

diese Ausnahme geschah, als ich vergaß, die Verbindungen zu schließen

4
Sanyifejű

Ich habe tatsächlich versucht, das Verbindungs-Pooling auf der Django-Seite zu implementieren:

https://github.com/gmcguire/Django-db-pool

ich habe diesen Fehler trotzdem erhalten, obwohl die Anzahl der verfügbaren Verbindungen unter die Standard-Entwicklungs-DB-Quote von 20 offenen Verbindungen gesunken ist.

In diesem Artikel wird beschrieben, wie Sie Ihre Postgresql-Datenbank in die kostenlose/billige Schicht von Amazon EC2 verschieben. Dadurch könnten Sie max_connections höher einstellen. Auf diese Weise können Sie auch Verbindungen auf Datenbankebene mit PGBouncer zusammenlegen.

http://www.askthepony.com/blog/2011/07/getting-Django-on-heroku-prancing-8-times-faster/

UPDATE:

Heroku antwortete auf mein offenes Ticket und erklärte, dass meine Datenbank in ihrem Netzwerk nicht ordnungsgemäß ausbalanciert war. Sie sagten, dass Verbesserungen ihres Systems ähnliche Probleme in der Zukunft verhindern sollten. Trotzdem wurde meine Datenbank manuell umgestellt, und die Leistung wurde spürbar verbessert.

3
markshiz

Starten Sie Ihre Postgres-Datenbank mit folgendem Befehl neu: 

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