Threadanzahl für Datenbankmodul
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.
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.
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
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 |
Target | Microsoft.SQLServer.Windows.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.Windows.MonitorType.DBEngine.ThreadCount | ||
Remotable | True | ||
Accessibility | Public | ||
Alert Message |
| ||
RunAs | Default |
<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>