Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
En este artículo se proporcionan instrucciones de solución de problemas para un problema que provoca un error en los trabajos del Agente SQL Server y genera el código de error 258.
Síntomas
El servicio Agente SQL Server se ejecuta, pero no se ejecutan los trabajos programados del Agente SQL Server. Los registros de SQL Server y del Agente muestran tiempos de espera de red y autenticación, además de los inicios de sesión con errores.
En el ejemplo siguiente se muestra el mensaje de error que se agrega a los registros:
SQLServer Error: 258, TCP Provider: Timeout error [258]
ODBC Error: 0, Login timeout expired [SQLSTATE HYT00]
SQLServer Error: 258, Unable to complete login process due to delay in prelogin response [SQLSTATE 08001]
Logon to server '<ServerName>' failed (ConnLogJobHistory)
Causa
Este problema puede deberse a cualquiera de los siguientes problemas subyacentes:
- Bloqueo en tablas del sistema msdb que usa el Agente SQL. Este bloqueo impide las operaciones de lectura y escritura de los metadatos del trabajo.
- Las tablas del sistema de ejemplo incluyen
dbo.sysjobs,dbo.sysjobschedulersydbo.jobsteps.
- Las tablas del sistema de ejemplo incluyen
- No responde (se bloquea) en subprocesos importantes del Agente SQL Server u otros problemas de nivel de proceso.
- Agotamiento de hilos de trabajo en SQL Server (sin hilos disponibles). Este agotamiento impide que el agente se conecte o procese programaciones.
Solución
Compruebe que el servicio agente SQL Server se está ejecutando. Use uno de los siguientes comandos de PowerShell:
Para las instancias de SQL predeterminadas:
Get-Service -Name "SQLSERVERAGENT"Para instancias de SQL nombradas:
Get-Service -Name "SQLSERVERAGENT$<InstanceName>"
Si el servicio agente SQL Server no se está ejecutando, inícielo mediante uno de los siguientes comandos:
Para las instancias de SQL predeterminadas:
Start-Service -Name "SQLSERVERAGENT"Para las instancias de SQL nombradas:
Start-Service -Name "SQLSERVERAGENT$<InstanceName>"
Si los trabajos continúan fallando después de iniciar el servicio SQL Server Agent, vaya al paso siguiente. Si los trabajos finalizan correctamente, el problema se resuelve y no se requiere ninguna acción adicional.
Compruebe los trabajos y programaciones en
msdb. Inicie SQL Server Management Studio (SSMS) y ejecute la consulta siguiente:USE msdb; GO -- List enabled jobs SELECT name, enabled, description FROM msdb.dbo.sysjobs WHERE enabled = 1; GO -- List schedules and next run information SELECT s.name AS ScheduleName, j.name AS JobName, s.enabled AS ScheduleEnabled, s.active_start_date, s.active_end_time FROM msdb.dbo.sysjobs j JOIN msdb.dbo.sysjobschedules js ON j.job_id = js.job_id JOIN msdb.dbo.sysschedules s ON js.schedule_id = s.schedule_id WHERE j.enabled = 1; GOAnalice la salida de la consulta para los trabajos habilitados pero que han fallado. Investigue el historial y los resultados de las etapas de trabajos problemáticos para identificar y corregir problemas subyacentes.
Detecte sesiones de bloqueo en
msdbtablas del sistema del Agente ejecutando la siguiente consulta en SSMS.USE msdb; GO SELECT session_id, blocking_session_id, wait_type, wait_duration_ms, resource_description FROM sys.dm_os_waiting_tasks WHERE resource_description LIKE '%sysjobs%' OR resource_description LIKE '%sysjobschedulers%' OR resource_description LIKE '%jobsteps%'; GOPara identificar la consulta asociada a una sesión de bloqueo, ejecute la siguiente consulta en SSMS:
SELECT wt.session_id, wt.blocking_session_id, wt.wait_type, wt.wait_duration_ms, wt.resource_description, er.status, er.command, er.cpu_time, er.total_elapsed_time, txt.text AS sql_text FROM sys.dm_os_waiting_tasks wt LEFT JOIN sys.dm_exec_requests er ON wt.session_id = er.session_id CROSS APPLY sys.dm_exec_sql_text(er.sql_handle) AS txt WHERE wt.resource_description LIKE '%sysjobs%' OR wt.resource_description LIKE '%sysjobschedulers%' OR wt.resource_description LIKE '%jobsteps%';
Resuelva o finalice las sesiones de bloqueo que identificó en el paso anterior. Para finalizar una sesión, ejecute la siguiente consulta en SSMS:
Kill <Blocking_Session_ID>Una vez resueltas o finalizadas todas las sesiones de bloqueo, vaya al paso siguiente.
Compruebe si hay problemas de trabajo, subproceso o estado de los recursos mediante la ejecución de la siguiente consulta en SSMS:
/* ============================================================ HEALTH CHECK (Worker, CPU, Memory) ============================================================ */ SELECT Section, Metric, Value, ExtraInfo FROM ( /* =============================== WORKER THREAD STATUS =============================== */ SELECT CAST('WORKER THREAD STATUS' AS VARCHAR(MAX)) AS Section, CAST(CONCAT('Scheduler ', scheduler_id) AS VARCHAR(MAX)) AS Metric, CAST(CONCAT('Workers: ', active_workers_count, '/', current_workers_count) AS VARCHAR(MAX)) AS Value, CAST(CONCAT('WorkQueue=', work_queue_count, ', Idle=', is_idle) AS VARCHAR(MAX)) AS ExtraInfo FROM sys.dm_os_schedulers WHERE scheduler_id < 255 UNION ALL /* =============================== CPU PRESSURE =============================== */ SELECT CAST('CPU PRESSURE' AS VARCHAR(MAX)) AS Section, CAST(CONCAT('Scheduler ', scheduler_id) AS VARCHAR(MAX)) AS Metric, CAST(CONCAT('RunnableTasks=', runnable_tasks_count) AS VARCHAR(MAX)) AS Value, CAST(CONCAT('PendingIO=', pending_disk_io_count) AS VARCHAR(MAX)) AS ExtraInfo FROM sys.dm_os_schedulers WHERE scheduler_id < 255 UNION ALL /* =============================== MEMORY STATUS (System) =============================== */ SELECT CAST('MEMORY STATUS' AS VARCHAR(MAX)) AS Section, CAST('SystemMemoryState' AS VARCHAR(MAX)) AS Metric, CAST(system_memory_state_desc AS VARCHAR(MAX)) AS Value, CAST(CONCAT('TotalMB=', total_physical_memory_kb/1024, ', AvailableMB=', available_physical_memory_kb/1024) AS VARCHAR(MAX)) AS ExtraInfo FROM sys.dm_os_sys_memory UNION ALL /* =============================== PAGE LIFE EXPECTANCY =============================== */ SELECT CAST('PAGE LIFE EXPECTANCY' AS VARCHAR(MAX)) AS Section, CAST('PLE' AS VARCHAR(MAX)) AS Metric, CAST(cntr_value AS VARCHAR(MAX)) AS Value, CAST(NULL AS VARCHAR(MAX)) AS ExtraInfo FROM sys.dm_os_performance_counters WHERE counter_name = 'Page life expectancy' AND object_name LIKE '%Buffer Manager%' ) AS x ORDER BY Section, Metric;Investigue la salida de la consulta de comprobación de estado si hay alguno de los siguientes problemas determinados por los síntomas especificados.
- Presión del hilo de trabajador:
- Agotamiento del trabajo, por ejemplo
Workers: 512/512. -
WorkQueuees mayor que cero. Este valor indica que las tareas están esperando y que el sistema está sobrecargado.
- Agotamiento del trabajo, por ejemplo
- Presión de CPU:
-
RunnableTaskses mayor que cero. Este valor indica que existe un cuello de botella en la CPU. Un valor distinto de cero también puede indicar que el programador de SQL Server está siendo monopolizado por un subproceso (un programador que no produce rendimiento).
-
- Presión de memoria:
-
Memory stateesLOW. Este valor indica que el sistema general tiene poca memoria. - Valor bajo para
AvailableMB. Este valor indica un uso elevado de memoria para SQL Server. - Valor
PLEinferior a 300. Este valor indica una agitación de memoria elevada.
-
- Presión del hilo de trabajador:
Si identificó algún problema de trabajo, CPU o memoria en el paso anterior, reduzca la carga de trabajo actual para resolver los problemas. Si no ha identificado ningún problema, vaya al paso siguiente.
Reinicie el Agente SQL Server mediante la ejecución de uno de los siguientes comandos de PowerShell:
Importante
Al reiniciar el Agente SQL Server, se interrumpen los trabajos que se están ejecutando actualmente.
Para las instancias predeterminadas de SQL Server:
Restart-Service -Name "SQLSERVERAGENT"Para las instancias de SQL Server con nombre:
Restart-Service -Name "SQLAgent$<InstanceName>"
Después de reiniciar el Agente SQL Server, compruebe que los trabajos se están ejecutando ahora. Use el Monitor de actividad del trabajo.