Обработка соединений 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.


person Learner    schedule 05.06.2017    source источник


Ответы (1)


Нулевое значение времени жизни соединения означает, что SQL-сервер никогда не должен закрывать соединение, верно?

Нет. Правила, используемые для очистки пула, не очень хорошо документированы AFAIK, но они могут быть закрыты пулом. См. https://msdn.microsoft.com/en-us/library/8xx3tyca%28v=vs.110%29.aspx?f=255&MSPPError=-2147217396.

Я не думаю, что существует надежный / задокументированный метод для идентификации объединенных соединений из движка базы данных.

person SMor    schedule 05.06.2017