Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этой статье приводятся рекомендации по устранению неполадок, в которых служба агента SQL Server перестает отвечать или занимает больше времени, чем ожидалось при попытке ее запуска. Многие различные базовые проблемы могут вызвать эту проблему. В этой статье рассматриваются некоторые из наиболее распространенных сценариев.
Исходная версия продукта: SQL Server
Исходный номер базы знаний: 2795690
Симптомы
Агент SQL Server завершает работу с ошибкой, когда вы пытаетесь его запустить, или он запускается дольше, чем ожидалось. Кроме того, вы можете столкнуться с одним или несколькими из следующих сценариев:
Сценарий 1. В журнал событий системы регистрируется следующее сообщение об ошибке:
Не удалось запустить службу агента SQL Server (MSSQLSERVER) из-за следующей ошибки:
Служба не ответила на запрос на запуск или контроль своевременно.Сценарий 2. Состояние агента отображается как "Запуск" на панели управления, а следующее сообщение об ошибке регистрируется в файле SQLAgent.log :
Условие простоя ЦП не определено. Расписания заданий OnIdle не будут влиять.
Кроме того, в файл SQLAgent.log могут быть вошли следующие записи:
<Time Stamp> - ? [431] Populating subsystems cache... <Time Stamp> - ? [432] There are 7 subsystems in the subsystems cache <Time Stamp> - ? [124] Subsystem 'ActiveScripting' successfully loaded (maximum concurrency: 40) <Time Stamp> - ? [124] Subsystem 'ANALYSISCOMMAND' successfully loaded (maximum concurrency: 400) <Time Stamp> - ? [124] Subsystem 'ANALYSISQUERY' successfully loaded (maximum concurrency: 400) <Time Stamp> - ? [124] Subsystem 'CmdExec' successfully loaded (maximum concurrency: 40) <Time Stamp> - ? [124] Subsystem 'PowerShell' successfully loaded (maximum concurrency: 2) <Time Stamp> - ? [124] Subsystem 'SSIS' successfully loaded (maximum concurrency: 400) <Time Stamp> - ? [124] Subsystem 'TSQL' successfully loaded (maximum concurrency: 80) <Time Stamp> - ! [364] The Messenger service has not been started - NetSend notifications will not be sent <Time Stamp> - ? [129] SQLSERVERAGENT starting under Windows NT service control <Time Stamp> - + [396] An idle CPU condition has not been defined - OnIdle job schedules will have no effect <Time Stamp> - ? [110] Starting SQLServerAgent Monitor using '' as the notification recipient... <Time Stamp> - ? [146] Request servicer engine started <Time Stamp> - ? [133] Support engine started <Time Stamp> - ? [167] Populating job cache... <Time Stamp> - ? [131] SQLSERVER service stopping due to a stop request from a user, process, or the OS... <Time Stamp> - ? [134] Support engine stopped <Time Stamp> - ? [197] Alert engine stopped <Time Stamp> - ? [168] There are 4731 job(s) [0 disabled] in the job cache <Time Stamp> - ? [170] Populating alert cache... <Time Stamp> - ? [171] There are 0 alert(s) in the alert cache <Time Stamp> - ? [149] Request servicer engine stopped <Time Stamp> - ? [248] Saving NextRunDate/Times for all updated job schedules... <Time Stamp> - ? [249] 0 job schedule(s) saved <Time Stamp> - ? [127] Waiting for subsystems to finish... <Time Stamp> - ? [128] Subsystem 'ActiveScripting' stopped (exit code 1) <Time Stamp> - ? [128] Subsystem 'ANALYSISCOMMAND' stopped (exit code 1) <Time Stamp> - ? [128] Subsystem 'ANALYSISQUERY' stopped (exit code 1) <Time Stamp> - ? [128] Subsystem 'CmdExec' stopped (exit code 1) <Time Stamp> - ? [128] Subsystem 'PowerShell' stopped (exit code 1) <Time Stamp> - ? [128] Subsystem 'SSIS' stopped (exit code 1) <Time Stamp> - ? [175] Job scheduler engine stoppedСценарий 3: Движок СУБД отображает
session_idиз службы SQLAgent - Generic Refresher, а следующее задание отображается как запрос, выполняемый в этом сеансе:EXECUTE msdb.dbo.sp_sqlagent_refresh_job
Причина 1. Несколько записей задания
Эта проблема может возникнуть, если настроить большое количество заданий в агенте SQL Server с большим количеством расписаний. Эта конфигурация может непрерывно активировать задачу универсального обновления, сохраняя ее в состоянии занятости.
Например, проблема может возникнуть, если вы непреднамеренно настроили несколько подписок для отчетов в диспетчере конфигурации служб SQL Server Reporting Services.
Обходное решение
Чтобы обойти эту проблему, удалите задания, которые вам не нужны.
Если есть много записей заданий, так как вы непреднамеренно настроили много подписок, удалите ненужные подписки с помощью Диспетчера конфигурации служб Reporting Services.
Причина 2. Отсутствует или не работает драйвер ODBC
Эта проблема может возникнуть, если драйвер SQL Server Open Database Connectivity (ODBC) удален или не работает (часто после обновления системы). Агент SQL Server использует драйвер ODBC SQL Server для подключения к SQL Server. Если драйвер отсутствует или не работает, агент SQL Server не запускается.
Сведения о требованиях драйвера ODBC для различных версий SQL Server см. в разделе "Требования к оборудованию и программному обеспечению" для SQL Server.
Solution
Чтобы проверить, отсутствует ли драйвер ODBC SQL Server, выполните одну из следующих команд в окне командной строки с повышенными привилегиями или PowerShell:
Командная строка:
odbcad32.exeЭта команда открывает администратора источника данных ODBC.
PowerShell.
Get-OdbcDriverЭта команда выводит список установленных драйверов ODBC.
Проверьте, присутствует ли необходимый драйвер ODBC SQL Server, сравнивая его с таблицей, найденной в версиях SQL Server и драйверах ODBC и OLE DB. В таблице перечислены версии драйвера ODBC SQL Server, поставляемого с каждым ядром SQL Server и используемым агентом SQL Server для подключения к подсистеме SQL Server.
- Если установлена требуемая версия драйвера ODBC, восстановите его, следуя шагам, описанным в ODBC Driver is present.
- Если драйвер ODBC отсутствует, установите его, следуя инструкциям в разделе ODBC driver is missing.
Драйвер ODBC присутствует
- Откройте Добавление или удаление программ и выберите Microsoft ODBC Driver <Driver_Version> для SQL Server.
- Выберите три точки (...) и нажмите кнопку "Изменить".
- В открываемом мастере выберите параметр " Восстановить " и выполните действия по восстановлению драйвера.
- После выполнения действий по восстановлению можно проверить подключение к SQL Server, настроив тестовую dsN с восстановленным драйвером SQL Server. Дополнительные сведения см. в разделе «Параметры DSN в Администраторе источников данных ODBC».
Драйвер ODBC отсутствует
Установите драйвер с помощью графического интерфейса или автоматической установки.
Чтобы выполнить тихую установку, выполните следующую команду:
msiexec /i <ODBC_Driver_MSI> /qn
После завершения установки драйвера перезапустите агент SQL Server.
Убедитесь, что служба АГЕНТА SQL SERVER запущена.
Для неназванного экземпляра SQL Server выполните следующую команду PowerShell:
Get-Service -Name SQLSERVERAGENTДля именованного экземпляра SQL Server выполните следующую команду PowerShell:
Get-Service -Name SQLAgent$<InstanceName>
Причина 3: Ожидание службы обновления SQLAgent - Generic Refresher
При запуске агента SQL Server компонент SQLAgent — универсальный модуль обновления запускает процедуру msdb.dbo.sp_sqlagent_refresh_job для обновления метаданных задания. Во время этой операции SQL Server может повторно проверять членство в группе Windows для владельцев заданий или прокси-аккаунтов. Эти проверки используют вызовы Windows API, которые могут привести к тому, что сеанс перейдет в один или несколько следующих типов ожидания:
PREEMPTIVE_OS_LOOKUPACCOUNTSIDPREEMPTIVE_OS_AUTHORIZATIONOPSASYNC_NETWORK_IO
Используйте следующий запрос, чтобы определить сеанс и связанный текст команды:
SELECT
s.session_id,
r.status,
r.wait_type,
r.wait_time,
s.program_name,
t.text
FROM sys.dm_exec_requests AS r
RIGHT JOIN sys.dm_exec_sessions AS s
ON r.session_id = s.session_id
OUTER APPLY sys.dm_exec_sql_text(r.sql_handle) AS t
WHERE s.program_name = 'SQLAgent - Generic Refresher';
При возникновении этой ситуации сеанс находится в состоянии RUNNABLE и регулярно ожидает PREEMPTIVE_OS_LOOKUPACCOUNTSID типа ожидания. Или сеанс находится в состоянии ожидания для типа ASYNC_NETWORK_IO.
Обходное решение
Чтобы уменьшить задержки, связанные с проверками авторизации Windows:
- Убедитесь, что контроллеры домена доступны и реагируют.
- Избегайте использования высоко вложенных или очень больших групп Active Directory для владения заданиями агента SQL или учетными записями прокси-сервера.
- Перезапустите агент SQL Server после значительных изменений членства в группах Active Directory, чтобы обновить маркер доступа учетной записи службы.
- Рекомендуется рассматривать использование логинов SQL вместо групп AD для владения заданиями, когда это уместно.
- Просмотрите задания и прокси агента SQL, чтобы определить учетные записи Windows, которые могут способствовать дорогостоящим проверкам безопасности Windows.
Дополнительная информация
- Дополнительные сведения об удалении задания см. в разделе "Удаление одного или нескольких заданий".
- Дополнительные сведения об управлении подписками служб Reporting Services см. в статье "Создание и управление подписками для серверов отчетов в собственном режиме".
- Дополнительные сведения о различных типах ожидания см. в разделе "Типы ожидания SQL Server".