Teilen über


Serverkonfiguration: max. Workerthreads

Gilt für: SQL Server

In diesem Artikel wird beschrieben, wie Sie die max worker threads Serverkonfigurationsoption in SQL Server mithilfe von SQL Server Management Studio oder Transact-SQL konfigurieren. Die max worker threads Option konfiguriert die Anzahl der Arbeitsthreads, die SQL Server-weit verfügbar sind, um Abfrageanforderungen, Anmeldung, Abmeldung und ähnliche Anwendungsanforderungen zu verarbeiten.

SQL Server verwendet die nativen Threaddienste der Betriebssysteme, um die folgenden Bedingungen sicherzustellen:

  • Jedes Netzwerk, das SQL Server unterstützt, wird von einem Thread oder mehreren Threads gleichzeitig unterstützt.
  • Ein Thread verarbeitet Datenbankprüfpunkte.
  • Ein Threadpool verarbeitet alle Benutzer.

Der Standardwert für max worker threads ist 0. Auf diese Weise kann SQL Server die Anzahl der Arbeitsthreads beim Starten automatisch konfigurieren. Die Standardeinstellung ist für die meisten Systeme am besten geeignet. Je nach Systemkonfiguration verbessert die Einstellung max worker threads auf einen bestimmten Wert jedoch manchmal die Leistung.

Begrenzungen

Die tatsächliche Anzahl von Abfrageanforderungen kann den Wert überschreiten, der in max worker threads diesem Fall SQL Server die Arbeitsthreads poolt, sodass der nächste verfügbare Workerthread die Anforderung verarbeiten kann. Ein Arbeitsthread wird nur aktiven Anforderungen zugewiesen und nach Verarbeitung der Anforderung freigegeben. Dies geschieht selbst dann, wenn die Benutzersitzung bzw. die Verbindung, für die die Anforderung erfolgt ist, offen bleibt.

Die max worker threads Serverkonfigurationsoption beschränkt nicht alle Threads, die innerhalb des Moduls gespeichert werden können. Systemthreads, die für Tasks wie LazyWriter, Checkpoint, Log Writer, Service Broker, Lock Manager usw. erforderlich sind, werden außerhalb dieses Limits generiert. Verfügbarkeitsgruppen verwenden einige der Arbeitsthreads aus den max worker thread limit Systemthreads, verwenden aber auch Systemthreads (siehe Threadverwendung nach Verfügbarkeitsgruppen). Wenn die Anzahl der konfigurierten Threads überschritten wird, stellt die folgende Abfrage Informationen zu den Systemaufgaben bereit, die die zusätzlichen Threads durchsucht haben.

SELECT s.session_id,
    r.command,
    r.status,
    r.wait_type,
    r.scheduler_id,
    w.worker_address,
    w.is_preemptive,
    w.state,
    t.task_state,
    t.session_id,
    t.exec_context_id,
    t.request_id
FROM sys.dm_exec_sessions AS s
    INNER JOIN sys.dm_exec_requests AS r
        ON s.session_id = r.session_id
    INNER JOIN sys.dm_os_tasks AS t
        ON r.task_address = t.task_address
    INNER JOIN sys.dm_os_workers AS w
        ON t.worker_address = w.worker_address
WHERE s.is_user_process = 0;

Empfehlungen

Diese Option ist eine erweiterte Option und sollte ausschließlich von einem erfahrenen Datenbankadministrator oder einem zertifizierten SQL Server -Experten geändert werden. Wenn Sie vermuten, dass ein Leistungsproblem vorliegt, ist es wahrscheinlich nicht die Verfügbarkeit von Arbeitsthreads. Die Ursache hängt eher mit Aktivitäten zusammen, die die Arbeitsthreads belegen und nicht freigeben. Beispiele hierfür sind Abfragen mit langer Ausführungszeit oder Engpässe im System (E/A, Blockierungen, Latchwartevorgänge, Netzwerkwartevorgänge), die Abfragen mit langer Wartezeit verursachen. Es ist am besten, die Ursache eines Leistungsproblems zu finden, bevor Sie die Einstellung für maximale Arbeitsthreads ändern. Weitere Informationen zur Bewertung der Leistung finden Sie unter Überwachen und Optimieren der Leistung.

Threadpools erleichtern das Optimieren der Leistung, wenn sehr viele Clients eine Verbindung mit dem Server herstellen. Ü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. Mit der max worker threads Option kann SQL Server einen Pool von Workerthreads erstellen, um eine größere Anzahl von Abfrageanforderungen zu verarbeiten, wodurch die Leistung verbessert wird.

Die folgende Tabelle zeigt die automatisch konfigurierte Anzahl von maximalen Arbeitsthreads (bei einem Wert von 0) auf der Basis verschiedener Kombinationen aus logischen CPUs, Computerarchitektur und SQL Server-Versionen. Folgende Formel wird verwendet: Standardwert für maximale Anzahl von Workern + (( logische CPUs - 4) * Worker pro CPU).

