Sdílet prostřednictvím


Konfigurace serveru: maximální počet pracovních vláken

platí pro:SQL Server

Tento článek popisuje, jak nakonfigurovat max worker threads možnost konfigurace serveru v SQL Serveru pomocí aplikace SQL Server Management Studio nebo Transact-SQL. Tato max worker threads možnost konfiguruje počet pracovních vláken, která jsou k dispozici po celém serveru SQL pro zpracování požadavků na dotazy, přihlášení, odhlášení a podobných aplikačních požadavků.

SQL Server používá nativní služby vláken operačních systémů k zajištění následujících podmínek:

  • Jedno nebo více vláken současně podporuje každou síť, kterou SQL Server podporuje.
  • Jedno vlákno zpracovává kontrolní body databáze.
  • Fond vláken zpracovává všechny uživatele.

Výchozí hodnota je max worker threads 0. Sql Server tak automaticky nakonfiguruje počet pracovních vláken při spuštění. Výchozí nastavení je nejvhodnější pro většinu systémů. V závislosti na konfiguraci systému ale nastavení max worker threads na konkrétní hodnotu někdy zvyšuje výkon.

Omezení

Skutečný počet požadavků na dotazy může překročit hodnotu nastavenou v max worker threads, v takovém případě SQL Server seskupuje vlákna pracovníka, aby další dostupné vlákno pracovníka mohlo zpracovat požadavek. Pracovní vlákno je přiřazeno pouze k aktivním požadavkům a uvolní se, jakmile je požadavek obsloužen. K tomu dochází i v případě, že relace nebo připojení uživatele, na kterém byl požadavek proveden, zůstane otevřená.

Možnost max worker threads konfigurace serveru neomezuje všechna vlákna, která se můžou ve stroji vytvořit. Systémová vlákna požadovaná pro úlohy, jako jsou LazyWriter, Checkpoint, Log Writer, Service Broker, Lock Manager nebo jiné, jsou vytvářeny mimo tento limit. Skupiny dostupnosti používají některá pracovní vlákna z max worker thread limit, ale navíc používají i systémová vlákna (viz Využití vláken podle skupin dostupnosti). Pokud je překročen počet nakonfigurovaných vláken, následující dotaz poskytuje informace o systémových úlohách, které vytvořila další vlákna.

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;

Doporučení

Tato možnost je pokročilá a měla by být změněna pouze zkušeným odborníkem na databázi.

Pokud máte podezření, že došlo k problému s výkonem, pravděpodobně se netýká dostupnosti pracovních vláken. Příčina pravděpodobněji souvisí s aktivitami, které zabírají pracovní vlákna a neuvolňují je. Mezi příklady patří dlouhotrvající dotazy nebo kritické body v systému (vstupně-výstupní operace, blokování, západky, čekání v síti), které způsobují dlouho čekající dotazy. Než změníte nastavení maximálního počtu pracovních vláken, je nejlepší najít hlavní příčinu problému s výkonem. Další informace o posouzení výkonu najdete v tématu Monitorování a ladění výkonu.

Sdružování vláken pomáhá optimalizovat výkon při připojení velkého počtu klientů k serveru. Pro každý požadavek dotazu se obvykle vytvoří samostatné vlákno operačního systému. Při použití stovek připojení k serveru ale může použití jednoho vlákna na požadavek na dotaz spotřebovávat velké množství systémových prostředků. Tato max worker threads možnost umožňuje SQL Serveru vytvořit fond pracovních vláken, aby mohl obsluhovat větší počet požadavků na dotazy, což zvyšuje výkon.

Následující tabulka ukazuje automaticky nakonfigurovaný počet maximálních pracovních vláken (pokud je hodnota nastavena na 0) na základě různých kombinací logických procesorů, architektury počítače a verzí SQL Serveru pomocí vzorce: Výchozí maximální počet pracovních procesů + ((logické procesory - 4) * Pracovní procesy na procesor).

