Soft-NUMA (SQL Server)Soft-NUMA (SQL Server)

QUESTO ARGOMENTO SI APPLICA A: SìSQL ServernonDatabase SQL di AzurenonAzure SQL Data Warehouse non Parallel Data WarehouseTHIS TOPIC APPLIES TO: yesSQL ServernoAzure SQL DatabasenoAzure SQL Data Warehouse noParallel Data Warehouse

I processori moderni includono più core per socket.Modern processors have multiple cores per socket. Ogni socket è solitamente rappresentato come un unico nodo NUMA.Each socket is represented, usually, as a single NUMA node. Il motore di database di SQL Server suddivide le varie strutture interne e i thread del servizio per nodo NUMA.The SQL Server database engine partitions various internal structures and partitions service threads per NUMA node. 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.With processors containing 10 or more cores per socket, using software NUMA to split hardware NUMA nodes generally increases scalability and performance. Nelle versioni precedenti a SQL Server 2014 (12.x)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.Prior to SQL Server 2014 (12.x)SQL Server 2014 (12.x) SP2, software-based NUMA (soft-NUMA) required you to edit the registry to add a node configuration affinity mask, and was configured at the host level, rather than per instance. A partire da SQL Server 2014 (12.x)SQL Server 2014 (12.x) SP2 e SQL Server 2016 (13.x)SQL Server 2016 (13.x), l'architettura soft-NUMA viene configurata automaticamente a livello dell'istanza di database all'avvio del servizio Motore di database di SQL ServerSQL Server Database Engine.Starting with SQL Server 2014 (12.x)SQL Server 2014 (12.x) SP2 and SQL Server 2016 (13.x)SQL Server 2016 (13.x), soft-NUMA is configured automatically at the database-instance level when the Motore di database di SQL ServerSQL Server Database Engine service starts.

Nota

L'architettura soft-NUMA consente di aggiungere processori a caldo.Hot-add processors are not supported by soft-NUMA.

Architettura soft-NUMA automaticaAutomatic Soft-NUMA

Con SQL Server 2016 (13.x)SQL Server 2016 (13.x), ogni volta che Motore di database di SQL ServerSQL Server Database Engine rileva più di 8 core fisici per ogni nodo o socket NUMA all'avvio, vengono creati automaticamente nodi soft-NUMA per impostazione predefinita.With SQL Server 2016 (13.x)SQL Server 2016 (13.x), whenever the Motore di database di SQL ServerSQL Server Database Engine detects more than eight physical cores per NUMA node or socket at startup, soft-NUMA nodes are created automatically by default. Il conteggio delle core fisiche in un nodo non distingue tra core di processori fisici e con hyperthreading.Hyper-threaded processor cores are not differentiated when counting physical cores in a node. Quando il numero di core fisici rilevato è maggiore di 8 per ogni socket, Motore di database di SQL ServerSQL Server Database Engine crea nodi soft-NUMA che contengono idealmente 8 core, ma che possono scendere a 5 o salire fino a 9 core logici per nodo.When the detected number of physical cores is more than eight per socket, the Motore di database di SQL ServerSQL Server Database Engine creates soft-NUMA nodes that ideally contain eight cores, but can go down to five or up to nine logical cores per node. La dimensione del nodo hardware può essere limitata da una maschera di affinità di CPU.The size of the hardware node can be limited by a CPU affinity mask. Il numero di nodi NUMA non supera mai il numero massimo di nodi NUMA supportati.The number of NUMA nodes never exceeds the maximum number of supported NUMA nodes.

È possibile disabilitare o riabilitare soft-NUMA usando l'istruzione ALTER SERVER CONFIGURATION (Transact-SQL) con l'argomento SET SOFTNUMA.You can disable or re-enable soft-NUMA using the ALTER SERVER CONFIGURATION (Transact-SQL) statement with the SET SOFTNUMA argument. Per rendere effettiva la modifica del valore di questa impostazione è necessario riavviare il motore di database.Changing the value of this setting requires a restart of the database engine to take effect.

La figura seguente illustra il tipo di informazioni relative a soft-NUMA visibili nel log degli errori di SQL Server quando SQL ServerSQL Server rileva nodi NUMA hardware con più di 8 core fisici in ogni nodo o socket.The figure below shows the type of information regarding soft-NUMA that you see in the SQL Server error log, when SQL ServerSQL Server detects hardware NUMA nodes with greater than eight physical cores per each node or 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.   

Architettura soft-NUMA manualeManual Soft-NUMA

