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

S’APPLIQUE À : ouiSQL Server nonAzure SQL Database nonAzure Synapse Analytics (SQL DW) nonParallel Data Warehouse APPLIES TO: yesSQL Server noAzure SQL Database noAzure Synapse Analytics (SQL DW) noParallel Data Warehouse

Les processeurs modernes ont plusieurs cœurs par socket.Modern processors have multiple cores per socket. Chaque socket est généralement représenté sous forme de nœud NUMA unique.Each socket is represented, usually, as a single NUMA node. Le moteur de base de données SQL Server partitionne plusieurs structures internes et threads de service de partitionnement par nœud NUMA.The SQL Server database engine partitions various internal structures and partitions service threads per NUMA node. Pour les processeurs contenant 10 noyaux par socket ou plus, l’utilisation du NUMA logiciel pour fractionner les nœuds NUMA matériels augmente généralement l’évolutivité et les performances.With processors containing 10 or more cores per socket, using software NUMA to split hardware NUMA nodes generally increases scalability and performance. Avant SQL Server 2014 (12.x)SQL Server 2014 (12.x) SP2, le NUMA logiciel (soft-NUMA) nécessitait la modification du Registre pour ajouter un masque d’affinité de configuration des nœuds et était configuré au niveau de l’hôte plutôt que par instance.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. À partir de SQL Server 2014 (12.x)SQL Server 2014 (12.x) SP2 et SQL Server 2016 (13.x)SQL Server 2016 (13.x), le soft-NUMA est configuré automatiquement au niveau de l’instance de base de données au démarrage du service Moteur de base de données 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 Moteur de base de données SQL ServerSQL Server Database Engine service starts.

Notes

Les processeurs ajoutés à chaud ne sont pas pris en charge par le soft-NUMA.Hot-add processors are not supported by soft-NUMA.

Soft-NUMA automatiqueAutomatic Soft-NUMA

Avec SQL Server 2016 (13.x)SQL Server 2016 (13.x), chaque fois que le Moteur de base de données SQL ServerSQL Server Database Engine détecte plus de huit cœurs physiques par socket ou nœud NUMA au démarrage, des nœuds soft-NUMA sont créés automatiquement par défaut.With SQL Server 2016 (13.x)SQL Server 2016 (13.x), whenever the Moteur de base de données 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. Les cœurs des processeurs multithreads ne sont pas différenciés lors du décompte des cœurs physiques dans un nœud.Hyper-threaded processor cores are not differentiated when counting physical cores in a node. Quand le nombre de cœurs physiques détectés est supérieur à huit par socket, le Moteur de base de données SQL ServerSQL Server Database Engine crée des nœuds soft-NUMA contenant idéalement huit cœurs, ce chiffre pouvant varier de cinq à neuf cœurs logiques par nœud.When the detected number of physical cores is more than eight per socket, the Moteur de base de données 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 taille du nœud matériel peut être limitée par un masque d'affinité de l’UC.The size of the hardware node can be limited by a CPU affinity mask. Le nombre de nœuds NUMA ne dépasse jamais le nombre maximal de nœuds NUMA pris en charge.The number of NUMA nodes never exceeds the maximum number of supported NUMA nodes.

Vous pouvez désactiver ou réactiver le soft-NUMA avec l’instruction ALTER SERVER CONFIGURATION (Transact-SQL) et l’argument SET SOFTNUMA.You can disable or re-enable soft-NUMA using the ALTER SERVER CONFIGURATION (Transact-SQL) statement with the SET SOFTNUMA argument. La modification de ce paramètre requiert le redémarrage du moteur de base de données pour s’appliquer.Changing the value of this setting requires a restart of the database engine to take effect.

La figure ci-dessous montre le type d’informations concernant le soft-NUMA que vous voyez dans le journal des erreurs SQL Server quand SQL ServerSQL Server détecte des nœuds NUMA matériels avec plus de huit cœurs physiques par nœud ou 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.   

Notes

