Должен ли я отключить (), если я использую Apache :: DBI's connect_cached ()?

Мое приложение для интрасети на основе mod_perl2 используетDBI->connect_cached() который предположительно отменяетсяApache::DBIверсия та же. Обычно он работал довольно хорошо, но совсем недавно у нас возникла проблема на нашем тестовом сервере, к которому были подключены только два пользователя, в результате чего наше приложение иногда, но не всегда, умирало при попытке перезагрузить страницу с помощью 'FATAL: извините, слишком много клиентов уже подключаются к нашему бэкэнду postgres 9.0, несмотря на то, что все они<IDLE> если я посмотрю статистику в pgadmin3.

Бэкэнд отделен от наших бэкэндов разработки и производства, но все они настроены наmax_connections = 100, Аналогично, все службы httpd разделены, но настроены с

StartServers       8
MinSpareServers    5
MaxSpareServers   20
ServerLimit      99
MaxClients       99
MaxRequestsPerChild  4000
....
PerlModule Apache::DBI

У меня сложилось впечатление, что я не должен звонитьdisconnect() в моей базе данных, если бы я хотел, чтобы они действительно выиграли от кэширования. Был ли я неправ в этом? Если нет, то, я думаю, я спрошу об этой ошибке отдельно. Просто хотел убедиться, что это не было этой установкой ...

Apache :: Документы DBI сказать:

При загрузке модуля DBI (не путайте это с модулем Apache :: DBI) он проверяет, была ли установлена переменная среды 'MOD_PERL' и был ли загружен модуль Apache :: DBI. В этом случае каждый запрос на подключение будет перенаправлен в модуль Apache :: DBI. .... Нет необходимости удалять операторы отключения из вашего кода. Они ничего не будут делать, потому что модуль Apache :: DBI перегружает метод отсоединения.

Если вы разрабатываете новый код, предназначенный исключительно для использования в mod_perl, вы можете вместо этого использовать DBI-> connect_cached (), но рассмотрите возможность добавления автоматического отката после каждого запроса, как описано выше.

Так что я думаю, что для моего приложения только для mod_perl2 мне не нужен Apache :: DBI, потому что разработчики Apache :: DBI рекомендуют использовать DBI-> connect_cached. И мне не нужно отключать заявления.

Но потомДокументы DBI сказать:

Обратите внимание, что поведение [connect_cached] отличается в нескольких отношениях от поведения постоянных соединений, реализованных Apache :: DBI. Однако, если Apache :: DBI загружен, connect_cached будет использовать его.

Это звучит так, как будто Apache :: DBI будет фактически влиять на connect_cached, в том смысле, что вместо получения поведения DBI-> connect_cached при вызове я получу поведение Apache :: DBI-> connect. И документы Apache :: DBI рекомендуют против этого.

ОБНОВЛЕНИЕ: я установил первые 5 параметров в вышеупомянутой конфигурации все в 1, и мое приложение все еще использует все больше и больше соединений, когда я нажимаю на его страницы. Этого я совсем не понимаю - у него должен быть только один процесс, и этот процесс должен повторно использовать свое соединение.

Ответы на вопрос(1)

Ваш ответ на вопрос