Heroku "psql: FATAL: оставшиеся слоты для подключения зарезервированы для соединений с невосстановимыми суперпользователями"

Я разрабатываю приложение на Heroku с бэкэндом Postgresql. Периодически я получаю это сообщение об ошибке при попытке доступа к базе данных, как из CLI, так и из загрузки страницы на сервере:

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

Кто-нибудь видел это раньше или может указать мне в правильном направлении?

Ответ 2

См. Heroku "psql: FATAL: оставшиеся слоты для подключения зарезервированы для подключений суперпользователя без репликации" :

У Heroku иногда возникает проблема с балансировкой базы данных.

André Laszlo, markshiz, и я все сообщал об этом в комментариях по этому вопросу.

Чтобы сохранить ваш звонок поддержки, вот ответ, который я получил от поддержки Heroku для аналогичной проблемы:

Здравствуйте,

Одним из ограничений баз данных уровня хобби является немедленное обслуживание. Многие базы данных хобби работают на одном общем сервере, и нам иногда потребуется перезапустить этот сервер для целей технического обслуживания оборудования или перенести базы данных на другой сервер для балансировки нагрузки. Когда это произойдет, вы увидите сообщение об ошибке в ваших журналах или проблемы с подключением. Если сервер перезагружается, может потребоваться 15 минут или больше, чтобы база данных вернулась в сеть.

Большинство приложений, поддерживающих пул соединений (например, ActiveRecord in Rails), могут просто открыть новое соединение с базой данных. Однако в некоторых случаях приложение не сможет повторно подключиться. Если это произойдет, вы можете повторно запустить приложение, чтобы вернуть его обратно.

Это одна из причин, по которой мы рекомендуем использовать хобби-базы данных для критически важных производственных приложений. Стандартные и премиальные базы данных включают в себя уведомления о событиях простоя и гораздо более эффективны и стабильны в целом. Вы можете использовать pg: copy для перехода на стандартный или премиальный план.

Если это продолжается, вы можете попробовать создать новую базу данных (на другом сервере) с помощью аддонов героя: add, а затем использовать pg: copy для перемещения данных. Имейте в виду, что правила уровня хобби применяются к основному плану за 9 долларов, а также к бесплатной базе данных.

Спасибо, Брэдли

Ответ 3

это исключение произошло, когда я забыл закрыть соединения

Ответ 4

Я попытался реализовать пул соединений на конце django, используя:

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

но я все же получил эту ошибку, несмотря на то, что количество подключений доступно ниже стандартной квоты разработки 20 открытых подключений.

Здесь есть статья о том, как переместить вашу базу данных postgresql на бесплатный/дешевый уровень Amazon EC2. Это позволит вам установить max_connections выше. Это также позволит вам объединить соединения на уровне базы данных с помощью PGBouncer.

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

UPDATE:

Хероку ответил на мой открытый билет и заявил, что моя база данных неправильно балансирует нагрузку в своей сети. Они заявили, что улучшение их системы должно предотвратить подобные проблемы в будущем. Тем не менее, поддержка вручную переместила мою базу данных и производительность заметно улучшилась.

Ответ 5

Перезагрузите базу данных postgres, выполнив следующую команду:

postgres -D /usr/local/var/postgres