Nombre de threads

Microsoft.SQLServer.Linux.Monitor.DBEngine.ThreadCount (UnitMonitor)

Nombre de threads du moteur de base de données

Knowledge Base article:

Récapitulatif

En règle générale, SQL Server ouvre un thread système pour chaque demande de requête, mais si la quantité de threads dépasse la valeur maximale de threads de travail spécifiée, SQL Server regroupe les threads de travail. Quand tous les threads de travail sont actifs avec des requêtes longues, SQL Server peut sembler ne pas répondre tant qu'un thread de travail n'est pas fini et n'est pas disponible. Bien qu'il ne s'agisse pas d'un défaut, ce comportement peut parfois être indésirable. Le moniteur analyse le nombre de threads libres et vous avertit si la quantité est faible.

Causes

Une augmentation de la quantité de travail à l'origine d'une augmentation des threads utilisés peut indiquer que SQL Server est surchargé ou qu'un nombre excessif de requêtes s'exécutent en parallèle.

Résolutions

Le réglage du nombre maximal de threads de travail est une option avancée qui doit être changée uniquement par un administrateur de base de données expérimenté ou un technicien SQL Server certifié.

Le regroupement de threads permet d'optimiser les performances quand un grand nombre de clients sont connectés au serveur. En règle générale, un thread de système d'exploitation séparé est créé pour chaque demande de requête. Toutefois, en cas de centaines de connexions au serveur, l'utilisation d'un seul thread par demande de requête peut consommer de grandes quantités de ressources système. L'option du nombre maximal de threads de travail permet à SQL Server de créer un pool de threads de travail pour traiter un grand nombre de demandes de requête, ce qui améliore les performances.

Configurer l'option de configuration de serveur du nombre maximal de threads de travail :

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

Paramètres remplaçables

Nom

Description

Valeur par défaut

Priorité d'alerte

Définit la priorité de l'alerte.

Normale

Gravité d'alerte

Définit la gravité de l'alerte.

Erreur (error)

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)

Intervalle régulier (en secondes) auquel exécuter le flux de travail.

300

Seuil minimal de threads disponibles

Le workflow détermine le nombre maximal de threads et le nombre de threads actifs pour chaque processus de moteur de base de données. Une alerte est déclenchée si le nombre de threads libres est inférieur ou égal à ce paramètre.

10

Nombre d'échantillons

Indique le nombre de dépassements de seuil d'une valeur mesurée avant que l'état soit changé.

6

Heure de synchronisation

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

 

Délai d'expiration (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

Délai d’attente pour la connexion de base de données (secondes)

Le workflow échoue et enregistre un événement s’il ne peut pas accéder à la base de données pendant la période spécifiée.

15

Element properties:

TargetMicrosoft.SQLServer.Linux.DBEngine
Parent MonitorSystem.Health.PerformanceState
CategoryPerformanceHealth
EnabledTrue
Alert GenerateTrue
Alert SeverityError
Alert PriorityNormal
Alert Auto ResolveTrue
Monitor TypeMicrosoft.SQLServer.Linux.MonitorType.DBEngine.ThreadCount
RemotableTrue
AccessibilityPublic
Alert Message
MSSQL sur Linux : Le nombre de threads est trop élevé
Le nombre de threads de l'instance SQL « {0} » sur l'ordinateur « {1} » est trop élevé. Consultez l'onglet « Contexte de l'alerte » pour plus de détails.
RunAsDefault

Source Code:

<UnitMonitor ID="Microsoft.SQLServer.Linux.Monitor.DBEngine.ThreadCount" Accessibility="Public" Enabled="true" Target="SqlDiscL!Microsoft.SQLServer.Linux.DBEngine" ParentMonitorID="Health!System.Health.PerformanceState" Remotable="true" Priority="Normal" TypeID="Microsoft.SQLServer.Linux.MonitorType.DBEngine.ThreadCount" ConfirmDelivery="false">
<Category>PerformanceHealth</Category>
<AlertSettings AlertMessage="Microsoft.SQLServer.Linux.Monitor.DBEngine.ThreadCount.AlertMessage">
<AlertOnState>Error</AlertOnState>
<AutoResolve>true</AutoResolve>
<AlertPriority>Normal</AlertPriority>
<AlertSeverity>Error</AlertSeverity>
<AlertParameters>
<AlertParameter1>$Target/Property[Type="SqlCoreLib!Microsoft.SQLServer.Core.DBEngine"]/MachineName$</AlertParameter1>
<AlertParameter2>$Target/Property[Type="SqlCoreLib!Microsoft.SQLServer.Core.DBEngine"]/InstanceName$</AlertParameter2>
</AlertParameters>
</AlertSettings>
<OperationalStates>
<OperationalState ID="Normal" MonitorTypeStateID="Normal" HealthState="Success"/>
<OperationalState ID="Error" MonitorTypeStateID="Error" HealthState="Error"/>
</OperationalStates>
<Configuration>
<MachineName>$Target/Property[Type="SqlCoreLib!Microsoft.SQLServer.Core.DBEngine"]/MachineName$</MachineName>
<NetbiosComputerName>$Target/Property[Type="SqlCoreLib!Microsoft.SQLServer.Core.DBEngine"]/NetbiosComputerName$</NetbiosComputerName>
<InstanceName>$Target/Property[Type="SqlCoreLib!Microsoft.SQLServer.Core.DBEngine"]/InstanceName$</InstanceName>
<ConnectionString>$Target/Property[Type="SqlCoreLib!Microsoft.SQLServer.Core.DBEngine"]/ConnectionString$</ConnectionString>
<InstanceVersion>$Target/Property[Type="SqlCoreLib!Microsoft.SQLServer.Core.DBEngine"]/Version$</InstanceVersion>
<InstanceEdition>$Target/Property[Type="SqlCoreLib!Microsoft.SQLServer.Core.DBEngine"]/Edition$</InstanceEdition>
<IntervalSeconds>300</IntervalSeconds>
<SyncTime/>
<MinFreeThreadsCount>10</MinFreeThreadsCount>
<NumSamples>6</NumSamples>
<TimeoutSeconds>200</TimeoutSeconds>
<SqlExecTimeoutSeconds>60</SqlExecTimeoutSeconds>
<SqlTimeoutSeconds>15</SqlTimeoutSeconds>
</Configuration>
</UnitMonitor>