Serveur SQL monocœur sur VM

7

Récemment, notre district scolaire a mis à niveau plusieurs serveurs de la version 2005 à 2016 et des serveurs physiques aux serveurs VM.

Notre équipe d'infrastructure a présenté les serveurs VM pour l'installation de SQL Server avec un seul cœur.

J'essaie d'expliquer au chef de ce département que SQL Server «déteste» être sur un seul cœur et qu'il veut voir la «preuve». Aucune des données que j'ai présentées n'a satisfait son besoin de preuve et il a donc demandé des articles sur les raisons pour lesquelles un VM SQL Server ne fonctionnera pas efficacement sur un seul cœur.

Quels articles utilisez-vous pour cela?

Toute aide pour moi pour faire mon cas serait appréciée!

Deb
la source
7
Lorsque vous acquérez une licence SQL sur une machine virtuelle, vous payez quand même un pack de deux licences. Vous jetez de l'argent en ne lui donnant pas au moins deux cœurs, même si vous bénéficiez d'une remise éducative.
Erik Darling
4
Vous pouvez vous référer à l'article de Glenn Barry (10+ années Microsoft MVP) de 2015 qui répertorie les processeurs recommandés pour SQL 2014, dont le plus petit a six cœurs.
LowlyDBA
2
Aussi, il y a quelque temps, j'ai écrit un livre blanc pour Google sur le dimensionnement des machines virtuelles dans le cloud. Vous pouvez également l'appliquer sur site.
Erik Darling
En développant le commentaire @sp_BlitzErik, les licences de base minimales pouvant être appliquées à un seul serveur SQL, qu'il soit virtuel ou physique, sont de 4 licences (voir le Guide des licences ). L'alternative consiste à autoriser les cœurs physiques de l'hôte. Avec ce modèle, vous êtes libre d'exécuter autant de machines virtuelles avec autant de vCores que vous le souhaitez.
Mark Storey-Smith,

Réponses:

11

Tout processus non SQL Server qui consomme de l'UC peut rendre l'ensemble de SQL Server complètement inutilisable.

Par exemple, Windows Update arrêtera SQL Server pendant le déballage des assemblys .Net.

Tout processus antivirus, même s'il est configuré pour exclure les fichiers et dossiers de données SQL Server, peut entraîner la non-réponse de SQL Server pendant qu'il analyse les fichiers et décompresse les fichiers de définition de virus mis à jour.

Si vous avez installé un logiciel de gestion, tel qu'IBM Tivoli Server Monitor, et qu'il décide d'utiliser 100% d'un cœur, vous ne pourrez probablement rien faire d'autre que l'arrêt à froid de la machine. Ne me demandez pas pourquoi j'en parle.

Je pourrais continuer, mais il suffit de dire que tout serveur avec un seul cœur demande simplement des problèmes de performances et de gestion. Vérifiez que tout ordinateur avec un seul cœur doit être considéré comme inutilisable aujourd'hui. Heck, mon téléphone a 8 cœurs.

Pendant que vous y êtes, convaincre le gars de la virtualisation de donner à chaque serveur SQL une réservation de mémoire raisonnable qui garantira que la mémoire de SQL Server ne sera pas paginée de la mémoire principale des hôtes sur le disque.

Pour les serveurs SQL hébergés par VMware, vous devez configurer VMware conformément au guide des meilleures pratiques d'architecture SQL Server sur VMware .

Cela se résume vraiment à une machine virtuelle à cœur unique ne peut exécuter qu'un seul thread à un moment donné. La virtualisation n'est pas une solution miracle pour cette situation d'un cœur par thread.

Les points ci-dessus tiennent compte du fait que Windows NT (la base de code de 1993 sur laquelle toutes les versions modernes de Windows sont construites) utilise le multitâche préemptif. Le multitâche préemptif permet au système d'exploitation d'appliquer le multitâche en forçant le changement de contexte à des horaires réguliers. Même avec le multitâche préemptif, un serveur avec un seul cœur souffrira toujours de très mauvaises performances si une seule tâche décide d'utiliser autant de CPU que possible, car l'O / S donnera à cette tâche autant de temps CPU que possible. tout en permettant l'exécution de tâches de priorité plus élevée, forçant le processeur à 100%. Si SQL Server est en cours d'exécution au moment où le CPU passe à 100%, le quantum de CPU de SQL Server sera réduit au point de devenir très visible. Dans les scénarios ci-dessus que j'ai décrits, je n'ai pasdisons que la machine (ou même SQL Server) "s'arrêtera" ou "mourra" complètement; ce serait tout simplement faux. Cependant, la machine peut devenir si occupée que, à toutes fins utiles, la machine devient inutilisable. L'ajout d'un deuxième cœur, bien que n'étant certainement pas une panacée, réduit la probabilité que la machine ne réponde plus complètement. Chaque cœur supplémentaire signifie qu'un autre thread peut fonctionner à 100% CPU sans que la machine devienne inutilisable.

