Mémoire maximale de SQL Server, fichier d'échange, parallélisme de degré maximal

15

Trois questions vous attendent, maîtres DBA de l'univers:


  1. Je sais qu'il est préférable de définir la mémoire maximale de SQL Server. Donc, si un serveur avec 44 Go de RAM a installé SQL Server, nous devons définir la mémoire maximale de SQL Server à environ 37 Go.

Mais que devons-nous définir si SQL Analysis Service et SQL Reporting Services sont installés sur le même serveur que SQL Server? Est-il alors préférable de définir la mémoire maximale de SQL Server à 22 Go de RAM pour que l'analyse puisse prendre les 22 Go de RAM restants?


  1. Sur un serveur exécutant SQL Server avec 44 Go de RAM, quelle est la meilleure pratique pour définir la taille du fichier d'échange? J'ai lu sur Brent Ozar ( http://www.brentozar.com/archive/2014/06/sql-server-setup-checklist-free-ebook-download/ ) ce qui suit:

SQL Server n'a pas besoin d'un fichier de page géant. si vous installez d'autres applications sur le serveur (ce que nous déconseillons - SQL Server doit être isolé). vous aurez peut-être besoin d'un fichier de page plus grand. Si SQL Server est le seul service majeur exécuté sur la boîte, nous créons généralement un fichier d'échange de 2 Go sur le lecteur système.

Microsoft dit que nous devrions définir un système de fichiers de page géré à 1,5 fois la RAM, ce qui correspond aux conseils donnés par Remus (voir -> http://rusanu.com/2009/11/22/system-pagefile-size-on-machines-with -grand-ram / ).

Ainsi, sur notre serveur avec 44 Go de RAM, nous avons installé SQL Server à côté de SQL Analysis Service et SQL Reporting Services. Quelle taille devons-nous définir le fichier d'échange?


  1. Pour SharePoint, le serveur SQL qui fait partie de la batterie de serveurs de SharePoint et où SharePoint stocke ses bases de données, le degré de parallélisme maximal doit être défini sur 1. Maintenant que nous avons un serveur qui ne fait pas partie de la batterie de serveurs SharePoint (appelez-le sql2) sur ce serveur, nous avons installé SQL Server, SQL Analysis and Reporting. SharePoint ne stocke pas ses bases de données sur ce serveur, mais nous avons créé des bases de données / cubes de création de rapports et d'analyse que SharePoint lit et écrit.

Brent Ozar dit:

Règle générale: définissez ce paramètre sur le nombre de cœurs physiques dans un seul noeud NUMA (processeur) de sockets sur votre matériel ou moins

Que devrions-nous configurer sur cette instance SQL Server pour un degré de parallélisme maximal lorsqu'elle dispose de 4 VCPU?


J'espère que vous donnez non seulement moi mais plus d'admins sql un peu plus de perspicacité dans les meilleures pratiques que la jungle sur les interwebs.

sp_eric_blitz
la source

Réponses:

12

Vos 3 questions touchent max memory, page fileet max dop setting.

MÉMOIRE MAX


Si le serveur est dédié à SQL Server uniquement sans services d'analyse (puisque SSAS est une autre bête), les meilleures pratiques recommandées par Glenn sont un bon point de départ . Pour des composants supplémentaires, vous devriez vous référer au blog de Jonathan sur la façon de configurer la mémoire max .

J'ai répondu sur la configuration de la mémoire maximale et minimale de SQL Server . Cela sera utile si vous avez beaucoup de packages SSIS en cours d' exécution sur votre instance de serveur.

Fichier de page


Je le place normalement loin du C:\lecteur sur le lecteur qui dispose d'un espace disque suffisant. Je suis d'accord avec la recommandation de Remus et Brent. Ça devrait l'être PAGE FILE FOR SQL SERVER = 1.5 * RAM. Un fichier d'échange sera utile lorsque vous vous retrouverez dans une situation où vous devrez prendre un DUMP DE MÉMOIRE COMPLÈTE (normalement demandé par Microsoft CSS) pour le dépannage.

Lisez Comment déterminer la taille de fichier d'échange appropriée pour les versions 64 bits de Windows KB 889654 et Buck Woody parle de fichier d' échange ici .

Réglage MAX DOP


Pour sharepoint, il est recommandé de maxdop = 1définir l'ensemble de l'instance. Pour un serveur SQL normal, je vous suggère de suivre - Quelle est une bonne façon répétable de calculer MAXDOP sur SQL Server? J'ai un script écrit qui le calculera pour vous.

L'essentiel est ci-dessous ( KB 2806535 mentionne également la même chose):

8 or less processors    ===> 0 to N (where N= no. of processors)
More than 8 processors  ===> 8
NUMA configured         ===> MAXDOP should not exceed no of CPUs assigned to each 
                                 NUMA node with max value capped to 8
Hyper threading Enabled ===> Should not exceed the number of physical processors.

En guise de remarque, je vous suggère de lire - Mises à jour recommandées et options de configuration pour SQL Server 2012 et SQL Server 2014 avec des charges de travail hautes performances

Kin Shah
la source
Une chose à noter est que sur le blog de Buck Woody référencé ci-dessus, Remus commente "Ce qui sauve la journée c'est AWE: la mémoire réservée via AWE n'est pas requise d'avoir une réservation de fichier d'échange (car elle est verrouillée dans la RAM physique et ne peut donc pas être L’utilisation d’AWE est automatique sur x64. " Ce qui semble avoir vu avec AWE, nous n'avons pas besoin d'un gros fichier de page.
Jason Carter
@Kin vous avez dit "je suis d'accord avec la recommandation de Remus et Brent". Mais après avoir parcouru le guide d'installation de Brent (cité par l'OP ci-dessus) et l'article de Remus, ils sont contradictoires. Donc, pour moi, votre réponse concernant le fichier d'échange laisse des questions en suspens.
Magier
1
@Magier J'ai tendance à suivre la recommandation MS car je me suis retrouvé dans une situation où nous devions effectuer un vidage de mémoire complet pour diagnostiquer le problème - nous ne savions pas s'il s'agissait de Windows ou d'un serveur SQL. Dans cette situation, la recommandation de la SEP est la meilleure. Si vous n'entrez pas dans cette situation, les conseils de Brent sont également valables. J'ai tendance à être du bon côté, alors je continue PAGE FILE FOR SQL SERVER = 1.5 * RAM. Est-ce que ça répond à votre question ?
Kin Shah
3

Ainsi, sur notre serveur avec 44 Go de RAM, nous avons installé SQL Server à côté de SQL Analysis Service et SQL Reporting Services. Quelle taille devons-nous définir le fichier d'échange?

Bien ajouter à ce que Kin a déjà mentionné, je vous suggère d'utiliser Perfmon Counterspour calculer quelle devrait être la taille de votre fichier de page. J'accepte également la recommandation de Remus selon laquelle le fichier d'échange devrait être 1,5 fois la RAM du système . Mais cette recommandation considère tous les aspects et scénarios possibles et la «recommandation générale». Je suppose que vous êtes plus intéressé par la valeur concrète. Alors voilà

Les besoins en fichiers d'échange d'un système individuel varient en fonction du rôle du serveur, de la charge, etc. Il existe certains compteurs de performances que vous pouvez utiliser pour surveiller l'utilisation de la mémoire privée validée à l'échelle du système ou par fichier de pages. Il n'existe aucun moyen de déterminer la quantité de mémoire privée engagée d'un processus résidant et la quantité paginée vers les fichiers de pagination.

Mémoire: octets validés: nombre d'octets de mémoire virtuelle qui ont été validés. Cela ne représente pas nécessairement l'utilisation du fichier d'échange - cela représente la quantité d'espace du fichier d'échange qui serait utilisée si le processus était complètement non résident.

Mémoire: limite de validation: nombre d'octets de mémoire virtuelle pouvant être validés sans avoir à étendre les fichiers de pagination.

Fichier de pagination:% d'utilisation Pourcentage du fichier de pagination validé

Fichier de pagination:% d'utilisation maximale Pourcentage le plus élevé du fichier de pagination engagé

Veuillez utiliser les compteurs ci-dessus pour définir la valeur appropriée pour le fichier d'échange. Vous pouvez lire ce lien pour obtenir plus d'informations sur le fichier d'échange.

Est-il alors préférable de définir la mémoire maximale de SQL Server à 22 Go de RAM pour que l'analyse puisse prendre les 22 Go de RAM restants?

Non, je ne pense pas que vous ayez manqué les exigences du système d'exploitation ici. Vous devez d'abord définir la mémoire de serveur maximale optimale pour SQl Server. Ce thread SE contient plus de détails sur la définition de la valeur de mémoire max du serveur correcte. Encore une fois, je réponds fortement et toujours sur les compteurs de perfmon pour voir ce qui serait une valeur optimale. Je vous suggère de lire cet article et de prendre l'aide des compteurs pour définir la valeur optimale pour SSAS. J'ai déjà utilisé ce blog pour définir la valeur de la mémoire pour SSAS. Je ne suis pas tellement dans SSAS donc mes commentaires se limiteront à cet article uniquement.

Vous devez conserver MAXDOP = 1 pour les instances Sharepoint son paramètre largement accepté. Si l'IIRC la recommandation est devenue largement acceptée après de fréquents blocages ont été rencontrés lorsque le degré maximal de parallélisme a été laissé à la valeur par défaut

Shanky
la source
3

Toutes les autres réponses données jusqu'ici pour la référence de taille de fichier de page sont des articles relativement obsolètes. Ce billet Technet Blog est plus à jour (octobre 2015) et donne un moyen plus détaillé de calculer la taille idéale du fichier d'échange sur les systèmes modernes.

Ils indiquent clairement que l'ancienne règle empirique de 1,5 x RAM ne s'applique plus.

J'ai collé le contenu principal de cet article ci-dessous pour éviter la pourriture des liens.

Notez qu'ils recommandent de collecter des métriques de votre serveur fonctionnant à pleine utilisation pendant au moins 1 semaine - donc aux étapes de planification et de mise en œuvre de vos projets, vous ne serez peut-être pas en mesure de le faire et devrez prendre du temps plus tard dans votre projet faire cela.


Lors du dimensionnement du fichier d'échange, nous devons tenir compte des besoins en mémoire de nos applications et des paramètres de vidage sur incident.

Comment savez-vous la quantité de mémoire dont votre application a besoin? La meilleure façon est de prendre une référence.

Run Performance Monitor (Perfmon)
Go to Data Collector Sets\User Defined
Right click on User Defined and select New
Select Create Manually and next
Check Performance counter
Add the following counters:

        Memory\Committed Bytes - Committed Bytes is the amount of committed virtual memory, in bytes.
        Memory\Committed Limit - Amount of virtual memory that can be committed without having to extend the paging file
        Memory\% Committed Bytes In Use - Ratio of Memory\Committed Bytes to the Memory\Commit Limit 

Remarque: assurez-vous de collecter les informations sur une longue période (une semaine au moins), et le serveur fonctionne à pleine utilisation.

La formule de taille du fichier d'échange doit être:

(Valeur maximale des octets validés + tampon supplémentaire de 20% pour prendre en charge toutes les salves de charge de travail) -Taille RAM

Par exemple: si le serveur a 24 Go de RAM et que le maximum d'octets validés est de 26 Go, le fichier d'échange recommandé sera: (26 * 1.2) -24) = 7,2 Go

