Nombre de threads pour le moteur de base de données 2014
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.
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.
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://msdn.microsoft.com/library/ms190219.aspx
Nom | Description | Valeur par défaut |
Activé |
| Oui |
Génère des alertes |
| Oui |
Intervalle (en secondes) | L'intervalle de temps récurrent en secondes pendant lequel le workflow est exécuté. | 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 la modification de l'état. | 6 |
Délai d'expiration (en secondes) | Spécifie la durée pendant laquelle le workflow est autorisé à être exécuté avant d'être fermé et marqué comme un échec. | 200 |
Target | Microsoft.SQLServer.2014.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.2014.DBEngine.ThreadCount.MonitorType | ||
Remotable | True | ||
Accessibility | Public | ||
Alert Message |
| ||
RunAs | Default |
<UnitMonitor ID="Microsoft.SQLServer.2014.DBEngine.ThreadCountMonitor" Accessibility="Public" Enabled="true" Target="SQL2014Core!Microsoft.SQLServer.2014.DBEngine" ParentMonitorID="SystemHealth!System.Health.PerformanceState" Remotable="true" Priority="Normal" TypeID="Microsoft.SQLServer.2014.DBEngine.ThreadCount.MonitorType" ConfirmDelivery="false">
<Category>PerformanceHealth</Category>
<AlertSettings AlertMessage="Microsoft.SQLServer.2014.DBEngine.ThreadCountMonitor.AlertMessage">
<AlertOnState>Error</AlertOnState>
<AutoResolve>true</AutoResolve>
<AlertPriority>Normal</AlertPriority>
<AlertSeverity>Error</AlertSeverity>
<AlertParameters>
<AlertParameter1>$Target/Property[Type="SQL2014Core!Microsoft.SQLServer.2014.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="SQL2014Core!Microsoft.SQLServer.2014.DBEngine"]/ServiceName$</ServiceName>
<IntervalSeconds>300</IntervalSeconds>
<TimeoutSeconds>200</TimeoutSeconds>
<MinFreeThreadsCount>10</MinFreeThreadsCount>
<NumSamples>6</NumSamples>
<SyncTime/>
</Configuration>
</UnitMonitor>