Počet logických procesorů 32bitový počítač (až SQL Server 2014 (12.x)) 64bitový počítač (až SQL Server 2016 (13.x) SP1) 64bitový počítač (počínaje SQL Serverem 2016 (13.x) SP2 a SQL Serverem 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

Až do SQL Server 2016 (13.x) včetně aktualizace Service Pack 1 závisí počet pracovníků na procesor pouze na architektuře (32bitová nebo 64bitová):

Počet logických procesorů počítač 32-bitový 64bitový počítač
<= 4 256 512
> 4 256 + ((logické procesory - 4) * 8) 512 †† + ((logické procesory - 4) * 16)

Od verze SQL Server 2016 (13.x) už nejde SQL Server nainstalovat do 32bitového operačního systému. 32bitové hodnoty počítačů jsou uvedeny pro pomoc zákazníkům se systémem SQL Server 2014 (12.x) a starším. Doporučujeme 1 024 jako maximální počet pracovních vláken pro instanci SQL Serveru, která běží na 32bitovém počítači.

†† Počínaje SQL Serverem 2017 (14.x) je výchozí hodnota Max Worker vydělena 2 pro počítače s méně než 2 GB paměti.

Počínaje SQL Serverem 2016 (13.x) SP2 a SQL Serverem 2017 (14.x) závisí pracovní procesy na procesor na architekturu a počet procesorů (mezi 4 a 64 nebo většími než 64):

Počet logických procesorů počítač 32-bitový 64bitový počítač
<= 4 256 512
> 4 a <= 64 256 + ((logické procesory - 4) * 8) 512 †† + ((logické procesory - 4) * 16)
> 64 256 + ((logické procesory - 4) * 32) 512 †† + ((logické procesory - 4) * 32)

Od verze SQL Server 2016 (13.x) už nejde SQL Server nainstalovat do 32bitového operačního systému. 32bitové hodnoty počítačů jsou uvedeny pro pomoc zákazníkům se systémem SQL Server 2014 (12.x) a starším. Doporučujeme 1 024 jako maximální počet pracovních vláken pro instanci SQL Serveru, která běží na 32bitovém počítači.

†† Počínaje SQL Serverem 2017 (14.x) je výchozí hodnota Max Worker vydělena 2 pro počítače s méně než 2 GB paměti.

Návod

Další informace o používání více než 64 logických procesorů najdete v tématu Osvědčené postupy pro spouštění SQL Serveru na počítačích s více než 64 procesory.

Pokud jsou všechna pracovní vlákna aktivní s dlouhotrvajícími dotazy, SQL Server může vypadat jako nereagující, dokud se pracovní vlákno nedokončí a nebude k dispozici. I když toto chování není vadou, může být někdy nežádoucí. Pokud se zdá, že proces nereaguje a není možné zpracovat žádné nové dotazy, připojte se k SQL Serveru pomocí vyhrazeného připojení správce (DAC) a proces ukončete. Chcete-li tomu zabránit, zvyšte počet maximálních pracovních vláken.

Povolení

Ve výchozím nastavení se oprávnění ke spuštění sp_configure bez parametrů nebo pouze s prvním parametrem udělují všem uživatelům. Pokud chcete spustit sp_configure s oběma parametry pro změnu možnosti konfigurace nebo spuštění příkazu RECONFIGURE, musí být uživateli uděleno oprávnění na úrovni serveru ALTER SETTINGS. Oprávnění ALTER SETTINGS implicitně uchovává správce systému a správce serveru pevné role serveru.

Použití aplikace SQL Server Management Studio (SSMS)

  1. V Průzkumníku objektů klikněte pravým tlačítkem na server a vyberte Vlastnosti.

  2. Vyberte uzel Procesory.

  3. Do pole Max worker threads (Maximální počet pracovních vláken ) zadejte nebo vyberte hodnotu od 128 do 65 535.

Návod

max worker threads Pomocí možnosti můžete nakonfigurovat počet pracovních vláken dostupných pro procesy SQL Serveru. Výchozí nastavení max worker threads pro většinu systémů je nejvhodnější. V závislosti na konfiguraci systému ale nastavení max worker threads na menší hodnotu někdy zvyšuje výkon. Další informace najdete v části Doporučení v tomto článku.

Použijte Transact-SQL

  1. Připojte se k databázovému stroji.

  2. Na panelu Standard vyberte Nový dotaz.

  3. Zkopírujte a vložte následující příklad do okna dotazu a vyberte Spustit. Tento příklad ukazuje, jak použít sp_configure ke konfiguraci max worker threads možnosti 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
    

Změna se projeví okamžitě po provedení příkazu RECONFIGURE, aniž by bylo nutné restartovat databázový stroj.