Per configurare SQL ServerSQL Server manualmente per l'uso di soft-NUMA, disabilitare l'architettura soft-NUMA automatica e modificare il registro per aggiungere una maschera di affinità di configurazione dei nodi.To manually configure SQL ServerSQL Server to use soft-NUMA, disable automatic soft-NUMA, and edit the registry to add a node configuration affinity mask. 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).When using this method, the soft-NUMA mask can be stated as a binary, DWORD (hexadecimal or decimal), or QWORD (hexadecimal or decimal) registry entry. Per configurare un numero maggiore delle prime 32 CPU, usare i valori del registro QWORD o BINARY (i valori QWORD non possono essere usati nelle versioni precedenti a SQL Server 2012 (11.x)SQL Server 2012 (11.x)).To configure more than the first 32 CPUs use QWORD or BINARY registry values (QWORD values cannot be used prior to SQL Server 2012 (11.x)SQL Server 2012 (11.x)). Dopo aver modificato il registro, è necessario riavviare Motore di databaseDatabase Engine per rendere effettiva la configurazione di soft-NUMA.After modifying the registry, you must restart the Motore di databaseDatabase Engine for the soft-NUMA configuration to take effect.

Suggerimento

Le CPU sono numerate partendo da 0.CPUs are numbered starting with 0.

Avviso

Se il Registro di sistema viene modificato in modo non appropriato, il sistema potrebbe venire gravemente danneggiato.Incorrectly editing the registry can severely damage your system. Prima di modificare il Registro di sistema, è consigliabile eseguire il backup di tutti i dati importanti disponibili nel computer.Before making changes to the registry, we recommend that you back up any valued data on the computer.

Si consideri l'esempio di un computer con otto CPU senza NUMA hardware.Consider the example of a computer with eight CPUs, that does not have hardware NUMA. Vengono configurati tre nodi soft-NUMA.Three soft-NUMA nodes are configured.
L'istanza A del Motore di databaseDatabase Engine è configurata per utilizzare le CPU da 0 a 3. Motore di databaseDatabase Engine instance A is configured to use CPUs 0 through 3. Una seconda istanza del Motore di databaseDatabase Engine viene installata e configurata per utilizzare le CPU da 4 a 7.A second instance of the Motore di databaseDatabase Engine is installed and configured to use CPUs 4 through 7. Questo esempio può essere rappresentato visivamente come segue:The example can be visually represented as:

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.Instance A, which experiences significant I/O, now has two I/O threads and one lazy writer thread. L'Istanza B, in cui vengono eseguite operazioni con utilizzo elevato del processore, ha solo un thread di I/O e un thread Lazywriter.Instance B, which performs processor-intensive operations, has only one I/O thread and one lazy writer thread. È 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.Differing amounts of memory can be assigned to the instances, but unlike hardware NUMA, they both receive memory from the same operating system memory block, and there is no memory-to-processor affinity.

Il thread Lazywriter è correlato alla visualizzazione SQLOS dei nodi di memoria NUMA fisici.The lazy writer thread is tied to the SQLOS view of the physical NUMA memory nodes. Pertanto, qualsiasi numero di nodi NUMA fisici presente nell'hardware corrisponderà al numero di thread Lazywriter creati.Therefore, whatever the hardware presents as the number of physical NUMA nodes, this will be the number of lazy writer threads that are created. 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.For more information, see How It Works: Soft NUMA, I/O Completion Thread, Lazy Writer Workers and Memory Nodes.

Nota

Le chiavi del Registro di sistema di Soft-NUMA non vengono copiate quando si aggiorna un'istanza di SQL ServerSQL Server.The Soft-NUMA registry keys are not copied when you upgrade an instance of SQL ServerSQL Server.

Impostazione della maschera di affinità della CPUSet the CPU affinity mask

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:Run the following statement on instance A to configure it to use CPUs 0, 1, 2, and 3 by setting the CPU affinity mask:

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:Run the following statement on instance B to configure it to use CPUs 4, 5, 6, and 7 by setting the CPU affinity mask:

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

Mapping dei nodi soft-NUMA alle CPUMap soft-NUMA nodes to CPUs

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.Using the Registry Editor program (regedit.exe), add the following registry keys to map soft-NUMA node 0 to CPUs 0 and 1, soft-NUMA node 1 to CPUs 2 and 3, and soft-NUMA node 2 to CPUs 4, 5, 6, and 7.

Suggerimento

Per specificare le CPU da 60 a 63, usare un valore QWORD di F000000000000000 o un valore BINARY di 1111000000000000000000000000000000000000000000000000000000000000.To specify CPUs 60 through 63, use a QWORD value of F000000000000000 or a BINARY value of 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.In the following example, assume you have a DL580 G9 server, with 18 cores per socket (in four sockets), and each socket is in its own K-group. Una possibile configurazione soft-NUMA potrebbe essere simile alla seguente: sei core per nodo, tre nodi per gruppo, quattro gruppi.A soft-NUMA configuration that you might create would look something like the following: six cores per Node, three nodes per group, four groups.

