Udostępnij za pomocą


Konfiguracja serwera: maksymalna liczba wątków roboczych

Dotyczy:SQL Server

W tym artykule opisano sposób konfigurowania max worker threads opcji konfiguracji serwera w programie SQL Server przy użyciu programu SQL Server Management Studio lub Transact-SQL. Opcja max worker threads umożliwia skonfigurowanie liczby wątków roboczych dostępnych dla całego programu SQL Server w celu przetwarzania żądań zapytań, logowania, wylogowania i podobnych żądań aplikacji.

Program SQL Server używa natywnych usług wątkowych systemów operacyjnych, aby zapewnić następujące warunki:

  • Co najmniej jeden wątek jednocześnie obsługuje każdą sieć obsługiwaną przez program SQL Server.
  • Jeden wątek obsługuje punkty kontrolne bazy danych.
  • Zbiór wątków obsługuje wszystkich użytkowników.

Wartość domyślna max worker threads to 0. Dzięki temu program SQL Server automatycznie konfiguruje liczbę wątków procesów roboczych podczas uruchamiania. Ustawienie domyślne jest najlepsze dla większości systemów. Jednak w zależności od konfiguracji systemu ustawienie max worker threads określonej wartości czasami poprawia wydajność.

Ograniczenia

Rzeczywista liczba żądań zapytań może przekroczyć wartość ustawioną w max worker threads, w takim przypadku SQL Server tworzy pule wątków roboczych, aby następny dostępny wątek mógł obsłużyć żądanie. Wątek roboczy jest przypisywany tylko do aktywnych żądań i jest zwalniany po ich obsłużeniu. Dzieje się tak nawet wtedy, gdy sesja użytkownika/połączenie, na którym zostało wykonane żądanie, pozostaje otwarte.

Opcja konfiguracji serwera max worker threads nie ogranicza wszystkich wątków, które mogą zostać uruchomione wewnątrz silnika. Wątki systemowe wymagane dla zadań, takich jak LazyWriter, Checkpoint, Log Writer, Service Broker, Lock Manager lub inne, są uruchamiane poza tym ograniczeniem. Grupy dostępności używają niektórych wątków procesu roboczego z poziomu programu max worker thread limit , ale także używają wątków systemowych (zobacz Użycie wątków według grup dostępności). Jeśli liczba skonfigurowanych wątków zostanie przekroczona, następujące zapytanie zapewnia informacje o zadaniach systemowych, które uruchomiły dodatkowe wątki.

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;

Rekomendacje

Ta opcja jest opcją zaawansowaną i powinna zostać zmieniona tylko przez doświadczonych specjalistów w dziedzinie bazy danych.

Jeśli podejrzewasz, że występuje problem z wydajnością, prawdopodobnie nie jest to dostępność wątków roboczych. Bardziej prawdopodobne jest, że przyczyna leży w działaniach, które zajmują wątki robocze i nie zwalniają ich. Przykłady obejmują długotrwałe zapytania lub wąskie gardła w systemie (we/wy, blokowanie, oczekiwania na zatrzaśnięcie, oczekiwania sieciowe), które powodują ich długie oczekiwanie. Najlepiej znaleźć główną przyczynę problemu z wydajnością przed zmianą ustawienia dotyczącego maksymalnej liczby wątków roboczych. Aby uzyskać więcej informacji na temat oceny wydajności, zobacz Monitorowanie i dostrajanie wydajności.

Buforowanie wątków pomaga zoptymalizować wydajność, gdy duża liczba klientów łączy się z serwerem. Zazwyczaj oddzielny wątek systemu operacyjnego jest tworzony dla każdego żądania zapytania. Jednak w przypadku setek połączeń z serwerem użycie jednego wątku na żądanie zapytania może zużywać duże ilości zasobów systemowych. Opcja max worker threads umożliwia programowi SQL Server utworzenie puli wątków roboczych w celu obsługi większej liczby żądań zapytań, co zwiększa wydajność.

W poniższej tabeli przedstawiono automatycznie skonfigurowaną liczbę maksymalnych wątków roboczych (gdy wartość jest ustawiona na 0) na podstawie różnych kombinacji logicznych procesorów CPU, architektury komputera i wersji programu SQL Server przy użyciu formuły: Domyślna maksymalna liczba procesów roboczych + (procesory logiczne — 4) * Procesy robocze na procesor CPU)..

