Je fais partie d'une petite entreprise de sorte que d'habitude couvrant un certain nombre de rôles différents. Le dernier de laquelle est d'acheter une zone SQL Server dédiée pour notre application Web .NET. Nous avons été cité sur une configuration de processeur Dual Xeon E5-2620 (six noyau) de 2,00 GHz (12 cœurs au total), avec 32 Go de RAM. Cela nous a laissé un budget limité pour le tableau de disques, qui consisterait essentiellement en deux 2,5 "SAS 3 300 Go de disques (15K tr/min) dans un RAID 1 config.
Je sais que la configuration du disque est sous-optimale pour SQL Server et j'aimerais vraiment appuyer sur RAID 10 afin que nous puissions mettre la base de données, journaliser des fichiers et TEMPDB sur leurs propres disques. Afin de rendre cela compatible avec notre budget, devrais-je envisager de réduire le nombre de cœurs de la CPU? Ou aurais-je une meilleure banque pour Buck gardant les noyaux et en utilisant moins de lecteurs, peut-être 4 dans une installation double RAID 1?
Voici quelques statistiques supplémentaires
La base de données SQL Server est inclinée vers un nombre élevé de lectures à écrire, probablement 80% vs 20% respectivement. La taille de dB actuelle est autour 10 Go 26 Go à l'heure actuelle, en croissance à taux de 250 Mo par mois.
Actuellement en cours d'exécution sur SQL Server 2008 R2 Standard sur une seule boîte de quad core Xeon partagée avec le serveur Web (12 Go de RAM, 2 x 10K 300GB SAS DRIVES DANS RAID 1), cherche à vous déplacer vers SQL Server 2012 Standard.
La base de données sert des utilisateurs simultanés d'environ 100 à 1550 avec quelques tâches de planification de fond lancées. Lecture de ceci, je pense que 12 cœurs sont sérieux survenus!
J'ai déployé toute l'application sur un service de cloud Azure (2 petites instances) liées à une DB SQL Azure. Bien que la performance soit raisonnable lors du test (presque zéro), j'ai perdu le courage d'utiliser dans la production en raison de l'imprévisibilité que j'avais lu autant. Cela peut fonctionner mieux avec une approche à l'échelle, mais avec une base de données de 10 Go de 10 Go, je peux probablement vous échapper à l'éloignement en ce moment et économiser de l'argent.
J'ai initialement négligé les coûts de licence et je n'ai pas compris que la licence SQL Server 2012 est basée sur le nombre de cœurs. J'ai un abonnement BizSpark MSDN avec une licence standard SQL Server 2012, de sorte que j'aurais besoin de lire combien de noyaux cela utiliserait hors de la boîte.
Parlant de l'expérience qui est humble, mais je pense que la mérite de partager, le principal goulot d'étranglement avec des bases de données SQL (Sybase et SQL Server ici) est stocké.
Mais je pense que ce n'est que juste que quelqu'un préalable à sa configuration avant de faire de mauvaises hypothèses. Dans mon cas, l'utilisation de la CPU n'a jamais été assez élevée pour justifier la mise à niveau de la CPU à tout moment. Au lieu de cela, j'ai mis à jour à partir d'un seul lecteur à RAID 1, puis à RAID 10 + une bosse de 8 Go à 16 Go de RAM.
Toutes ces mises à niveau Raid ont permis de réduire les temps d'attente antérieurs d'un facteur de 2 à 6. Je soupçonne que la mise à niveau vers SSDS serait encore meilleure. Si vous y réfléchissez, il peut tous être réduit à la bande passante (théorique). Votre [(RAM Vitesse + RAM Taille + Contrôleur de mémoire) en CPU] Combo 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 particularité (RAID) Storage a une limite de bande passante (affecte la lecture lorsque le cache manque et écrit lors de la rinçage ou avec de nombreux clients écrivant beaucoup de données combinées).
Normaliser toutes ces limites autant que possible (les rapprocher de telle que vous n'avez pas gaspillé des ressources) et les élever autant que possible (mise à niveau si nécessaire et seulement si nécessaire, ne laissez pas les ressources pour que le système gagnait. Pour être en mesure de les utiliser parce qu'un autre goulot d'étranglement est dans la voie). En fin de compte, votre pire goulot d'étranglement sera le moins performant (avec le sous-système de serveur le moins bande passante) dans votre configuration particulière.
J'ajouterai également 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 était que les fichiers journaux de base de données ont tendance à être intensives d'écriture. Un fichier journal est utilisé pour récupérer une base de données à partir d'un crash et il est toujours écrit à une transaction immédiatement commis avant que toutes les 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 des réplications ne sont pas effectuées instantanément mais souvent, l'impact de la performance de lecture est minimal ici. Au moins je le pense. J'ai fait une benchmarking minimale lors de la mise à niveau de cette mise à niveau, je recommande à quiconque les premiers reporteurs de leurs différentes configurations et de mettre à jour leur stockage, puis RAM et lien réseau, avant de penser à la mise à niveau de leurs processeurs.
Après plus de mises à niveau étendues sur plus de 5 serveurs, je suis revenu pour partager mon expérience. Je préconise définitivement toujours pour la première mise à niveau de stockage, puis RAM et puis la CPU. La raison est la disparité des largeurs de bande dans le système entre stockage, RAM et CPU, dans Ordre du plus bas au plus haut. J'ai donc mis à niveau une bande de serveurs de RAID10 et de Dual RAID1 à SSDS.
La façon dont je l'ai fait à cause des préoccupations de coûts (j'ai 20 autres serveurs à mettre à niveau) consiste à déplacer les fichiers de données de base de données et d'objets sur un SSD (oui, un seul SSD dans RAID0) et déplacez le journal de transaction plus TEMPDB sur un raid 4xHDD10 configuration. J'ai testé avec le TEMPDB sur le SSD également avec d'excellents résultats (en fait de très beaux résultats avec plus de 15 fois des requêtes plus rapides, donnant parfois quelques rapports prenant des secondes au lieu de minutes dans le passé) mais a ensuite déplacé la tempdb sur le disque RAID10 parce que des préoccupations intensives sur l'usure de l'écriture pour le SSD.
Donc, maintenant essentiellement, j'ai observé des temps de réponse 10-15 fois plus rapides par certaines des requêtes les plus longues. Le SSD est idéal pour lire des données dans RAM FAST car SQL Server n'apporte pas de données en RAM jusqu'à ce que les données demandées et bien sûr, doivent d'abord être chargées dans RAM== Pour être traité par la CPU (plus tard, dans le cache L1, L2, L3), SSDS aidez donc à réduire ce temps d'attente initial par un facteur énorme. Et SSDS aidez également à réduire les temps d'échange. . Effacer RAM et charger de nouvelles données, surtout si votre base de données est plus grande que possible dans la RAM.
Dans l'ensemble, nous sommes très heureux et couru comme de plusieurs mois dans une sorte de processus de migration lente pour permettre aux serveurs de fonctionner afin que je puisse collecter des informations au niveau de l'usure avant d'activer tous mes serveurs à cette configuration. Et ce n'est que SQL Server Express! : D - Assurez-vous simplement que vos SSDS peuvent fournir des iops constants, car c'est une autre chose qui fait une énorme différence (juste Google IT). C'est pourquoi j'ai choisi Intel DC (Datacenter) Series SSDS.
Un peu pas la réponse que vous recherchez probablement dans la première partie, mais: avez-vous envisagé de la pousser au nuage? AWS pourrait vous permettre de fournir la plupart des besoins ci-dessus et de prolonger votre pouvoir d'achat sans avoir à gérer le matériel.
Deuxième partie - Le matériel dépend vraiment des tâches. J'ai tendance à me 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 véritablement parallèles aux problèmes. La plupart du temps si s'il est préférable d'avoir défini des solutions basées, je trouve que RAM et la vitesse du disque dur est le plus gros goulot d'étranglement, et la seconde semble être votre cas. (Où l'idée SSD ci-dessus serait utile)
Sans aucune vraie statistiques de votre serveur, je vous suggère de regarder certaines solutions de mise en cache pour réduire les écrivies (sauf si vous faites une sorte de journalisation avec les écritures, ou des choses qui ont besoin d'une histoire) et de mettre beaucoup plus d'argent dans votre disque dur que les CPU. SQL Server est plutôt bon en parallèle sur les requêtes (s'ils sont écrits pour cela) mais si vous êtes lourd sur écrit, votre disque dur est le véritable goulot d'étranglement.