2012-11-30 10 views
11

Ho ricevuto il messaggio di errore sopra riportato con Heroku Postgres Basic (as per this question) e ho cercato di diagnosticare il problema.Heroku "psql: FATAL: gli alloggiamenti di connessione rimanenti sono riservati alle connessioni superuser non repliche"

Uno dei suggerimenti è utilizzare il pool di connessioni ma sembra Rails has this built in. Un altro suggerimento è che l'app è configurata in modo errato e apre troppe connessioni.

La mia app gestisce tutte le sue connessioni tramite Active Record, e ho avuto una connessione diretta al database da Navicat (o almeno pensavo di averlo).

Come eseguire il debug di questo?

Risoluzione

scopre che era un problema Heroku. Da supporto di Heroku:

Abbiamo rilevato un problema sul server che esegue il database di base. Mentre lo individuiamo e lo indirizziamo, ti consigliamo di eseguire il provisioning di un nuovo database di base e di migrare con PGBackups come dettagliato qui: https://devcenter.heroku.com/articles/upgrade-heroku-postgres-with-pgbackups . Questo dovrebbe mettere il tuo database su un nuovo server. Mi scuso per l'interruzione di : stiamo lavorando per risolvere questo problema e impedirlo dal numero che si verificherà in futuro.

risposta

7

Potreste essere in grado di trovare il motivo per cui si dispone di così tanti collegamenti con ispezionando vista pg_stat_activity:

SELECT * FROM pg_stat_activity 

Molto probabilmente, avete qualche ciclo randagio che si apre nuova connessione (s) senza chiuderlo.

+0

riesco a vedere un sacco di connessioni appartenenti ad altre persone. Il mio ha solo due che ha senso. Terrò d'occhio questo. Grazie molto! –

12

Questo è successo un paio di volte sulla mia app - in qualche modo c'è una perdita di connessione, poi all'improvviso il database sta ottenendo 10 volte più connessioni che dovrebbe. Se è il caso che si sono sempre sommersi da un errore come questo, non il traffico, provare a eseguire questo:

heroku pg:killall 

che terminerà tutte le connessioni al database. Se è pericoloso che la tua situazione interrompa le query, fai attenzione. Ho solo un'app per i binari, e se va giù, perdere una coppia di domande non è un grosso problema, perché le richieste del browser saranno mooooolto da quando scadranno comunque.

+0

mi ha salvato la pancetta –

4

Per risparmiare la chiamata di supporto, ecco la risposta che ho ricevuto da Heroku supporto per un problema analogo:

Ciao,

Uno dei limiti dei database tier hobby è la manutenzione senza preavviso. Molti database di hobby vengono eseguiti su un singolo server condiviso e occasionalmente è necessario riavviare il server per scopi di manutenzione hardware o migrare i database su un altro server per il bilanciamento del carico. Quando ciò accade, vedrai un errore nei tuoi log o hai problemi di connessione. Se il server si sta riavviando, potrebbero volerci 15 minuti o più perché il database ritorni online.

La maggior parte delle app che gestiscono un pool di connessioni (come ActiveRecord in Rails) possono semplicemente aprire una nuova connessione al database.Tuttavia, in alcuni casi un'app non sarà in grado di riconnettersi. In tal caso, puoi riavviare la tua app per riportarla online.

Questo è uno dei motivi per cui si consiglia di non eseguire database di hobby per applicazioni di produzione critiche. I database standard e Premium includono notifiche per gli eventi di downtime e sono molto più performanti e stabili in generale. È possibile utilizzare pg: copy per migrare a un piano standard o premium.

Se continua, è possibile provare a eseguire il provisioning di un nuovo database (su un server diverso) con i componenti aggiuntivi di heroku: aggiungere, quindi utilizzare pg: copy per spostare i dati. Tieni presente che le regole del livello hobby si applicano al piano base di $ 9 e al database gratuito.

Grazie, Bradley

Problemi correlati