Uno de nuestros clientes acaba de actualizar a un nuevo servidor.
Para un procedimiento almacenado en particular, la primera vez que lo ejecuta, lleva más de tres minutos ejecutarlo. Las ejecuciones posteriores duran menos de 1 segundo.
Esto me lleva a creer que los primeros tres minutos se dedican principalmente al cálculo del plan de ejecución. Las ejecuciones posteriores solo usan el plan en caché y se ejecutan instantáneamente.
En nuestras bases de datos de prueba, se tarda unos 5 segundos en calcular el plan para el mismo procedimiento.
No veo nada terrible en el plan en sí, aunque no me imagino que sea relevante ya que el plan muestra cuánto tiempo lleva ejecutar la consulta, no calcularla.
El servidor es de 16 núcleos con 24 gb de memoria. No se produce una gran carga de CPU o memoria.
¿Qué es lo que podría estar causando un cálculo tan lento solo en una base de datos en particular?
¿Qué pasos puedo tomar para encontrar la causa del problema?
Editar
Entonces logré acceder al servidor y ejecuté la consulta con SET SHOWPLAN_XML ON .
Puedo confirmar que el tiempo de compilación de la consulta ocupa el 99% del tiempo de ejecución de la consulta. El StatementOptmEarlyAbortReason es "TimeOut" , en nuestra base de datos de prueba con una copia de su base de datos, el motivo es MemoryLimitExceeded.
fuente
StatementOptmEarlyAbortReason
?Respuestas:
Odio responder mi propia pregunta, especialmente porque he recibido tanta ayuda de otros para encontrar la solución, pero aquí va.
El problema se debió a algunas estadísticas de fallas en la base de datos. Mirando el plan de ejecución, el optimizador esperaba 11.5tb de datos devueltos por la consulta. En realidad se estaba recibiendo 87kb. Ahora sé que enormes desajustes entre las filas esperadas y reales devueltas es una señal de que las estadísticas están desactualizadas.
Simplemente corriendo
obliga a la base de datos a actualizar las estadísticas de todas las tablas.
Esto ha reducido el tiempo de ejecución de la consulta de 3 minutos a 6 segundos. ¡Todos ganadores!
Gracias por toda la ayuda chicos. : 0)
fuente