Soft-NUMA (SQL Server)

Si applica a:yes SQL Server (tutte le versioni supportate)

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. Prima di SQL Server 2014 (12.x) SP2, NUMA (soft-NUMA) basato su software è necessario modificare il Registro di sistema per aggiungere una maschera di affinità di configurazione del nodo ed è stata configurata a livello di host anziché a ogni istanza. A partire da SQL Server 2014 (12.x) SP2 e SQL Server 2016 (13.x), soft-NUMA viene configurato automaticamente a livello di istanza del database all'avvio del servizio SQL Server motore di database.

Nota

L'architettura soft-NUMA consente di aggiungere processori a caldo.

Architettura soft-NUMA automatica

Con SQL Server 2016 (13.x), ogni volta che il SQL Server motore di database rileva più di otto core fisici per ogni nodo NUMA o socket all'avvio, i nodi soft-NUMA vengono creati automaticamente per impostazione predefinita. Il conteggio delle core fisiche in un nodo non distingue tra core di processori fisici e con hyperthreading. Quando il numero rilevato di core fisici è superiore a otto per socket, il SQL Server motore di database crea nodi soft-NUMA che contengono idealmente otto core, ma può passare a cinque o fino a nove 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 mostra il tipo di informazioni relative a soft-NUMA visualizzate nel log degli errori SQL Server, quando SQL Server rileva nodi NUMA hardware con più di otto core fisici per 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 SQL Server di usare Soft-NUMA automatico. A partire da SQL Server 2016 (13.x) questo comportamento è controllato dal motore e dal flag di traccia 8079 non ha alcun effetto. Per altre informazioni, vedere DBCC TRACEON - Flag di traccia.

Architettura soft-NUMA manuale

Per configurare manualmente SQL Server per usare soft-NUMA, disabilitare soft-NUMA automatico e modificare il Registro di sistema per aggiungere una maschera di affinità di configurazione del nodo. 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 più delle prime 32 CPU usa valori QWORD o BINARY del Registro di sistema (non è possibile usare i valori QWORD prima di SQL Server 2012 (11.x)). Dopo aver modificato il Registro di sistema, è necessario riavviare l'motore di database per la configurazione soft-NUMA da attivare.

Suggerimento

Le CPU sono numerate partendo da 0.

Avviso

Se il Registro di sistema viene modificato in modo non appropriato, il sistema potrebbe venire gravemente danneggiato. 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.
motore di database'istanza A è configurata per l'uso di CPU da 0 a 3. Una seconda istanza del motore di database viene installata e configurata per l'uso di 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 corrisponderà al numero di thread Lazywriter creati. Per altre informazioni, vedere How It Works: Soft NUMA, I/O Completion Thread, Lazy Writer Workers and Memory Nodes (Funzionamento: 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 o un valore BINARY 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 server SQL Server 2016 (13.x) con più K-Groups Type Nome del valore Dati del 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 Gruppo 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 Gruppo 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 Gruppo 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 Gruppo 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 Gruppo 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 Gruppo 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 Gruppo 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 Gruppo 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 Gruppo 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 Gruppo 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 Gruppo 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 Gruppo 3

Metadati

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

Nota

Sebbene sia possibile visualizzare il valore in esecuzione per soft-NUMA automatico usando sp_configure (Transact-SQL), non è possibile modificarne il valore usando sp_configure. È necessario utilizzare l'istruzione ALTER SERVER CONFIGURATION (Transact-SQL) con l'argomento SET SOFTNUMA .

Vedere anche

Eseguire il mapping delle porte TCP/IP ai nodi NUMA (SQL Server)
Opzione di configurazione del server affinity mask
ALTER SERVER CONFIGURATION (Transact-SQL)
sys.dm_os_nodes (Transact-SQL)