Esempio per un server SQL Server 2016 (13.x)SQL Server 2016 (13.x) con più gruppi KExample for a SQL Server 2016 (13.x)SQL Server 2016 (13.x) server with multiple K-Groups TipoType Nome del valoreValue name Dati del valoreValue data
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\130\NodeConfiguration\Node0HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\130\NodeConfiguration\Node0 DWORDDWORD CPUMaskCPUMask 0x3F0x3F
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\130\NodeConfiguration\Node0HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\130\NodeConfiguration\Node0 DWORDDWORD GruppoGroup 00
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\130\NodeConfiguration\Node1HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\130\NodeConfiguration\Node1 DWORDDWORD CPUMaskCPUMask 0x0fc00x0fc0
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\130\NodeConfiguration\Node1HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\130\NodeConfiguration\Node1 DWORDDWORD GruppoGroup 00
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\130\NodeConfiguration\Node2HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\130\NodeConfiguration\Node2 DWORDDWORD CPUMaskCPUMask 0x3f0000x3f000
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\130\NodeConfiguration\Node2HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\130\NodeConfiguration\Node2 DWORDDWORD GruppoGroup 00
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\130\NodeConfiguration\Node3HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\130\NodeConfiguration\Node3 DWORDDWORD CPUMaskCPUMask 0x3F0x3F
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\130\NodeConfiguration\Node3HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\130\NodeConfiguration\Node3 DWORDDWORD GruppoGroup 11
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\130\NodeConfiguration\Node4HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\130\NodeConfiguration\Node4 DWORDDWORD CPUMaskCPUMask 0x0fc00x0fc0
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\130\NodeConfiguration\Node4HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\130\NodeConfiguration\Node4 DWORDDWORD GruppoGroup 11
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\130\NodeConfiguration\Node5HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\130\NodeConfiguration\Node5 DWORDDWORD CPUMaskCPUMask 0x3f0000x3f000
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\130\NodeConfiguration\Node5HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\130\NodeConfiguration\Node5 DWORDDWORD GruppoGroup 11
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\130\NodeConfiguration\Node6HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\130\NodeConfiguration\Node6 DWORDDWORD CPUMaskCPUMask 0x3F0x3F
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\130\NodeConfiguration\Node6HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\130\NodeConfiguration\Node6 DWORDDWORD GruppoGroup 22
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\130\NodeConfiguration\Node7HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\130\NodeConfiguration\Node7 DWORDDWORD CPUMaskCPUMask 0x0fc00x0fc0
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\130\NodeConfiguration\Node7HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\130\NodeConfiguration\Node7 DWORDDWORD GruppoGroup 22
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\130\NodeConfiguration\Node8HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\130\NodeConfiguration\Node8 DWORDDWORD CPUMaskCPUMask 0x3f0000x3f000
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\130\NodeConfiguration\Node8HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\130\NodeConfiguration\Node8 DWORDDWORD GruppoGroup 22
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\130\NodeConfiguration\Node9HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\130\NodeConfiguration\Node9 DWORDDWORD CPUMaskCPUMask 0x3F0x3F
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\130\NodeConfiguration\Node9HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\130\NodeConfiguration\Node9 DWORDDWORD GruppoGroup 33
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\130\NodeConfiguration\Node10HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\130\NodeConfiguration\Node10 DWORDDWORD CPUMaskCPUMask 0x0fc00x0fc0
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\130\NodeConfiguration\Node10HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\130\NodeConfiguration\Node10 DWORDDWORD GruppoGroup 33
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\130\NodeConfiguration\Node11HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\130\NodeConfiguration\Node11 DWORDDWORD CPUMaskCPUMask 0x3f0000x3f000
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\130\NodeConfiguration\Node11HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\130\NodeConfiguration\Node11 DWORDDWORD GruppoGroup 33

MetadatiMetadata

È possibile usare le DMV seguenti per visualizzare lo stato e la configurazione correnti di soft-NUMA.You can use the following DMVs to view the current state and configuration of soft-NUMA.

Nota

Sebbene sia possibile visualizzare il valore corrente per l'uso dell'architettura soft-NUMA automatica tramite sp_configure (Transact-SQL), non è possibile modificarne il valore usando sp_configure.While you can view the running value for automatic soft-NUMA using sp_configure (Transact-SQL), you cannot change its value using sp_configure. È necessario usare l'istruzione ALTER SERVER CONFIGURATION (Transact-SQL) con l'argomento SET SOFTNUMA.You must use the ALTER SERVER CONFIGURATION (Transact-SQL) statement with the SET SOFTNUMA argument.

Vedere ancheSee Also

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