sql-server database-connection sqlprofiler sp-reset-connection

¿Qué significa "exec sp_reset_connection" en Sql Server Profiler?



sql-server database-connection (3)

Intentando entender qué significa Sql Profiler emitiendo "sp_reset_connection".

Tengo la siguiente línea "exec sp_reset_connection" seguida de BatchStarting y Completed,

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]

Básicamente, la primera línea "exec sp_reset_connection" significa que todo el proceso (se abrió mi conexión, se ejecuta el criterio de selección, luego se cierra la conexión y se vuelve a lanzar al grupo) simplemente tiene lugar. O mi conexión todavía está en el escenario abierto.

Y, ¿por qué sp_reset_connection se ejecuta antes de mi propia instrucción de selección, no debería el restablecimiento venir después del sql del usuario?

Estoy tratando de saber si hay alguna manera de saber con más detalle cuándo se abre y se cierra una conexión.

Al ver "exec sp_reset_connection", ¿significa eso que mi conexión está cerrada?


Al igual que las otras respuestas, sp_reset_connection indica que el grupo de conexiones se está reutilizando. ¡Se consciente de una consecuencia particular!

El blog de MSDN de Jimmy Mays dijo:

sp_reset_connection NO restablece el nivel de aislamiento de la transacción al valor predeterminado del servidor de la configuración de la conexión anterior.

ACTUALIZACIÓN : Comenzando con SQL 2014, para los controladores de cliente con TDS versión 7.3 o superior, los niveles de aislamiento de la transacción se restablecerán a los valores predeterminados.

ref: SQL Server: filtraciones de nivel de aislamiento en conexiones agrupadas

Aqui esta alguna informacion adicional:

¿Qué hace sp_reset_connection?

Las capas de API de acceso a datos como ODBC, OLE-DB y System.Data.SqlClient llaman al procedimiento almacenado (interno) sp_reset_connection al volver a utilizar una conexión de un grupo de conexiones. Hace esto para restablecer el estado de la conexión antes de que se vuelva a utilizar, sin embargo, en ninguna parte se documenta qué cosas se reinician. Este artículo intenta documentar las partes de la conexión que se restablecen.

sp_reset_connection restablece los siguientes aspectos de una conexión:

  • Todos los estados y números de error (como @@ error)

  • Detiene todos los CE (contextos de ejecución) que son subprocesos secundarios de un EC padre que ejecuta una consulta paralela

  • Espera cualquier operación de E / S pendiente que esté pendiente

  • Libera cualquier búfer retenido en el servidor por la conexión

  • Desbloquea los recursos de búfer que utiliza la conexión

  • Libera toda la memoria asignada que es propiedad de la conexión

  • Borra cualquier trabajo o tabla temporal que se crea con la conexión

  • Mata a todos los cursores globales propiedad de la conexión

  • Cierra todos los identificadores SQL-XML abiertos que están abiertos

  • Elimina cualquier tabla de trabajo relacionada con SQL-XML abierta

  • Cierra todas las tablas del sistema

  • Cierra todas las tablas de usuario

  • Elimina todos los objetos temporales

  • Abortan las transacciones abiertas

  • Defectos de una transacción distribuida cuando se alistó

  • Disminuye el recuento de referencias para usuarios en la base de datos actual que libera bloqueos compartidos de bases de datos

  • Libera cerraduras adquiridas

  • Libera cualquier mango adquirido

  • Restablece todas las opciones de SET a los valores predeterminados

  • Restablece el valor @@ rowcount

  • Restablece el valor de identidad @@

  • Restablece todas las opciones de seguimiento de nivel de sesión utilizando dbcc traceon ()

  • Restablece CONTEXT_INFO a NULL en SQL Server 2005 y versiones posteriores [no es parte del artículo original]

sp_reset_connection NO se reiniciará:

  • Contexto de seguridad, que es la razón por la cual la agrupación de conexiones coincide con las conexiones basadas en la cadena de conexión exacta

  • Roles de aplicación ingresados ​​usando sp_setapprole, ya que los roles de la aplicación no se pueden revertir

Nota: incluyo la lista aquí porque no quiero que se pierda en la siempre transitoria red.


Es una indicación de que se está utilizando la agrupación de conexiones (lo cual es algo bueno).


Nota sin embargo:

Si emite SET TRANSACTION ISOLATION LEVEL en un procedimiento almacenado o disparador, cuando el objeto devuelve el control, el nivel de aislamiento se restablece al nivel vigente cuando se invoca el objeto. Por ejemplo, si configura REPEATABLE READ en un lote y el lote llama a un procedimiento almacenado que establece el nivel de aislamiento en SERIALIZABLE, la configuración del nivel de aislamiento vuelve a REPEATABLE READ cuando el procedimiento almacenado devuelve el control al lote.

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