sql-server - sur - sql server change default location




Taille de fichier d'échange Windows O/S appropriée pour SQL Server (6)

Si vous recherchez des performances élevées, vous allez vouloir éviter complètement la pagination, donc la taille du fichier de page devient moins importante. Investir autant de RAM que possible pour le serveur DB.

Est-ce que tout le monde connaît une bonne règle pour la taille de fichier d'échange appropriée pour un serveur Windows 2003 exécutant SQL Server?


Le plus grand sera 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 ceci en augmentant ou 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 réussite du cache est supérieur à 90%, vous êtes probablement OK. Généralement, vous devriez garder un œil sur un système de production pour vous assurer qu'il n'a pas dépassé son allocation de RAM.


Peu importe 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 RAM de 1 TB, 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 la mémoire MEM_COMMIT via VirtualAlloc / VirtualAllocEx, la taille demandée doit être réservée dans le fichier d'échange. Cela était vrai dans le premier système Win NT, et est toujours vrai aujourd'hui voir Gestion de la mémoire virtuelle dans Win32 :

Lorsque la mémoire est validée, les pages physiques de la mémoire sont allouées et l'espace est réservé dans un fichier d'échange .

Bare certains cas extrêmes, SQL Server demandera toujours des pages MEM_COMMIT. Et étant donné que SQL utilise une politique de gestion dynamique de la mémoire qui réserve autant de mémoire tampon que possible (réserves et validations en 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 apparaîtront dans le fichier et les opérations ERRORLOG 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 réalité, le contraire se produit, une grande RAM augmente le besoin de pagefile, juste à cause des fonctionnements internes du gestionnaire de mémoire de Windows NT. Le fichier d'échange réservé est, espérons-le, jamais utilisé.


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

Simplement, le fichier de page 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 que le conseil est pour le système d'exploitation exécutant des services prêts à l'emploi tels que le partage de fichiers.

Avoir un fichier de page surcharge simplement l'E / S du disque parce que Windows essaye d'aider, quand seul le système d'exploitation SQL peut faire le travail.


Selon Microsoft, «au fur et à mesure que la quantité de RAM augmente dans un ordinateur, le besoin d'un fichier de page diminue». L'article décrit ensuite comment utiliser les journaux de performances pour déterminer la quantité de fichier de page réellement utilisée. Essayez d'initialiser votre fichier de page sur la mémoire système 1.5X, puis effectuez la surveillance recommandée et effectuez les réglages à partir de là.

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


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 en supposant que toute la mémoire est utilisée par des processus «normaux», dont les pages les moins utilisées peuvent généralement être déplacées sur le disque sans générer de problèmes de performances massifs pour le processus d'application auquel la mémoire appartient.

Pour les serveurs exécutant SQL Server (généralement avec de très grandes quantités de RAM), la majeure partie de la RAM physique est engagée dans le processus SQL Server et doit être (si configurée correctement) verrouillée dans la mémoire physique, empêchant ainsi son transfert vers le fichier d'échange. . SQL Server gère sa propre mémoire très soigneusement en tenant compte des performances, en utilisant une grande partie de la RAM allouée à son processus en tant que cache de données pour réduire les E / S disque. Cela n'a pas de sens de mettre en page ces pages de cache de données dans 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 comme cache disque pour accélérer le fonctionnement du système.) Comme 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. Taille.

En ce qui concerne MEM_COMMIT mentionné par Remus, la terminologie prête à confusion car dans le jargon de la mémoire virtuelle, "reserved" ne fait jamais référence à l'allocation réelle, mais empêche l'utilisation d'un espace d'adressage 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 réduit simplement la quantité disponible dans le pool validé. Il n'alloue pas 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 lorsque le système de mémoire virtuelle alloue une page de mémoire physique et éventuellement déplacer une autre page de mémoire de la RAM physique vers le fichier d'échange. Voir la référence de la fonction VirtualAlloc de MSDN.

Le système d'exploitation Windows conserve la trace des pressions de mémoire entre les processus d'application et son propre mécanisme de cache de disque et décide quand il doit faire passer des pages de mémoire non verrouillées du physique au fichier d'échange. Ma compréhension est que qu'avoir un fichier de page qui soit beaucoup trop grand par rapport à l'espace mémoire non verrouillé réel peut entraîner Windows paginant exagérément la mémoire de l'application vers le fichier d'échange, entraînant ces applications subissent les conséquences des échecs de page (performance lente).

Tant que le serveur n'exécute pas d'autres processus gourmands en mémoire, une taille de fichier de 4 Go devrait être suffisante. 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 de la RAM physique disponible pour le système d'exploitation pour lui-même et d'autres processus.

802 erreurs dans SQL Server indiquent que le système ne peut pas valider plus de pages pour le cache de données. L'augmentation de la taille du fichier d'échange ne sera utile que dans la mesure où Windows est capable de sortir la mémoire des processus non SQL Server. Permettre à la mémoire SQL Server de se développer dans le fichier d'échange dans cette situation peut se débarrasser des messages d'erreur, mais il est contre-productif, en raison du point précédent sur la raison du cache de données en premier lieu.





windows