Обработка соединений с SQL Server, пулы соединений, время жизни и утечка соединений
Я пытаюсь определить утечки соединения SQL в моем приложении. После некоторых операций, когда мое приложение бездействует (пользователь не выполняет никаких действий), я вижу 7 соединений с моей базой данных в наборе результатов, возвращаемом sp_who2
, Статус для всех подключений Sleeping
а также Command
ценность для всех них AWAITING COMMAND
,
Я использую пул соединений, но Connection Lifetime
не указан в строке подключения. Это означает, что по умолчанию будет использоваться значение 0, если я прав. Время жизни соединения с нулевым значением означает, что SQL-сервер не должен закрывать соединение никогда, верно?
Я некоторое время бездействую (15-20 минут), а потом вижу, что sp_who2
НЕ показывает какую-либо связь с моей базой данных. Мне интересно, почему я получаю этот результат, когда время жизни соединения равно нулю. Завершает ли SQL Server неиспользуемое соединение через некоторое время, независимо от значения времени жизни соединения?
Как я могу определить, какое соединение открыто из-за утечки, а какое зависает из-за пула соединений?
Мое приложение поддерживает SQL Server 2008, 2014 и 2016. Это приложение ASP.NEt.
1 ответ
Время жизни соединения с нулевым значением означает, что SQL-сервер не должен закрывать соединение никогда, верно?
Нет. Правила, используемые для очистки пула, недостаточно документированы AFAIK, но они могут быть закрыты администратором. См. https://msdn.microsoft.com/en-us/library/8xx3tyca%28v=vs.110%29.aspx?f=255&MSPPError=-2147217396.
Я не думаю, что есть надежный / документированный метод для определения объединенных соединений из ядра базы данных.