À compter de SQL Server 2014 (12.x)SQL Server 2014 (12.x) SP2, utilisez l’indicateur de trace 8079 pour autoriser SQL ServerSQL Server à utiliser le NUMA logiciel automatique.Starting with SQL Server 2014 (12.x)SQL Server 2014 (12.x) SP2, use trace flag 8079 to allow SQL ServerSQL Server to use Automatic Soft-NUMA. À compter de SQL Server 2016 (13.x)SQL Server 2016 (13.x), ce comportement est contrôlé par le moteur. L’indicateur de trace 8079 n’a aucun effet.Starting with SQL Server 2016 (13.x)SQL Server 2016 (13.x) this behavior is controlled by the engine and trace flag 8079 has no effect. Pour plus d’informations, consultez DBCC TRACEON - Indicateurs de trace.For more information, see DBCC TRACEON - Trace Flags.

Soft-NUMA manuelManual Soft-NUMA

Pour configurer manuellement SQL ServerSQL Server afin d’utiliser le soft-NUMA, désactivez le soft-NUMA automatique et modifiez le Registre pour ajouter un masque d’affinité de configuration des nœuds.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. Lorsque cette méthode est utilisée, le masque soft-NUMA peut être établi comme entrée de Registre binaire, DWORD (hexadécimal ou décimal) ou QWORD (hexadécimal ou décimal).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. Pour configurer davantage que les 32 premiers processeurs, utilisez les valeurs de Registre QWORD ou BINARY (les valeurs QWORD ne peuvent pas être utilisées avant 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)). Après avoir modifié le Registre, vous devez redémarrer le Moteur de base de donnéesDatabase Engine pour que la configuration du soft-NUMA prenne effet.After modifying the registry, you must restart the Moteur de base de donnéesDatabase Engine for the soft-NUMA configuration to take effect.

Conseil

Les UC sont numérotées à partir de 0.CPUs are numbered starting with 0.

Avertissement

Une modification incorrecte du Registre peut sérieusement endommager votre système.Incorrectly editing the registry can severely damage your system. Avant d'apporter des modifications au Registre, nous vous recommandons de sauvegarder les données importantes qui se trouvent sur l'ordinateur.Before making changes to the registry, we recommend that you back up any valued data on the computer.

Prenons l’exemple d’un ordinateur avec huit processeurs sans NUMA matériel.Consider the example of a computer with eight CPUs, that does not have hardware NUMA. Trois nœuds soft-NUMA sont configurés.Three soft-NUMA nodes are configured.
L'instance A du Moteur de base de donnéesDatabase Engine est configurée pour utiliser les UC de 0 à 3.Moteur de base de donnéesDatabase Engine instance A is configured to use CPUs 0 through 3. Une deuxième instance du Moteur de base de donnéesDatabase Engine est installée et configurée pour utiliser les UC de 4 à 7.A second instance of the Moteur de base de donnéesDatabase Engine is installed and configured to use CPUs 4 through 7. L'exemple peut être représenté visuellement de la façon suivante :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’instance A, confrontée à des E/S importantes, a maintenant deux threads d’E/S et un thread d’écriture différée.Instance A, which experiences significant I/O, now has two I/O threads and one lazy writer thread. L’instance B, qui exécute des opérations nécessitant des ressources de processeur importantes, a un seul thread d’E/S et un seul thread d’écriture différée.Instance B, which performs processor-intensive operations, has only one I/O thread and one lazy writer thread. Vous pouvez affecter des quantités de mémoire différentes aux instances, mais contrairement au NUMA matériel, elles reçoivent toutes deux la mémoire du même bloc mémoire de système d’exploitation et il n’y a pas d’affinité entre la mémoire et le processeur.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.

