Número de subprocesos

Microsoft.SQLServer.2016.DBEngine.ThreadCountMonitor (UnitMonitor)

Número de subprocesos para el motor de base de datos de 2016

Knowledge Base article:

Resumen

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.

Causas

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.

Soluciones

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

Parámetros invalidables

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.

Genera alertas

Define si el flujo de trabajo genera una alerta.

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

Element properties:

TargetMicrosoft.SQLServer.2016.DBEngine
Parent MonitorSystem.Health.PerformanceState
CategoryPerformanceHealth
EnabledTrue
Alert GenerateTrue
Alert SeverityError
Alert PriorityNormal
Alert Auto ResolveTrue
Monitor TypeMicrosoft.SQLServer.2016.DBEngine.ThreadCount.MonitorType
RemotableTrue
AccessibilityPublic
Alert Message
MSSQL 2016: el número de subprocesos es demasiado alto
El número de subprocesos de la instancia de SQL "{0}" en el equipo “{1}” es demasiado alto. Vea la pestaña "Contexto de alerta" para obtener más detalles.
RunAsDefault

Source Code:

<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>