Nombre de threads

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

Nombre de threads pour le moteur de base de données 2012

Knowledge Base article:

Résumé

Généralement, SQL Server ouvre un thread système pour chaque requête d'interrogation, mais si le nombre de threads dépasse la valeur maximale spécifiée de threads de travail, SQL Server regroupe les threads de travail. Lorsque tous les threads de travail traitent de longues requêtes, SQL Server peut sembler ne plus répondre jusqu'à ce qu'un thread de travail soit terminé et devienne disponible. Même s'il ne s'agit pas d'une défaillance, cela peut être parfois indésirable. L'analyse détermine le nombre de threads disponibles et indique si cette valeur est faible.

Causes

Une augmentation de la quantité de travail provoquant une augmentation de threads utilisés, cela peut indiquer que SQL Server fonctionne sous une charge importante ou qu'un nombre excessif de requêtes est exécuté en parallèle.

Solutions

L'ajustement du nombre maximal de threads de travail est une option avancée qui ne doit être modifiée que par un administrateur de base de données qualifié ou un technicien SQL Server agréé.

Le regroupement de threads permet d'optimiser les performances lorsque de nombreux clients sont connectés au serveur. Habituellement, un thread de système d'exploitation séparé est créé pour chaque demande de requête. Cependant, s'il existe des centaines de connexions au serveur, l'utilisation d'un thread par demande de requête peut consommer de grandes quantités de ressources système. L'option de nombre maximum de threads de travail (max worker threads) permet à SQL Server de créer un pool de threads de travail afin de servir un grand nombre de requêtes d'interrogation, ce qui améliore les performances.

Configurer l'option de configuration du serveur max worker threads

http://go.microsoft.com/fwlink/?LinkId=789186

Paramètres remplaçables

Nom

Description

Valeur par défaut

Priorité de l'alerte

Définit la priorité de l'alerte.

Normal

Gravité de l'alerte

Définit la gravité de l'alerte.

Erreur

Délai d'expiration du cache

Spécifie l'âge maximal des informations du cache que le flux de travail peut utiliser. Peut être omis.

43200

Activé

Active ou désactive le flux de travail.

Oui

Génère des alertes

Définit si le flux de travail génère une alerte.

Oui

Intervalle (en secondes)

L'intervalle de temps récurrent en secondes pendant lequel le workflow est exécuté.

300

Nombre minimal de threads disponibles

La source de données détermine un seuil et un nombre de threads pour chaque processus du moteur de base de données ; une alerte est générée si le seuil moins le nombre de threads actuel est inférieur ou égal au nombre de threads disponibles

10

Nombre d'échantillons

Nombre d'échantillons à moyenner avant de le comparer avec le seuil

6

Heure de synchronisation

Heure de la synchronisation, spécifiée selon un format de 24 heures. Peut être omise.

00:06

Délai d'attente (secondes)

Spécifie la durée pendant laquelle le flux de travail est autorisé à s'exécuter avant d'être fermé et marqué comme ayant échoué.

200

Element properties:

TargetMicrosoft.SQLServer.2012.DBEngine
Parent MonitorSystem.Health.PerformanceState
CategoryPerformanceHealth
EnabledTrue
Alert GenerateTrue
Alert SeverityError
Alert PriorityNormal
Alert Auto ResolveTrue
Monitor TypeMicrosoft.SQLServer.2012.DBEngine.ThreadCount.MonitorType
RemotableTrue
AccessibilityPublic
Alert Message
Le nombre de threads du moteur de base de données SQL 2012 est trop élevé
Le nombre de threads de l'instance SQL « {0} » sur l'ordinateur « {1} » est trop élevé. Pour plus d'informations, consultez l'onglet « contexte de l'alerte ».
RunAsDefault

Source Code:

<UnitMonitor ID="Microsoft.SQLServer.2012.DBEngine.ThreadCountMonitor" Accessibility="Public" Enabled="true" Target="SQL2012Core!Microsoft.SQLServer.2012.DBEngine" ParentMonitorID="SystemHealth!System.Health.PerformanceState" Remotable="true" Priority="Normal" TypeID="Microsoft.SQLServer.2012.DBEngine.ThreadCount.MonitorType" ConfirmDelivery="false">
<Category>PerformanceHealth</Category>
<AlertSettings AlertMessage="Microsoft.SQLServer.2012.DBEngine.ThreadCountMonitor.AlertMessage">
<AlertOnState>Error</AlertOnState>
<AutoResolve>true</AutoResolve>
<AlertPriority>Normal</AlertPriority>
<AlertSeverity>Error</AlertSeverity>
<AlertParameters>
<AlertParameter1>$Target/Property[Type="SQL!Microsoft.SQLServer.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="SQL!Microsoft.SQLServer.DBEngine"]/ServiceName$</ServiceName>
<IntervalSeconds>300</IntervalSeconds>
<TimeoutSeconds>200</TimeoutSeconds>
<MinFreeThreadsCount>10</MinFreeThreadsCount>
<NumSamples>6</NumSamples>
<SyncTime/>
<CacheExpirationTime>43200</CacheExpirationTime>
</Configuration>
</UnitMonitor>