Что делает sp_reset_connection? - PullRequest
       30

Что делает sp_reset_connection?

39 голосов
/ 27 февраля 2009

sp_reset_connection, кажется, вызывается пулом соединений SQL Server, чтобы гарантировать, что для соединений, повторно используемых из пула, большинство их настроек будут сброшены. Кто-нибудь точно знает, что он делает, а что нет?

например, я вижу из этого поста , что он не сбрасывает уровень изоляции транзакции

Ответы [ 2 ]

67 голосов
/ 27 февраля 2009

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

Официальной документации о том, что происходит сброс, не существует, но вот неофициальный список.

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

  • Сбрасывает все состояния и числа ошибок (например, @@ error)
  • Останавливает все EC (контексты выполнения), которые являются дочерними потоками родительский EC выполняет параллельный запрос
  • Он будет ожидать любых ожидающих операций ввода-вывода, которые ожидают
  • Это освободит любые удерживаемые буферы на сервере по соединению
  • Это разблокирует любые ресурсы буфера, которые используются соединением
  • Освобождает всю память, выделенную для соединения
  • Он очистит все рабочие или временные таблицы, созданные подключение
  • Это убьет все глобальные курсоры, принадлежащие соединению
  • Он закроет все открытые дескрипторы SQL-XML, которые открыты
  • Он удалит все открытые рабочие таблицы, связанные с SQL-XML
  • Он закроет все системные таблицы
  • Он закроет все пользовательские таблицы
  • Будет сброшено все временные объекты
  • Отмена открытых транзакций
  • Это будет дефект из распределенной транзакции при зачислении
  • Уменьшает счетчик ссылок для пользователей в текущей базе данных; какой релиз общей блокировки базы данных
  • Освободит приобретенные замки
  • Выпускает любые ручки, которые могли быть получены
  • Сброс всех параметров SET к значениям по умолчанию
  • Будет сброшено значение @@ rowcount
  • Сброс значения @@ идентификатора
  • Сбрасывает все параметры трассировки уровня сеанса с помощью dbcc traceon ()

sp_reset_connection НЕ сбрасывается:

  • Контекст безопасности, поэтому пул соединений совпадает с соединениями на основе точной строки подключения
  • Если вы ввели роль приложения, используя sp_setapprole, так как application роли не могут быть возвращены
  • Уровень изоляции транзакции
0 голосов
/ 27 февраля 2009

Из этого сообщения на форуме :

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...