Threadanzahl

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

Thread-Anzahl für 2014-Datenbankmodul

Knowledge Base article:

Zusammenfassung

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.

Ursachen

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.

Lösungen

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://msdn.microsoft.com/library/ms190219.aspx

Parameter, die außer Kraft gesetzt werden können

Name

Beschreibung

Standardwert

Aktiviert

 

Ja

Generiert Warnungen

 

Ja

Intervall (Sekunden)

Das periodische Intervall in Sekunden, in dem der Workflow ausgeführt werden soll.

300

Mindestschwellenwert für freie Threads

Der Workflow bestimmt maximale Anzahl an Threads und Anzahl aktiver Threads für jeden Datenbankmodul-Vorgang. Wenn die Anzahl freier Threads kleiner oder gleich diesem Parameter ist, wird eine Warnung erzeugt.

10

Anzahl der Stichproben

Gibt an, wie oft ein gemessener Wert einen Schwellenwert verletzen soll, bevor der Status geändert wird.

6

Timeout (Sekunden)

Gibt die Zeit an, die der Workflow ausgeführt werden darf, bevor er geschlossen und als fehlgeschlagen markiert wird.

200

Element properties:

TargetMicrosoft.SQLServer.2014.DBEngine
Parent MonitorSystem.Health.PerformanceState
CategoryPerformanceHealth
EnabledTrue
Alert GenerateTrue
Alert SeverityError
Alert PriorityNormal
Alert Auto ResolveTrue
Monitor TypeMicrosoft.SQLServer.2014.DBEngine.ThreadCount.MonitorType
RemotableTrue
AccessibilityPublic
Alert Message
MSSQL 2014: Thread-Anzahl ist zu hoch
SQL-Instanz "{0}" Thread-Count auf dem Computer "{1}" ist zu hoch. Ausführliche Informationen finden Sie auf der Registerkarte "Warnungskontext".
RunAsDefault

Source Code:

<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>
</Configuration>
</UnitMonitor>