Работа агента SQL Server выполняется медленно - PullRequest
7 голосов
/ 17 августа 2011

Я выполняю хранимую процедуру, используя задание агента SQL Server в SQL Server 2005.

Это задание работало до вчерашнего дня.Со вчерашнего дня эта работа занимает больше 1 часа вместо 2 минут.

Я выполнил хранимую процедуру в SSMS, это заняло менее 1 минуты.

Я не мог понять, почему на выполнение задания агента SQL Server уходит более 1 часа?

Ответы [ 4 ]

6 голосов
/ 17 августа 2011

После некоторого времени комментирования и предположения, что SP работает с одинаковыми входными параметрами и данными при выполнении в SSMS, я, наконец, думаю, что могу дать последний совет:

В зависимости от того, какие действия выполняются вSP (например, вставка / обновление / удаление большого количества данных в цикле или курсоре), вы должны включить nocount в начале вашего кода.

set nocount on

Если это не так или не помогает, пожалуйста, добавьте больше информации, уже упомянутой в комментариях (например, все настройки задания и каждого задания, что было зарегистрировано, что находится вИстория вакансий, проверьте SQLerrorlogs, eventlogs, ....).Также взгляните на «Журналы SQL Server», может быть, вы можете собрать некоторую информацию здесь.Также всегда полезно заглянуть в список событий Application / System сервера баз данных.Чтобы получить базовый обзор, вы можете использовать Activitymonitor в SSMS, выбрав Сервер базы данных и выбрав «Монитор активности» в контекстном меню и выполнив поиск агента sql.

Моя последняя попытка - запустить трассировку sql для агента.В этом случае вы бы запустили трассировку и фильтр, например, пользователем, который запускает службу SQLAgent.Существует так много опций, которые вы можете установить для трассировок, поэтому я бы порекомендовал поискать их в Google, выполнить поиск в MSDN или задать другой вопрос здесь по stackoverflow.

2 голосов
/ 07 августа 2014

У меня похожая проблема со скриптом, который вызывает несколько созданных мной 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.

Надеюсь, это поможет ...

2 голосов
/ 02 августа 2012

Я заметил, что задания агента SQL игнорируют настройку MAXDOP сервера и запускают все с MAXDOP, равным 1. Если я запускаю хранимую процедуру в окнах запросов, она подчиняется настройкам сервера и использует 4 процесса.Если я использую агент SQL, любая запущенная мной хранимая процедура использует только один процесс.

1 голос
/ 07 декабря 2015

У нас есть большой процесс, который выполняется за 88 секунд в SSMS и 30-45 минут в агенте SQL Server.Я добавил DBO.префикс для всех имен таблиц, и теперь он работает так же быстро, как SSMS.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...