Soft-NUMA (SQL Server)
van toepassing op:SQL Server-
Moderne processors hebben meerdere kernen per socket. Elke socket wordt weergegeven, meestal als één NUMA-knooppunt. De SQL Server-database-engine partitioneert verschillende interne structuren en partitioneert servicethreads per NUMA-knooppunt. Met processors die 10 of meer kernen per socket bevatten, verhoogt het gebruik van software NUMA om hardware NUMA-knooppunten te splitsen over het algemeen de schaalbaarheid en prestaties. Vóór SQL Server 2014 (12.x) SP2 vereiste op software gebaseerde NUMA (soft-NUMA) dat u het register moest bewerken om een knooppuntconfiguratieaffiniteitsmasker toe te voegen, en werd het op hostniveau geconfigureerd, in plaats van per instantie. Vanaf SQL Server 2014 (12.x) SP2 en SQL Server 2016 (13.x) wordt soft-NUMA automatisch geconfigureerd op database-exemplaarniveau wanneer de SQL Server Database Engine-service wordt gestart.
Hot-add-processors worden niet ondersteund door soft-NUMA.
Automatische soft-NUMA
Met SQL Server 2016 (13.x) worden bij het opstarten automatisch soft-NUMA-knooppunten gemaakt wanneer de SQL Server Database Engine meer dan acht fysieke kernen per NUMA-knooppunt of socket detecteert. Gelijktijdige SMT-processorkernen (multithreading) worden niet gedifferentieerd bij het tellen van fysieke kernen in een knooppunt. Wanneer het gedetecteerde aantal fysieke kernen meer dan acht per socket is, maakt de SQL Server Database Engine soft-NUMA-knooppunten die idealiter acht kernen bevatten, maar maximaal vier of maximaal acht fysieke kernen per knooppunt kunnen bevatten. De grootte van het hardwareknooppunt kan worden beperkt door een CPU-affiniteitsmasker. Het aantal NUMA-knooppunten overschrijdt nooit het maximum aantal ondersteunde NUMA-knooppunten.
U kunt soft-NUMA uitschakelen of opnieuw inschakelen met behulp van de instructie ALTER SERVER CONFIGURATION met het argument SET SOFTNUMA
. Als u de waarde van deze instelling wijzigt, moet de database-engine opnieuw worden opgestart.
In de onderstaande afbeelding ziet u het type informatie met betrekking tot soft-NUMA dat wordt weergegeven in het foutenlogboek van SQL Server, wanneer SQL Server hardware NUMA-knooppunten detecteert met meer dan acht fysieke kernen per elk knooppunt of socket.
2016-11-14 13:39:43.17 Server SQL Server detected 2 sockets with 12 cores per socket and 24 logical processors per socket, 48 total logical processors; using 48 logical processors based on SQL Server licensing. This is an informational message; no user action is required.
2016-11-14 13:39:43.35 Server Automatic soft-NUMA was enabled because SQL Server has detected hardware NUMA nodes with greater than 8 physical cores.
2016-11-14 13:39:43.63 Server Node configuration: node 0: CPU mask: 0x0000000000555555:0 Active CPU mask: 0x0000000000555555:0. This message provides a description of the NUMA configuration for this computer. This is an informational message only. No user action is required.
2016-11-14 13:39:43.63 Server Node configuration: node 1: CPU mask: 0x0000000000aaaaaa:0 Active CPU mask: 0x0000000000aaaaaa:0. This message provides a description of the NUMA configuration for this computer. This is an informational message only. No user action is required.
2016-11-14 13:39:43.63 Server Node configuration: node 2: CPU mask: 0x0000555555000000:0 Active CPU mask: 0x0000555555000000:0. This message provides a description of the NUMA configuration for this computer. This is an informational message only. No user action is required.
2016-11-14 13:39:43.63 Server Node configuration: node 3: CPU mask: 0x0000aaaaaa000000:0 Active CPU mask: 0x0000aaaaaa000000:0. This message provides a description of the NUMA configuration for this computer. This is an informational message only. No user action is required.
Notitie
Vanaf SQL Server 2014 (12.x) SP 2 gebruikt u Trace Flag 8079 zodat SQL Server automatische soft-NUMA kan gebruiken. Vanaf SQL Server 2016 (13.x) wordt dit gedrag beheerd door de engine en heeft traceringsvlag 8079 geen effect. Zie DBCC TRACEON - Trace flagsvoor meer informatie.
Handmatige soft-NUMA
Als u SQL Server handmatig wilt configureren voor het gebruik van soft-NUMA, schakelt u automatische soft-NUMA uit en bewerkt u het register om een affiniteitsmasker voor knooppuntconfiguratie toe te voegen. Wanneer u deze methode gebruikt, kan het soft-NUMA-masker worden opgegeven als een binaire vermelding, DWORD (hexadecimaal of decimaal) of QWORD (hexadecimaal of decimaal) in het register. Als u meer dan de eerste 32 CPU's wilt configureren, gebruikt u QWORD- of BINAIRE registerwaarden (QWORD-waarden kunnen niet worden gebruikt vóór SQL Server 2012 (11.x)). Nadat u het register hebt gewijzigd, moet u de database-engine opnieuw starten om de soft-NUMA-configuratie van kracht te laten worden.
Tip
CPU's worden genummerd vanaf 0
.
Waarschuwing
Het onjuist bewerken van het register kan uw systeem ernstig beschadigen. Voordat u wijzigingen aanbrengt in het register, raden we u aan een back-up te maken van waardegegevens op de computer.
Bekijk het voorbeeld van een computer met acht CPU's die geen hardware NUMA hebben. Er zijn drie soft-NUMA-knooppunten geconfigureerd.
Database Engine-exemplaar A is geconfigureerd voor het gebruik van CPU's 0 tot en met 3. Een tweede exemplaar van de database-engine wordt geïnstalleerd en geconfigureerd voor het gebruik van CPU's 4 tot en met 7. Het voorbeeld kan visueel worden weergegeven als:
CPUs 0 1 2 3 4 5 6 7
Soft-NUMA <-N0-><-N1-><----N2---->
SQL Server <instance A><instance B>
Instantie A, met aanzienlijke I/O-activiteit, heeft nu twee I/O-threads en één luie schrijver thread. Instantie B, die processorintensieve bewerkingen uitvoert, heeft slechts één I/O-thread en één luie schrijfthread. Verschillende hoeveelheden geheugen kunnen worden toegewezen aan de exemplaren, maar in tegenstelling tot hardware NUMA ontvangen ze allebei geheugen van hetzelfde geheugenblok van het besturingssysteem en er is geen geheugen-naar-processoraffiniteit.
De luie schrijverthread is gekoppeld aan de SQLOS-weergave van de fysieke NUMA-geheugenknooppunten. Daarom is het aantal luie schrijfthreads dat wordt aangemaakt gelijk aan het aantal fysieke NUMA-knooppunten dat door de hardware wordt gepresenteerd. Zie voor meer informatie Hoe het werkt: Soft NUMA, I/O Completion Thread, Lazy Writer Workers en Memory Nodes.
Notitie
De soft-NUMA- registersleutels worden niet gekopieerd wanneer u een upgrade uitvoert van een exemplaar van SQL Server.
Het CPU-affiniteitsmasker instellen
Voer de volgende instructie uit op exemplaar A om deze te configureren voor het gebruik van CPU's 0, 1, 2 en 3 door het CPU-affiniteitsmasker in te stellen:
ALTER SERVER CONFIGURATION
SET PROCESS AFFINITY CPU = 0 TO 3;
Voer de volgende instructie uit op exemplaar B om deze te configureren voor het gebruik van CPU's 4, 5, 6 en 7 door het MASKER voor CPU-affiniteit in te stellen:
ALTER SERVER CONFIGURATION
SET PROCESS AFFINITY CPU = 4 TO 7;
Soft-NUMA-knooppunten koppelen aan CPU's
Voeg met behulp van het Register-editorprogramma (regedit.exe
) de volgende registersleutels toe om soft-NUMA-knooppunt 0 toe te wijzen aan CPU's 0 en 1, soft-NUMA-knooppunt 1 aan CPU's 2 en 3, en soft-NUMA-knooppunt 2 aan CPU's 4, 5, 6 en 7.
Tip
Als u CPU's 60 tot en met 63 wilt opgeven, gebruikt u een QWORD-waarde van F000000000000000
of een BINAIRE waarde van 1111000000000000000000000000000000000000000000000000000000000000
.
In het volgende voorbeeld wordt ervan uitgegaan dat u een DL580 G9-server hebt, met 18 kernen per socket (in vier sockets) en dat elke socket zich in een eigen K-groep bevindt. Een soft-NUMA-configuratie die u kunt maken, ziet er ongeveer als volgt uit: zes kernen per knooppunt, drie knooppunten per groep, vier groepen.
Voorbeeld voor een SQL Server-exemplaar met meerdere K-Groups | Type | Waardenaam | Waardegegevens |
---|---|---|---|
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\130\NodeConfiguration\Node0 |
DWORD | CPUMask |
0x3f |
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\130\NodeConfiguration\Node0 |
DWORD | Group |
0 |
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\130\NodeConfiguration\Node1 |
DWORD | CPUMask |
0x0fc0 |
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\130\NodeConfiguration\Node1 |
DWORD | Group |
0 |
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\130\NodeConfiguration\Node2 |
DWORD | CPUMask |
0x3f000 |
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\130\NodeConfiguration\Node2 |
DWORD | Group |
0 |
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\130\NodeConfiguration\Node3 |
DWORD | CPUMask |
0x3f |
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\130\NodeConfiguration\Node3 |
DWORD | Group |
1 |
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\130\NodeConfiguration\Node4 |
DWORD | CPUMask |
0x0fc0 |
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\130\NodeConfiguration\Node4 |
DWORD | Group |
1 |
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\130\NodeConfiguration\Node5 |
DWORD | CPUMask |
0x3f000 |
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\130\NodeConfiguration\Node5 |
DWORD | Group |
1 |
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\130\NodeConfiguration\Node6 |
DWORD | CPUMask |
0x3f |
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\130\NodeConfiguration\Node6 |
DWORD | Group |
2 |
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\130\NodeConfiguration\Node7 |
DWORD | CPUMask |
0x0fc0 |
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\130\NodeConfiguration\Node7 |
DWORD | Group |
2 |
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\130\NodeConfiguration\Node8 |
DWORD | CPUMask |
0x3f000 |
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\130\NodeConfiguration\Node8 |
DWORD | Group |
2 |
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\130\NodeConfiguration\Node9 |
DWORD | CPUMask |
0x3f |
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\130\NodeConfiguration\Node9 |
DWORD | Group |
3 |
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\130\NodeConfiguration\Node10 |
DWORD | CPUMask |
0x0fc0 |
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\130\NodeConfiguration\Node10 |
DWORD | Group |
3 |
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\130\NodeConfiguration\Node11 |
DWORD | CPUMask |
0x3f000 |
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\130\NodeConfiguration\Node11 |
DWORD | Group |
3 |
Metagegevens
U kunt de volgende DMV's gebruiken om de huidige status en configuratie van soft-NUMA weer te geven.
sp_configure (Transact-SQL): geeft de huidige waarde (
0
of1
) weer voor SOFTNUMA.sys.dm_os_sys_info (Transact-SQL): de kolommen
softnuma_configuration
ensoftnuma_configuration_desc
geven de huidige configuratiewaarden weer.
Hoewel u de actieve waarde voor automatische soft-NUMA kunt weergeven met behulp van sp_configure (Transact-SQL), kunt u de waarde ervan niet wijzigen met behulp van sp_configure
. U moet de ALTER SERVER CONFIGURATION (Transact-SQL) verklaring gebruiken met het argument SET SOFTNUMA
.