Что делает sp_reset_connection?
sp_reset_connection, кажется, вызывается пулом соединений SQL Server, чтобы гарантировать, что для соединений, повторно используемых из пула, большинство их настроек будут сброшены. Кто-нибудь точно знает, что он делает, а что нет?
например, я вижу из этого поста, что он не сбрасывает уровень изоляции транзакции
2 ответа
Уровни 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, так как роли приложения не могут быть восстановлены
- Уровень изоляции транзакции
Хранимая процедура sp_reset_connection используется для сброса соединения, чтобы при использовании в пуле не сохранялось ничего из предыдущего сеанса, связанного с конкретным соединением.