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
Opmerking
Deze functie wordt verwijderd in een toekomstige versie van SQL Server. Vermijd het gebruik van deze functie in nieuwe ontwikkelwerkzaamheden en plan om toepassingen te wijzigen die momenteel gebruikmaken van deze functie. Gebruik in plaats daarvan ALTER SERVER CONFIGURATION .
Windows verplaatst soms procesthreads tussen verschillende processors om multitasking uit te voeren. Hoewel deze activiteit efficiënt is vanuit een besturingssysteem, kan deze activiteit de prestaties van SQL Server verminderen onder zware systeembelastingen, omdat elke processorcache herhaaldelijk opnieuw wordt geladen met gegevens. Het toewijzen van processors aan specifieke threads kan de prestaties onder deze omstandigheden verbeteren door het elimineren van processorherladingen; een dergelijke koppeling tussen een thread en een processor wordt processoraffiniteit genoemd.
SQL Server ondersteunt processoraffiniteit met twee opties voor affiniteitsmasker: affinity mask (ook wel bekend als CPU-affiniteitsmasker) en affinity I/O mask. Zie Serverconfiguratie: I/O-masker voor affiniteit voor meer informatie over de affinity I/O mask optionserverconfiguratie. Ondersteuning voor CPU- en I/O-affiniteit voor servers met 33 tot 64 processors vereist dat u ook de configuratieopties voor affiniteit64en affiniteit64 I/O-maskerserver gebruikt.
Opmerking
Ondersteuning voor affiniteit voor servers met 33 tot 64 processors is alleen beschikbaar op 64-bits besturingssystemen.
De affinity mask optie, die bestond in eerdere versies van SQL Server, bepaalt dynamisch de CPU-affiniteit.
In SQL Server kan de affinity mask optie worden geconfigureerd zonder dat het exemplaar van SQL Server opnieuw hoeft te worden opgestart. Wanneer u deze sp_configure, gebruikt, moet u een RECONFIGURE configuratieoptie uitvoeren of RECONFIGURE WITH OVERRIDE na het instellen van een configuratieoptie. Wanneer u SQL Server Express gebruikt, moet de optie opnieuw worden opgestart wanneer u de affinity mask optie wijzigt.
Wijzigingen in de affiniteitsmaskers vinden dynamisch plaats, waardoor de CPU-planners op aanvraag kunnen worden opgestart en afgesloten die procesthreads in SQL Server binden. Dit kan gebeuren als de voorwaarden op de server veranderen. Als er bijvoorbeeld een nieuw exemplaar van SQL Server wordt toegevoegd aan de server, kan het nodig zijn om aanpassingen aan te brengen in de affinity mask optie om de processorbelasting opnieuw te distribueren.
Voor wijzigingen in de affiniteitsbitmaskers is SQL Server vereist om een nieuwe CPU-planner in te schakelen en de bestaande CPU-planner uit te schakelen. Nieuwe batches kunnen vervolgens worden verwerkt op de nieuwe of resterende planners.
Als u een nieuwe CPU-planner wilt starten, maakt SQL Server een nieuwe planner en voegt u deze toe aan de lijst met standaardplanners. De nieuwe scheduler wordt alleen beschouwd voor de nieuwe binnenkomende batches. Huidige batches blijven op dezelfde scheduler worden uitgevoerd. De werknemers migreren naar de nieuwe planner wanneer ze vrijmaken of wanneer er nieuwe werknemers worden gemaakt.
Voor het afsluiten van een planner zijn alle batches op de planner vereist om hun activiteiten te voltooien en af te sluiten. Een planner die wordt afgesloten, wordt gemarkeerd als offline, zodat er geen nieuwe batch wordt gepland.
Of u nu een nieuwe planner toevoegt of verwijdert, de permanente systeemtaken zoals vergrendelingsmonitor, controlepunt, systeemtaakthread (verwerking van DTC) en signaalproces blijven actief op de planner terwijl de server operationeel is. Deze permanente systeemtaken worden niet dynamisch gemigreerd. Als u de processorbelasting voor deze systeemtaken voor schedulers opnieuw wilt distribueren, moet u het SQL Server-exemplaar opnieuw starten. Als SQL Server een scheduler probeert af te sluiten die is gekoppeld aan een permanente systeemtaak, blijft de taak worden uitgevoerd op de offlineplanner (geen migratie). Deze scheduler is gebonden aan de processors in het gewijzigde affiniteitsmasker en laadt geen belasting op de processor waarmee deze vóór de wijziging was gebonden. Als u extra offlineplanners hebt, mag dit niet van invloed zijn op de belasting van het systeem. Als dit het geval is, moet de databaseserver opnieuw worden opgestart om deze taken opnieuw te configureren op de planners die beschikbaar zijn met het gewijzigde affiniteitsmasker.
Stel de affinity mask waarden en affinity I/O mask configuratiewaarden van SQL Server niet in om dezelfde CPU's te gebruiken. De prestaties kunnen lijden als u ervoor kiest om een processor te binden voor zowel SQL Server-werkthreadplanning als voor I/O-verwerking. Zorg er daarom voor dat de configuratiewaarden niet zijn ingesteld voor dezelfde processor. Dezelfde aanbeveling is van toepassing op de affinity64 mask en affinity64 I/O mask. Om ervoor te zorgen dat de affinity mask overeenkomsten niet overlappen affinity I/O mask, controleert de opdracht RECONFIGURE of de normale CPU- en I/O-affiniteit elkaar wederzijds uitsluiten. Zo niet, dan wordt er een foutbericht gerapporteerd aan de clientsessie en in het SQL Server-foutenlogboek, waarmee wordt aangegeven dat een dergelijke instelling niet wordt aanbevolen.
Msg 5834, Level 16, State 1, Line 1
The affinity mask specified conflicts with the IO affinity mask specified. Use the override option to force this configuration.
Met actieve RECONFIGURE WITH OVERRIDE opties kunnen CPU- en I/O-affiniteiten elkaar overlappen en elkaar niet uitsluiten.
De I/O-affiniteitstaken (zoals luie schrijver en logboekschrijver) worden rechtstreeks beïnvloed door de affinity I/O mask. Als de taken voor luie schrijver en logboekschrijver niet gebonden zijn, volgen ze dezelfde regels die zijn gedefinieerd voor de andere permanente taken, zoals vergrendelingsmonitor of controlepunt.
Als u een affiniteitsmasker opgeeft dat probeert toe te wijzen aan een niet-bestaande CPU, rapporteert de RECONFIGURE opdracht een foutbericht aan zowel de clientsessie als het SQL Server-foutenlogboek. Het gebruik van de RECONFIGURE WITH OVERRIDE optie heeft in dit geval geen effect en dezelfde configuratiefout wordt opnieuw gerapporteerd.
U kunt ook SQL Server-activiteit uitsluiten van specifieke workloadtoewijzingen door het Windows-besturingssysteem. Als u een bit instelt die een processor 1vertegenwoordigt, wordt die processor geselecteerd door de SQL Server Database Engine voor threadtoewijzing. Wanneer u instelt op 0 (de standaardinstellingaffinity mask), stellen de Microsoft Windows-planningsalgoritmen de affiniteit van de thread in. Wanneer u instelt affinity mask op een andere waarde dan nul, interpreteert SQL Server-affiniteit de waarde als een bitmasker dat aangeeft dat deze processors in aanmerking komen voor selectie.
Door SQL Server-threads te scheiden van uitvoering op bepaalde processors, kan Microsoft Windows de verwerking van processen die specifiek zijn voor Windows beter evalueren. Op een 8-CPU-server met twee exemplaren van SQL Server (exemplaar A en B) kan de systeembeheerder bijvoorbeeld de affinity mask optie gebruiken om de eerste set van vier CPU's toe te wijzen aan exemplaar A en de tweede set van 4 op exemplaar B. Als u meer dan 32 processors wilt configureren, stelt u zowel de affinity mask als de affinity64 mask. De waarden voor affinity mask zijn als volgt:
| Bytes in masker | Aantal CPU's |
|---|---|
| 1-byte | Maximaal 8 CPU's |
| 2 bytes | Maximaal 16 CPU's |
| 3-byte | Maximaal 24 CPU's |
| 4 bytes | Maximaal 32 CPU's |
Als u meer dan 32 CPU's wilt dekken, configureert u een 4-byte affinity mask voor de eerste 32 CPU's en maximaal een 4-bytes affinity64 mask voor de resterende CPU's.
Omdat het instellen van sql Server-processoraffiniteit een gespecialiseerde bewerking is, gebruikt u deze alleen wanneer dat nodig is. In de meeste gevallen biedt de standaardaffiniteit met Windows de beste prestaties. Houd rekening met de CPU-vereisten voor andere toepassingen bij het instellen van de affiniteitsmaskers. Zie de documentatie van uw Windows-besturingssysteem voor meer informatie.
Opmerking
U kunt Procesmonitor gebruiken om het gebruik van afzonderlijke processoren weer te geven en te analyseren.
Wanneer u de affinity I/O mask optie opgeeft, moet u deze gebruiken met de affinity mask configuratieoptie. Zoals eerder vermeld, moet u echter niet dezelfde CPU inschakelen in zowel de affinity mask switch als de affinity I/O mask optie. De bits die overeenkomen met elke CPU moeten een van deze drie statussen hebben:
-
0in zowel deaffinity maskoptie als deaffinity I/O maskoptie. -
1in deaffinity maskoptie en0in deaffinity I/O maskoptie. -
0in deaffinity maskoptie en1in deaffinity I/O maskoptie.
Waarschuwing
Configureer geen CPU-affiniteit in het Windows-besturingssysteem en configureer ook de affinity mask in SQL Server. Deze instellingen proberen hetzelfde resultaat te bereiken en als de configuraties inconsistent zijn, hebt u mogelijk onvoorspelbare resultaten. SQL Server CPU-affiniteit is het beste geconfigureerd met behulp van de sp_configure optie in SQL Server.
Voorbeelden
affinity mask Als processors 1, 2 en 5 zijn geselecteerd als beschikbaar met bits in posities 1, 2 en 5 1 ingesteld op en bits 0, 3, 4, 6 en 7 0moet een hexadecimale waarde van 0x26 (het decimale equivalent van38) worden gebruikt. De bitposities van rechts naar links nummeren.
EXEC sp_configure 'show advanced options', 1;
RECONFIGURE;
GO
EXEC sp_configure 'affinity mask', 38;
RECONFIGURE;
GO
In de volgende tabel ziet u affinity mask waarden voor een 8-CPU-systeem.
| Decimale waarde | Binair bitmasker | SQL Server-threads op processors toestaan |
|---|---|---|
1 |
00000001 |
0 |
3 |
00000011 |
0 en 1 |
7 |
00000111 |
0, 1 en 2 |
15 |
00001111 |
0, 1, 2 en 3 |
31 |
00011111 |
0, 1, 2, 3 en 4 |
63 |
00111111 |
0, 1, 2, 3, 4 en 5 |
127 |
01111111 |
0, 1, 2, 3, 4, 5 en 6 |
255 |
11111111 |
0, 1, 2, 3, 4, 5, 6 en 7 |
De affinity mask optie is een geavanceerde optie. Als u de door het sp_configure systeem opgeslagen procedure gebruikt om de instelling te wijzigen, kunt u alleen wijzigen affinity mask wanneer show advanced options deze is ingesteld 1op . Nadat de opdracht Transact-SQL RECONFIGURE is uitgevoerd, wordt de nieuwe instelling onmiddellijk van kracht zonder dat het SQL Server-exemplaar opnieuw hoeft te worden opgestart.
Niet-uniforme geheugentoegang (NUMA)
Wanneer u hardwaregebaseerde niet-uniforme geheugentoegang (NUMA) gebruikt en de affinity mask set is ingesteld, wordt elke scheduler in een knooppunt gebonden aan zijn eigen CPU. Wanneer de affinity mask planning niet is ingesteld, is elke planner gebonden aan de groep CPU's binnen het NUMA-knooppunt en kan een planner die is toegewezen aan NUMA-knooppunt N1 , werk plannen op elke CPU in het knooppunt, maar niet op CPU's die zijn gekoppeld aan een ander knooppunt.
Elke bewerking die wordt uitgevoerd op één NUMA-knooppunt, kan alleen bufferpagina's van dat knooppunt gebruiken. Wanneer een bewerking parallel wordt uitgevoerd op CPU's vanaf meerdere knooppunten, kan het geheugen worden gebruikt vanuit elk knooppunt dat hierbij betrokken is.
Licentieproblemen
Dynamische affiniteit wordt nauw beperkt door CPU-licenties. SQL Server staat geen configuratie van affinity mask opties toe die in strijd zijn met het licentiebeleid.
Opstarten
Als een opgegeven affiniteitsmasker in strijd is met het licentiebeleid tijdens het opstarten van SQL Server of tijdens het koppelen van de database, voltooit de enginelaag het opstartproces of de bewerking voor het bijvoegen/herstellen van de database. Vervolgens wordt de sp_configure uitvoeringswaarde voor het affiniteitsmasker opnieuw ingesteld op nul, waarbij een foutbericht wordt verzonden naar het SQL Server-foutenlogboek.
Configureren
Als een opgegeven affiniteitsmasker het licentiebeleid schendt bij het uitvoeren van Transact-SQL RECONFIGURE opdracht, wordt er een foutbericht gerapporteerd aan de clientsessie en in het SQL Server-foutenlogboek, waardoor de databasebeheerder het affiniteitsmasker opnieuw moet configureren. In dit geval wordt geen RECONFIGURE WITH OVERRIDE opdracht geaccepteerd.