Tworzę aplikację na Heroku z zapleczem Postgresql. Okresowo otrzymuję ten komunikat o błędzie podczas próby dostępu do bazy danych, zarówno z CLI, jak i podczas ładowania strony na serwerze:
psql: FATAL: remaining connection slots are reserved for non-replication superuser connections
Czy ktoś widział to wcześniej lub proszę, pomóż mi wskazać właściwy kierunek?
postgresql
heroku
nathancahill
źródło
źródło
heroku pgbackups
mimo tego błędu udało mi się użyć polecenia, aby utworzyć kopię zapasową..bat
skrypt w systemie Windows do tego:for /l %%x in (1, 1, 100) do ( start psql )
gdzie 100 jest pożądaną liczbą backendów.pg:backups copy
,pg:backups capture
łącząc się z nią zpgAdmin
własnego komputera ani w żaden inny sposób, jaki mogłem sobie wyobrazić. Nawetpg:killall
nie pomogło. Godzinę później spróbowałem ponownie i połączenia wynosiły 50-50, więc po kilku próbach udałopg:backups copy
mi się i moja aplikacja wróciła w powietrze. To nie był ... niezbyt przyjemny dzień. Jeśli to wygooglowałeś, wypij szklankę wody.Odpowiedzi:
Musisz albo zwiększyć
max_connections
ustawienie konfiguracji, albo (prawdopodobnie lepiej) użyć puli połączeń, aby skierować dużą liczbę żądań użytkowników przez mniejszą pulę połączeń.https://wiki.postgresql.org/wiki/Number_Of_Database_Connections
źródło
pid
wartości dla sesji i użyćpg_terminate_backend()
funkcji, aby je zabić. Aby uniknąć problemu, pamiętaj o prawidłowym zamykaniu połączeń, a nie gwałtownym zabijaniu strony klienta.heroku pg:killall
Ten wyjątek zdarzył się, gdy zapomniałem zamknąć połączeń
źródło
Zobacz Heroku „psql: FATAL: pozostałe gniazda połączeń są zarezerwowane dla połączeń superużytkownika bez replikacji” :
Heroku czasami ma problem z równoważeniem obciążenia bazy danych.
André Laszlo
,markshiz
a ja wszyscy informowaliśmy o tym w komentarzach do pytania.Aby zaoszczędzić Ci połączenia z pomocą techniczną, oto odpowiedź, którą otrzymałem od pomocy technicznej Heroku na podobny problem:
źródło
W rzeczywistości próbowałem zaimplementować buforowanie połączeń na końcu django, używając:
https://github.com/gmcguire/django-db-pool
ale nadal otrzymuję ten błąd, pomimo obniżenia liczby dostępnych połączeń poniżej standardowego przydziału DB dla deweloperów wynoszącego 20 otwartych połączeń.
Jest tutaj artykuł o tym, jak przenieść bazę danych postgresql na darmową / tanią warstwę Amazon RDS. Umożliwiłoby to ustawienie
max_connections
wyżej. Pozwoli to również na tworzenie pul połączeń na poziomie bazy danych za pomocą PGBouncer.https://www.lewagon.com/blog/how-to-migrate-heroku-postgres-database-to-amazon-rds
AKTUALIZACJA:
Heroku odpowiedział na moje otwarte zgłoszenie i stwierdził, że moja baza danych jest nieprawidłowo równoważona obciążeniem w ich sieci. Stwierdzili, że ulepszenia ich systemu powinny zapobiec podobnym problemom w przyszłości. Niemniej jednak, obsługa ręcznego przeniesienia mojej bazy danych i wydajność jest zauważalnie poprawiona.
źródło
Zrestartuj bazę danych postgres za pomocą następującego polecenia:
źródło