Qu'en est-il du deuxième facteur: la taille dont nous avons besoin pour enregistrer les informations lorsque le système plante?

La taille du vidage de mémoire est déterminée par son type:

Complete Memory Dump  RAM Size + 257 MB
Kernel Memory Dump  The amount of kernel-mode memory in use (on 32-bit maximum is 2 GB, on 64-bit the maximum can go up until 8 TB)
Small Memory Dump  64KB  512 KB

Dans la plupart des cas, le vidage de la mémoire du noyau est suffisamment bon pour l'analyse des causes profondes, car le vidage complet de la mémoire n'est requis que dans des cas spécifiques, par exemple, vous voulez voir ce qui s'est passé en mode utilisateur.

D'après mon expérience, la taille du vidage de mémoire du noyau est généralement la suivante:

On System with up to 256GB RAM =  8-12 GB size for Kernel Memory dump
On System with up to 1.5TB RAM = 8-32 GB size for Kernel Memory dump

Cependant, ces chiffres ne sont PAS une recommandation officielle de Microsoft et peuvent être différents sur vos serveurs, alors testez toujours avant de postuler.

Mike
la source
2

Répondant depuis que je suis l'une des personnes que vous citez, hé.

1. À quoi dois-je définir la mémoire maximale lorsque j'exécute également Analysis Services?

