Heroku "psql: FATAL: оставшиеся слоты для подключения зарезервированы для соединений с невосстановимыми суперпользователями"
Я разрабатываю приложение на Heroku с бэкэндом Postgresql. Периодически я получаю это сообщение об ошибке при попытке доступа к базе данных, как из CLI, так и из загрузки страницы на сервере:
psql: FATAL: remaining connection slots are reserved for non-replication superuser connections
Кто-нибудь видел это раньше или может указать мне в правильном направлении?
Ответы
Ответ 1
Вам нужно либо увеличить настройку конфигурации max_connections
, либо (возможно, лучше) использовать пул соединений для маршрутизации большого количества пользовательских запросов через меньший пул подключений.
https://wiki.postgresql.org/wiki/Number_Of_Database_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