Anzahl logischer CPUs 32-Bit-Computer (bis SQL Server 2014 (12.x)) 64-Bit-Computer (bis SQL Server 2016 (13.x) SP1) 64-Bit-Computer (ab SQL Server 2016 (13.x) SP2 und SQL Server 2017 (14.x))
<= 4 256 512 512
8 288 576 576
16 352 704 704
32 480 960 960
64 736 1472 1472
128 1248 2496 4480
256 2272 4544 8576

Bis SQL Server 2016 (13.x) SP1 hängt der Wert für Worker pro CPU nur von der Architektur ab (32- oder 64-Bit):

Anzahl logischer CPUs 32-Bit-Computer 1 64-Bit-Computer
<= 4 256 512
> 4 256 + ((logische CPUs - 4) * 8) 512 2 + ((logische CPUs - 4) * 16)

Ab SQL Server 2016 (13.x) SP2 und SQL Server 2017 (14.x) hängt der Wert für Worker pro CPU von der Architektur und der Anzahl von Prozessoren ab (zwischen 4 und 64 oder mehr als 64):

Anzahl logischer CPUs 32-Bit-Computer 1 64-Bit-Computer
<= 4 256 512
> 4 und <= 64 256 + ((logische CPUs - 4) * 8) 512 2 + ((logische CPUs - 4) * 16)
> 64 256 + ((logische CPUs - 4) * 32) 512 2 + ((logische CPUs - 4) * 32)

1 Ab SQL Server 2016 (13.x) kann SQL Server nicht mehr unter einem 32-Bit-Betriebssystem installiert werden. Werte für 32-Bit-Computer sind zur Unterstützung von Kunden aufgeführt, die SQL Server 2014 (12.x) und früher nutzen. Als maximale Anzahl von Arbeitsthreads auf einer SQL Server-Instanz, die auf einem 32-Bit-Computer ausgeführt wird, wird der Wert 1.024 empfohlen.

2 Ab SQL Server 2017 (14.x) wird der Standardwert für maximale Anzahl von Workern für Computer mit weniger als 2 GB Arbeitsspeicher durch 2 dividiert.

Tipp

Weitere Informationen zur Verwendung von mehr als 64 logischen CPUs finden Sie unter Bewährte Methoden zum Ausführen von SQL Server auf Computern mit mehr als 64 CPUs.

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 wird und verfügbar ist. Obwohl dieses Verhalten kein Fehler ist, kann es manchmal unerwünscht sein. Wenn ein Prozess scheinbar nicht mehr reagiert und keine neuen Abfragen verarbeitet werden können, stellen Sie mithilfe der dedizierten Administratorverbindung (DAC) eine Verbindung mit SQL Server her, und brechen Sie den Prozess ab. Um diese Situation zu verhindern, erhöhen Sie den Wert für die maximale Anzahl von Arbeitsthreads.

Berechtigungen

Die Ausführungsberechtigungen für sp_configure ohne Parameter oder nur mit dem ersten Parameter werden standardmäßig allen Benutzern erteilt. Um sp_configure mit beiden Parametern auszuführen und eine Konfigurationsoption zu ändern oder die RECONFIGURE-Anweisung auszuführen, benötigt ein Benutzer die ALTER SETTINGS-Berechtigung auf Serverebene. Die ALTER SETTINGS-Berechtigung ist implizit in den festen Serverrollen sysadmin und serveradmin enthalten.

Verwenden von SQL Server Management Studio (SSMS)

  1. Klicken Sie im Objekt-Explorer mit der rechten Maustaste auf einen Server, und wählen Sie Eigenschaften aus.

  2. Wählen Sie den Knoten Prozessoren aus.

  3. Geben Sie in das Feld Max. Anzahl von Arbeitsthreads einen Wert zwischen 128 und 65.535 ein.

Tipp

Verwenden Sie die max worker threads Option, um die Anzahl der Für SQL Server-Prozesse verfügbaren Arbeitsthreads zu konfigurieren. Die Standardeinstellung eignet sich am besten für max worker threads die meisten Systeme.
Je nach Systemkonfiguration verbessert die Einstellung max worker threads auf einen kleineren Wert jedoch manchmal die Leistung. Weitere Informationen finden Sie im Abschnitt Empfehlungen in diesem Artikel.

Verwenden von Transact-SQL

  1. Stellen Sie eine Verbindung mit dem Datenbank-Engineher.

  2. Klicken Sie in der Standardleiste auf Neue Abfrage.

  3. Kopieren Sie das folgende Beispiel in das Abfragefenster, und klicken Sie dann auf Ausführen. In diesem Beispiel wird gezeigt, wie sp_configure verwendet wird, um die Option max worker threads auf 900festzulegen.

    USE master;
    GO
    
    EXECUTE sp_configure 'show advanced options', 1;
    GO
    
    RECONFIGURE;
    GO
    
    EXECUTE sp_configure 'max worker threads', 900;
    GO
    
    RECONFIGURE;
    GO
    
    EXECUTE sp_configure 'show advanced options', 0;
    GO
    
    RECONFIGURE;
    GO
    

Die Änderung wird nach dem Ausführen von RECONFIGURE sofort wirksam, ohne dass ein Neustart von Datenbank-Engine erforderlich ist.