Как долго sqlserver поддерживает активные соединения после их закрытия? - PullRequest
2 голосов
/ 08 мая 2009

В проекте asp.net/Sqlserver мы создаем соединения, используя ado.net (аутентификация sql), и мы видим поведение, при котором существует много активных соединений в состоянии «спящий», «Команда ожидания»

Код выполняет следующие действия: получение соединения из общей функции, обновление базы данных, фиксация транзакции, закрытие и удаление транзакции, закрытие соединения.

1) В sqlserver 2008, когда наша программа некоторое время запускается (она обновляет БД каждые несколько секунд), количество активных подключений резко возрастает, и sqlserver начинает отказывать в новых подключениях (так как подключений по умолчанию равно 100) 2) В sqlserver 2005 мы видим, что соединения используются повторно и работают нормально. Максимальное количество наших подключений не должно превышать 15-20.

Мы обнаружили проблему от MSFT в 2008 году и передали клиенту. https://connect.microsoft.com/SQLServer/feedback/ViewFeedback.aspx?FeedbackID=383517 - говорит о том, что в 2008 году не будут немедленно закрыты соединения.

В клиентской среде мы видим ту же проблему и в sql2005.

Мой вопрос: когда программа .net вызывает close () для соединения, как долго sqlserver поддерживает его активным?

Большое спасибо за любые подсказки

С уважением Ананд

1 Ответ

1 голос
/ 08 мая 2009

Соединения идут в бассейн. Если они не используются повторно и количество подключений увеличивается, вы, конечно, не очистили их должным образом. Используйте блоки using для любого одноразового типа (также для транзакций, команд и т. Д.).

Чтобы очистить пул соединений, вы можете вызвать этот статический метод:

SqlConnection.ClearAllPools();

Это должно удалить все соединения и не используется в пуле. Остальные все еще используются.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...