Quelles sont les meilleures pratiques pour exécuter SQL Server dans une machine virtuelle?

21

Quelles sont les meilleures pratiques pour exécuter SQL Server dans une machine virtuelle? Mes activités de transaction en ligne sont très faibles, mais il y a une grande quantité de traitement de données dans le but de fournir des données de rapport à plusieurs sites Web.

JerryOL
la source
2
Où sont stockés les disques? sur un disque dur local à 5400 tr / min? Sur un SAN avec des connexions Fibre et des disques de broche 15k? De nos jours, toutes les machines virtuelles concernent les E / S, le processeur n'est presque rien à prendre en considération.
jcolebrand
Non, pas local. Mais je ne connais pas les détails du SAN.
JerryOL
2
Je ne peux pas ajouter de commentaires car je n'ai pas encore assez de réputation, mais [selon Microsoft] [1] en 2008 R2, il y a peu de différence de performances entre les disques virtuels fixes et dynamiques. [1]: blogs.msdn.com/b/tvoellm/archive/2009/08/05/…
Terry Bochaton
@Terry, à l'avenir, n'hésitez pas à signaler une telle réponse et nous la convertirons pour vous.
jcolebrand

Réponses:

18

Comme pour les machines physiques, IO est roi. Il y aura un hit IO notable de la virtualisation (la quantité de hit dépend de la technologie que vous choisissez), alors assurez-vous de ne rien faire qui puisse aggraver cela et nuire davantage aux performances IO.

  • Toujours utilisé une taille fixe, pas des disques virtuels dynamiques, et assurez-vous que les lecteurs / baies sous-jacents sont suffisants. Les disques virtuels dynamiques sont moins performants que ceux de taille fixe.
  • Si les données des machines virtuelles ne sont pas essentielles à la mission, activez la capacité des solutions de machine virtuelle à mettre en cache les écritures (mentant effectivement au système d'exploitation invité sur le moment où les choses sont physiquement écrites sur le disque) pour des performances supplémentaires. Ceci est utile pour une machine de développement et de test où les données sont facilement remplacées, ou des répliques en lecture seule locales au maître qui peuvent être recréées en cas de problème, mais il est recommandé que ces options restent désactivées pour les systèmes de production et de sauvegarde comme ils augmentent les risques de perte de données (ou pire, de corruption) si la machine s'éteint de manière inattendue.
  • Assurez-vous que chaque machine virtuelle dispose de suffisamment de RAM dédiée pour que l'ensemble de travail normal de chaque base de données tienne dans la mémoire avec une quantité d'espace suffisante pour éviter les E / S inutiles. De plus, assurez-vous que l'hyperviseur ne paginera pas à tout moment la RAM des machines virtuelles (par exemple, la plupart des produits VMWare peuvent le faire, ce qui vous permet d'exécuter un ensemble de machines virtuelles plus important que vous ne le pourriez autrement sur le même matériel, mais la dégradation des performances peut être massif - il existe une option pour régler ou désactiver ce comportement).
  • Si l'hôte utilise des matrices RAID5, envisagez de passer à RAID10. Cela réduira l'espace disponible mais supprimera les problèmes de performances d'écriture qui peuvent être apparents avec RAID5 (ou 6).
  • Pour les machines virtuelles susceptibles de voir beaucoup d'activité d'E / S, envisagez de leur donner leur propre lecteur ou baie, ou demandez-leur de partager leur ou leurs disques / baie (s) uniquement avec des données dont l'activité est faible.

Bien sûr, si l'intégralité de votre base de données (et tout ce que la VM exécute) s'intègre dans la RAM allouée à la VM et qu'elle voit très peu d'activité d'écriture, les performances d'E / S peuvent être beaucoup moins problématiques.

Edit: quelques points de plus:

  • Si vous utilisez des disques virtuels, assurez-vous que le meilleur type de contrôleur est utilisé pour les performances. Certaines solutions de virtualisation offrent plusieurs types de contrôleurs virtuels pour une meilleure compatibilité avec les invités et vous pourriez trouver certains moins efficaces que d'autres en raison des limitations de protocole dans la conception qu'elles émulent et des limitations des pilotes du système d'exploitation invité.
  • Si votre solution de virtualisation propose des pilotes spécifiques pour le contrôleur de lecteur virtuel, assurez-vous que votre système d'exploitation invité les utilise - ceux-ci peuvent accélérer les E / S en masse en réduisant le nombre de copies de mémoire à mémoire et l'hôte <-> hyperviseur <-> contexte invité commutateurs impliqués dans certaines opérations.
  • Les deux points ci-dessus s'appliquent si vous utilisez également un stockage réseau tel que des partages SMB simples ou iSCSI: assurez-vous que vous utilisez le contrôleur de réseau virtuel le plus efficace proposé et que votre système d'exploitation invité utilise le pilote recommandé pour cela, sinon les deux latences et la bande passante peut être plus limitée que ne le devrait la couche de virtualisation.
David Spillett
la source
1
Eh bien, oui et non. Un volume SAN monté dans la machine virtuelle via un initiateur iSCSI sera assez rapide!
Gaius
1
@Gaius: bon point. J'ai ajouté une note concernant les vNIC et les pilotes, qui sont susceptibles d'être la source de goulots d'étranglement supplémentaires dans ces cas.
David Spillett
9

Voici un bon point de départ: http://www.brentozar.com/sql/virtualization-best-practices/ et http://sqlskills.com/blogs/brent/category/Virtualization.aspx

Eric Humphrey - lotsahelp
la source
1
~ Y a-t-il des éléments que vous pourriez vouloir souligner dans les articles?
jcolebrand
2
Non. La virtualisation pouvant être un sujet complexe, je vous conseille de tout lire. Ce n'est pas vraiment tant que ça. Si le PO recherche une réponse rapide, ce ne sera probablement pas la bonne réponse.
Eric Humphrey - lotsahelp
J'étais après les meilleures pratiques en général. Après avoir déplacé SQLServer 2000 Standard vers une nouvelle machine virtuelle, j'essaie de résoudre les problèmes avec les sites Web appelant des procédures stockées qui expirent maintenant si elles ne sont pas mises en cache en mémoire; même si la mémoire physique et la mémoire virtuelle affectée sont les mêmes, 4 Go.
JerryOL
1
@JerryOL: assurez-vous que la RAM allouée à la machine virtuelle ne peut pas être paginée (sinon, allouer 4 Go à la machine virtuelle n'est pas la même chose que d'avoir 4 Go sur la machine physique) et si la solution de virtualisation que vous utilisez propose différents types de contrôleurs virtuels s'assure que le meilleur est choisi et que le bon pilote est utilisé par le système d'exploitation invité.
David Spillett