Threadanzahl

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

Threadanzahl für Datenbankmodul

Knowledge Base article:

Zusammenfassung

Normalerweise öffnet SQL Server einen Systemthread für jede Abfrageanforderung. Wenn aber die Anzahl von Threads den angegebenen Maximalwert für Workerthreads überschreitet, fasst SQL Server die Workerthreads in Pools zusammen. Wenn alle Workerthreads mit Abfragen mit langer Ausführungszeit aktiv sind, kann es sein, dass SQL Server anscheinend nicht mehr reagiert, bis ein Workerthread abgeschlossen ist und verfügbar wird. Dies ist zwar kein Fehler, aber zuweilen unerwünscht. Der Monitor analysiert die Anzahl freier Threads und benachrichtigt Sie, wenn die Anzahl gering ist.

Ursachen

Ein Anstieg des Arbeitsaufwands, der einen Anstieg verwendeter 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 Workerthreads ist eine erweiterte Option, die ausschließlich von einem erfahrenen Datenbankadministrator oder einem zertifizierten SQL Server-Techniker geändert werden sollte.

Threadpools erleichtern das Optimieren der Leistung, wenn sehr viele Clients mit dem Server verbunden sind. Üblicherweise wird für jede Abfrageanforderung ein separater Betriebssystemthread 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 Workerthreads ermöglicht SQL Server das Erstellen eines Pools mit Workerthreads, womit sich eine große Anzahl von Abfrageanforderungen verarbeiten und somit die Leistung erhöhen lässt.

Konfigurieren der Serverkonfigurationsoption "Maximale Anzahl von Workerthreads"

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

Überschreibbare Parameter

Name

Beschreibung

Standardwert

Warnungspriorität

Definiert die Warnungspriorität.

Normal

Warnungsschweregrad

Definiert den Warnungsschweregrad.

Fehler

Aktiviert

Aktiviert oder deaktiviert den Workflow.

Ja

Generiert Warnungen

Definiert, ob der Workflow eine Warnung generiert.

Ja

Intervall (Sekunden)

Gibt das Wiederholungsintervall in Sekunden für die Ausführung des Workflows an.

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 Abtastungen

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

6

Synchronisierungszeit

Die Synchronisierungszeit, angegeben im 24-Stunden-Format. Dieser Wert kann ausgelassen werden.

 

Timeout (Sekunden)

Gibt die Zeit an, zu der der Workflow ausgeführt werden dann, bevor er geschlossen und als fehlerhaft markiert wird.

200

Timeout für Datenbankverbindung (Sekunden)

Es tritt ein Fehler beim Workflow auf, und ein Ereignis wird registriert, wenn der Workflow nicht innerhalb des angegebenen Zeitraums auf die Datenbank zugreifen kann.

15

Element properties:

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

Source Code:

<UnitMonitor ID="Microsoft.SQLServer.Windows.Monitor.DBEngine.ThreadCount" Accessibility="Public" Enabled="true" Target="SqlDiscW!Microsoft.SQLServer.Windows.DBEngine" ParentMonitorID="Health!System.Health.PerformanceState" Remotable="true" Priority="Normal" TypeID="Microsoft.SQLServer.Windows.MonitorType.DBEngine.ThreadCount" ConfirmDelivery="false">
<Category>PerformanceHealth</Category>
<AlertSettings AlertMessage="Microsoft.SQLServer.Windows.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>
<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>
<MonitoringType>$Target/Property[Type="SqlDiscW!Microsoft.SQLServer.Windows.DBEngine"]/MonitoringType$</MonitoringType>
<IntervalSeconds>300</IntervalSeconds>
<SyncTime/>
<MinFreeThreadsCount>10</MinFreeThreadsCount>
<NumSamples>6</NumSamples>
<TimeoutSeconds>200</TimeoutSeconds>
<SqlTimeoutSeconds>15</SqlTimeoutSeconds>
</Configuration>
</UnitMonitor>