Configuration du serveur : affinity mask
S’applique à : SQL Server
Remarque
Cette fonctionnalité sera supprimée dans une version future de SQL Server. Évitez d'utiliser cette fonctionnalité dans de nouveaux travaux de développement, et prévoyez de modifier les applications qui utilisent actuellement cette fonctionnalité. Utilisez plutôt ALTER SERVER CONFIGURATION.
Pour réaliser les travaux multitâches, 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 peut améliorer les performances sous ces conditions en éliminant les rechargements de processeur ; une telle association entre un thread et un processeur est qualifiée d'affinité de processeur.
SQL Server prend en charge l’affinité du processeur avec deux options de masque d’affinité : affinity mask
(également appelé CPU affinity mask) et affinity I/O mask
. Pour plus d’informations sur affinity I/O mask option
, consultez Configurer l’option de configuration du serveur affinity I/O mask. 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 des options option de configuration du serveur affinity64 mask et affinity64 I/O mask, 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 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 avoir configuré une option de configuration. Si vous utilisez SQL Server Express, la modification de l'option affinity mask
ne nécessite aucun 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 lock monitor, checkpoint, system task thread (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. Si vous souhaitez redistribuer la charge des processeurs pour ces tâches systèmes entre les planificateurs, il est nécessaire de redémarrer l'instance de 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 n’impose aucune charge au processeur avec lequel il était lié avant la modification. Le fait de disposer de planificateurs hors ligne supplémentaires n'affecte pas vraiment la charge du système. Si c’est le cas, un redémarrage du serveur de base de données est nécessaire pour reconfigurer ces tâches sur les planificateurs disponibles avec le masque d’affinité modifié.
Ne définissez pas les valeurs de configuration affinity mask
et affinity I/O mask
de SQL Server pour utiliser les mêmes processeurs. Les performances peuvent être affectées si vous choisissez de lier un processeur pour la planification des threads de travail SQL Server et pour le traitement des E/S. Par conséquent, assurez-vous que les valeurs de configuration ne sont pas définies pour le même processeur. La même recommandation s’applique à affinity64 mask
et affinity64 I/O mask
. Pour vous assurer que affinity mask
ne chevauche pas affinity I/O mask
, la commande RECONFIGURE vérifie que les affinités du processeur et d'E/S normales s'excluent mutuellement. Sinon, un message d'erreur est envoyé à la session cliente et consigné dans le journal des erreurs SQL Server pour indiquer qu'un tel paramètre n'est pas recommandé.
Msg 5834, Level 16, State 1, Line 1
The affinity mask specified conflicts with the IO affinity mask specified. Use the override option to force this configuration.
L'exécution des options RECONFIGURE WITH OVERRIDE
autorise les affinités du processeur et celles d'E/S à se chevaucher et à ne pas s'exclure pas mutuellement.
Les tâches d'affinité d'E/S (telles que lazy writer et log writer) sont directement affectées par affinity I/O mask
. Si les tâches lazy writer et log writer ne sont pas liées, elles respectent les mêmes règles que celles définies pour les tâches permanentes telles que lock monitor ou checkpoint.
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 l'activité propre à SQL Server des affectations de charges de travail spécifiques par le système d'exploitation Windows. 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. Si vous attribuez la valeur 0
(valeur par défaut) à l’option affinity mask
, les algorithmes de planification de Microsoft Windows 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.
La non-exécution des threads SQL Server sur des processeurs particuliers permet à Microsoft Windows 2000 ou Windows Server 2003 de mieux évaluer la gestion par le système de traitement des processus propres à 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 :
Octets dans le masque | Nombre d'unités centrales |
---|---|
1 octet | Jusqu’à 8 processeurs |
2 octets | Jusqu’à 16 processeurs |
3 octets | Jusqu’à 24 processeurs |
4 octets | Jusqu’à 32 processeurs |
Si vous disposez de plus de 32 processeurs, configurez un affinity mask
à 4 octets pour les 32 premiers processeurs et un affinity64 mask
à 4 octets pour les processeurs restants.
Étant donné que la définition de l'affinité du processeur de SQL Server est une opération spécialisée, n'utilisez cette option que lorsque cela est véritablement nécessaire. Dans la plupart des cas, l'option d'affinité par défaut de Windows 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.
Remarque
Vous pouvez utiliser le Moniteur de processus pour afficher et analyser l'utilisation des processeurs individuels.
Lorsque vous spécifiez l’option affinity I/O mask
, vous devez l’utiliser avec l’option de configuration affinity mask
. Cependant, comme mentionné précédemment, é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
à la fois dans l’optionaffinity mask
et l’optionaffinity I/O mask
.1
dans l’optionaffinity mask
et0
dans l’optionaffinity I/O mask
.0
dans l’optionaffinity mask
et1
dans l’optionaffinity I/O mask
.
Attention
Évitez de configurer l'affinité de processeur dans le système d'exploitation Windows et affinity mask
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.
Exemples
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 aux positions 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 positions des bits de droite à gauche.
EXEC sp_configure 'show advanced options', 1;
RECONFIGURE;
GO
EXEC sp_configure 'affinity mask', 38;
RECONFIGURE;
GO
Le tableau suivant présente les valeurs affinity mask
d’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 changer sa valeur, vous ne pouvez modifier l’option affinity mask
que si l’option show advanced options
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 affinity mask
est défini, chaque planificateur dans un nœud est lié à son propre processeur. Lorsque affinity mask
n'est pas défini, chaque planificateur est lié au groupe de processeurs au sein du nœud NUMA et un planificateur mappé sur le nœud NUMA N1
peut planifier du travail sur tout processeur dans le nœud, mais pas sur des 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 licences
L'affinité dynamique dépend étroitement des licences des processeurs. SQL Server n'autorise pas la configuration d'options affinity mask
qui enfreignent la stratégie de licences.
Startup
Si un masque d'affinité spécifié ne respecte pas la stratégie de licences au moment du démarrage de SQL Server ou de l'attachement de la base de données, la couche du moteur achève le processus de démarrage ou l'opération de restauration/attachement de base de données, puis remet à zéro la valeur d'exécution sp_configure
du masque d'affinité, en consignant 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.