Спящие соединения в SQL Server - PullRequest
0 голосов
/ 06 мая 2011

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

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

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

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

Ответы [ 2 ]

1 голос
/ 06 мая 2011

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

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

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

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

1 голос
/ 06 мая 2011

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

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

...