Partager via


affinity mask (option de configuration de serveur)

Notes

Cette fonctionnalité sera supprimée dans une prochaine version de Microsoft SQL Server. Évitez d'utiliser cette fonctionnalité dans de nouveaux travaux de développement, et modifiez dès que possible les applications qui utilisent actuellement cette fonctionnalité. Utilisez plutôt ALTER SERVER CONFIGURATION (Transact-SQL).

Pour réaliser les travaux multitâches, Microsoft Windows déplace parfois les threads de processus entre les différents processeurs. Bien qu’efficace du point de vue du système d’exploitation, cette activité peut réduire les performances de SQL Server sous des charges de système intenses, car des données sont rechargées de façon répétée dans chaque cache de processeur. L'affectation de processeurs à des threads spécifiques permet d'améliorer les performances dans ces conditions en éliminant les rechargements de processeurs et en réduisant la migration des threads entre les processeurs (réduisant ainsi les changements de contexte) ; une telle association entre un thread et un processeur est appelée affinité du processeur.

SQL Server prend en charge l’affinité du processeur au moyen de deux options de masque d’affinité : affinity mask (également appelé CPU affinity mask) et affinity I/O mask. Pour plus d’informations sur l’option affinity I/O mask, consultez affinity Input-Output mask (option de configuration de serveur). La prise en charge de l’affinité du processeur et d’E/S pour les serveurs dotés de 33 à 64 processeurs nécessite l’utilisation supplémentaire de l’option de configuration de serveur affinity64 mask et de l’option de configuration du serveur affinity64 Input-Output mask, respectivement.

Notes

La prise en charge de l'affinité pour les serveurs dotés de 33 à 64 processeurs est uniquement disponible sur les systèmes d'exploitation 64 bits.

L'option affinity mask, qui existait dans les versions antérieures de SQL Server, contrôle dynamiquement l'affinité du processeur.

Dans SQL Server, l'option affinity mask peut être configurée sans exiger le redémarrage de l'instance de SQL Server. Lorsque vous utilisez sp_configure, vous devez exécuter RECONFIGURE ou RECONFIGURE WITH OVERRIDE après la définition d'une option de configuration. Lorsque vous utilisez SQL Server Express, la modification de l’option de masque d’affinité nécessite un redémarrage.

Les modifications apportées aux masques d'affinité s'exécutent dynamiquement, autorisant ainsi le démarrage et l'arrêt à la demande des planificateurs de processeur qui lient les threads de processus au sein de SQL Server. Cela peut se produire en cas de changement des conditions sur le serveur. Par exemple, si une nouvelle instance de SQL Server est ajoutée au serveur, il peut être nécessaire d'ajuster l'option affinity mask afin de redistribuer la charge des processeurs.

Les modifications apportées aux masques de bits d'affinité nécessitent que SQL Server active un nouveau planificateur de processeur et désactive le planificateur de processeur existant. Les nouveaux traitements peuvent alors être traités sur le nouveau planificateur ou sur les planificateurs restants.

Pour lancer un nouveau planificateur de processeur, SQL Server crée un nouveau planificateur et l'ajoute à la liste de ses planificateurs standard. Le nouveau planificateur n'est pris en compte que pour les nouveaux traitements entrants. Les traitements en cours continuent de s'exécuter sur le même planificateur. Les threads de travail migrent vers le nouveau planificateur lorsqu'ils sont libérés, ou lorsque de nouveaux threads de travail sont créés.

L'arrêt d'un planificateur exige l'achèvement et la clôture des activités de tous les traitements sur le planificateur. Un planificateur arrêté est marqué hors ligne afin qu'aucun nouveau traitement ne soit planifié sur celui-ci.

Qu'un nouveau planificateur soit ajouté ou supprimé, les tâches système permanentes, telles que lockmonitor, checkpoint, system task yhread (processing DTC) et signal process, continuent de s'exécuter sur le planificateur alors que le serveur est opérationnel. Ces tâches système permanentes ne migrent pas dynamiquement. Pour redistribuer la charge du processeur pour ces tâches système entre les planificateurs, il est nécessaire de redémarrer le SQL Server instance. Si SQL Server tente d'arrêter un planificateur associé à une tâche système permanente, la tâche continue de s'exécuter sur le planificateur hors ligne (aucune migration). Ce planificateur est lié aux processeurs dans le masque d'affinité modifié et ne doit imposer aucune charge au processeur avec lequel il avait une affinité avant la modification. Le fait de disposer de planificateurs hors ligne supplémentaires n'affecte pas vraiment la charge du système. Si ce n'est pas le cas, il est nécessaire de redémarrer le serveur de bases de données pour reconfigurer ces tâches.

