Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Van toepassing op:SQL Server
In dit artikel wordt beschreven hoe u de optie voor serverconfiguratie max worker threads in SQL Server configureert met behulp van SQL Server Management Studio of Transact-SQL. Met de max worker threads optie configureert u het aantal werkrolthreads dat beschikbaar is in SQL Server voor het verwerken van queryaanvragen, aanmelding, afmelding en vergelijkbare toepassingsaanvragen.
SQL Server maakt gebruik van de systeemeigen threadservices van de besturingssystemen om de volgende voorwaarden te garanderen:
- Een of meer threads ondersteunen tegelijkertijd elk netwerk dat door SQL Server wordt ondersteund.
- Eén thread verwerkt databasecontrolepunten.
- Een groep threads verwerkt alle gebruikers.
De standaardwaarde voor max worker threads is 0. Hierdoor kan SQL Server het aantal werkthreads bij het opstarten automatisch configureren. De standaardinstelling is het meest geschikt voor de meeste systemen. Afhankelijk van uw systeemconfiguratie verbetert het instellen max worker threads van een specifieke waarde soms de prestaties.
Beperkingen
Het werkelijke aantal queryaanvragen kan de waarde overschrijden die is ingesteld in max worker threads, in welk geval SQL Server de worker threads groepeert, zodat de volgende beschikbare worker thread de aanvraag kan verwerken. Een werkdraad wordt alleen toegewezen aan actieve aanvragen en wordt vrijgegeven zodra de aanvraag is afgehandeld. Dit gebeurt zelfs als de gebruikerssessie/verbinding waarop de aanvraag is ingediend, open blijft.
De max worker threads serverconfiguratie-optie beperkt niet alle threads die mogelijk in de engine worden gegenereerd. Systeemthreads die vereist zijn voor taken zoals de LazyWriter, de Checkpoint, de Logschrijver, de Service Broker, de Vergrendelingsbeheer en anderen worden buiten deze limiet geïnitialiseerd. Beschikbaarheidsgroepen maken gebruik van enkele werkrolthreads vanuit de max worker thread limit maar ook systeemthreads (zie Threadgebruik per beschikbaarheidsgroep). Als het aantal geconfigureerde threads wordt overschreden, geeft het volgende query informatie over de systeemtaken die de extra threads hebben gegenereerd.
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;
Aanbevelingen
Deze optie is een geavanceerde optie en moet alleen worden gewijzigd door een ervaren databaseprofessional.
Als u vermoedt dat er een prestatieprobleem is, is het waarschijnlijk niet de beschikbaarheid van werkrolthreads. De oorzaak houdt waarschijnlijk verband met activiteiten die de worker threads bezighouden en niet vrijgeven. Voorbeelden hiervan zijn langlopende query's of knelpunten in het systeem (I/O, blokkeren, wachten op vergrendelingen, netwerkwachttijden) die lang wachtende query's veroorzaken. Het is het beste om de oorzaak van een prestatieprobleem vast te stellen voordat u de instelling voor het maximale aantal werkthreads wijzigt. Zie Bewaken en afstemmen op prestaties voor meer informatie over het beoordelen van prestaties.
Threadpooling helpt de prestaties te optimaliseren wanneer een groot aantal clients verbinding maakt met de server. Normaal gesproken wordt voor elke queryaanvraag een afzonderlijke thread van het besturingssysteem gemaakt. Met honderden verbindingen met de server kan het gebruik van één thread per queryaanvraag echter grote hoeveelheden systeembronnen verbruiken. Met de max worker threads optie kan SQL Server een pool met werkthreads maken om een groter aantal queryaanvragen te verwerken, waardoor de prestaties worden verbeterd.
In de volgende tabel ziet u het automatisch geconfigureerde maximale aantal werkthreads (wanneer de waarde is ingesteld op 0), op basis van verschillende combinaties van logische CPU's, computerarchitectuur en versies van SQL Server, met behulp van de formule: Default Max Workers + ((logische CPU's - 4) * Worker per CPU).
| Aantal logische CPU's | 32-bit computer (tot en met SQL Server 2014 (12.x)) | 64-bits computer (maximaal SQL Server 2016 (13.x) SP1) | 64-bits computer (te beginnen met SQL Server 2016 (13.x) SP2 en 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 |
Tot SQL Server 2016 (13.x) met Service Pack 1 zijn de workers per CPU alleen afhankelijk van de architectuur (32-bits of 64-bits):
| Aantal logische CPU's | 32-bits computer † | 64-bits computer |
|---|---|---|
| <= 4 | 256 | 512 |
| > 4 | 256 + ((logische CPU's - 4) * 8) | 512 †† + ((logische CPU's - 4) * 16) |
† Vanaf SQL Server 2016 (13.x) kan SQL Server niet meer worden geïnstalleerd op een 32-bits besturingssysteem. 32-bits computerwaarden worden vermeld voor de hulp van klanten met SQL Server 2014 (12.x) en eerder. We raden 1024 aan als het maximum aantal werkthreads voor een exemplaar van SQL Server dat wordt uitgevoerd op een 32-bits computer.
†† Vanaf SQL Server 2017 (14.x) wordt de standaardwaarde max Workers gedeeld door 2 voor computers met minder dan 2 GB geheugen.
Vanaf SQL Server 2016 (13.x) SP2 en SQL Server 2017 (14.x) zijn de workers per CPU afhankelijk van de architectuur en het aantal processors (tussen 4 en 64, of groter dan 64):
| Aantal logische CPU's | 32-bits computer † | 64-bits computer |
|---|---|---|
| <= 4 | 256 | 512 |
| > 4 en <= 64 | 256 + ((logische CPU's - 4) * 8) | 512 †† + ((logische CPU's - 4) * 16) |
| > 64 | 256 + ((logische CPU's - 4) * 32) | 512 †† + ((logische CPU's - 4) * 32) |
† Vanaf SQL Server 2016 (13.x) kan SQL Server niet meer worden geïnstalleerd op een 32-bits besturingssysteem. 32-bits computerwaarden worden vermeld voor de hulp van klanten met SQL Server 2014 (12.x) en eerder. We raden 1024 aan als het maximum aantal werkthreads voor een exemplaar van SQL Server dat wordt uitgevoerd op een 32-bits computer.
†† Vanaf SQL Server 2017 (14.x) wordt de standaardwaarde max Workers gedeeld door 2 voor computers met minder dan 2 GB geheugen.
Aanbeveling
Zie Aanbevolen procedures voor het uitvoeren van SQL Server op computers met meer dan 64 CPU's voor meer informatie over het gebruik van meer dan 64 logische CPU's.
Wanneer alle werkrolthreads actief zijn met langlopende query's, reageert SQL Server mogelijk niet meer totdat een werkrolthread is voltooid en beschikbaar is. Hoewel dit gedrag geen defect is, kan het soms ongewenst zijn. Als een proces niet reageert en er geen nieuwe query's kunnen worden verwerkt, maakt u verbinding met SQL Server met behulp van de toegewezen administratorverbinding (DAC) en beëindigt u het proces. U kunt dit voorkomen door het aantal maximale werkthreads te verhogen.
Machtigingen
Voer machtigingen uit op sp_configure zonder parameters of met alleen de eerste parameter worden standaard aan alle gebruikers verleend. Als u sp_configure wilt uitvoeren met beide parameters om een configuratieoptie te wijzigen of om de RECONFIGURE-instructie uit te voeren, moet aan een gebruiker de machtiging ALTER SETTINGS serverniveau worden verleend. De machtiging ALTER SETTINGS wordt impliciet gehouden door de vaste serverrollen sysadmin en serverbeheerder.
SQL Server Management Studio (SSMS) gebruiken
Klik in Objectverkenner met de rechtermuisknop op een server en selecteer Eigenschappen.
Selecteer het knooppunt Processors .
Typ of selecteer een waarde van 128 tot en met 65.535 in het vak Maximale werkrolthreads .
Aanbeveling
Gebruik de max worker threads optie om het aantal werkthreads te configureren dat beschikbaar is voor SQL Server-processen. De standaardinstelling voor max worker threads is het meest geschikt voor de meeste systemen. Afhankelijk van uw systeemconfiguratie verbetert het instellen max worker threads op een kleinere waarde soms de prestaties. Zie de sectie Aanbevelingen in dit artikel voor meer informatie.
Gebruik Transact-SQL
Maak verbinding met de database-engine.
Selecteer Nieuwe query in de standaardbalk.
Kopieer en plak het volgende voorbeeld in het queryvenster en selecteer uitvoeren. In dit voorbeeld ziet u hoe sp_configure te gebruiken om de
max worker threadsoptie naar900te configureren.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
De wijziging wordt onmiddellijk van kracht na het uitvoeren van RECONFIGURE, zonder dat de database-engine opnieuw hoeft te worden opgestart.