Tengo un problema similar con una secuencia de comandos que llama a un número de UDF que he creado. Los UDF en sí mismos normalmente se ejecutan en segundo lugar bajo SSMS. Del mismo modo, ejecutar los informes que genero con ellos es soportable en SSMS (datos de 30d en 8s, datos de 365d en 22s). Siempre he hecho NOCOUNT ON con mis trabajos de SQL Agent, ya que normalmente generan archivos de texto para que otros procesos o Excel los recojan y no quiero los datos adicionales al final, por lo que no fue una solución para mí.
En este caso, cuando ejecutamos exactamente el mismo script bajo SQL Agent como un trabajo, mis tiempos crecen exponencialmente. La secuencia de comandos de mi 8s tarda 2m30s y mi script de 22s tarda 2h20m. Esto es lo mismo si lo ejecuto al mediodía con otra actividad y trabajos del usuario o después de horas sin actividad del usuario, ni trabajos ni copias de seguridad en ejecución. Nuestro servidor está inactivo y, en el mejor de los casos, obtengo uno de los 8 núcleos que se utilizan cuando se ejecuta. DB tiene solo 10 GB ejecutándose en SSD con una tarjeta RAID en caché y 16 de 32 GB de RAM son gratuitos. Como mi SQL se ejecuta de manera eficiente en SSMS, estoy bastante convencido de que estoy alcanzando un límite de subprocesamiento de algún tipo. Investigué e intenté ajustar MAXDOP justo antes de las secuencias de comandos en el Agente de SQL sin suerte.
Como esta es una actividad que quiero programar, necesita ser automatizada de una forma u otra. Podría dejar que estas secuencias de comandos tomen las horas que necesitan para ejecutarse como pasos de SQL en trabajos de SQL Agent, pero decidí ejecutarlas desde la línea de comandos y obtengo el mismo rendimiento que veo en SSMS.
sqlcmd -S SQLSRVRHost -i "C:\My Script Loc With Spaces.sql" -v MyVar="VarValue" >"C:\MyOutputFile.txt"
Así que creé un script por lotes con los trabajos SQL ejecutados desde sqlcmd. Luego ejecuto el script por lotes desde un trabajo del Agente SQL, por lo que todavía tengo la misma administración y control en su lugar. Mis 4 trabajos SQL que colectivamente tomaron más de 3 horas para ejecutarse se completaron en 1 minuto y unos pocos segundos desde un solo script por lotes ejecutado por SQL Agent.
espero que esto ayude ...
Si ejecuta el mismo SP en SSMS y funciona, tal vez haya cambiado la configuración de la tarea, p. se ejecuta en el databse incorrecto. Si no, verifique Activity Monitor lo que está haciendo el agente o inicie un seguimiento para obtener los comandos ejecutados. tal vez hay un problema de bloqueo. ¿El problema aún ocurre si ejecuta el trabajo manualmente? –
@Bernhard, gracias por su respuesta. Revisé el trabajo y lo recreé. Todavía el mismo problema. Sí, si ejecuto manualmente el trabajo, todavía lleva mucho tiempo – Prateek
@Preteek ¿puede publicar la configuración del trabajo? La única razón de este comportamiento que puedo pensar es una ejecución diferente del SP. Como los parámetros, etc. son los mismos que cuando se ejecutan manualmente, el SQLServer debería usar los mismos planes de ejecución, etc. quizás pueda echarle un vistazo al Registro de SQL; tal vez esto nos dé una pista. –