Как долго sqlserver поддерживает соединение после закрытия?

78
8

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


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


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


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


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


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


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


Отношения
Ананд

спросил(а) 2021-01-19T18:19:48+03:00 6 месяцев, 1 неделя назад
1
Решение
63

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


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

SqlConnection.ClearAllPools();

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

ответил(а) 2021-01-19T18:19:48+03:00 6 месяцев, 1 неделя назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема