Что означает "exec sp_reset_connection" в Sql Server Profiler?

Попытка понять, что означает Sql Profiler, испустив "sp_reset_connection".

У меня есть следующая строка "exec sp_reset_connection" , за которой следуют BatchStarting и Completed,

RPC:Completed       exec sp_reset_connection
SQL:BatchStarting   SELECT [c].[TestID] AS [TestID], [c].[Description] AS [Description] FROM [dbo].[Test] AS [c]
SQL:BatchCompleted  SELECT [c].[TestID] AS [TestID], [c].[Description] AS [Description] FROM [dbo].[Test] AS [c]    

В основном первая строка "exec sp_reset_connection" означает весь процесс (мое соединение было открыто, вызывается stmt, затем соединение закрыто и выпущено обратно в пул)? Или мое соединение все еще находится на открытой стадии.

И почему sp_reset_connection выполняется перед моим собственным оператором select, не должен ли он reset после пользователя sql?

Я пытаюсь узнать, есть ли способ узнать более подробно, когда соединение открыто и закрыто?

Видя "exec sp_reset_connection" , означает ли это, что мое соединение закрыто?

Ответ 1

Как и другие ответы, sp_reset_connection указывает, что пул соединений повторно используется. Помните об одном конкретном следствии!

Блог MSDN Jimmy Mays сказал:

sp_reset_connection НЕ resetуровень изоляции транзакций по умолчанию для сервера настройка соединения.

ОБНОВЛЕНИЕ. Начиная с SQL 2014, для клиентских драйверов с TDS версии 7.3 или выше уровни изоляции транзакций будут reset вернуться к умолчанию.

ref: SQL Server: утечка уровня изоляции через объединенные соединения

Ниже приведена дополнительная информация:

Что делает sp_reset_connection?

Уровни API доступа к данным, такие как ODBC, OLE-DB и System.Data.SqlClient все вызвать внутреннюю хранимую процедуру sp_reset_connection при повторном использовании соединение из пула соединений. Это делает это с reset состоянием прежде чем он будет повторно использован, однако нигде не зафиксировано, что вещи получают reset. Эта статья пытается для документирования частей соединение, которое получает reset.

sp_reset_connection сбрасывает следующие аспекты связи:

  • Все состояния и числа ошибок (например, ошибка @@)

  • Останавливает все EC (контексты выполнения) которые являются дочерними потоками родительского EC выполнение параллельного запроса

  • Ожидает каких-либо выдающихся операций ввода-вывода операции, которые выдаются

  • Сбрасывает любые удерживаемые буферы на сервер по соединению

  • Разблокирует любые буферные ресурсы которые используются соединением

  • Освобождает всю выделенную память принадлежащих соединению

  • Удаляет любую работу или временную таблицы, созданные связь

  • Убивает все глобальные курсоры, принадлежащие связь

  • Закрывает все открытые дескрипторы SQL-XML, открытые

  • Удаляет любые рабочие таблицы, связанные с SQL-XML

  • Закрывает все системные таблицы

  • Закрывает все пользовательские таблицы

  • Удаление всех временных объектов

  • Прерывает открытые транзакции

  • Дефекты от распределенной транзакции при зачислении

  • Уменьшает количество ссылок для пользователей в текущей базе данных, которые освобождает блокировки общих баз данных

  • Заблокированные блокировки

  • Освобождает любые приобретенные ручки

  • Сбрасывает все параметры SET до значений по умолчанию

  • Сбрасывает значение @@rowcount

  • Сбрасывает значение @@identity

  • Сбрасывает трассировку уровня сеанса опции с использованием dbcc traceon()

  • Сбрасывает CONTEXT_INFO в NULL в SQL Server 2005 и новее [не входит в исходную статью]

sp_reset_connection НЕ будет reset:

  • Контекст безопасности, поэтому соединение объединяет соединения на основе точной строки соединения

  • Введенные роли приложения используя sp_setapprole, поскольку приложение роли не могут быть возвращены

Примечание. Здесь я включаю список, так как я не хочу, чтобы он был потерян в любой временной сети.

Ответ 2

Это указание на то, что используется пул соединений (что хорошо).

Ответ 3

Обратите внимание, однако:

Если вы выдаете УРОВЕНЬ ИЗОЛЯЦИИ SET TRANSACTION в хранимой процедуре или триггере, когда объект возвращает управление, уровень изоляции reset до уровня, действующего при вызове объекта. Например, если вы установите REPEATABLE READ в пакетном режиме, а затем пакет выдает хранимую процедуру, которая устанавливает уровень изоляции SERIALIZABLE, параметр уровня изоляции возвращается к REPEATABLE READ, когда хранимая процедура возвращает управление пакету.

http://msdn.microsoft.com/en-us/library/ms173763.aspx