2010-06-15 3 views
2

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

OperationalError: FATAL: connection limit exceeded for non-superusers

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

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

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

ответ

1

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

+0

Я буду казаться тупым, но вы имеете в виду настройку максимальных запросов WSGIDaemonProcess или MaxClient от Apache? – bennylope

+0

Это действительно зависит от того, используете ли вы режим встроенного режима или демон в mod_wsgi. Я не могу угадать, что вы используете, поэтому нужно было обобщить. –

+0

Спасибо, это имеет смысл. Я заметил, что база данных (ORM/psycopg) по-прежнему оставляет соединения открытыми даже после установки предела соединения с БД выше предела MaxClients (теперь выполняется во встроенном режиме). Это определенно хорошо знать; Я думаю, что в этом случае ошибка по-прежнему приводит к тому, что ORM (?) Не закрывает эти соединения. – bennylope

Смежные вопросы