2012-11-30 12 views
11

Ich habe die obige Fehlermeldung ausgeführt Heroku Postgres Basic (as per this question) und habe versucht, das Problem zu diagnostizieren.Heroku "psql: FATAL: Verbleibende Verbindungssteckplätze sind reserviert für Nicht-Replikation Superuser-Verbindungen"

Einer der Vorschläge ist Verbindungspooling zu verwenden, aber es scheint Rails has this built in. Ein anderer Vorschlag ist, dass die App nicht richtig konfiguriert ist und zu viele Verbindungen öffnet.

Meine App verwaltet alle ihre Verbindungen durch Active Record, und ich hatte eine direkte Verbindung mit der Datenbank von Navicat (oder zumindest dachte ich, ich hätte).

Wie würde ich dies debuggen?

RESOLUTION

Stellt sich heraus, es ein Heroku Problem. Von Heroku-Support:

Wir haben ein Problem auf dem Server festgestellt, auf dem Ihre Basic-Datenbank ausgeführt wird. Während wir dies genau bestimmen und es ansprechen, empfehlen wir Ihnen, eine neue Basis-Datenbank bereitzustellen und mit PGBackups zu migrieren, wie unter beschrieben hier: https://devcenter.heroku.com/articles/upgrade-heroku-postgres-with-pgbackups . Das sollte Ihre Datenbank auf einen neuen Server stellen. Ich entschuldige mich für diese Störung - wir arbeiten daran, dieses Problem zu beheben und zu verhindern, dass es in Zukunft auftritt.

Antwort

7

Sie könnten in der Lage sein zu finden, warum Sie so viele Verbindungen durch Sichtprüfung pg_stat_activity:

SELECT * FROM pg_stat_activity 

Wahrscheinlich haben Sie einige Streu Schleife, die es ohne Schließen neue Verbindung (en) öffnet.

+0

kann ich viele Verbindungen gehören, zu anderen Menschen sehen. Meins hat nur zwei, die Sinn machen. Ich werde das im Auge behalten. Danke vielmals! –

12

Dies ist ein paar Mal passiert in meiner App - irgendwie gibt es ein Verbindungsleck, dann plötzlich die Datenbank wird 10 Mal so viele Verbindungen wie es sollte. Wenn dies der Fall ist, dass Sie durch einen Fehler wie diese überschwemmt werden immer, nicht für den Verkehr mehr, wählen Sie diese:

heroku pg:killall 

, dass alle Verbindungen zur Datenbank beendet wird. Wenn es für Ihre Situation gefährlich ist, mögliche Suchanfragen abzubrechen, seien Sie vorsichtig. Ich habe nur eine Rails-App, und wenn es nach unten geht, ist der Verlust von ein paar Fragen keine große Sache, weil die Browser-Anfragen werden laooooong seit dem Zeitlimit sowieso haben.

+0

das hat meinen Speck gerettet –

4

Sie den Support anrufen zu speichern, hier ist die Antwort, die ich für ein ähnliches Problem von Heroku Unterstützung bekam:

Hallo,

Eine der Einschränkungen der Hobby-Tier-Datenbanken ist unangemeldet Wartung. Viele Hobbydatenbanken werden auf einem einzigen gemeinsam genutzten Server ausgeführt, und gelegentlich müssen wir diesen Server zu Wartungszwecken neu starten oder Datenbanken zum Lastenausgleich auf einen anderen Server migrieren. Wenn dies geschieht, wird in Ihren Protokollen ein Fehler angezeigt oder es treten Probleme beim Herstellen der Verbindung auf. Wenn der Server neu gestartet wird, kann es 15 Minuten oder länger dauern, bis die Datenbank wieder online ist.

Die meisten Apps, die einen Verbindungspool verwalten (wie ActiveRecord in Rails), können einfach eine neue Verbindung zur Datenbank öffnen.In einigen Fällen kann eine App die Verbindung jedoch nicht wiederherstellen. Wenn dies passiert, können Sie Ihre App neu starten, um sie wieder online zu schalten.

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

Wenn dies der Fall ist, können Sie versuchen, eine neue Datenbank (auf einem anderen Server) mit heroku addons zu erstellen: add, und verwenden Sie dann pg: copy, um die Daten zu verschieben. Denken Sie daran, dass Hobby-Tier-Regeln gelten für die $ 9 Grundplan sowie die kostenlose Datenbank.

Danke, Bradley

Verwandte Themen