Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

Conection Pooling SQL Server 2008 R2

Estas en el tema de Conection Pooling SQL Server 2008 R2 en el foro de SQL Server en Foros del Web. Buen día jóvenes, les comento que soy nuevo en este foro y pues ya he leído algunos post y pues he logrado notar que todos ...
  #1 (permalink)  
Antiguo 08/01/2014, 12:05
Avatar de Grost  
Fecha de Ingreso: enero-2014
Ubicación: Guatemala
Mensajes: 25
Antigüedad: 10 años, 10 meses
Puntos: 1
Pregunta Conection Pooling SQL Server 2008 R2

Buen día jóvenes, les comento que soy nuevo en este foro y pues ya he leído algunos post y pues he logrado notar que todos son muy centrados y educados en las respuestas que brindan para ayudarnos mutuamente.

Les expongo mi duda.

Hace 2 semanas me reportaron que por las mañanas la aplicación web (desarrollada en .NET 2008 FrameWork 3.5 en un servidor 2008 64 bits y con SQL Server 2008 R2) brindaba el mensaje controlado al error de que no se puede conectar a la base de datos y que el mismo error lo están solucionando reiniciando el IIS.

Cito lo que encontré en otro foro
Cita:
Un DBA de alto rango dijo que debido a que las conexiones de red se producen a nivel del sistema operativo, la aplicación y el reciclaje de IIS no se cortan, por lo que SQL Server deja las conexiones de base de datos para seguir corriendo llenando así la piscina.
[/CODE]

Ya logré identificar que el error es porque se están quedando sesiones abiertas, ocasionando así un desbordamiento en el POOL de las conexiones generando un timed-out al intentar conectarse.

Algunos programadores recomiendan que en el STRING de conexión se agregue el parametro
Código:
pooling=false
para evitar generar las conexiones en memoria y así saturar el IIS.

DUDA
Que pasa si dejo de utilizar el POOL para las conexiones, tendrá algún efecto secundario o algo que afecte al rendimiento de la conexión o performance de la Base de Datos.

Esto no lo puedo someter a pruebas puesto que mi ambiente de desarrollo no posee el mismo estrés o carga de trabajo como el de producción.

Ejemplo de mi String Conection

Código:
Data Source=SERVIDOR;Initial Catalog=BASE_DATOS;Persist Security Info=True;User ID=USUARIO;Password=PASSWORD;pooling=false
Les agradezco desde ya de antemano sus comentarios.
Saludos.

Última edición por gnzsoloyo; 08/01/2014 a las 13:06
  #2 (permalink)  
Antiguo 08/01/2014, 12:31
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 3 meses
Puntos: 774
Respuesta: Conection Pooling SQL Server 2008 R2

esa es una pregunta mas encaminada a la aplicacion que a la base de datos, si son sesiones abiertas lo que te esta ocasinando eso, porque no les pones un time out a las mismas???
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #3 (permalink)  
Antiguo 08/01/2014, 14:13
Avatar de Grost  
Fecha de Ingreso: enero-2014
Ubicación: Guatemala
Mensajes: 25
Antigüedad: 10 años, 10 meses
Puntos: 1
Respuesta: Conection Pooling SQL Server 2008 R2

Cita:
Iniciado por Libras Ver Mensaje
esa es una pregunta mas encaminada a la aplicación que a la base de datos, si son sesiones abiertas lo que te esta ocasinando eso, porque no les pones un time out a las mismas???
Gracias libra , en efecto es por conexiones abiertas, pero se está utilizando una clase sqlhelper y esta deja las conexiones abiertas, el problema surge que ellos desean una respuesta basada en el pool del IIS para las conexiones de SQL y pues investigando encontré lo del pooling=false, pero quería consultar antes de aplicar dicha configuración si alguien en el foro ya tuvo alguna experiencia con la misma.
  #4 (permalink)  
Antiguo 08/01/2014, 14:48
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 3 meses
Puntos: 774
Respuesta: Conection Pooling SQL Server 2008 R2

de nuevo, tu pregunta esta mas encaminada a la aplicacion no tanto a la base de datos..... ve al foro del lenguaje en el que esta tu apliacacion y ahi es mas seguro que te den una respuesta
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #5 (permalink)  
Antiguo 09/01/2014, 05:30
Avatar de Missi  
Fecha de Ingreso: agosto-2011
Mensajes: 391
Antigüedad: 13 años, 3 meses
Puntos: 43
Respuesta: Conection Pooling SQL Server 2008 R2

Lo correcto sería realizar siempre aplicativos que funcionasen de este modo...

1. Abrir conexión con server de base de datos.
2. Ejecutar proceso, query, etc...
3. Cerrar conexión con el server de base de datos.

Como bien te dice Libras es más un tema de aplicativo.
  #6 (permalink)  
Antiguo 09/01/2014, 10:56
Avatar de Malenko
Moderador
 
Fecha de Ingreso: enero-2008
Mensajes: 5.323
Antigüedad: 16 años, 10 meses
Puntos: 606
Respuesta: Conection Pooling SQL Server 2008 R2

