Konfigurieren der maximalen Anzahl von Arbeitsthreads (Serverkonfigurationsoption)

Gilt für:SQL Server

In diesem Artikel wird beschrieben, wie die Serverkonfigurationsoption Max. Anzahl von Arbeitsthreads in SQL Server mithilfe von SQL Server Management Studio oder Transact-SQL konfiguriert wird. Mit der Option max worker threads wird die Anzahl von Arbeitsthreads konfiguriert, die in SQL Server zum Verarbeiten von Abfrageanforderungen, Anmelde-, Abmelde- und ähnlichen Anwendungsanforderungen verfügbar sind.

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. Anzahl von Arbeitsthreads 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. Abhängig von der Konfiguration des Systems kann durch Festlegen von Max. Anzahl von Arbeitsthreads auf einen bestimmten Wert manchmal die Leistung verbessert werden.

Begrenzungen

  • Die tatsächliche Anzahl von Abfrageanforderungen kann den für max worker threads festgelegten Wert überschreiten. In diesem Fall erstellt SQL Server einen Arbeitsthreadpool, damit die Anforderung vom nächsten verfügbaren Arbeitsthread verarbeitet werden 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.

  • Durch die Serverkonfigurationsoption Max. Anzahl von Arbeitsthreads werden nicht alle Threads begrenzt, die innerhalb der Engine generiert 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 innerhalb der Begrenzung max worker threads, aber auch Systemthreads (siehe Threadverwendung durch Verfügbarkeitsgruppen). Wenn die konfigurierte maximale Anzahl von Threads überschritten wird, erhalten Sie über die folgende Abfrage Informationen zu den Systemtasks, die die zusätzlichen Threads generiert 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 ein Leistungsproblem vermuten, 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. Sinnvollerweise sollten Sie die Grundursache eines Leistungsproblems ermitteln, bevor Sie die Einstellung für die maximale Anzahl der Arbeitsthreads ändern. Weitere Informationen zur Leistungsbewertung 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. Die Option Max. 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.

  • 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. Dies ist zwar kein Fehler, aber in bestimmten Situationen unerwünscht. 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

Sie können mithilfe der Option Max. Anzahl von Arbeitsthreads die Anzahl von Arbeitsthreads konfigurieren, die SQL Server -Prozessen zur Verfügung stehen. Die Standardeinstellung für Max. Anzahl von Arbeitsthreads eignet sich für die meisten Systeme am besten.
Abhängig von der Konfiguration des Systems kann die Leistung manchmal verbessert werden, indem Max. Anzahl von Arbeitsthreads auf einen niedrigeren Wert festgelegt wird. 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.

EXEC sp_configure 'show advanced options', 1;
GO

RECONFIGURE;
GO

EXEC sp_configure 'max worker threads', 900;
GO

RECONFIGURE;
GO

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