Что значит "старпома" СП "сброс соединения" в Профилировщике SQL сервер?

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

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

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, не должен ли он сбрасываться после sql пользователя?

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

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

3 ответов


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

блог MSDN Джимми Мэйса сказал:

sp_reset_connection не сбрасывает уровень изоляции транзакций сервер по умолчанию от предыдущего соединение установлено.

обновление: начиная с SQL 2014, для клиентских драйверов с TDS версии 7.3 или выше, уровни изоляции транзакций будут сброшены обратно к умолчанию.

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

вот некоторые дополнительные сведения:

что делает sp_reset_connection?

слои API доступа к данным, такие как ODBC, OLE-DB и система.Данные.Sqlclient как все вызовите (внутреннюю) хранимую процедуру sp_reset_connection при повторном использовании подключение из пула подключений. Он это для сброса состояния подключение до повторного использования, однако нигде не документировано, что вещи сбросить. Эта статья пытается к документу части соединение, которое сбрасывается.

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

  • все ошибки и цифры (как функция @@error)

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

  • ждет любого выдающего I / O операции, которые являются выдающимися

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

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

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

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

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

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

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

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

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

  • удаляет все временные объекты

  • прекращает открывать сделки

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

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

  • освобождает блокировок

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

  • сбрасывает все установленные параметры по умолчанию значения

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

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

  • сбрасывает трассировку любого уровня сеанса параметры с помощью dbcc traceon ()

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

sp_reset_connection не сбросит:

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

  • роли приложений вошли использование sp_setapprole, так как приложение роли не могут быть отменены

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


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


Примечание:

Если задать уровень изоляции транзакции в хранимой процедуре или триггере, то при возврате объекта control уровень изоляции сбрасывается до уровня, действовавшего при вызове объекта. Например, если задать REPEATABLE READ в пакете и пакет затем вызывает хранимую процедуру, которая задает уровень изоляции SERIALIZABLE, параметр уровня изоляции возвращается к REPEATABLE READ, когда хранимая процедура возвращает элемент управления партия.

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