2012-11-30 10 views
11

Otrzymałem powyższy komunikat o błędzie z systemem Heroku Postgres Basic (as per this question) i próbowałem zdiagnozować problem.Heroku "psql: FATAL: pozostałe miejsca na połączenia zarezerwowane są dla superużytkowników niebędących replikatorami"

Jedną z sugestii jest użycie łączenia połączeń, ale wydaje się, że jest to Rails has this built in. Inną sugestią jest, że aplikacja jest nieprawidłowo skonfigurowana i otwiera zbyt wiele połączeń.

Moja aplikacja zarządza wszystkimi połączeniami za pośrednictwem Active Record, a ja miałem jedno bezpośrednie połączenie z bazą danych z Navicat (a przynajmniej myślałem, że miałem).

Jak mogę to debugować?

UCHWAŁA

Okazuje się, że był to problem Heroku. Wsparcie dla Heroku:

Wykryliśmy problem na serwerze z uruchomioną bazą danych Basic. Podczas gdy dokładnie to określimy i zwrócimy się do niego, zalecamy udostępnienie nowej podstawowej bazy danych i przeprowadzenie migracji za pomocą PGBackups jako szczegółowo tutaj: https://devcenter.heroku.com/articles/upgrade-heroku-postgres-with-pgbackups . To powinno umieścić twoją bazę danych na nowym serwerze. Przepraszamy za to zakłócenie w postaci - pracujemy nad rozwiązaniem tego problemu i zapobieganiem jego wystąpieniu w przyszłości w postaci numeru .

Odpowiedz

7

Możesz być w stanie znaleźć, dlaczego masz tak wiele połączeń, sprawdzając widok pg_stat_activity:

SELECT * FROM pg_stat_activity 

Najprawdopodobniej masz jakieś bezpańskie pętlę, która otwiera nowe połączenie (ów) bez zamykania go.

+0

widzę wiele połączeń należących do innych osób. Mój ma tylko dwa, co ma sens. Będę miał na to oko. Wielkie dzięki! –

12

To zdarzyło się kilka razy na mojej aplikacji - jakoś nie ma wycieku połączenia, wtedy nagle baza danych dostaje 10 razy więcej połączeń, niż powinna. Jeśli jest to przypadek, że są coraz zapchana przez błąd jak ten, nie ruch, spróbuj uruchomić to:

heroku pg:killall 

To zakończy wszystkie połączenia z bazą danych. Jeśli jest niebezpiecznie, aby Twoja sytuacja mogła przerwać zapytania, zachowaj ostrożność. Po prostu mam aplikację railsową, a jeśli ona zejdzie na dół, utrata kilku zapytań nie jest wielka, ponieważ żądania przeglądarek będą miały czasy oczekiwania od czasu.

+0

to uratowało mój bekon –

4

Aby zaoszczędzić na wezwanie pomocy, oto odpowiedź dostałem od Heroku poparcie dla podobnego problemu:

Witam,

Jednym z ograniczeń baz danych rzędu hobby to niezapowiedziany konserwacji. Wiele baz danych dotyczących hobbystów działa na jednym wspólnym serwerze, a czasami będziemy musieli zrestartować ten serwer w celu konserwacji sprzętu lub przeprowadzić migrację baz danych na inny serwer w celu równoważenia obciążenia. Gdy tak się stanie, zobaczysz błąd w dziennikach lub problemy z nawiązaniem połączenia. Jeśli serwer zostanie zrestartowany, może minąć 15 minut lub więcej, zanim baza danych wróci do trybu online.

Większość aplikacji utrzymujących pulę połączeń (np. ActiveRecord w Railsach) może po prostu otworzyć nowe połączenie z bazą danych.Jednak w niektórych przypadkach aplikacja nie będzie mogła się ponownie połączyć. Jeśli tak się stanie, możesz ponownie uruchomić aplikację Heroku, aby przywrócić ją do trybu online.

Jest to jeden z powodów, dla których zalecamy, aby nie uruchamiać baz danych hobbystycznych w krytycznych aplikacjach produkcyjnych. Standardowe i Premium bazy danych zawierają powiadomienia o przestojach i są znacznie bardziej wydajne i stabilne. Możesz użyć pg: copy, aby przejść do standardowego lub premium planu.

Jeśli to się powtórzy, możesz spróbować utworzyć nową bazę danych (na innym serwerze) z dodatkami heroku: dodaj, a następnie użyj polecenia pg: copy, aby przenieść dane. Należy pamiętać, że zasady dotyczące poziomów hobby mają zastosowanie do podstawowego planu 9 USD, a także do bezpłatnej bazy danych.

Dzięki Bradley

Powiązane problemy