Уровни 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
роли не могут быть возвращены
- Уровень изоляции транзакции