У меня похожая проблема со скриптом, который вызывает несколько созданных мной UDF.Сами UDF обычно работают в секунду за SSMS.Аналогично, выполнение отчетов, которые я создаю с их помощью, можно переносить в SSMS (данные 30d за 8 с, данные 365d за 22 с).Я всегда выполнял NOCOUNT ON с моими заданиями агента SQL, поскольку они обычно генерируют текстовые файлы для извлечения их другими процессами или Excel, и я не хочу, чтобы дополнительные данные были в конце, поэтому это не было решением для меня.
В этом случае, когда мы выполняем тот же сценарий в SQL Agent как задание, мои времена растут в геометрической прогрессии.Мой сценарий 8s занимает 2m30s, а мой сценарий 22s - 2h20m.Это то же самое, независимо от того, запускаю ли я его в полдень с другими действиями пользователя и заданиями, или в нерабочее время, когда не выполняются какие-либо действия пользователя, не выполняются задания или резервные копии.Наш сервер простаивает, и в лучшем случае я получаю одно из 8 используемых ядер при запуске.БД занимает всего около 10 ГБ на SSD с кэшированной картой RAID, а 16 из 32 ГБ ОЗУ свободны.Поскольку мой SQL эффективно работает в SSMS, я вполне уверен, что достиг некоторого предела потоков.Я исследовал и попытался настроить MAXDOP непосредственно перед сценариями в агенте SQL, но безуспешно.
Поскольку это мероприятие, которое я хочу запланировать, оно должно быть автоматизировано тем или иным способом.Я мог бы позволить этим сценариям занять часы, необходимые для выполнения шагов SQL в заданиях агента SQL, но я решил вместо этого запустить их из командной строки и получить ту же производительность, что и в SSMS.
sqlcmd -S SQLSRVRHost -i "C:\My Script Loc With Spaces.sql" -v MyVar="VarValue" >"C:\MyOutputFile.txt"
ИтакЯ создал пакетный скрипт с заданиями SQL, запущенными из sqlcmd.Затем я запускаю пакетный скрипт из задания агента SQL, поэтому у меня все еще остаются те же функции управления и контроля.Мои 4 задания SQL, которые в совокупности заняли более 3 часов для выполнения за 1 минуту и несколько секунд из одного пакетного сценария, выполняемого агентом SQL.
Надеюсь, это поможет ...