Taille appropriée du fichier d'échange Windows O / S pour SQL Server

Translate

Quelqu'un connaît-il une bonne règle de base pour la taille de fichier d'échange appropriée pour un serveur Windows 2003 exécutant SQL Server?

This question and all comments follow the "Attribution Required."

Toutes les réponses

Translate

Quelle que soit la taille de la RAM, vous avez toujours besoin d'un fichier d'échange d'au moins 1,5 fois la quantité de RAM physique. Cela est vrai même si vous avez une machine de 1 To de RAM, vous aurez besoin d'un fichier d'échange de 1,5 To sur le disque (cela semble fou, mais c'est vrai).

Lorsqu'un processus demande de la mémoire MEM_COMMIT via VirtualAlloc / VirtualAllocEx, la taille demandée doit être réservée dans le fichier d'échange. C'était vrai dans le premier système Win NT, et c'est toujours le cas aujourd'hui voirGestion de la mémoire virtuelle dans Win32:

Lorsque la mémoire est engagée, des pages physiques de mémoire sont allouéeset l'espace est réservé dans un fichier d'échange.

À quelques exceptions près, SQL Server demandera toujours des pages MEM_COMMIT. Et étant donné que SQL utilise unGestion dynamique de la mémoirepolitique qui réserve à l'avance autant de réserve tampon que possible (réserves ets'engageen termes de VAS), SQL Server demandera au démarrage une énorme réservation d'espace dans le fichier d'échange. Si le fichier d'échange n'est pas correctement dimensionné, les erreurs 801/802 commenceront à apparaître dans le fichier ERRORLOG et les opérations de SQL.

Cela provoque toujours une certaine confusion, car les administrateurs supposent à tort qu'une grande RAM élimine le besoin d'un fichier d'échange. En vérité, au contraire, une grande RAM augmente le besoin de fichier d'échange, simplement à cause du fonctionnement interne du gestionnaire de mémoire Windows NT. Le fichier d'échange réservé n'est, espérons-le, jamais utilisé.

La source
Translate

Avec tout le respect que je dois à Remus (que je respecte énormément), je ne suis pas du tout d'accord. Si votre fichier d'échange est suffisamment volumineux pour prendre en charge un vidage complet, il effectuera un vidage complet à chaque fois. Si vous avez une très grande quantité de RAM, cela peut entraîner une panne majeure.

Vous ne voulez PAS que votre serveur doive écrire 1 To de RAM sur le disque en cas de problème transitoire ponctuel. En cas de problème récurrent, vous pouvez augmenter le fichier d'échange pour capturer un vidage complet. J'attendrais de le faire jusqu'à ce que vous ayez été invité par PSS (ou quelqu'un d'autre qualifié pour analyser un vidage complet) à vous demander de capturer un vidage complet. Un pourcentage extrêmement faible de DBA savent comment analyser un vidage complet. Un mini-vidage suffit pour résoudre la plupart des problèmes qui surgissent de toute façon.

De plus, si votre serveur est configuré pour autoriser un vidage complet de 1 To et qu'un problème récurrent se produit, combien d'espace disque libre recommanderiez-vous d'avoir sous la main? Vous pouvez remplir un SAN entier en un seul week-end.

Un fichier d'échange de 1,5 * RAM était la norme à l'époque où vous aviez la chance d'avoir un serveur SQL avec 3 ou 4 Go de RAM. Ce n'est plus le cas. Je laisse le fichier d'échange à la taille et aux paramètres par défaut de Windows sur tous les serveurs de production (à l'exception d'un serveur SSAS qui subit une pression de mémoire).

Et juste pour clarifier, j'ai travaillé avec des serveurs allant de 2 Go de RAM à 2 To de RAM. Après plus de 11 ans, je n'ai eu qu'à augmenter le fichier d'échange pour capturer un vidage complet une fois.

La source
Translate

Selon Microsoft, «à mesure que la quantité de RAM d'un ordinateur augmente, le besoin d'un fichier d'échange diminue». L'article décrit ensuite comment utiliser les journaux de performances pour déterminer la part du fichier d'échangeréellementutilisé. Essayez de régler votre fichier d'échange sur la mémoire système 1,5X pour commencer, puis effectuez la surveillance recommandée et effectuez les ajustements à partir de là.

Comment déterminer la taille de fichier d'échange appropriée pour les versions 64 bits de Windows

La source
Translate

Le plus grand est le mieux jusqu'à la taille de l'ensemble de travail de l'application où vous commencerez à obtenir des rendements décroissants. Vous pouvez essayer de trouver cela en augmentant ou en diminuant lentement la taille jusqu'à ce que vous voyiez un changement significatif dans les taux de succès du cache. Cependant, si le taux de succès du cache est supérieur à 90%, vous êtes probablement OK. En règle générale, vous devez garder un œil sur cela sur un système de production pour vous assurer qu'il n'a pas dépassé son allocation de RAM.

La source
Translate

