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.
StatementOptmEarlyAbortReason
?