Partager via


option de configuration du serveur affinity mask

Remarque

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 à la place ALTER SERVER CONFIGURATION (Transact-SQL).

Pour effectuer le multitâche, Microsoft Windows déplace parfois des threads de processus entre 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 peut améliorer les performances dans ces conditions en éliminant les rechargements du processeur et en réduisant la migration de threads entre les processeurs (réduisant ainsi le basculement 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 à l’aide de deux options de masque d’affinité : le masque d’affinité (également appelé masque d’affinité processeur) et le masque d’E/S d’affinité. Pour plus d’informations sur l'option de masque d'affinité E/S, consultez l'option de masque d'affinité Input-Output dans la configuration du serveur. La prise en charge de l’affinité du processeur et d’E/S pour les serveurs équipés de 33 à 64 processeurs nécessite l’utilisation supplémentaire de affinity64 mask Server Configuration Option et affinity64 Input-Output mask Server Configuration Option, respectivement.

Remarque

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 de masque d’affinité, qui existait dans les versions antérieures de SQL Server, contrôle dynamiquement l’affinité processeur.

Dans SQL Server, l’option de masque d’affinité peut être configurée sans nécessiter de redémarrage de l’instance de SQL Server. Lorsque vous utilisez sp_configure, vous devez exécuter RECONFIGURE ou RECONFIGURE WITH OVERRIDE après avoir défini 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’apporter des ajustements à l’option de masque d’affinité pour redistribuer la charge du processeur.

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 qui a été arrêté est marqué comme hors ligne afin qu'aucun nouveau lot ne soit planifié dessus.

Qu’un nouveau planificateur soit ajouté ou supprimé, pendant que le serveur est opérationnel, les tâches système permanentes telles que le moniteur de verrouillage, le point de contrôle, le thread de tâche système (traitement DTC), et le traitement des signaux continuent à s’exécuter sur le planificateur. 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 l’instance SQL Server. 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 pas charger le processeur avec lequel il a été affiniténé avant la modification. Le fait d’avoir des planificateurs hors connexion supplémentaires ne doit pas affecter considérablement la charge du système. Si ce n’est pas le cas, un redémarrage du serveur de base de données est nécessaire 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 sont pas affinitisées, elles suivent les mêmes règles définies pour les autres 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 normales du processeur et de l'entrée/sortie sont mutuellement exclusives. Si ce n’est pas le cas, un message d’erreur est signalé à la session cliente et au journal des erreurs SQL Server, ce qui indique qu’un tel paramètre n’est pas recommandé. L’exécution des options RECONFIGURE WITH OVERRIDE autorise les affinités CPU et E/S qui ne sont pas mutuellement exclusives.

Si vous spécifiez un masque d’affinité qui tente de mapper à un processeur inexistant, la commande RECONFIGURE signale un message d’erreur à la fois à la session cliente et au 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 signalée à nouveau.

Vous pouvez également exclure l’activité SQL Server des processeurs affectés à des affectations de charges de travail spécifiques par le système d’exploitation Windows 2000 ou Windows Server 2003. Si vous définissez un bit représentant un processeur sur 1, ce processeur est sélectionné par le moteur de base de données SQL Server pour l’attribution de thread. Lorsque vous définissez affinity mask la valeur 0 (valeur par défaut), les algorithmes de planification Microsoft Windows 2000 ou Windows Server 2003 définissent l’affinité du thread. Si vous attribuez à affinity mask une valeur différente de zéro, l'affinité interprète cette valeur comme étant un masque de bits indiquant que ces processeurs sont ceux sur lesquels doit porter la sélection.

En affectant les threads SQL Server à 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 (instance A et B), l’administrateur système peut utiliser l’option de masque d’affinité pour affecter le premier ensemble de 4 PROCESSEURs à l’instance A et le deuxième jeu de 4 à l’instance B. Pour configurer plus de 32 processeurs, définissez à la fois le masque d’affinité et le masque affinity64. Les valeurs de l'option affinity mask sont les suivantes :

  • Un octet affinity mask couvre jusqu’à 8 PROCESSEURs dans un ordinateur multiprocesseur.

  • Un champ de deux octets affinity mask couvre jusqu'à 16 processeurs dans un ordinateur multiprocesseur.

  • Un octet de affinity mask trois octets couvre jusqu’à 24 PROCESSEURs dans un ordinateur multiprocesseur.

  • Un composant de quatre octets affinity mask couvre jusqu'à 32 processeurs dans un ordinateur multiprocesseur.

  • Pour couvrir plus de 32 PROCESSEURs, configurez un masque d’affinité de quatre octets pour les 32 premiers processeurs et jusqu’à un masque d’affinité de quatre octets64 pour les processeurs restants.

Étant donné que la définition de l’affinité du processeur SQL Server est une opération spécialisée, il est recommandé d’utiliser uniquement si nécessaire. Dans la plupart des cas, l’affinité par défaut microsoft Windows 2000 ou Windows Server 2003 offre les meilleures performances. Vous devez également prendre en compte les exigences du processeur pour d’autres applications lors de la définition des masques d’affinité. Pour plus d'informations, consultez la documentation du système d'exploitation Windows.

Remarque

Vous pouvez utiliser le Moniteur système Windows pour afficher et analyser l’utilisation individuelle du processeur.

Lorsque vous spécifiez l’option de masque d’E/S d’affinité, vous devez l’utiliser en connexion avec l’option de configuration du masque d’affinité. N’activez pas le même processeur dans le affinity mask commutateur et l’option de masque d’E/S d’affinité. Les bits correspondant à chaque processeur doivent être dans l'un des trois états suivants :

  • 0 dans l’option de masque d'affinité et l’option de masque d'entrée-sortie d'affinité.

  • 1 dans l’option de masque d’affinité et 0 dans l’option de masque d’E/S d’affinité.

  • 0 dans l’option de masque d’affinité et 1 dans l’option de masque d’E/S d’affinité.

Avertissement

Ne configurez pas l’affinité processeur dans le système d’exploitation Windows et configurez également 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. La configuration de l’affinité processeur de SQL Server se fait idéalement à l’aide de l’option sp_configure dans SQL Server.

Exemple :

Par exemple, si les processeurs 1, 2 et 5 sont sélectionnés comme étant disponibles avec les bits 1, 2 et 5 définis sur 1 et les bits 0, 3, 4, 6 et 7 définis sur 0, une valeur hexadécimale de 0x26 ou l'équivalent décimal de 38 est spécifié. Numérotez les bits de droite à gauche. L’option de masque d’affinité 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  

Il s’agit de affinity mask valeurs pour un système de 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 de masque d’affinité est une option avancée. Si vous utilisez la procédure stockée système sp_configure pour modifier le paramètre, vous ne pouvez modifier affinity mask que lorsque les options avancées sont définies sur 1. Après avoir exécuté la commande Transact-SQL RECONFIGURE, le nouveau paramètre prend effet immédiatement sans nécessiter de redémarrage de l’instance SQL Server.

Accès à la mémoire non uniforme (NUMA)

Lorsque vous utilisez un accès en mémoire non uniforme (NUMA) basé sur du matériel et que le masque d’affinité est défini, chaque planificateur d’un nœud est affecté à son propre processeur. Lorsque le masque d’affinité n’est pas défini, chaque planificateur est affiniténé avec le groupe de processeurs au sein du nœud NUMA et un planificateur mappé au nœud NUMA N1 peut planifier le travail sur n’importe quel processeur du nœud, mais pas sur les processeurs associés à 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é.

Problèmes de licence

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

Jeune entreprise

Si un masque d’affinité spécifié enfreint la stratégie de licence pendant le démarrage de SQL Server 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 la base de données, puis réinitialise la valeur d’exécution sp_configure pour le masque d’affinité sur zéro, en émettant un message d’erreur dans le journal des erreurs SQL Server.

Reconfigurer

Si un masque d’affinité spécifié enfreint la stratégie de licence lors de l’exécution de Transact-SQL commande RECONFIGURE, un message d’erreur est signalé à la session cliente et au journal des erreurs SQL Server, ce qui oblige l’administrateur de la base de données à reconfigurer 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)