¿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.