Les tâches d'affinité d'E/S (telles que lazywriter et logwriter) sont directement affectées par le masque d'affinité d'E/S. Si les tâches lazywriter et logwriter ne possèdent pas d'affinité, elles respectent les mêmes règles que celles définies pour les tâches permanentes telles que lockmonitor ou checkpoint.

Pour vous assurer que le nouveau masque d'affinité est valide, la commande RECONFIGURE vérifie que les affinités du processeur et d'E/S normales s'excluent mutuellement. Si ce n’est pas le cas, un message d’erreur est signalé à la session cliente et au journal des erreurs SQL Server, indiquant qu’un tel paramètre n’est pas recommandé. L'exécution des options RECONFIGURE WITH OVERRIDE autorise les affinités du processeur et celles d'E/S qui ne s'excluent pas mutuellement.

Si vous spécifiez un masque d'affinité qui tente d'effectuer un mappage à un processeur inexistant, la commande RECONFIGURE envoie un message d'erreur à la session cliente et le consigne dans le journal des erreurs SQL Server. L'utilisation de l'option RECONFIGURE WITH OVERRIDE n'a aucun effet dans ce cas, et la même erreur de configuration est à nouveau signalée.

Vous pouvez également exclure SQL Server’activité des processeurs affectés à des affectations de charge de travail spécifiques par le système d’exploitation Windows 2000 ou Windows Server 2003. En attribuant la valeur 1 à un bit qui représente un processeur, ce processeur est sélectionné par le moteur de base de données SQL Server pour l'affectation des threads. Lorsque vous définissez affinity mask sur 0 (valeur par défaut), les algorithmes de planification Microsoft Windows 2000 ou Windows Server 2003 définissent l’affinité du thread. Lorsque vous définissez affinity mask sur une valeur différente de zéro, SQL Server affinité interprète la valeur comme un masque de bits qui spécifie les processeurs éligibles à la sélection.

En ségrégeant SQL Server threads de l’exécution sur des processeurs spécifiques, Microsoft Windows 2000 ou Windows Server 2003 peut mieux évaluer la gestion par le système des processus spécifiques à Windows. Par exemple, sur un serveur à 8 processeurs exécutant deux instances de SQL Server (instances A et B), l'administrateur système peut utiliser l'option affinity mask pour affecter le premier jeu de 4 processeurs à l'instance A et le deuxième jeu de 4 processeurs à l'instance B. Pour configurer plus de 32 processeurs, définissez à la fois affinity mask et affinity64 mask. Les valeurs de l'option affinity mask sont les suivantes :

  • Un affinity mask à un octet prend en charge jusqu'à 8 processeurs sur un ordinateur multiprocesseur.

  • Un affinity mask à deux octets prend en charge jusqu'à 16 processeurs sur un ordinateur multiprocesseur.

  • Un affinity mask à trois octets prend en charge jusqu'à 24 processeurs sur un ordinateur multiprocesseur.

  • Un affinity mask à quatre octets prend en charge jusqu'à 32 processeurs sur un ordinateur multiprocesseur.

  • Si vous disposez de plus de 32 processeurs, configurez un masque d'affinité à quatre octets pour les 32 premiers processeurs et un masque d'affinity64 à quatre octets pour les processeurs restants.

Étant donné que la définition SQL Server’affinité processeur est une opération spécialisée, il est recommandé de l’utiliser uniquement lorsque cela est nécessaire. Dans la plupart des cas, l'option d'affinité par défaut de Microsoft Windows 2000 ou Windows Server 2003 offre des performances optimales. Lors de la définition des masques d'affinité, tenez également compte des exigences des autres applications en matière de processeurs. Pour plus d'informations, consultez la documentation du système d'exploitation Windows.

Notes

Vous pouvez utiliser le Moniteur système Windows pour afficher et analyser l'utilisation des processeurs individuels.

Si vous spécifiez l'option affinityI/O mask, vous devez l'utiliser conjointement avec l'option de configuration affinity mask. Évitez d'activer sur le même processeur le commutateur affinity mask et l'option affinity I/O mask. Les bits correspondant à chaque processeur doivent être dans l'un des trois états suivants :

  • 0 dans l'option affinity mask et dans l'option affinity I/O mask.

  • 1 dans l'option affinity mask et 0 dans l'option affinity I/O mask.

  • 0 dans l'option affinity mask et 1 dans l'option affinity I/O mask.