Nous avons récemment rencontré des problèmes de performances avec l'un de nos SQL Server que nous n'avons pas été en mesure de réduire complètement, et nous avons en fait utilisé l'un de nos tickets de support Microsoft pour les aider à résoudre les problèmes. La taille optimale du fichier d'échange à utiliser avec SQL Server est apparue, et la recommandation de Microsoft est qu'elle soit1 1/2 fois la quantité de RAM.

La source
Translate

Si vous recherchez des performances élevées, vous allez vouloir éviter complètement la pagination, de sorte que la taille du fichier d'échange devient moins importante. Investissez dans autant de RAM que possible pour le serveur DB.

La source
Translate

Après de nombreuses recherches, nos serveurs SQL dédiés exécutant Enterprise x64 sur Windows 2003 Enterprise x64 n'ont pas de fichier d'échange.

Simplement, le fichier d'échange est un cache pour les fichiers qui sont gérés par le système d'exploitation, et SQL a son propre système de gestion de la mémoire interne.

L'article MS référencé ne qualifie pas le fait que le conseil concerne le système d'exploitation exécutant des services prêts à l'emploi tels que le partage de fichiers.

Avoir un fichier d'échange alourdit simplement les E / S du disque car Windows essaie d'aider, alors que seul le système d'exploitation SQL peut faire le travail.

La source
js5
Translate

Dans ce cas, la recommandation normale de 1,5 fois la RAM physique totale n'est pas la meilleure. Cette recommandation très générale est fournie sous l'hypothèse que toute la mémoire est utilisée par des processus "normaux", qui peuvent généralement déplacer leurs pages les moins utilisées sur le disque sans générer de problèmes de performances massifs pour le processus d'application auquel appartient la mémoire.

Pour les serveurs exécutant SQL Server (généralement avec de très grandes quantités de RAM), la majorité de la RAM physique est engagée dans le processus SQL Server et doit être (si elle est correctement configurée) verrouillée dans la mémoire physique, ce qui l'empêche d'être paginée vers le fichier d'échange . SQL Server gère sa propre mémoire très soigneusement avec les performances à l'esprit, en utilisant une grande partie de la RAM allouée à son processus comme un cache de données pour réduire les E / S disque. Cela n'a pas de sens de paginer ces pages de cache de données vers le fichier d'échange, car le seul but d'avoir ces données dans la RAM est en premier lieu de réduire les E / S disque. (Notez que le système d'exploitation Windows utilise également la RAM disponible de la même manière que le cache disque pour accélérer le fonctionnement du système.) Étant donné que SQL Server gère déjà son propre espace mémoire, cet espace mémoire ne doit pas être considéré comme «paginable» et non inclus dans un calcul pour le fichier d'échange Taille.

En ce qui concerne MEM_COMMIT mentionné par Remus, la terminologie est déroutante car dans le langage de la mémoire virtuelle, "réservé" ne fait jamais référence à l'allocation réelle, mais à empêcher l'utilisation d'un espace d'adressage (pas d'espace physique) par un autre processus. La mémoire disponible pour être «validée» est fondamentalement égale à la somme de la RAM physique et de la taille du fichier d'échange, et faire un MEM_COMMIT décrémente simplement la quantité disponible dans le pool engagé. Cela faitne pasallouer une page correspondante dans le fichier d'échange à ce moment-là. Lorsqu'une page de mémoire validée est réellement écrite, c'est à ce moment que le système de mémoire virtuelle allouera une page de mémoire physique et fera éventuellement passer une autre page de mémoire de la RAM physique au fichier d'échange. Voir MSDNFonction VirtualAllocréférence.

Le système d'exploitation Windows garde une trace des pressions de mémoire entre les processus d'application et son propre mécanisme de cache disque et décide quand il doit faire passer les pages de mémoire non verrouillées du fichier physique au fichier d'échange. Je crois comprendre que le fait d'avoir un fichier d'échange qui est beaucoup trop volumineux par rapport à l'espace mémoire non verrouillé réel peut entraîner une pagination excessive de la mémoire d'application vers le fichier d'échange par Windows, ce qui fait que ces applications subissent les conséquences des erreurs de page (performances lentes).

Tant que le serveur n'exécute pas d'autres processus gourmands en mémoire, une taille de fichier d'échange de 4 Go devrait suffire. Si vous avez défini SQL Server pour autoriser le verrouillage des pages en mémoire, vous devez également envisager de définir le paramètre de mémoire maximale de SQL Server afin qu'il laisse une certaine RAM physique disponible au système d'exploitation pour lui-même et d'autres processus.

Les erreurs 802 dans SQL Server indiquent que le système ne peut plus valider de pages supplémentaires pour le cache de données. L'augmentation de la taille du fichier d'échange n'aidera dans cette situation que dans la mesure où Windows est capable de paginer la mémoire à partir de processus non SQL Server. Permettre à la mémoire SQL Server de se développer dans le fichier d'échange dans cette situation peut éliminer les messages d'erreur, mais cela est contre-productif, en raison du point précédent sur la raison du cache de données en premier lieu.

La source