Nombre de threads du moteur de base de données
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.
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.
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
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 |
Target | Microsoft.SQLServer.Linux.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.Linux.MonitorType.DBEngine.ThreadCount | ||
Remotable | True | ||
Accessibility | Public | ||
Alert Message |
| ||
RunAs | Default |
<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"]/InstanceName$</AlertParameter1>
<AlertParameter2>$Target/Property[Type="SqlCoreLib!Microsoft.SQLServer.Core.DBEngine"]/MachineName$</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>
<InstanceName>$Target/Property[Type="SqlCoreLib!Microsoft.SQLServer.Core.DBEngine"]/InstanceName$</InstanceName>
<ConnectionString>$Target/Property[Type="SqlCoreLib!Microsoft.SQLServer.Core.DBEngine"]/ConnectionString$</ConnectionString>
<IntervalSeconds>300</IntervalSeconds>
<SyncTime/>
<MinFreeThreadsCount>10</MinFreeThreadsCount>
<NumSamples>6</NumSamples>
<TimeoutSeconds>200</TimeoutSeconds>
<SqlTimeoutSeconds>15</SqlTimeoutSeconds>
</Configuration>
</UnitMonitor>