Что означает “exec sp_reset_connection” в профилировщике Sql Server?[дубликат]

StackOverflow https://stackoverflow.com/questions/641120

Вопрос

На этот вопрос уже есть ответ здесь:

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

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

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", что весь процесс (мое соединение было открыто, запущен select stmt, затем соединение закрыто и выпущено обратно в пул) просто выполняется?Или мое соединение все еще находится в открытой стадии.

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

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

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

Это было полезно?

Решение

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

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

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

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

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

Вот некоторая дополнительная информация:

Что делает sp_reset_connection?

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

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

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

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

  • Ожидает каких-либо невыполненных операций ввода-вывода невыполненные операции

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  • Сбрасывает все УСТАНОВЛЕННЫЕ параметры к значениям по умолчанию

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

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

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

  • Сбрасывает CONTEXT_INFO на NULL в SQL Server 2005 и новее [ не является частью оригинальной статьи ]

sp_reset_connection НЕ будет сброшен:

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

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

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

Другие советы

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

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

Если вы устанавливаете УРОВЕНЬ ИЗОЛЯЦИИ ТРАНЗАКЦИИ в хранимой процедуре или триггере, когда объект возвращает управление, уровень изоляции сбрасывается до уровня, действовавшего при вызове объекта.Например, если вы задаете ПОВТОРЯЕМОЕ ЧТЕНИЕ в пакете, и пакет затем вызывает хранимую процедуру, которая устанавливает уровень изоляции на SERIALIZABLE, параметр уровня изоляции возвращается к ПОВТОРЯЕМОМУ чтению, когда хранимая процедура возвращает управление пакету.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top