Ver Mensaje Individual
  #1 (permalink)  
Antiguo 14/10/2006, 13:23
_Puma_
 
Fecha de Ingreso: abril-2005
Mensajes: 4
Antigüedad: 19 años, 8 meses
Puntos: 0
El método close no se refleja en SQL Server

¡Hola!

El problema es el siguiente.

Hemos desarrollado una aplicación web ASP.NET usando SQL Server 2000 y estamos experimentando problemas de rendimiento. Al verificar la información de procesos vía Enterprise Manager (o al ejecutar sp_who) vemos que el número de procesos se incrmenta gradualmente hasta saturar el servidor; el estatus de dichos procesos se mantiene en Sleeping.

He escrito el siguiente código para probar el cierre de conexión:

Dim Cnn As New SqlConnection("Cadena de conexion")
Dim Cmd As New SqlCommand("SELECT ...", Cnn)
Dim Rst As SqlDataReader
Cmd.Connection.Open()
rst = Cmd.ExecuteReader(CommandBehavior.CloseConnection)
rst.close

Notamos lo siguiente:
1.- Al llegar a la instrucción de apertura de conexión de inmediato vemos reflejada la conexión en el Servidor de SQL.
2.- Después de pasar por el método close el proceso se sigue viendo en el Servidor de SQL, incluso cuando la aplicación ha terminado; el estado en el que permanece es Sleeping.
3.- El proceso sigue vivo en el server de SQL incluso agregando el cierre de conexión de manera explícita.
4.- Esto sucede incluso cuando se usa un adaptador y un dataset.

¿Qué sucede?
¿ADO.NET no le avisa al IIS que cierre la conexión?
¿IIS no le informa a SQL Server que la cierre?
¿Lo que estamos viendo en SQL son sesiones huérfanas?

Espero me puedan ayudar. Saludos y gracias de antemano.