Je fais partie d'une petite entreprise, comme d'habitude, je couvre un certain nombre de rôles différents. Le dernier en date fournit un boîtier SQL Server dédié pour notre application Web .NET. Nous avons été cités sur une configuration de processeur Xeon E5-2620 double (six cœurs) à 2,00 GHz (12 cœurs au total), avec 32 Go de RAM. Cela nous a laissé un budget limité pour la matrice de disques, qui se composerait essentiellement de deux disques SAS 300 Go de 2,5 pouces (15 000 tr / min) dans une configuration RAID 1.
Je sais que la configuration du disque est sous-optimale pour SQL Server et je voudrais vraiment pousser pour RAID 10 afin que nous puissions mettre la base de données, les fichiers journaux et tempdb sur leurs propres lecteurs. Afin de rendre cela compatible avec notre budget, devrais-je envisager de réduire le nombre de cœurs de processeur? ou serais-je mieux placé pour conserver les cœurs et utiliser moins de lecteurs, peut-être 4 dans une configuration double RAID 1?
Voici quelques statistiques supplémentaires
La base de données SQL Server est orientée vers un nombre élevé de lectures sur écritures, probablement 80% contre 20% respectivement. La taille actuelle de la base de données est d'environ
10 Go,26 Go à l'heure actuelle, avec une croissance de 250 Mo par mois.Actuellement en cours d'exécution sur SQL Server 2008 R2 Standard sur un boîtier Xeon à quatre cœurs partagé avec le serveur Web (12 Go de RAM, 2 disques SAS de 10 000 Go 300 Go en RAID 1), vous envisagez de passer à SQL Server 2012 Standard.
La base de données sert environ 100 à 150 utilisateurs simultanés avec quelques tâches de planification en arrière-plan. En lisant ceci, je pense que 12 cœurs est une surpuissance sérieuse!
J'ai déployé toute l'application sur un service cloud Azure (2 petites instances) lié à une base de données SQL Azure. Bien que les performances soient raisonnables lors des tests (charge presque nulle), j'ai perdu le courage d'utiliser en production en raison de l'imprévisibilité dont j'avais tant lu. Cela peut mieux fonctionner avec une approche de mise à l'échelle, mais avec juste une base de données de 10 Go, je peux probablement m'en sortir en ce moment et économiser de l'argent.
J'ai d'abord ignoré les coûts de licence et je ne savais pas que la licence SQL Server 2012 est basée sur le nombre de cœurs. J'ai un abonnement BizSpark MSDN avec une licence SQL Server 2012 Standard, donc je devrais lire le nombre de cœurs que cela utiliserait hors de la boîte.
Réponses:
Parlant d'une expérience qui est humble mais je pense qu'il vaut la peine d'être partagé, le principal goulot d'étranglement avec les bases de données SQL (Sybase et SQL Server ici) est le stockage.
Mais je pense qu'il est juste que quelqu'un compare d'abord sa configuration avant de faire de fausses hypothèses. Dans mon cas, l'utilisation du processeur n'a jamais augmenté suffisamment pour justifier la mise à niveau du processeur de si tôt. Au lieu de cela, j'ai mis à niveau un seul disque vers RAID 1, puis vers RAID 10 + une bosse de 8 Go à 16 Go de RAM.
Toutes ces mises à niveau RAID ont contribué à réduire les temps d'attente précédents d'un facteur de 2 à 6. Je soupçonne que la mise à niveau vers des SSD serait encore meilleure. Si vous y réfléchissez, tout peut être réduit à une bande passante (théorique). Votre combo [(RAM Speed + RAM Size + Memory controller) link to CPU] a une limite de bande passante qui serait le facteur le plus important dans les opérations de lecture lorsque vos données doivent toujours être mises en cache, votre stockage (RAID) particulier a une limite de bande passante ( affecte les lectures lorsque le cache est manquant et écrit lors du vidage ou lorsque de nombreux clients écrivent beaucoup de données combinées).
Normalisez toutes ces limites autant que possible (rapprochez-les de sorte que vous n'avez pas de ressources gaspillées) et augmentez-les autant que possible (mettez à niveau si nécessaire et uniquement si nécessaire, ne laissez pas les ressources devenir gaspillées si le système gagne). t être en mesure de les utiliser car un autre goulot d'étranglement est en cours). En fin de compte, votre pire goulot d'étranglement sera le sous-système de serveur le moins performant (avec le moins de bande passante) dans votre configuration particulière.
Je pourrais également ajouter que, dans le processus de mise à niveau, j'ai créé des configurations RAID distinctes pour les fichiers de base de données et les fichiers journaux de base de données. La raison en était que les fichiers journaux de la base de données ont tendance à être gourmands en écriture. Un fichier journal est utilisé pour récupérer une base de données à partir d'un plantage et il est toujours écrit immédiatement dès qu'une transaction est validée avant que des données ne soient écrites dans le fichier de base de données.
Un fichier journal est également utilisé par certains serveurs de réplication de base de données, mais la plupart de la réplication n'est pas effectuée instantanément mais fréquemment, de sorte que l'impact sur les performances de lecture est minime ici. Au moins je le pense. J'ai effectué une analyse comparative minimale lors de cette mise à niveau.Je recommande donc à quiconque de comparer d'abord ses différentes configurations et de mettre à niveau son stockage, puis la RAM et la liaison réseau, avant de penser à mettre à niveau leurs processeurs.
Après des mises à niveau plus poussées sur plus de 5 serveurs, je suis revenu pour partager mon expérience. Je plaide définitivement pour la première mise à niveau du stockage, puis de la RAM, puis du CPU. La raison en est la disparité des bandes passantes dans le système entre le stockage, la RAM et le CPU, par ordre croissant. J'ai donc mis à niveau un tas de serveurs de RAID10 et de doubles RAID1 vers SSD.
La façon dont je l'ai fait en raison de problèmes de coût (j'ai 20 serveurs de plus à mettre à niveau) consiste à déplacer les fichiers de données et d'objets de la base de données vers un SSD (oui, un seul SSD en RAID0) et de déplacer le journal des transactions plus tempdb vers un 4xHDD RAID10 configuration. J'ai également testé avec le tempdb sur le SSD avec d'excellents résultats (en fait de très bons résultats avec des requêtes plus de 15 fois plus rapides parfois, produisant des rapports prenant quelques secondes au lieu de minutes dans le passé) mais j'ai ensuite déplacé le tempdb vers le disque RAID10 parce que des problèmes d'usure en écriture intensifs pour le SSD.
Alors maintenant, fondamentalement, j'ai observé des temps de réponse 10 à 15 fois plus rapides pour certaines des requêtes les plus longues. Le SSD est idéal pour lire rapidement des données dans la RAM car SQL Server n'apporte pas de données dans la RAM jusqu'à ce que cela soit demandé et bien sûr les données doivent d'abord être chargées dans la RAM pour être traitées par le CPU (plus tard, dans le cache L1, L2, L3) , de sorte que les SSD contribuent à réduire considérablement ce temps d'attente initial. Et les disques SSD aident également à réduire les temps de permutation ... en effaçant la RAM et en chargeant de nouvelles données, surtout si votre base de données est plus grande que ce qui peut tenir dans la RAM.
Dans l'ensemble, nous sommes très heureux et fonctionnons ainsi depuis plusieurs mois dans une sorte de processus de migration lente pour permettre aux serveurs de fonctionner afin que je puisse collecter des informations sur le niveau d'usure avant de basculer tous mes serveurs dans cette configuration. Et ce n'est que SQL Server Express! : D - Assurez-vous simplement que vos SSD peuvent fournir des IOPS constants car c'est une autre chose qui fait une énorme différence (il suffit de google). C'est pourquoi j'ai choisi les SSD de la série Intel DC (DataCenter).
la source
Pas du tout la réponse que vous cherchez probablement dans la première partie, mais: avez-vous envisagé de la pousser vers le cloud? AWS pourrait vous permettre de répondre à la plupart des besoins ci-dessus et d'étendre votre pouvoir d'achat sans avoir à gérer également le matériel.
Deuxième partie - Le matériel dépend vraiment des tâches. J'ai tendance à pencher vers plus de CPU lorsque je suis capable de faire une intégration CLR personnalisée, car je peux alors optimiser pour des solutions vraiment parallèles aux problèmes. La plupart du temps cependant, s'il est préférable d'avoir des solutions basées sur des ensembles, je trouve que la vitesse de la RAM et du disque dur est le plus gros goulot d'étranglement, et le second semble être votre cas. (Où l'idée SSD ci-dessus serait utile)
Sans aucune statistique réelle de votre serveur, je vous suggère de rechercher des solutions de mise en cache pour réduire les écritures (sauf si vous effectuez une sorte de journalisation avec les écritures ou des choses qui ont besoin d'un historique) et en mettant beaucoup plus d'argent dans vos disques durs. que les processeurs. Le serveur SQL est assez bon pour aller en parallèle sur les requêtes (si elles sont écrites pour cela) mais si vous êtes lourd sur les écritures, votre disque dur est le vrai goulot d'étranglement.
la source