tenemos un procedimiento almacenado que funcionó bien hasta hace 10 minutos y luego simplemente se cuelga después de llamarlo.El procedimiento almacenado se bloquea aparentemente sin explicación
Observaciones:
- copiar el código en una ventana de consulta se obtiene el resultado de la consulta en 1 segundo
- SP lleva> 2,5 minutos hasta que la cancele monitor
- de actividad muestra que no está siendo bloqueado por nada , solo está haciendo una SELECCIÓN.
- Correr sp_recompile en el SP no ayuda
- caída y volver a crear el SP no ayuda
- Configuración LOCK_TIMEOUT a 1 segundo no ayuda
¿Qué más puede estar pasando?
ACTUALIZACIÓN: supongo que tenía que ver con el descubrimiento de parámetros. Utilicé la rutina de Adam Machanic para descubrir qué subconsulta estaba pendiente. Encontré las cosas mal con el plan de consulta gracias a la sugerencia de Martin Smith. Aprendí sobre EXEC ... WITH RECOMPILE
, OPTION(RECOMPILE)
para las subconsultas dentro del SP, y OPTION (OPTIMIZE FOR (@parameter = 1))
para atacar el rastreo de parámetros. Todavía no sé lo que estaba mal en este caso en particular, pero salí de esta batalla más experimentado y mejor armado. Sé qué hacer la próxima vez. ¡Así que aquí están los puntos!
¿Cómo se ve el plan de ejecución? (Puede usar esta consulta para obtenerla http://stackoverflow.com/questions/3831644/why-does-a-database-query-only-go-slow-in-thepplication/3831685#3831685) ¿Cómo funciona? ¿se compara con el plan cuando copia el código en la ventana de consulta y lo ejecuta? –
Algo es diferente: ¿se utilizan variables al pegar la instrucción en una ventana de consulta? –
@OMG: Las variables son 2 INTS y 2 DATES y son las mismas, las declare al comienzo de la ventana de consulta. Y ahora (aproximadamente media hora más tarde) el procedimiento se está ejecutando nuevamente. Tal vez fue recompilar? – thomaspaulb