Soft-NUMA (SQL Server)

S’applique à :SQL Server

Les processeurs modernes ont plusieurs cœurs par socket. Chaque socket est généralement représenté sous forme de nœud NUMA unique. Le moteur de base de données SQL Server partitionne plusieurs structures internes et threads de service de partitionnement par nœud NUMA. 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. Avant 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. À partir de SQL Server 2014 (12.x) SP2 et 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 Server.

Les processeurs ajoutés à chaud ne sont pas pris en charge par le soft-NUMA.

Soft-NUMA automatique

Avec SQL Server 2016 (13.x), chaque fois que le moteur de base de données SQL Server 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. Les cœurs du processeur multithreading simultanés (SMT) ne sont pas différenciés lors du décompte de cœurs physiques dans un nœud. Quand le nombre de cœurs physiques détectés est supérieur à huit par socket, le Moteur de base de données SQL Server 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. La taille du nœud matériel peut être limitée par un masque d'affinité de l’UC. Le nombre de nœuds NUMA ne dépasse jamais le nombre maximal de nœuds NUMA pris en charge.

Vous pouvez désactiver ou réactiver soft-NUMA avec l’instruction ALTER SERVER CONFIGURATION (Transact-SQL) et l’argument SET SOFTNUMA. La modification de ce paramètre requiert le redémarrage du moteur de base de données pour s’appliquer.

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 Server détecte des nœuds NUMA matériels avec plus de huit cœurs physiques par nœud ou 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.

Remarque

À compter de SQL Server 2014 (12.x) SP2, utilisez l’indicateur de trace 8079 pour autoriser SQL Server à utiliser soft-NUMA automatique. À compter de SQL Server 2016 (13.x), ce comportement est contrôlé par le moteur. L’indicateur de trace 8079 n’a aucun effet. Pour plus d’informations, consultez DBCC TRACEON - Indicateurs de trace.

Soft-NUMA manuel

Pour configurer manuellement SQL 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. 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). Pour configurer plus que les 32 premières UC, utilisez les valeurs de Registre QWORD ou BINARY (les valeurs QWORD ne peuvent pas être utilisées avant SQL Server 2012 (11.x)). Après avoir modifié le Registre, vous devez redémarrer le Moteur de base de données pour que la configuration du soft-NUMA prenne effet.

Conseil

Les unités centrales sont numérotées en commençant par 0.

Avertissement

Une modification incorrecte du Registre peut sérieusement endommager votre système. Avant d'apporter des modifications au Registre, nous vous recommandons de sauvegarder les données importantes qui se trouvent sur l'ordinateur.

Prenons l’exemple d’un ordinateur avec huit UC qui n’a pas de NUMA matériel. Trois nœuds soft-NUMA sont configurés.
L'instance A du Moteur de base de données est configurée pour utiliser les UC de 0 à 3. Une deuxième instance du Moteur de base de données est installée et configurée pour utiliser les UC de 4 à 7. L'exemple peut être représenté visuellement de la façon suivante :

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. 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. 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.

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. 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. 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).

Remarque

Les clés de Registre soft-NUMA ne sont pas copiées quand vous mettez à niveau une instance de SQL Server.

Définir le masque d'affinité de l'UC

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 :

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 :

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

Mapper les nœuds soft-NUMA aux UC

À 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 UC 0 et 1, le nœud soft-NUMA 1 aux UC 2 et 3, et le nœud soft-NUMA 2 aux UC 4, 5, 6 et 7.

Conseil

Pour spécifier les UC 60 à 63, utilisez une valeur QWORD de F000000000000000 ou un valeur BINARY de 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 »). Vous pouvez créer une configuration soft-NUMA du type suivant : six cœurs par nœud, trois nœuds par groupe, quatre groupes.

Exemple pour un serveur SQL Server avec plusieurs « K-Groups » Type Nom de la valeur Données de valeur
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

Métadonnées

Vous pouvez utiliser les vues de gestion dynamique (DMV) suivantes pour afficher l’état actuel et la configuration du soft-NUMA.

Même si vous pouvez voir la valeur d’exécution de soft-NUMA automatique avec sp_configure (Transact-SQL), vous ne pouvez pas changer sa valeur avec sp_configure. Vous devez utiliser l’instruction ALTER SERVER CONFIGURATION (Transact-SQL) avec l’argument SET SOFTNUMA.