none
Pareciera que un stored se cachea y no funciona correctamente RRS feed

  • Pregunta

  • Hola, tengo un problema en un stored procedure en SQL llamado desde una aplicacion ASP NET

    Ejecuto un stored procedure desde una aplicacion en ASP NET que me devuelve datos y los presenta en pantalla.

    El tema es que de vez en cuando, el stored me deja de funcionar porque no me trae ningun dato. La grilla en mi aplicacion ASP NET se me presenta vacía porque no me arroja ningun dato desde el SQL

    Ahora si ejecuto el stored en el SQL si me tira los datos que tiene que traer.

    Lo que hago para "solucionar" esto es, modifico ese stored, con un ALTER, le cambio cualquier cosa, y despues lo vuelvo a dejar como estaba. 

    No se porque eso funciona, pero a partir de ahi como que se destraba y empieza a funcionar nuevamente cuando lo llamo desde la aplicacion ASP NET.

    Tendran alguna info de porque puede ser, y como solucionarlo de raiz?  Calculo que debe ser en el SQL el problema porque cuando hago ese ALTER vuelve a funcionar bien, pero la verdad no se que puede ser

    Gracias de antemano

    jueves, 10 de octubre de 2019 13:43

Respuestas

  • Hola programinca:

    ¿Que tal va el mantenimiento de tu base de datos?

    Puedes ejecutar unos simples scripts, para las tablas que mencione tu procedure, o realizarlo desde el management studio.

    Pulsando el botón derecho sobre cada una de las tablas, y cada uno de los indices que estas tengan creados.

    Botón derecho sobre el indice, y en la sección de fragmentación te indicará su estado. 


    Si los indices disponen de un nivel de fragmentación entre el 5 y el 30% (valores recomendados), debes regenerarlos, y si es mayor, reconstruirlos.

    O desde el mismo indice con el botón derecho << Volver a generar << reconstruir.

    Otra opción es desde una sentencia simple.

    ALTER INDEX index1 ON table1 REBUILD;  
    go
    ALTER INDEX index1 ON table1 REORGANIZE;  
    GO

    En este caso, directamente, lo haces sobre todos los indices de la tabla.

    https://docs.microsoft.com/es-es/sql/t-sql/statements/alter-index-transact-sql?view=sql-server-2017

    Luego y no menos importante esta el tema de las estadísticas, que puedes actualizar con una ejecución del procedimiento.

    exec sp_updatestats

    Y ya cuando todo esto lo tengas aplicado y tu base este en condiciones, si persiste, puedes probar si la consulta ejecutada directamente sobre una ventana del management funciona pero del procedure no, entonces estas sufriendo parameter sniffing.

    Pero primero el mante.

    • Marcado como respuesta programinca martes, 22 de octubre de 2019 13:10
    jueves, 10 de octubre de 2019 16:22
  • El tema es que de vez en cuando, el stored me deja de funcionar porque no me trae ningun dato. La grilla en mi aplicacion ASP NET se me presenta vacía porque no me arroja ningun dato desde el SQL

    Verifique se esté sucediendo timeout, es decir, que el tiempo de respuesta del procedimiento haya superado el tiempo de espera preestablecido.

    Al comandar ALTER en el procedimiento, éste es recompilado. Evaluar si se está produciendo parameter sniffing.

    Lectura sugerida:

    ---

    Para evaluar si el problema está relacionado con la parameter sniffing, añada
      with RECOMPILE
    en la declaración del procedimiento:

        ALTER PROCEDURE nomeproc with RECOMPILE
        ...

       


    José Diz     Belo Horizonte, MG - Brasil     [query performance tuning: Porto SQL]


    Este conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita.
    • Marcado como respuesta programinca martes, 22 de octubre de 2019 13:10
    • Editado José Diz martes, 22 de octubre de 2019 13:25
    sábado, 12 de octubre de 2019 12:56

Todas las respuestas

  • Hola   programinca

     

    Gracias por levantar tu consulta en los foros de MSDN. Con respecto a la misma,  te comento que para  que la comunidad de foros te pueda asesorar mejor, es necesario que nos compartas el form/code que estás desarrollando

     

     

    Gracias por usar los foros de MSDN.

     

    Pablo Rubio

     ____

     

    Por favor recuerde "Marcar como respuesta" las respuestas que hayan resuelto su problema, es una forma común de reconocer a aquellos que han ayudado, y hace que sea más fácil para los otros visitantes encontrar la solución más tarde. 

     

    Microsoft ofrece este servicio de forma gratuita, con la finalidad de ayudar a los usuarios y la ampliación de la base de datos de conocimientos relacionados con los productos y tecnologías de Microsoft.  

     

    Este contenido es proporcionado "tal cual" y no implica ninguna responsabilidad de parte de Microsoft.

    jueves, 10 de octubre de 2019 15:15
    Moderador
  • Hola programinca:

    ¿Que tal va el mantenimiento de tu base de datos?

    Puedes ejecutar unos simples scripts, para las tablas que mencione tu procedure, o realizarlo desde el management studio.

    Pulsando el botón derecho sobre cada una de las tablas, y cada uno de los indices que estas tengan creados.

    Botón derecho sobre el indice, y en la sección de fragmentación te indicará su estado. 


    Si los indices disponen de un nivel de fragmentación entre el 5 y el 30% (valores recomendados), debes regenerarlos, y si es mayor, reconstruirlos.

    O desde el mismo indice con el botón derecho << Volver a generar << reconstruir.

    Otra opción es desde una sentencia simple.

    ALTER INDEX index1 ON table1 REBUILD;  
    go
    ALTER INDEX index1 ON table1 REORGANIZE;  
    GO

    En este caso, directamente, lo haces sobre todos los indices de la tabla.

    https://docs.microsoft.com/es-es/sql/t-sql/statements/alter-index-transact-sql?view=sql-server-2017

    Luego y no menos importante esta el tema de las estadísticas, que puedes actualizar con una ejecución del procedimiento.

    exec sp_updatestats

    Y ya cuando todo esto lo tengas aplicado y tu base este en condiciones, si persiste, puedes probar si la consulta ejecutada directamente sobre una ventana del management funciona pero del procedure no, entonces estas sufriendo parameter sniffing.

    Pero primero el mante.

    • Marcado como respuesta programinca martes, 22 de octubre de 2019 13:10
    jueves, 10 de octubre de 2019 16:22
  • El tema es que de vez en cuando, el stored me deja de funcionar porque no me trae ningun dato. La grilla en mi aplicacion ASP NET se me presenta vacía porque no me arroja ningun dato desde el SQL

    Verifique se esté sucediendo timeout, es decir, que el tiempo de respuesta del procedimiento haya superado el tiempo de espera preestablecido.

    Al comandar ALTER en el procedimiento, éste es recompilado. Evaluar si se está produciendo parameter sniffing.

    Lectura sugerida:

    ---

    Para evaluar si el problema está relacionado con la parameter sniffing, añada
      with RECOMPILE
    en la declaración del procedimiento:

        ALTER PROCEDURE nomeproc with RECOMPILE
        ...

       


    José Diz     Belo Horizonte, MG - Brasil     [query performance tuning: Porto SQL]


    Este conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita.
    • Marcado como respuesta programinca martes, 22 de octubre de 2019 13:10
    • Editado José Diz martes, 22 de octubre de 2019 13:25
    sábado, 12 de octubre de 2019 12:56
  • Gracias a todos por las respuestas.

    Voy a probar con el mantenimiento y el With Recompile para empezar

    martes, 22 de octubre de 2019 13:10