Soft-NUMA (SQL Server)

Si applica a: SQL Server

I processori moderni includono più core per socket. Ogni socket è solitamente rappresentato come un unico nodo NUMA. Il motore di database di SQL Server suddivide le varie strutture interne e i thread del servizio per nodo NUMA. In caso di processori che contengono da 10 a più core per socket, l'uso di soft-NUMA (software non-uniform memory access) per suddividere i nodi NUMA hardware aumenta generalmente la scalabilità e le prestazioni. Nelle versioni precedenti a SQL Server 2014 (12.x) SP2 l'architettura NUMA basata su software (soft-NUMA) richiedeva che il Registro di sistema venisse modificato per aggiungere una maschera di affinità di configurazione dei nodi ed era configurata a livello di host e non per istanza. A partire da SQL Server 2014 (12.x) SP2 e SQL Server 2016 (13.x), l'architettura soft-NUMA viene configurata automaticamente a livello di istanza database all'avvio del servizio del motore di database di SQL Server.

L'architettura soft-NUMA non supporta processori a caldo.

Architettura soft-NUMA automatica

Con SQL Server 2016 (13.x), ogni volta che il server del motore di database di SQL Server rileva più di 8 core fisici per ogni nodo o socket NUMA all'avvio, per impostazione predefinita vengono creati automaticamente nodi soft-NUMA. I core del processore SMT (multithreading simultaneo) non vengono differenziati quando si contano i core fisici in un nodo. Quando il numero di core fisici rilevato è maggiore di 8 per ogni socket, il motore di database di SQL Server crea nodi soft-NUMA che contengono idealmente 8 core, ma che possono scendere a 5 o salire fino a 9 core logici per nodo. La dimensione del nodo hardware può essere limitata da una maschera di affinità di CPU. Il numero di nodi NUMA non supera mai il numero massimo di nodi NUMA supportati.

È possibile disabilitare o riabilitare soft-NUMA usando l'istruzione ALTER SERVER CONFIGURATION (Transact-SQL) con l'argomento SET SOFTNUMA. Per rendere effettiva la modifica del valore di questa impostazione è necessario riavviare il motore di database.

La figura seguente illustra il tipo di informazioni relative a soft-NUMA visibili nel log degli errori di SQL Server quando SQL Server rileva nodi NUMA hardware con più di 8 core fisici in ogni nodo o 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.

Nota

A partire da SQL Server 2014 (12.x) SP2, usare il flag di traccia 8079 per consentire a SQL Server di usare la configurazione soft-NUMA automatica. A partire da SQL Server 2016 (13.x) questo comportamento è controllato dal motore e il flag di traccia 8079 non ha alcun effetto. Per altre informazioni, vedere DBCC TRACEON - Flag di traccia.

Architettura soft-NUMA manuale

Per configurare SQL Server manualmente per l'uso di soft-NUMA, disabilitare la configurazione soft-NUMA automatica e modificare il registro per aggiungere una maschera di affinità di configurazione dei nodi. Se si usa questo metodo, la maschera soft-NUMA può essere definita come voce del Registro di sistema binaria, DWORD (esadecimale o decimale) o QWORD (esadecimale o decimale). Per configurare un numero maggiore delle prime 32 CPU, usare i valori del Registro di sistema QWORD o BINARY (i valori QWORD non possono essere usati nelle versioni precedenti a SQL Server 2012 (11.x)). Dopo aver modificato il Registro di sistema, è necessario riavviare il motore di database per rendere effettiva la configurazione soft-NUMA.

Suggerimento

Le CPU sono numerate partendo da 0.

Avviso

È possibile che eventuali modifiche non corrette del Registro di sistema danneggino gravemente il sistema. Prima di modificare il Registro di sistema, è consigliabile eseguire il backup di tutti i dati importanti disponibili nel computer.

Si consideri l'esempio di un computer con otto CPU senza NUMA hardware. Vengono configurati tre nodi soft-NUMA.
L'istanza A del motore di database è configurata per l'uso delle CPU da 0 a 3. Una seconda istanza del motore di database è installata e configurata per l'uso delle CPU da 4 a 7. Questo esempio può essere rappresentato visivamente come segue:

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

L'Istanza A, che presenta un I/O significativo, ha ora due thread di I/O e un thread Lazywriter. L'Istanza B, in cui vengono eseguite operazioni con utilizzo elevato del processore, ha solo un thread di I/O e un thread Lazywriter. È possibile assegnare alle istanze quantità di memoria diverse ma, a differenza di quanto avviene con hardware NUMA, entrambe le istanze ricevono memoria dallo stesso blocco di memoria del sistema operativo e non è presente affinità tra memoria e processore.

Il thread Lazywriter è correlato alla visualizzazione SQLOS dei nodi di memoria NUMA fisici. Pertanto, qualsiasi numero di nodi NUMA fisici presente nell'hardware corrisponde al numero di thread Lazywriter creati. Per ulteriori informazioni, vedere la pagina relativa al funzionamento di Soft-NUMA, thread di completamento di I/O, thread di lavoro Lazywriter e nodi di memoria.

Nota

Le chiavi del Registro di sistema Soft-NUMA non vengono copiate quando si aggiorna un'istanza di SQL Server.

Impostazione della maschera di affinità della CPU

Eseguire l'istruzione seguente nell'istanza A per configurarla per l'utilizzo delle CPU 0, 1, 2 e 3 impostando la maschera di affinità della CPU:

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

Eseguire l'istruzione seguente nell'istanza B per configurarla per l'utilizzo delle CPU 4, 5, 6 e 7 impostando la maschera di affinità della CPU:

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

Mapping dei nodi soft-NUMA alle CPU

Usando l'editor del Registro di sistema (regedit.exe), aggiungere le chiavi del Registro di sistema seguenti per eseguire il mapping del nodo soft-NUMA 0 alle CPU 0 e 1,del nodo soft-NUMA 1 alle CPU 2 e 3 e del nodo soft-NUMA 2 alle CPU 4, 5, 6 e 7.

Suggerimento

Per specificare le CPU da 60 a 63, usare un valore QWORD di F000000000000000 oppure un valore BINARIO di 1111000000000000000000000000000000000000000000000000000000000000.

Nell'esempio seguente si supponga di avere un server DL580 G9 con 18 core per socket (in 4 socket) e che ogni socket si trovi nel proprio gruppo K. Una possibile configurazione soft-NUMA potrebbe essere simile alla seguente: sei core per nodo, tre nodi per gruppo, quattro gruppi.

Esempio per un’istanza di SQL Server con più gruppi K Type Nome valore Dati valore
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

Metadati UFX

È possibile usare le DMV seguenti per visualizzare lo stato e la configurazione correnti di soft-NUMA.

Sebbene sia possibile visualizzare il valore corrente per la configurazione soft-NUMA automatica tramite sp_configure (Transact-SQL), non è possibile modificarne il valore usando sp_configure. È necessario usare l'istruzione ALTER SERVER CONFIGURATION (Transact-SQL) con l'argomento SET SOFTNUMA.