none
Conexiones con la BBDD. RRS feed

  • Pregunta

  • Buenos Dias a todos,

    Estoy trabajando con una Base de datos Sql Server 2008. Hay cosas que me parecen extrañas, corregirme si me equivoco.

    cuando ejecuto el procedimiento almacenado SP_WHO, me aparecen un demasiadas conexiones...

    Desde la aplicacion que se alimenta de esta BBDD, siempre hago un .Open() y .Close() de la conexion con la BBDD cada vez que ejecuto un comando, pero parece que las conexiones se quedan abiertas, no se si esto sera normal??

    Ademas esto me esta provocando que una conexion que esta en el sleeping tenga bloqueados algunos recursos.

    Adjunto una imagen para mas claridad 

    Un saludo,

    miércoles, 18 de abril de 2012 8:45

Respuestas

  • Hola.

    Por esas pruebas que has realizado has conseguido demostrar que la aplicación no cierra de forma efectiva las conexiones. Incluso deja transacciones sin confirmar (por los bloqueos, diría que usas un nivel de aislamiento más alto del necesario, parece serializable, por lo que se intuye de bloqueos de rangos). El estado sleeping significa que están vivas aún, aunque sin realizar ninguna acción en ese momento.

    Revisa la aplicación y asegúrate de que las conexiones desaparecen cuando así te lo propones. Si no lo consiguieras, al no ser éste un foro de desarrollo, quizá recurriendo a algún otro especializado en el lenguaje de programación que emplees encuentres una ayuda más eficaz.


    Alberto López Grande
    SQL Server MVP
    Visita mi blog en http://qwalgrande.blogspot.es/ Sígueme en twitter en http://twitter.com/qwalgrande

    miércoles, 18 de abril de 2012 9:09
    Moderador

Todas las respuestas

  • Hola.

    Por esas pruebas que has realizado has conseguido demostrar que la aplicación no cierra de forma efectiva las conexiones. Incluso deja transacciones sin confirmar (por los bloqueos, diría que usas un nivel de aislamiento más alto del necesario, parece serializable, por lo que se intuye de bloqueos de rangos). El estado sleeping significa que están vivas aún, aunque sin realizar ninguna acción en ese momento.

    Revisa la aplicación y asegúrate de que las conexiones desaparecen cuando así te lo propones. Si no lo consiguieras, al no ser éste un foro de desarrollo, quizá recurriendo a algún otro especializado en el lenguaje de programación que emplees encuentres una ayuda más eficaz.


    Alberto López Grande
    SQL Server MVP
    Visita mi blog en http://qwalgrande.blogspot.es/ Sígueme en twitter en http://twitter.com/qwalgrande

    miércoles, 18 de abril de 2012 9:09
    Moderador
  • Ok muchas gracias,

    Probare en el Foro de C# a ver que me pueden decir sobre esto.

    Un saludo,

    miércoles, 18 de abril de 2012 9:24
  • Es probable que sea un tema del pool de conexiones de la aplicación. Revisa este punto, porque aunque tú ejecutes el método "Close", la conexión en SQL Server no se cierra como tal, sino que se queda a la espera de ser reutilizada
    miércoles, 18 de abril de 2012 9:32
  • si ejecutas la consulta esta, verás el nivel de aislamiento que estás usando, que tiene su relevancia coo te transmite Alberto

    http://portalsql.com/index.php/2010/01/descubrir-bloqueos-en-sql-server/

    Por otra parte es posible que sea el pool de conexiones como dice Carlos. Pero para que un bloqueo se quede, tienes que haber dejado una transacción abierta, así pues o bien el disño de transacciones no está bien o estás enmascarando errores, o ambas cosas. Ahí quizá podamos ayudarte.


    Comparte lo que sepas, aprende lo que no sepas (FGG)
    portalSQL
    El rincón del DBA

    miércoles, 18 de abril de 2012 9:49
    Moderador
  • Eso es muy probable que sea porque tenes connection pooling. Esto reserva las conexiones para mejorar la performance. Cada vez que tu app abre una conexion insume recursos, cuando la cierra tambien. Para aplicaciones de alto rendimiento (esto es que estan casi permanentemente conectadas a la DB) esto conlleva una carga y una caida de performance, por ende es preferible que las conexiones queden a la espera de ser reutilizadas, de esa forma no tenes la perdida de abrir y cerrar las conexiones. Esto lo tienes que ver en el codigo de tu aplicacion .Net

    Saludos


    Systems Engineer
    Developer & Research Engineer
    DBA SQL Server 2005/2008
    VG Cloud Inc
    My Profile

    jueves, 19 de abril de 2012 4:45