Supposons que j'ai un serveur SQL avec 4 sockets avec chaque nœud Numa. Chaque prise a 4 cœurs physiques. Il y a 512 Go de mémoire de mémoire afin que chaque nœud NUMA a 128 Go de RAM.
Une table de clés est chargée dans le premier nœud Numa.
Supposons que nous ayons beaucoup de lecture de la circulation de cette table. Si tous les noyaux physiques de la prise qui possèdent le nœud NUMA ont une utilisation de 100% de la CPU, cela influence-t-il négativement le coût de l'accès NUMA non local provenant d'autres sockets? Ou d'autre part, le coût de l'accès NUMA non local est-il indépendamment de la situation actuelle de ce socket?
J'espère que ma question a un sens. S'il vous plaît laissez-moi savoir si ce n'est pas que je vais essayer de clarifier.
Nous avions une question de base de données dans notre serveur de production la semaine dernière et certaines de nos entreprises traitées sont apparues plus touchées que d'autres. Nous avons eu des questions avec peu de lectures logiques prenant plus de 1 minute. Nous avons examiné l'utilisation globale du processeur qui était d'environ 60%. Nous n'avons pas regardé les métriques CPU spécifiques à la prise. Les métriques d'E/S étaient moyennes.
( Veuillez mettre à jour votre question avec coreinfo -v
(un utilitaire sysintélique) pour obtenir un meilleur contexte de votre CPU/sockets et de votre distribution Numa)
Nous avons examiné l'utilisation globale du processeur qui était d'environ 60%. Nous n'avons pas regardé les métriques CPU spécifiques à la prise. Les métriques d'E/S étaient moyennes.
Me semble que vous aboiez au mauvais arbre. SQL Server est NUMA
conscient. Il y a ne pénalité de performance beaucoup plus petite pour faire un accès à la mémoire de Numa croix . Vous pouvez également utiliser cette requête pour voir combien de nœuds NUMA
vous avez et quel processeur et quel cœurs sont attribués à quel NUMA
:
SELECT parent_node_id, scheduler_id, cpu_id
FROM sys.dm_os_schedulers WITH (NOLOCK)
WHERE [status] = N'VISIBLE ONLINE';
Ou juste combien NUMA
:
select COUNT(distinct Parent_node_id)
from sys.dm_os_schedulers
where [STATUS] = 'VISIBLE ONLINE'
and Parent_node_ID < 64
Nous avons eu des questions avec peu de lectures logiques prenant plus de 1 minute.
Cela arrive normalement lorsque vous avez des plans de requête incorrects générés par des statistiques obsolètes. Assurez-vous de disposer de votre STATS Mise à jour et vos index sont défragmentés correctement .
De plus, vous devez Set MaxDop sur une valeur plus judicieuse à éviter la famine de fil de travailleur .
Définissez votre cost threshold of parallelism
loin de la valeur par défaut de 5 à une bonne valeur de départ comme 45, puis surveille cette valeur et réglez-le selon votre environnement.
Si vous exécutez beaucoup de requêtes adhoc, allumez-vous (réglé sur 1) optimize for ad hoc workloads
Pour prévenir les ballonnements au cache plan.
Utilisez avec prudence: vous pouvez utiliser ((( T8048 Si vous exécutez SQL Server 2008/2008 R2 sur des machines plus récentes avec plus de 8 Les processeurs présentés par numa Node et il y a un Hotfix si vous êtes sur SQL Server 2012 ou 2014 .
Je vous recommande vivement de commencer à collecter STATS WAIT Informations sur votre instance de serveur de base de données.
Reportez-vous: Comment cela fonctionne: SQL Server (Blocs de mémoire local, étranger et absenté)
Pore provenant d'une perspective matérielle, la gestion de la mémoire principale est la gestion de la mémoire NEHALEM par un contrôleur de mémoire intégré, ceci se trouve sur la partie "ONU-CORE" de la DIR de la CPU qui se sépare de la partie que vivent les noyaux réels, Parce que la mémoire est efficacement "câblée" à chaque processeur, l'accès à la mémoire étrangère AFAIK est via l'interconnexion de la piste rapide (à nouveau de Nehalem à partir de), je dirais donc que la saturation de la CPU sur un nœud numa local ne doit pas affecter l'accès à distance à cette mémoire.
Vous pourriez trouver ce lien utile:
http://cs.nyu.edu/~lerner/spring10/projects/numa.pdf
Chris