Le thread d’écriture différée est lié à la vue du système d’exploitation SQL des nœuds de mémoire NUMA physiques.The lazy writer thread is tied to the SQLOS view of the physical NUMA memory nodes. Par conséquent, quel que soit le nombre de nœuds NUMA physiques que le matériel présente, il correspond au nombre de thread d'écriture différée qui sont créés.Therefore, whatever the hardware presents as the number of physical NUMA nodes, this will be the number of lazy writer threads that are created. Pour plus d’informations, consultez How It Works: Soft NUMA, I/O Completion Thread, Lazy Writer Workers and Memory Nodes (Fonctionnement : NUMA logiciel, thread d’achèvement d’E/S, threads de travail d’écriture différée et nœuds de mémoire).For more information, see How It Works: Soft NUMA, I/O Completion Thread, Lazy Writer Workers and Memory Nodes.

Notes

Les clés de Registre NUMA logiciel ne sont pas copiées quand vous mettez à niveau une instance de SQL ServerSQL Server.The Soft-NUMA registry keys are not copied when you upgrade an instance of SQL ServerSQL Server.

Définir le masque d'affinité de l'UCSet the CPU affinity mask

Exécutez l'instruction suivante sur l'instance A de façon à la configurer pour qu'elle utilise les UC 0, 1, 2 et 3 en définissant le masque d'affinité de l'UC :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;  

Exécutez l'instruction suivante sur l'instance B de façon à la configurer pour qu'elle utilise les UC 4, 5, 6 et 7 en définissant le masque d'affinité de l'UC :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;  

Mapper les nœuds soft-NUMA aux UCMap soft-NUMA nodes to CPUs

À l'aide de l'Éditeur du Registre (regedit.exe), ajoutez les clés de Registre suivantes pour mapper le nœud soft-NUMA 0 aux processeurs 0 et 1, le nœud soft-NUMA 1 aux processeurs 2 et 3, et le nœud soft-NUMA 2 aux processeurs 4, 5, 6 et 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.

Conseil

Pour spécifier les UC 60 à 63, utilisez une valeur QWORD de F000000000000000 ou une valeur BINARY de 1111000000000000000000000000000000000000000000000000000000000000.To specify CPUs 60 through 63, use a QWORD value of F000000000000000 or a BINARY value of 1111000000000000000000000000000000000000000000000000000000000000.

Dans l’exemple suivant, supposons que vous avez un serveur DL580 G9 avec 18 cœurs par socket (et quatre sockets), chaque socket se trouvant dans son propre groupe de noyaux (« K-Group »).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. Vous pouvez créer une configuration soft-NUMA du type suivant : six cœurs par nœud, trois nœuds par groupe, quatre groupes.A soft-NUMA configuration that you might create would look something like the following: six cores per Node, three nodes per group, four groups.

Exemple pour un serveur SQL Server 2016 (13.x)SQL Server 2016 (13.x) avec plusieurs « K-Groups »Example for a SQL Server 2016 (13.x)SQL Server 2016 (13.x) server with multiple K-Groups TypeType Nom de valeurValue name Données de valeurValue 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 GrouperGroup 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 GrouperGroup 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 GrouperGroup 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 GrouperGroup 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 GrouperGroup 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 GrouperGroup 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 GrouperGroup 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 GrouperGroup 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 GrouperGroup 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 GrouperGroup 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 GrouperGroup 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 GrouperGroup 33

MétadonnéesMetadata

Vous pouvez utiliser les vues de gestion dynamique (DMV) suivantes pour afficher l’état actuel et la configuration du soft-NUMA.You can use the following DMVs to view the current state and configuration of soft-NUMA.

Notes

Même si vous pouvez afficher la valeur d’exécution du soft-NUMA automatique avec sp_configure (Transact-SQL), vous ne pouvez pas modifier sa valeur avec 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. Vous devez utiliser l’instruction ALTER SERVER CONFIGURATION (Transact-SQL) avec l’argument SET SOFTNUMA.You must use the ALTER SERVER CONFIGURATION (Transact-SQL) statement with the SET SOFTNUMA argument.

Voir aussiSee Also

Mapper les ports TCP/IP aux nœuds NUMA (SQL Server) Map TCP IP Ports to NUMA Nodes (SQL Server)
affinity mask (option de configuration de serveur) 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)