Vous ne trouverez pas de conseils là-bas, car SSAS est comme n'importe quelle autre application installée sur votre SQL Server: nous ne savons tout simplement pas combien de mémoire vous allez utiliser. Traitez SSAS / SSIS / SSRS comme des applications tierces - elles se trouvent juste être incluses comme "gratuites" dans la boîte SQL Server. Ils ont des besoins de CPU, de mémoire et de stockage totalement différents.

2. À quoi dois-je définir la taille du fichier d'échange?

Mes recommandations sont pour que Windows puisse faire un mini-vidage. Si vous rencontrez un problème où vous devez appeler le support Microsoft, vous pouvez commencer par le mini-vidage. Si le problème se reproduit et qu'ils ne peuvent pas le découvrir à partir du mini-vidage (ou d'autres sources d'informations, comme le journal des erreurs), ils peuvent vous demander de passer à une taille de RAM 1,5x.

Les recommandations de 1,5x RAM de Microsoft sont pour que Windows puisse effectuer un vidage complet de la mémoire lorsque votre système se bloque.

De nos jours, avec des serveurs ayant 64-128-256 Go de RAM, ce n'est généralement pas une bonne idée de faire une pause Windows pour écrire tout le contenu de la mémoire lors d'un crash. Vous préférez que SQL Server soit de nouveau opérationnel et vous occupiez du contenu du mini-vidage plutôt que du contenu complet. Enregistrez les vidages complets pour plus tard - vous pouvez généralement poursuivre toute votre carrière sans avoir à télécharger un fichier de vidage de 64 + Go sur Microsoft. (Bonne chance sur celui-là.)

3. À quoi dois-je définir MAXDOP pour SharePoint?

Ce que vous appelez «mes» recommandations provient de Microsoft KB 2806535 . Commencez par là en général, mais lorsqu'une application spécifique vous dit quelque chose de différent, alors ils savent quelque chose sur leur application qui est différent de SQL Server en général - suivez cela.

Brent Ozar
la source