Threadanzahl für 2012-Datenbankmodul
Normalerweise öffnet SQL Server einen Systemthread für jede Abfrageanforderung, aber wenn die Anzahl der Threads den angegebenen maximalen Wert für Arbeitsthreads überschreitet, ordnet SQL Server die Arbeitsthreads in Pools ein. Wenn alle Arbeitsthreads aktiviert sind, kann es sein, dass SQL Server bei Abfragen mit langer Ausführungszeit scheinbar nicht mehr reagiert, bis ein Arbeitsthread abgeschlossen und verfügbar wird. Dies ist zwar kein Fehler, aber in bestimmten Situationen unerwünscht. Der Monitor analysiert die Anzahl freier Threads und benachrichtigt Sie, wenn die Anzahl gering ist.
Eine Erhöhung des Arbeitsaufwands, der eine Erhöhung der verwendeten Threads verursacht, kann darauf hinweisen, dass SQL Server mit erheblicher Auslastung oder einer übermäßigen Anzahl von parallel ausgeführten Abfragen arbeitet.
Das Anpassen der maximalen Arbeitsthreads ist eine erweiterte Option und sollte ausschließlich von einem erfahrenen Datenbankadministrator oder einem zertifizierten SQL Server-Techniker geändert werden.
Threadpools erleichtern das Optimieren der Leistung, wenn sehr viele Clients mit dem Server verbunden sind. Üblicherweise wird ein separater Betriebssystemthread für jede Abfrageanforderung erstellt. Wenn jedoch bei Hunderten von Verbindungen mit dem Server weiterhin ein Thread pro Abfrageanforderung verwendet wird, kann dabei eine große Menge an Systemressourcen verbraucht werden. Die Option für die maximale Anzahl von Arbeitsthreads ermöglicht SQL Server das Erstellen eines Pools mit Arbeitsthreads, der eine große Anzahl von Abfrageanforderungen versorgen kann und so zur Verbesserung der Leistung beiträgt.
Konfigurieren der Serverkonfigurationsoption Maximale Anzahl von Arbeitsthreads
http://go.microsoft.com/fwlink/?LinkId=789186
Name | Beschreibung | Standardwert |
Warnungspriorität | Definiert die Warnungspriorität. | Normal |
Warnungsschweregrad | Definiert den Warnungsschweregrad. | Fehler |
Cacheablaufzeit | Gibt das maximale Alter von Informationen aus dem Cache an, die vom Workflow verwendet werden können. Kann ausgelassen werden. | 43200 |
Aktiviert | Aktiviert oder deaktiviert den Workflow. | Ja |
Generiert Warnungen | Definiert, ob der Workflow eine Warnung generiert. | Ja |
Intervall (Sekunden) | Das periodische Intervall in Sekunden, in dem der Workflow ausgeführt werden soll. | 300 |
Mindestanzahl freier Threads | Die Datenquelle bestimmt einen Schwellenwert und eine Threadanzahl für jeden Datenbankmodulprozess. Eine Warnung wird generiert, wenn der Schwellenwert abzüglich der aktuellen Threadanzahl kleiner als oder gleich der Anzahl von freien Threads ist. | 10 |
Anzahl der Stichproben | Anzahl der Stichproben im Durchschnitt vor dem Vergleich mit dem Schwellenwert | 6 |
Synchronisierungszeit | Die Synchronisierungszeit, angegeben im 24-Stunden-Format. Kann ausgelassen werden. | 00:06 |
Timeout (Sekunden) | Gibt an, wie lange der Workflow ausgeführt werden darf, bevor er geschlossen und als fehlerhaft markiert wird. | 200 |
Target | Microsoft.SQLServer.2012.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.2012.DBEngine.ThreadCount.MonitorType | ||
Remotable | True | ||
Accessibility | Public | ||
Alert Message |
| ||
RunAs | Default |
<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>