Liczba procesorów logicznych Komputer 32-bitowy (do programu SQL Server 2014 (12.x)) Komputer 64-bitowy (do programu SQL Server 2016 (13.x) SP1) Komputer 64-bitowy (począwszy od programu SQL Server 2016 (13.x) SP2 i programu 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

Do programu SQL Server 2016 (13.x) z dodatkiem Service Pack 1 procesy robocze na procesor zależą tylko od architektury (32-bitowej lub 64-bitowej):

Liczba procesorów logicznych 32-bitowy komputer Komputer 64-bitowy
<= 4 256 512
> 4 256 + ((procesory logiczne - 4) * 8) 512 †† + ((procesory logiczne - 4) * 16)

Począwszy od programu SQL Server 2016 (13.x), program SQL Server nie może być już zainstalowany w 32-bitowym systemie operacyjnym. 32-bitowe wartości komputerów są wymienione, aby pomóc klientom korzystającym z programu SQL Server 2014 (12.x) i jego wcześniejszych wersji. Zalecamy 1024 jako maksymalną liczbę wątków roboczych dla wystąpienia programu SQL Server uruchomionego na komputerze 32-bitowym.

†† Począwszy od programu SQL Server 2017 (14.x), wartość Domyślna maksymalna liczba procesów roboczych jest podzielona przez 2 dla maszyn z mniej niż 2 GB pamięci.

Począwszy od programu SQL Server 2016 (13.x) SP2 i PROGRAMU SQL Server 2017 (14.x), procesy robocze na procesor zależą od architektury i liczby procesorów (od 4 do 64 lub większej niż 64):

Liczba procesorów logicznych 32-bitowy komputer Komputer 64-bitowy
<= 4 256 512
> 4 i <= 64 256 + ((procesory logiczne - 4) * 8) 512 †† + ((procesory logiczne - 4) * 16)
> 64 256 + ((procesory logiczne - 4) * 32) 512 †† + ((procesory logiczne - 4) * 32)

Począwszy od programu SQL Server 2016 (13.x), program SQL Server nie może być już zainstalowany w 32-bitowym systemie operacyjnym. 32-bitowe wartości komputerów są wymienione, aby pomóc klientom korzystającym z programu SQL Server 2014 (12.x) i jego wcześniejszych wersji. Zalecamy 1024 jako maksymalną liczbę wątków roboczych dla wystąpienia programu SQL Server uruchomionego na komputerze 32-bitowym.

†† Począwszy od programu SQL Server 2017 (14.x), wartość Domyślna maksymalna liczba procesów roboczych jest podzielona przez 2 dla maszyn z mniej niż 2 GB pamięci.

Wskazówka

Aby uzyskać więcej informacji na temat używania więcej niż 64 procesorów logicznych, zobacz Najlepsze rozwiązania dotyczące uruchamiania programu SQL Server na komputerach z więcej niż 64 procesorami CPU.

Gdy wszystkie wątki robocze są aktywne z długotrwałymi zapytaniami, program SQL Server może wydawać się nie odpowiadać, dopóki wątek procesu roboczego nie zostanie ukończony i stanie się dostępny. Chociaż to zachowanie nie jest wadą, czasami może być niepożądane. Jeśli proces wydaje się nie odpowiadać i nie można przetworzyć żadnych nowych zapytań, połącz się z programem SQL Server przy użyciu dedykowanego połączenia administratora (DAC) i zabij proces. Aby temu zapobiec, zwiększ liczbę maksymalnych wątków roboczych.

Uprawnienia

Uprawnienia do wykonywania na sp_configure, bez parametrów lub tylko z pierwszym parametrem, są domyślnie przyznawane wszystkim użytkownikom. Aby wykonać sp_configure z obydwoma parametrami, aby zmienić opcję konfiguracji lub uruchomić instrukcję RECONFIGURE, użytkownik musi mieć uprawnienie ALTER SETTINGS na poziomie serwera. Uprawnienie ALTER SETTINGS jest niejawnie posiadane przez sysadmin i serveradmin role stałe serwera.

Korzystanie z programu SQL Server Management Studio (SSMS)

  1. W Eksploratorze obiektów kliknij prawym przyciskiem myszy serwer i wybierz polecenie Właściwości.

  2. Wybierz węzeł Procesory .

  3. W polu Maksymalna liczba wątków roboczych wpisz lub wybierz wartość z zakresu od 128 do 65 535.

Wskazówka

max worker threads Użyj opcji , aby skonfigurować liczbę wątków procesów roboczych dostępnych dla procesów programu SQL Server. Ustawienie domyślne dla max worker threads większości systemów jest najlepsze. Jednak w zależności od konfiguracji systemu ustawienie max worker threads mniejszej wartości czasami poprawia wydajność. Aby uzyskać więcej informacji, zobacz sekcję Zalecenia w tym artykule.

Korzystanie z Transact-SQL

  1. Połącz się z silnikiem bazy danych.

  2. Na pasku Standard wybierz pozycję Nowe zapytanie.

  3. Skopiuj i wklej poniższy przykład w oknie zapytania, a następnie wybierz pozycję Wykonaj. W tym przykładzie pokazano, jak za pomocą sp_configure skonfigurować max worker threads opcję na 900.

    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
    

Zmiana zacznie obowiązywać natychmiast po wykonaniu funkcji RECONFIGURE bez konieczności ponownego uruchamiania aparatu bazy danych.