Número de subprocesos para el motor de base de datos de 2016
SQL Server inicia normalmente un subproceso del sistema para cada solicitud de consulta, pero si la cantidad de subprocesos supera el valor especificado de Máximo de subprocesos de trabajo, SQL Server agrupa los subprocesos de trabajo. Si todos los subprocesos de trabajo están activos con consultas de ejecución prolongada, puede parecer que SQL Server no responde hasta que finaliza un subproceso de trabajo y vuelve a estar disponible. Aunque no se trata de un defecto, puede que a veces este comportamiento no sea deseable. El monitor analiza la cantidad de subprocesos disponibles y notifica si la cantidad es baja.
Un aumento de la cantidad de trabajo que ocasiona un aumento de subprocesos utilizados podría indicar que SQL Server está trabajando con carga significativa o que un número excesivo de consultas se ejecuta en paralelo.
El ajuste de Máximo de subprocesos de trabajo es una opción avanzada y solo debe cambiarla un administrador de base de datos con experiencia o un técnico de SQL Server con la titulación apropiada.
La agrupación de subprocesos permite optimizar el rendimiento cuando un gran número de clientes se conecta al servidor. Normalmente, se crea un subproceso del sistema operativo independiente para cada solicitud de la consulta. Sin embargo, cuando hay cientos de conexiones al servidor, el uso de un subproceso por solicitud de consulta puede consumir grandes cantidades de recursos del sistema. La opción Máximo de subprocesos de trabajo permite que SQL Server cree un grupo de subprocesos de trabajo para atender un gran número de solicitudes de consulta, lo que mejora el rendimiento.
Establecer la opción de configuración del servidor Máximo de subprocesos de trabajo
http://go.microsoft.com/fwlink/?LinkId=799312
Nombre | Descripción | Valor predeterminado |
Prioridad de alerta | Define la prioridad de la alerta. | Normal |
Gravedad de alerta | Define la gravedad de la alerta. | Error |
Hora de expiración de la caché | Especifica la antigüedad máxima de información de la caché que puede usar el flujo de trabajo. Puede omitirse. | 43200 |
Habilitado | Habilita o deshabilita el flujo de trabajo. | Sí |
Genera alertas | Define si el flujo de trabajo genera una alerta. | Sí |
Intervalo (segundos) | Intervalo de tiempo periódico en segundos en que se ejecuta el flujo de trabajo. | 300 |
Umbral mínimo de subprocesos disponibles | El flujo de trabajo determina el número máximo de subprocesos y el número de subprocesos activos para cada proceso de motor de base de datos. Se generará una alerta si el número de subprocesos disponibles es menor o igual que este parámetro. | 10 |
Número de ejemplos | Indica cuántas veces debe superar un umbral un valor medido para que cambie el estado. | 6 |
Hora de sincronización | Hora de sincronización especificada en un formato de 24 horas. Se puede omitir. | 00:18 |
Tiempo de espera (segundos) | Especifica el tiempo durante el que se puede ejecutar el flujo de trabajo antes de que se cierre y se marque como error. | 200 |
Target | Microsoft.SQLServer.2016.DBEngine | ||
Parent Monitor | System.Health.PerformanceState | ||
Category | PerformanceHealth | ||
Enabled | True | ||
Alert Generate | True | ||
Alert Severity | Error | ||
Alert Priority | Normal | ||
Alert Auto Resolve | True | ||
Monitor Type | Microsoft.SQLServer.2016.DBEngine.ThreadCount.MonitorType | ||
Remotable | True | ||
Accessibility | Public | ||
Alert Message |
| ||
RunAs | Default |
<UnitMonitor ID="Microsoft.SQLServer.2016.DBEngine.ThreadCountMonitor" Accessibility="Public" Enabled="true" Target="SQL2016Core!Microsoft.SQLServer.2016.DBEngine" ParentMonitorID="SystemHealth!System.Health.PerformanceState" Remotable="true" Priority="Normal" TypeID="Microsoft.SQLServer.2016.DBEngine.ThreadCount.MonitorType" ConfirmDelivery="false">
<Category>PerformanceHealth</Category>
<AlertSettings AlertMessage="Microsoft.SQLServer.2016.DBEngine.ThreadCountMonitor.AlertMessage">
<AlertOnState>Error</AlertOnState>
<AutoResolve>true</AutoResolve>
<AlertPriority>Normal</AlertPriority>
<AlertSeverity>Error</AlertSeverity>
<AlertParameters>
<AlertParameter1>$Target/Property[Type="SQL2016Core!Microsoft.SQLServer.2016.ServerRole"]/InstanceName$</AlertParameter1>
<AlertParameter2>$Target/Host/Property[Type="Windows!Microsoft.Windows.Computer"]/NetworkName$</AlertParameter2>
</AlertParameters>
</AlertSettings>
<OperationalStates>
<OperationalState ID="Normal" MonitorTypeStateID="Normal" HealthState="Success"/>
<OperationalState ID="Error" MonitorTypeStateID="Error" HealthState="Error"/>
</OperationalStates>
<Configuration>
<ServiceName>$Target/Property[Type="SQL2016Core!Microsoft.SQLServer.2016.DBEngine"]/ServiceName$</ServiceName>
<IntervalSeconds>300</IntervalSeconds>
<TimeoutSeconds>200</TimeoutSeconds>
<MinFreeThreadsCount>10</MinFreeThreadsCount>
<NumSamples>6</NumSamples>
<SyncTime/>
<CacheExpirationTime>43200</CacheExpirationTime>
</Configuration>
</UnitMonitor>