Должен ли я отключить (), если я использую Apache :: DBI's connect_cached ()?
Мое приложение для интрасети на основе mod_perl2 используетDBI->connect_cached()
который предположительно отмененApache::DBI
версия та же. Обычно он работал довольно хорошо, но совсем недавно у нас возникла проблема на нашем тестовом сервере, к которому были подключены только два пользователя, в результате чего наше приложение иногда, но не всегда, умирало при попытке перезагрузить страницу с помощью 'FATAL: извините, слишком много клиентов уже подключение к нашему бэкэнду Postgres 9.0, несмотря на то, что все они если я посмотрю статистику в 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->подключить поведение. И Apache :: DBI 'Документы рекомендую против этого.
ОБНОВЛЕНИЕ: яя установил первые 5 параметров в вышеупомянутой конфигурации все на 1, и мое приложение все еще использует все больше и больше соединений, когда я нажимаю на его страницы. Это я невообще не понимаю - у него должен быть только один процесс, и что один процесс должен повторно использовать свое соединение.