Attention

Évitez de configurer l'affinité de processeur dans le système d'exploitation Windows et le masque d'affinité dans SQL Server. Ces paramètres tentent d'obtenir le même résultat et, si les configurations sont incohérentes, les résultats risquent d'être imprévisibles. Il est préférable de configurer l’affinité de processeur SQL Server à l’aide de l’option sp_configure dans SQL Server.

Exemple

Par exemple, pour définir l'option affinity mask, si les processeurs 1, 2 et 5 sont sélectionnés comme étant disponibles et si les bits 1, 2 et 5 ont la valeur 1 alors que les bits 0, 3, 4, 6 et 7 ont la valeur 0, une valeur hexadécimale égale à 0x26 ou l'équivalent décimal 38 est spécifiée. Numérotez les bits de droite à gauche. L'option affinity mask commence à compter les processeurs de 0 à 31, de sorte que dans l'exemple suivant, le compteur 1 représente le deuxième processeur sur le serveur.

sp_configure 'show advanced options', 1;  
RECONFIGURE;  
GO  
sp_configure 'affinity mask', 38;  
RECONFIGURE;  
GO  

Vous trouverez ci-dessous les valeurs de l'option affinity mask pour un système à 8 processeurs.

Valeur décimale Masque binaire Autorise les threads SQL Server sur les processeurs
1 00000001 0
3 00000011 0 et 1
7 00000111 0, 1 et 2
15 00001111 0, 1, 2 et 3
31 00011111 0, 1, 2, 3 et 4
63 00111111 0, 1, 2, 3, 4 et 5
127 01111111 0, 1, 2, 3, 4, 5 et 6
255 11111111 0, 1, 2, 3, 4, 5, 6 et 7

L'option affinity mask est une option avancée. Si vous utilisez la procédure stockée système sp_configure pour modifier le paramètre, vous pouvez modifier affinity mask uniquement lorsque l’option Afficher les options avancées est définie sur 1. Après l'exécution de la commande Transact-SQL RECONFIGURE, le nouveau paramètre prend immédiatement effet sans redémarrage de l'instance SQL Server.

Non-Uniform Memory Access (NUMA)

Lorsque vous utilisez l'accès NUMA (Non-Uniform Memory Access) matériel et que le masque d'affinité est défini, chaque planificateur dans un nœud possède une affinité avec sa propre unité centrale. Lorsque le masque d'affinité n'est pas défini, chaque planificateur possède une affinité avec le groupe d'unités centrales au sein du nœud NUMA et un planificateur mappé sur le nœud NUMA N1 peut planifier du travail sur toute unité centrale dans le nœud, mais pas sur des unités centrales associées à un autre nœud.

Toute opération en cours sur un nœud NUMA unique peut utiliser uniquement des pages tampon à partir de ce nœud. Lorsqu'une opération est exécutée en parallèle sur des unités centrales issues de plusieurs nœuds, de la mémoire peut être utilisée à partir de tout nœud impliqué.

À propos des licences

L'affinité dynamique dépend étroitement des licences des processeurs. SQL Server n’autorise aucune configuration des options de masque d’affinité qui ne respectent pas la stratégie de licence.

Démarrage

Si un masque d’affinité spécifié ne respecte pas la stratégie de licence pendant SQL Server démarrage ou pendant l’attachement de base de données, la couche moteur termine le processus de démarrage ou l’opération d’attachement/restauration de base de données, puis réinitialise la valeur d’exécution sp_configure du masque d’affinité à zéro, en émettant un message d’erreur dans le journal des erreurs SQL Server.

Reconfigurer

Si un masque d'affinité spécifié ne respecte pas la stratégie de licences lors de l'exécution de la commande Transact-SQL RECONFIGURE, un message d'erreur est envoyé à la session cliente et est consigné dans le journal des erreurs SQL Server, exigeant ainsi que l'administrateur de la base de données reconfigure le masque d'affinité. Aucune commande RECONFIGURE WITH OVERRIDE n'est acceptée dans ce cas.

Voir aussi

Analyser l'utilisation des ressources (Moniteur système)
RECONFIGURE (Transact-SQL)
Options de configuration du serveur (SQL Server)
sp_configure (Transact-SQL)
ALTER SERVER CONFIGURATION (Transact-SQL)