Спящие соединения в SQL Server

Не будучи администратором базы данных (тем более администратором базы данных MS :), я получил жалобы на то, что написанный мной фрагмент кода оставляет "спящие соединения" в базе данных.

Мой код — Java и использует Apache Commons DBCP для пула соединений. Я также использую Spring JdbcTemplate для управления состоянием соединения, поэтому о закрытии соединений не может быть и речи (поскольку библиотека делает это за меня).

Мой главный вопрос: с точки зрения администратора баз данных, могут ли эти соединения вызывать сбои или снижение производительности?

Этот вопрос связан , на данный момент настройки остались как были (бесконечные активные/неактивные соединения в пуле).


person Alex Ciminian    schedule 06.05.2011    source источник


Ответы (2)


Действительно, чтобы ответить на ваш вопрос, было бы неплохо иметь представление о количестве этих «спящих» соединений. Также имеет значение, является ли основная цель этого сервера обслуживанием вашего приложения, или же ваше приложение является одним из многих. Также важно, существует ли несколько экземпляров вашего приложения (например, на нескольких веб-серверах) или только одно.

По моему опыту, накладные расходы, связанные с бездействующими соединениями на современном оборудовании, практически отсутствуют, если вы не достигаете сотен. Тем не менее, глядя на ваш предыдущий вопрос, разрешение пулу создавать неограниченное количество соединений не звучит разумно - я бы рекомендовал установить ограничение, даже если вы установите его на сотни.

Я могу сказать вам, по крайней мере, из одной болезненной ситуации с утечкой пулов соединений, что иметь тысячу открытых соединений с одним SQL-сервером дорого, даже если они простаивают. Кажется, я припоминаю, что сервер начал его терять (не принимать новые соединения, тайм-аут простых запросов и т. д.), когда приближался к диапазону 2000 соединений (несколько лет назад это был SQL 2000 на оборудовании среднего уровня).

Надеюсь это поможет!

person Tao    schedule 06.05.2011

Apache DBCP имеет параметры maxIdle соединений, равные 8, и параметры maxActive, равные 8. Это означает, что в пуле может существовать 8 активных соединений и 8 бездействующих соединений. DBCP повторно использует соединения при вызове соединения. Вы можете установить это в соответствии с вашими требованиями. Вы можете обратиться к документу ниже:

Конфигурация DBCP — Apache

person James Jithin    schedule 06.05.2011
comment
Я узнал об этом, когда задавал предыдущий вопрос :), меня интересует, могут ли эти спящие соединения, как они говорят, влиять на производительность SQL Server. - person Alex Ciminian; 06.05.2011
comment
@Alex - Обычно в действующей системе количество подключений распределяется в соответствии с требованиями использования. Для приложения с 250 пользователями в реальном времени мы предоставили 30 максимальных подключений. Если есть несколько приложений, которые обращаются к одной и той же базе данных, лучше распределить их в соответствии с количеством подключений, которое потребуется каждому из них. И очевидно, что количество одновременных активных подключений повлияет на сервер базы данных, также зависит от ресурсов (ОЗУ, ЦП) системы. - person James Jithin; 06.05.2011