Пределы соединения с Django ORM и PostgreSQL - PullRequest
3 голосов
/ 16 июня 2010

Я запускаю проект Django на Postgresql 8.1.21 (с использованием Django 1.1.1, Python2.5, psycopg2, Apache2 с mod_wsgi 3.2).Недавно мы столкнулись с этой прекрасной ошибкой:

OperationalError: FATAL: connection limit exceeded for non-superusers

Я не первый, кто сталкивается с этим.Об этой ошибке много говорят, в частности, о psycopg, но большая ее часть сконцентрирована на старых версиях Django и / или предлагает решения, включающие исправления кода в самом Django.Мне еще предстоит найти краткое объяснение того, как решить проблему с Django ORM (или psycopg, в зависимости от того, что в данном случае действительно ответственно), оставляя открытыми соединения Postgre.

Будет просто добавление connection.close() вконец каждого взгляда решить эту проблему?Еще лучше, кто-нибудь окончательно решил эту проблему и надрал задницу этой ошибки?

Редактировать : позже мы увеличили ограничение Postgresql до 500 соединений;это предотвратило появление ошибки, но заменило ее чрезмерным использованием памяти.

1 Ответ

1 голос
/ 16 июня 2010

Это может быть вызвано другими причинами. Например, настройте Apache / mod_wsgi таким образом, чтобы теоретически он мог принимать больше одновременных запросов, чем то, что сама база данных может принимать одновременно. Вы проверили свою конфигурацию Apache / mod_wsgi и сравнили лимит на максимальное количество клиентов с PostgreSQL, чтобы убедиться, что что-то подобное не было сделано. Очевидно, это предполагает, что вам удалось достичь этого предела в Apache каким-то образом, а также зависит от того, как настроен пул соединений с базами данных.

...