Dela via


Soft-NUMA (SQL Server)

gäller för:SQL Server

Moderna processorer har flera kärnor per socket. Varje socket representeras vanligtvis som en enda NUMA-nod. SQL Server-databasmotorn partitionerar olika interna strukturer och partitionerar servicetrådar per NUMA-nod. Med processorer som innehåller 10 eller fler kärnor per socket, brukar användningen av NUMA-programvara för att dela maskinvaru-NUMA-noder öka skalbarheten och prestandan. Före SQL Server 2014 (12.x) SP2 krävde programvarubaserad NUMA (soft-NUMA) att du redigerade registret för att lägga till en nodkonfigurationstillhörighetsmask och konfigurerades på värdnivå i stället för per instans. Från och med SQL Server 2014 (12.x) SP2 och SQL Server 2016 (13.x) konfigureras soft-NUMA automatiskt på databasinstansnivå när SQL Server Database Engine-tjänsten startar.

Hot-add-processorer stödjer inte soft-NUMA.

Automatisk mjuk NUMA

Med SQL Server 2016 (13.x) skapas mjuka NUMA-noder automatiskt som standard när SQL Server Database Engine identifierar fler än åtta fysiska kärnor per NUMA-nod eller socket vid start. SmT-processorskärnor (Samtidig multitrådning) skiljer sig inte åt när du räknar fysiska kärnor i en nod. När det identifierade antalet fysiska kärnor är mer än åtta per socket skapar SQL Server Database Engine mjuka NUMA-noder som helst innehåller åtta kärnor, men kan gå ner till fyra eller upp till åtta fysiska kärnor per nod. Storleken på maskinvarunoden kan begränsas av en cpu-tillhörighetsmask. Antalet NUMA-noder överskrider aldrig det maximala antalet NUMA-noder som stöds.

Du kan inaktivera eller återaktivera soft-NUMA med hjälp av instruktionen ALTER SERVER CONFIGURATION med argumentet SET SOFTNUMA. Om du ändrar värdet för den här inställningen måste databasmotorn startas om för att börja gälla.

Bilden nedan visar den typ av information om soft-NUMA som visas i SQL Server-felloggen, när SQL Server identifierar NUMA-maskinvarunoder med fler än åtta fysiska kärnor per nod eller 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.

Not

Från och med SQL Server 2014 (12.x) SP 2 använder du Spårningsflagga 8079 för att tillåta att SQL Server använder automatisk mjuk NUMA. Från och med SQL Server 2016 (13.x) styrs det här beteendet av motorn och spårningsflaggan 8079 har ingen effekt. Mer information finns i DBCC TRACEON – Trace Flags.

Manuell soft-NUMA

Om du vill konfigurera SQL Server manuellt för att använda soft-NUMA inaktiverar du automatisk mjuk NUMA och redigerar registret för att lägga till en nodkonfigurationstillhörighetsmask. När du använder den här metoden kan den mjuka NUMA-masken anges som en binär, DWORD-registerpost (hexadecimal eller decimal) eller QWORD-registerpost (hexadecimal eller decimal). Om du vill konfigurera fler än de första 32 processorerna använder du QWORD- eller BINARY-registervärden (QWORD-värden kan inte användas före SQL Server 2012 (11.x)). När du har modifierat registret måste du starta om databasmotorn för att soft-NUMA-konfigurationen ska börja gälla.

Tips

Processorer numreras från och med 0.

Varning

Felaktig redigering av registret kan allvarligt skada systemet. Innan du gör ändringar i registret rekommenderar vi att du säkerhetskopierar alla värdefulla data på datorn.

Tänk dig ett exempel på en dator med åtta processorer som inte har maskinvaru-NUMA. Tre soft-NUMA-noder har konfigurerats.
Database Engine-instans A har konfigurerats för att använda processorer 0 till och med 3. En andra instans av databasmotorn installeras och konfigureras för att använda processorer 4 till 7. Exemplet kan visas visuellt som:

CPUs         0  1  2  3  4  5  6  7
Soft-NUMA   <-N0-><-N1-><----N2---->
SQL Server  <instance A><instance B>

Instans A, som har betydande I/O, har nu två I/O-trådar och en lat skrivtråd. Instans B, som utför processorintensiva åtgärder, har bara en I/O-tråd och en lat skrivtråd. Olika mängder minne kan tilldelas till instanserna, men till skillnad från maskinvaran NUMA tar de båda emot minne från samma operativsystemminnesblock och det finns ingen tillhörighet mellan minne och processor.

Lazy Writer-tråden är kopplad till SQLOS syn av de fysiska NUMA-minnesnoderna. Därför, oavsett vad maskinvaran fastställer som antalet fysiska NUMA-noder, är det detta antal lata skrivtrådar som skapas. Mer information finns i How It Works: Soft NUMA, I/O Completion Thread, Lazy Writer Workers och Memory Nodes.

Not

Registernycklarna Soft-NUMA kopieras inte när du uppgraderar en instans av SQL Server.

Ange masken för CPU-affinitet

Kör följande instruktion på instans A för att konfigurera den att använda processorer 0, 1, 2 och 3 genom att ange masken för CPU-tillhörighet:

ALTER SERVER CONFIGURATION
SET PROCESS AFFINITY CPU = 0 TO 3;

Kör följande instruktion på instans B för att konfigurera den att använda processorer 4, 5, 6 och 7 genom att ange masken för CPU-tillhörighet:

ALTER SERVER CONFIGURATION
SET PROCESS AFFINITY CPU = 4 TO 7;

Mappa soft-NUMA-noder till processorer

Med hjälp av registereditorprogrammet (regedit.exe) lägger du till följande registernycklar för att mappa mjuk NUMA-nod 0 till processorer 0 och 1, mjuk-NUMA-nod 1 till processorer 2 och 3 och mjuk NUMA-nod 2 till processorer 4, 5, 6 och 7.

Tips

Om du vill ange processorer 60 till och med 63 använder du ett QWORD-värde på F000000000000000 eller ett binärt värde för 1111000000000000000000000000000000000000000000000000000000000000.

Anta i följande exempel att du har en DL580 G9-server med 18 kärnor per socket (i fyra socketar) och att varje socket finns i en egen K-grupp. En soft-NUMA-konfiguration som du kan skapa skulle se ut ungefär så här: sex kärnor per nod, tre noder per grupp, fyra grupper.

Exempel för en SQL Server-instans med flera K-grupper Typ Värdenamn Värdedata
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

Metadata

Du kan använda följande DMV:er för att visa det aktuella tillståndet och konfigurationen av soft-NUMA.

Du kan visa körningsvärdet för automatisk mjuk NUMA med sp_configure (Transact-SQL), men du kan inte ändra dess värde med hjälp av sp_configure. Du måste använda instruktionen ALTER SERVER CONFIGURATION (Transact-SQL) med argumentet SET SOFTNUMA.