Max Vernon
la source
Le serveur Windows n'a-t-il pas (et a-t-il toujours eu) des tâches multitâches préventives? À moins que je ne me trompe, ce que vous décrivez est le multitâche coopératif, les processus se succédant lorsqu'ils ont accompli leur tâche de haut niveau. Bien sûr, la controverse pourrait retarder une réponse, mais elle ne devrait pas arrêter complètement les choses. Je suis d'accord sur le fait que mutli-core est une bonne idée, sinon une meilleure pratique, mais le scénario de la catastrophe que vous définissez ne semble pas correct.
Mâtt Frëëman
Il y a aussi parfois une bonne raison de rester monocœur, si vous étiez auparavant un seul cœur physique et que les applications qui parlent à votre instance de cœur unique ont enfreint les meilleures pratiques telles que ne pas spécifier un ordre de tri, et considéraient que l'ordre était implicitement stable en l'absence d'un tel puis le passage au multicœur peut afficher des bogues qui étaient auparavant supprimés par la nature du cœur unique. Si vous n'avez pas le budget pour re-QA ces applications ou peu de confiance dans les développeurs ou peut-être qu'ils ont déjà disparu, faire correspondre les serveurs physiques existants en termes de cœurs exposés peut parfois être une valeur sûre
Mâtt Frëëman
Salut @ MâttFrëëman - J'ai ajouté une section à ma réponse traitant du multitâche préemptif. Vous m'avez rappelé à quel point la base de code NT est meilleure que la multitâche coopérative basée sur DOS utilisée par la base de code Windows originale, jusqu'à Windows ME inclus.
Max Vernon
Je suis d'accord avec la plupart de vos commentaires sur le fait que rester sur un seul cœur est parfois un mal nécessaire. Ma réponse suppose que les machines physiques qui ont été virtualisées étaient probablement des serveurs multicœurs, sur la base du souhait de l'OP d'avoir des machines virtuelles multicœurs.
Max Vernon
@MaxVernon Merci, c'est exactement ce dont nous avions besoin!
Deb
6

J'ai dû prouver la même chose auparavant. Ce qui est finalement parvenu à notre équipe de planification des capacités, c'est que nos bases de données étaient presque inutilisables lors d'une sauvegarde.

En tant que DBA, votre plus grande crainte devrait être la perte de données. Si vous ne pouvez pas exécuter des sauvegardes en toute confiance sans effectuer ou provoquer une panne, c'est un gros problème. Exécutez des tests pour vous assurer que les performances sont affectées lors d'une sauvegarde, puis expliquez qu'avec plusieurs cœurs, le problème devrait disparaître.

Neghtasro
la source
3
En fait, toute quantité sérieuse d'E / S, qu'elles soient liées à SQL Server ou non liées à SQL Server, peut provoquer un problème.
Max Vernon
3
@MaxVernon Absolument - Je viens de mentionner spécifiquement les sauvegardes car c'est un problème que j'ai déjà traité (à 3 heures du matin, natch), c'est facile à prouver et "nous ne pouvons pas faire de sauvegardes sans panne!" devrait suffire à inciter tout gestionnaire d'infrastructure raisonnable à épargner un maigre noyau.
Neghtasro
2

Afin de fournir une preuve convaincante que votre serveur a besoin de plus d'un processeur, vous devrez fournir des informations sur la charge de travail et les requêtes exécutées sur le serveur. Si elle ne possède qu'une seule base de données de moins de 100 Mo, par exemple, et que toutes les requêtes sont très simples et efficaces, il peut être pratiquement inutile de disposer de plus de cœurs.

Je vous recommande de commencer à capturer des plans de requête qui vont en parallèle et le temps qu'il leur faut pour terminer. Cela démontrera que la charge de travail en cours d'exécution sur le système bénéficiera de la présence de plusieurs processeurs.

S'il est déjà en production dans l'environnement de machine virtuelle, vous devez également capturer les données de performances d'utilisation du processeur. Si vous pouvez montrer que le CPU atteint son maximum à 100% pendant de longues périodes, cela fournirait également une bonne preuve que le système a besoin de plus de CPU.

Tony Hinkle
la source
5
Bien sûr, il n'y aura pas de plans parallèles sur une machine virtuelle à cœur unique. Vous auriez besoin de capturer ces plans sur une boîte qui a plus d'un seul cœur.
Max Vernon
3
Pour ajouter au commentaire de Max, si vous regardez dans le plan XML sur un serveur avec un seul cœur, vous verrez NonParallelPlanReason="EstimatedDOPIsOne".
Erik Darling
@Tony je l' ai déjà ai leur a fourni des données , mais on m'a dit qu'un seul noyau était une meilleure pratique avec une machine VM. d'où mon besoin d'aide!
Deb
1
@Deb Oh mon Dieu - je n'ai jamais entendu parler de cette meilleure pratique! Je peux entendre le trombone triste de Brent Ozar d'ici. Je serais préoccupé par le fait que quelqu'un qui fait des déclarations comme celle-ci soit en charge d'une infrastructure de machine virtuelle.
Tony Hinkle
@TonyHinkle - Je suis d'accord. Une machine virtuelle à cœur unique n'est jamais une bonne idée, laissez à un seul une «meilleure pratique». Ok, peut-être 99,999% du temps au lieu de "jamais": - /
Max Vernon
2

Vous devriez peut-être leur demander pourquoi ils insistent sur le fait que ce serait une bonne idée de n'affecter qu'un seul cœur par machine virtuelle SQL Server.

Ensuite, en fonction de leur réponse, vous pourriez essayer de les convaincre sur la base du point 3.3.2 de ce lien:

SqlServer-on-vmware-best-pratices

VMware recommande que, pour le dimensionnement initial, le nombre total de processeurs virtuels attribués à toutes les machines virtuelles ne dépasse pas le nombre total de cœurs physiques

Si cet élément n'est pas la raison pour laquelle l'équipe d'infrastructure ne provisionne qu'un seul cœur par VM, alors, sans doute, le matériel est gaspillé.

Rogerlr
la source
Vous ne savez pas comment la citation aide le cas pour plus de processeurs?
LowlyDBA
Oui, mais la raison pour laquelle l'équipe d'infraestruture n'a pas mis plus de processeurs par machine virtuelle n'est pas aussi claire.
Rogerlr