La solución rápida sería poner un valor elevado en el "Max Pool Size" que por defecto es de 100, por ejemplo:

Data Source=SERVIDOR;Initial Catalog=BASE_DATOS;Persist Security Info=True;User ID=USUARIO;Password=PASSWORD;Max Pool Size=2000

Ahora, lo ideal es ver el porque no cierra las connexiones y seguro que es un error de código por no hacer el dispose del SqlConnection. Si quieres puedes abrir un hilo en la sección de .NET del foro y poner el código (sin incluir las cadenas de conexión y las consultas) y te ayudo a solventarlo.
__________________
Aviso: No se resuelven dudas por MP!
  #7 (permalink)  
Antiguo 09/01/2014, 14:25
Avatar de Grost  
Fecha de Ingreso: enero-2014
Ubicación: Guatemala
Mensajes: 25
Antigüedad: 10 años, 10 meses
Puntos: 1
Respuesta: Conection Pooling SQL Server 2008 R2

Cita:
Iniciado por Malenko Ver Mensaje
La solución rápida sería poner un valor elevado en el "Max Pool Size" que por defecto es de 100, por ejemplo:

Data Source=SERVIDOR;Initial Catalog=BASE_DATOS;Persist Security Info=True;User ID=USUARIO;Password=PASSWORD;Max Pool Size=2000

Ahora, lo ideal es ver el porque no cierra las connexiones y seguro que es un error de código por no hacer el dispose del SqlConnection. Si quieres puedes abrir un hilo en la sección de .NET del foro y poner el código (sin incluir las cadenas de conexión y las consultas) y te ayudo a solventarlo.
Gracias Malenko, crearé el post.
Sabes me hace sentido lo del Max Pool Size = 2000
  #8 (permalink)  
Antiguo 10/01/2014, 12:33
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 17 años, 4 meses
Puntos: 180
Respuesta: Conection Pooling SQL Server 2008 R2

No siempre poner un valor mas alto, nos soluciona el problema, ya que deberán recordar que cada conexión abierta (aun en status de SLEEPING), consume 64k por conexión.

Si no se puede modificar el aplicativo, yo lo he resuelto, poniendo un JOB que se ejecute todos los días a las 00:00 y cuyo script es el siguiente:
Código SQL:
Ver original
  1. DECLARE @spid INT  
  2. DECLARE @SQLString NVARCHAR(50)
  3.      
  4. USE master  
  5. WHILE EXISTS(SELECT spid
  6.             FROM master..sysprocesses
  7.             WHERE STATUS = 'sleeping' AND
  8.             last_batch <= DATEADD(DD, -1, GETDATE())
  9.             AND spid > 50 AND spid <> @@spid)  -- Los spids del 1 al 50, son del sistema
  10.     BEGIN
  11.         SELECT TOP 1 @spid = spid FROM master..sysprocesses
  12.             WHERE STATUS = 'sleeping' AND
  13.             last_batch <= DATEADD(DD, -1, GETDATE())
  14.             AND spid > 50 AND spid <> @@spid
  15.         SET @SQLString = N'KILL ' + CONVERT(VARCHAR(10), @spid)
  16.         EXECUTE sp_executesql @SQLString
  17.         CONTINUE
  18.     END

¿Qué hace?, todas aquellas conexiones en un status de SLEEPING con una inactividad mayor a 24 horas, son eliminadas.
__________________
MCTS Isaias Islas
  #9 (permalink)  
Antiguo 10/01/2014, 14:07
Avatar de Missi  
Fecha de Ingreso: agosto-2011
Mensajes: 391
Antigüedad: 13 años, 3 meses
Puntos: 43
Respuesta: Conection Pooling SQL Server 2008 R2

Cita:
Iniciado por iislas Ver Mensaje

¿Qué hace?, todas aquellas conexiones en un status de SLEEPING con una inactividad mayor a 24 horas, son eliminadas.
Muy buen aporte.
  #10 (permalink)  
Antiguo 10/01/2014, 15:42
Avatar de Grost  
Fecha de Ingreso: enero-2014
Ubicación: Guatemala
Mensajes: 25
Antigüedad: 10 años, 10 meses
Puntos: 1
Respuesta: Conection Pooling SQL Server 2008 R2

Cita:
Iniciado por iislas Ver Mensaje
No siempre poner un valor mas alto, nos soluciona el problema, ya que deberán recordar que cada conexión abierta (aun en status de SLEEPING), consume 64k por conexión.

¿Qué hace?, todas aquellas conexiones en un status de SLEEPING con una inactividad mayor a 24 horas, son eliminadas.
Gracias, analizaré el código y veré si es mas factible que este mismo se ejecute cada vez que se inicie sesión por cualquier usuario en la aplicación.

saludos.
  #11 (permalink)  
Antiguo 10/01/2014, 19:30
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 17 años, 4 meses
Puntos: 180
Respuesta: Conection Pooling SQL Server 2008 R2

Debe ser una sola ejecución de forma NOCTURNA, así eliminaras todas aquellas conexiones sin uso durante mas de 24 hrs.
__________________
MCTS Isaias Islas

Etiquetas: server, sql
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 22:07.