Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Какво означава exec sp_reset_connection в Sql Server Profiler?

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

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

sp_reset_connection НЕ нулира нивото на изолация на транзакциите до настройката по подразбиране на сървъра от настройката на предишната връзка.

АКТУАЛИЗИРАНЕ :Започвайки от SQL 2014, за клиентски драйвери с TDS версия 7.3 или по-нова, нивата на изолация на транзакциите ще бъдат нулирани обратно към по подразбиране.

ref:SQL Server:Течове на ниво на изолация в обединените връзки

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

Какво прави sp_reset_connection?

Слоевете на API за достъп до данни като ODBC, OLE-DB и System.Data.SqlClient всички извикват (вътрешните) съхранени процедуриsp_reset_connection при повторно използване на връзка от пул за връзки. Прави това, за да нулира състоянието на връзката, преди да бъде използвана повторно, но никъде не е документирано какво се нулира. Тази статия се опитва да документира частите от връзката, които се нулират.

sp_reset_connection нулира следните аспекти на връзката:

  • Всички състояния на грешки и числа (като @@error)

  • Спира всички EC (изпълнителни контексти), които са дъщерни нишки на родител EC, изпълняващи паралелна заявка

  • Изчаква всички неизпълнени I/Ooperations, които са неизпълнени

  • Освобождава всички задържани буфери на сървъра от връзката

  • Отключва всички буферни ресурси, които се използват от връзката

  • Освобождава цялата разпределена памет, собственост на връзката

  • Изчиства всякакви работни или временни таблици, които са създадени от връзката

  • Убива всички глобални курсори, притежавани от връзката

  • Затваря всички отворени SQL-XML манипулатори, които са отворени

  • Изтрива всички отворени работни таблици, свързани с SQL-XML

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

  • Затваря всички потребителски таблици

  • Премахва всички временни обекти

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

  • Дефекти от разпределена транзакция при записване

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

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

  • Освобождава всички придобити манипулатори

  • Възстановява всички опции SET до стойностите по подразбиране

  • Нулира стойността @@rowcount

  • Нулира стойността @@identity

  • Нулира всички опции за проследяване на ниво сесия с помощта на dbcc traceon()

  • Нулира CONTEXT_INFO на NULL в SQL Server 2005 и по-нови [ не е част от оригиналната статия ]

sp_reset_connection НЯМА да се нулира:

  • Контекст на сигурността, поради което пулът на връзките съвпада с връзките въз основа на точния низ за връзка

  • Роли на приложения, въведени с помощта на sp_setapprole, тъй като ролите на приложението изобщо не можеха да бъдат връщани преди SQL Server 2005. Започвайки от SQL Server 2005, ролите на приложения могат да бъдат връщани, но само с допълнителна информация, която не е част от сесията. Преди да затворите връзката, ролите на приложението трябва да бъдат връщани ръчно чрез sp_unsetapprole, като се използва стойност "cookie", която се улавя, когато sp_setapprole се изпълнява.

Забележка:Включвам списъка тук, тъй като не искам той да бъде загубен във вечно преходната мрежа.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да добавите колона NOT NULL към голяма таблица в SQL Server?

  2. Заявка за изброяване на всички съхранени процедури

  3. Форматиране на sysjobhistory дата и време на колони в SQL Server

  4. Отмяна на транзакция Entity Framework 6

  5. Конфигурации с обхват на базата данни на SQL Server и автоматична корекция на план