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

  • Deleted
    • Marcado como respuesta programinca martes, 22 de octubre de 2019 13:10
    sábado, 12 de octubre de 2019 12:56
  • 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

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
  • Deleted
    • Marcado como respuesta programinca martes, 22 de octubre de 2019 13:10
    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
  • Buenas, por si a alguien le sirve, a un mes de haber aplicado el WITH RECOMPILE me funcionó perfecto, no volví a tener problemas

    Gracias Javi Fernandez!

    jueves, 28 de noviembre de 2019 13:49
  • De nada.
    jueves, 28 de noviembre de 2019 16:28