Options de mémoire du serveur
Utilisez les deux options de mémoire du serveur, min server memory et max server memory, pour reconfigurer la taille mémoire (en mégaoctets) contenue dans le pool de mémoires tampons utilisé par une instance MicrosoftSQL Server.
Par défaut, SQL Server peut modifier dynamiquement sa configuration de mémoire sur la base des ressources système disponibles. Le paramètre par défaut de l'option min server memory est 0 et le paramètre par défaut de l'option max server memory est 2147483647. La quantité minimale de mémoire pouvant être spécifiée pour l'option max server memory s'élève à 16 mégaoctets (Mo).
[!REMARQUE]
Si vous donnez à max server memory sa valeur minimale, vous allez réduire gravement les performances de SQL Server et même vous pouvez l'empêcher de démarrer. Si vous ne pouvez plus démarrer SQL Server après avoir changé cette option, démarrez-le au moyen de l'option de démarrage –f et restaurez max server memory à sa valeur antérieure. Pour plus d'informations, consultez Utilisation des options de démarrage du service SQL Server.
Quand SQL Server utilise dynamiquement la mémoire, il interroge régulièrement le système afin de déterminer la mémoire physique disponible. Dans MicrosoftWindows 2000, SQL Server augmente ou réduit le cache des tampons pour conserver une mémoire physique disponible comprise entre 4 et 10 Mo en fonction de l'activité du serveur. La conservation de cette mémoire disponible empêche Windows 2000 de paginer. Si vous en avez moins, SQL Server libère de la mémoire pour Windows 2000. Si vous en avez plus, SQL Server alloue de la mémoire au pool de mémoires tampons. SQL Server ajoute de la mémoire au pool de mémoires tampons uniquement lorsque sa charge de travail en nécessite plus ; un serveur inactif n'augmente pas la taille de son pool de mémoires tampons.
Dans Windows Server 2003, SQL Server utilise l'API de notification de mémoire QueryMemoryResourceNotification pour déterminer le moment où le pool de mémoires tampons peut allouer et libérer de la mémoire.
Il est recommandé de permettre à SQL Server d'utiliser dynamiquement la mémoire ; cependant, vous pouvez configurer manuellement les options de mémoire et limiter la mémoire à laquelle SQL Server peut accéder. Avant de définir la mémoire allouée à SQL Server, déterminez la valeur adaptée pour la mémoire : pour cela, vous devez soustraire de la mémoire physique totale la mémoire requise par Windows 2000 ou Windows Server 2003 et par toute autre instance de SQL Server, (ainsi que par d'autres systèmes si l'ordinateur n'est pas totalement dédié à SQL Server). Cette différence représente la mémoire maximale que vous pouvez allouer à SQL Server.
Paramétrage manuel des options de mémoire
Il existe deux méthodes principales de paramétrage manuel des options de mémoire SQL Server :
La première méthode consiste à attribuer la même valeur aux deux options min server memory et max server memory. Cette valeur correspond à la quantité fixe de mémoire à allouer au pool de mémoires tampons SQL Server lorsqu'elle est atteinte.
La deuxième méthode consiste à définir deux options min server memory et max server memory en plusieurs plages de valeurs de la mémoire. Cette méthode est utile lorsque les administrateurs système ou des bases de données souhaitent configurer une instance SQL Server en accord avec la mémoire requise des autres applications exécutées sur le même ordinateur.
Utilisez l'option min server memory pour garantir une quantité minimale de mémoire disponible pour le pool de mémoires tampons d'une instance de SQL Server. SQL Server n'alloue pas immédiatement la mémoire spécifiée dans min server memory au démarrage. Néanmoins, lorsque l’utilisation de la mémoire atteint cette valeur en raison de la charge client, SQL Server ne peut libérer de la mémoire du pool de mémoires tampons alloué, à moins que la valeur min server memory ne soit réduite.
[!REMARQUE]
Il n’est pas garanti que SQL Server alloue la mémoire spécifiée dans min server memory. Si la charge sur le serveur ne nécessite jamais d’allouer la mémoire spécifiée dans min server memory, SQL Server s’exécute alors avec moins de mémoire.
Utilisez l'option max server memory pour empêcher le pool de mémoires tampons SQL Server d'utiliser plus que la mémoire spécifiée, en laissant ainsi la mémoire restante disponible pour le démarrage rapide d'autres applications. SQL Server n'alloue pas immédiatement la mémoire spécifiée dans max server memory au démarrage. L'utilisation de la mémoire augmente en fonction des besoins de SQL Server jusqu'à atteindre la valeur spécifiée dans max server memory. SQL Server ne peut utiliser plus de mémoire à moins d'augmenter la valeur max server memory.
Avant de réduire la valeur max server memory, utilisez l'Analyseur de performances pour examiner l'objet de performance SQLServer:Buffer Manager tant qu'il est sous charge, et notez les valeurs en cours des compteurs Pages occultées et Pages réservées. Ces compteurs considèrent la mémoire comme composée d'un certain nombre de pages de 8 Ko. La valeur de max server memory doit être supérieure à la somme de ces deux valeurs pour éviter les erreurs de mémoire insuffisante. Une valeur approximative pour le paramètre max server memory (en Mo) le plus bas possible est ([Pages occultées] + [Pages réservées])/ 100. Pour diminuer la valeur de max server memory, vous devez redémarrer SQL Server pour libérer de la mémoire. Pour plus d'informations sur la définition des options de mémoire, consultez Procédure : définir une quantité fixe de mémoire (SQL Server Management Studio).
Obtenir le débit de données maximal pour les applications réseau
Pour optimiser l'utilisation de la mémoire système pour SQL Server, vous devez limiter la quantité de mémoire utilisée par le système pour la mise en cache des fichiers. Pour limiter le cache du système de fichiers, veillez à désactiver Maximiser le débit des données pour le partage de fichiers. Vous pouvez spécifier le plus petit cache du système de fichiers en sélectionnant Minimiser la mémoire utilisée ou Équilibrer.
Pour connaître la configuration actuelle de votre système d'exploitation
Cliquez sur Démarrer, puis sur Panneau de configuration, double-cliquez sur Connexions réseau, puis double-cliquez sur Connexion au réseau local.
Sous l'onglet Général, cliquez sur Propriétés. Sélectionnez Partage de fichiers et d'imprimantes pour les réseaux Microsoft et cliquez sur Propriétés.
Si l'option Maximiser le débit des données pour les applications réseau est sélectionnée, choisissez une autre option et cliquez sur OK. Fermez ensuite les boîtes de dialogue restantes.
Mémoire AWE sous Windows Server 2003
Dans Windows Server 2003, SQL Server peut utiliser la mémoire AWE (Address Windowing Extensions) pour faciliter davantage l'équilibrage de la charge de ses exigences en mémoire avec celles du système d'exploitation. L'équilibre entre SQL Server et le système d'exploitation est soumis aux contraintes des options min server memory et max server memory. Si le matériel du serveur prend en charge l'ajout de mémoire à chaud, il est possible d'ajouter de la mémoire physique au serveur en fonction des besoins sans que le redémarrage ne soit indispensable. Pour plus d'informations sur l'option de configuration awe enabled, voir Option awe enabled. Pour plus d'informations, consultez Ajout de mémoire à chaud.
[!REMARQUE]
Dans Windows Server 2003, la mémoire AWE dynamique est prise en charge sur les serveurs dont la mémoire physique est inférieure à la limite de mémoire virtuelle configurée. Windows 2000 imposait que la mémoire physique disponible soit supérieure à la mémoire virtuelle pour activer la mémoire AWE.
Idéalement, allouez le plus de mémoire possible à SQL Server sans provoquer la pagination du système sur le disque. Le seuil varie en fonction de votre système. Exemple : sur un système 32 gigaoctets (Go) dédié exclusivement à SQL Server, 30 à 31 Go peuvent représenter un seuil maximal convenable pour SQL Server ; sur un système 64 gigaoctets (Go), 60 à 62 Go peuvent représenter un seuil convenable.
[!REMARQUE]
Si vous augmentez la mémoire SQL Server, vous devez vérifier que vous disposez d'un espace disque suffisant pour augmenter la taille du fichier de prise en charge de la mémoire virtuelle (Pagefile.sys) afin d'y loger la mémoire supplémentaire. Pour plus d'informations sur le fichier de prise en charge de la mémoire virtuelle, voir la documentation Windows 2000 ou Windows Server 2003.
Le cas échéant, les statistiques du Moniteur système Windows peuvent vous aider à définir la valeur de mémoire à utiliser. Ne modifiez cette valeur que lorsque vous ajoutez ou supprimez de la mémoire ou lorsque vous changez votre mode d'utilisation du système.
Gestionnaire de mémoire virtuelle
Les systèmes d'exploitation 32 bits, tels que Windows 2000 et Windows Server 2003, permettent d'accéder à un espace d'adressage virtuel de 4 gigaoctets (Go). La mémoire virtuelle basse de 2 Go est privée pour chaque processus et disponible pour l'utilisation des applications. La mémoire virtuelle haute de 2 Go est réservée au système d'exploitation. Toutes les éditions des systèmes d'exploitation à partir de MicrosoftWindows XP Professionnel, y compris Windows Server 2003, comportent un commutateur boot.ini qui permet aux applications d'accéder à 3 Go de mémoire virtuelle, ce qui limite la mémoire disponible pour le système d'exploitation à 1 Go. Pour plus d'informations sur l'utilisation de la configuration de la mémoire avec le commutateur /3GB, voir la documentation Windows.
[!REMARQUE]
Dans Windows Server 2003, PAE est automatiquement activé uniquement si le serveur utilise des périphériques d'ajout de mémoire à chaud. Le cas échéant, il n'est pas nécessaire d'utiliser le commutateur /pae sur un système configuré pour utiliser des périphériques d'ajout de mémoire à chaud. Dans tous les autres cas, vous devez utiliser le commutateur /pae dans le fichier Boot.ini pour bénéficier d'une mémoire supérieure à 4 Go.
L'espace d'adressage de 4 Go est appliqué à la mémoire physique disponible par le Gestionnaire de mémoire virtuelle Windows. La quantité de mémoire physique prise en charge a augmenté avec l'introduction des systèmes d'exploitation Windows Server 2003. La mémoire physique accessible par AWE dépend donc du système d'exploitation que vous utilisez :
Windows Server 2003 Standard Edition prend en charge jusqu'à 4 gigaoctets (Go) de mémoire physique.
Windows Server 2003 Enterprise Edition prend en charge jusqu'à 32 gigaoctets (Go) de mémoire physique.
Windows Server 2003 Datacenter Edition prend en charge jusqu'à 64 gigaoctets (Go) de mémoire physique.
Une application Win32 telle que SQL Server ne détecte que les adresses virtuelles ou logiques, pas les adresses physiques. La quantité de mémoire physique utilisée par une application à un moment donné (plage de travail) est déterminée par la mémoire physique disponible et par le Gestionnaire de mémoire virtuelle. L'application ne peut pas contrôler directement la résidence en mémoire.
Windows 2000 Advanced Server et Windows 2000 Datacenter Server, ainsi que les éditions 32 bits de Windows Server 2003, Enterprise Server et Windows Server 2003, Datacenter Server peuvent aller au-delà de la limite de 4 Go grâce à l'utilisation des extensions d'adresses physiques (PAE, Physical Addressing Extensions) Intel. L'utilisation du commutateur /PAE dans le fichier de configuration boot.ini de Windows permet d'accéder à la mémoire physique au-delà de la limite de 4 Go. Ceci est impératif pour que la mémoire AWE accède à plus de 4 Go de mémoire. Pour plus d'informations sur l'utilisation de cette configuration de la mémoire dans Windows 2000 et Windows Server 2003, voir la documentation Windows.
Les systèmes d'adressage virtuels, tels que Windows 2000 ou Windows Server 2003, autorisent le surengagement de la mémoire physique, de sorte que le rapport entre la mémoire virtuelle et la mémoire physique puisse être supérieur à 1:1. Il est alors possible d'exécuter des programmes plus volumineux sur des ordinateurs offrant diverses configurations de la mémoire physique. Toutefois, dans la plupart des cas, l'utilisation d'une quantité de mémoire virtuelle nettement plus importante que les plages de travail moyennes combinées de tous les processus peut entraîner une détérioration des performances.
min server memory et max server memory sont des options avancées. Si vous utilisez la procédure stockée système sp_configure pour changer ces paramètres, vous ne pouvez les modifier que si l'option show advanced options a la valeur 1. Ces paramètres entrent immédiatement en vigueur, sans redémarrage du serveur.
Exécution de plusieurs instances SQL Server
Lorsque vous exécutez plusieurs instances du moteur de base de données, vous avez le choix entre trois approches pour gérer la mémoire :
Choisir max server memory pour contrôler l'utilisation de la mémoire. Définir les valeurs maximales pour chaque instance, en veillant à ce que le total alloué ne soit pas supérieur à la mémoire physique totale de votre ordinateur. Il se peut que vous souhaitiez attribuer à chaque instance une mémoire proportionnelle à la charge ou à la taille de base de données prévue. Cette solution présente l'avantage qu'au démarrage des nouveaux processus ou des nouvelles instances, ils pourront accéder immédiatement à la mémoire libre. En revanche, cette solution présente l'inconvénient que, si toutes les instances ne sont pas en cours d'exécution, aucune d'entre elles ne pourra utiliser la mémoire libre restante.
Choisir min server memory pour contrôler l'utilisation de la mémoire. Définissez les valeurs minimales pour chaque instance, de telle sorte que leur somme soit inférieure de 1 à 2 Go à la mémoire physique totale de votre machine. Une fois encore, vous pouvez établir ces valeurs minimales de façon proportionnelle à la charge prévue de cette instance. Cette solution présente l'avantage que si toutes les instances ne sont pas en cours d'exécution au même instant, celles qui le sont peuvent utiliser la mémoire libre restante. Elle est également utile quand un autre processus gourmand en mémoire est présent sur l'ordinateur, car elle garantit que SQL Server bénéficie au moins d'une quantité de mémoire acceptable. Le désagrément est que, lorsqu'une nouvelle instance (ou un autre processus) démarre, il se peut que les instances en cours d'exécution mettent un certain temps à libérer de la mémoire, notamment si elles doivent à cette fin réécrire les pages modifiées sur leurs bases de données. Il se peut que vous ayez aussi besoin d'augmenter la taille du fichier de pagination de manière significative.
Ne rien faire (déconseillé). Les premières instances présentées avec une charge de travail tendent à allouer la totalité de la mémoire. Les instances inactives ou les instances ayant démarré ultérieurement peuvent finir par ne disposer que d'une quantité de mémoire minime. SQL Server n'effectue aucune tentative pour équilibrer l'utilisation de la mémoire entre les instances. Cependant, toutes les instances répondent aux signaux de Windows Notification Memory pour ajuster la taille de leurs pools de mémoires tampons. Depuis Windows Server 2003 SP1, Windows ne répartit pas équitablement la mémoire entre les applications avec l'API Memory Notification. Il fournit simplement un commentaire global quant à la disponibilité de la mémoire sur le système.
Comme vous pouvez modifier ces paramètres sans redémarrer les instances, vous pouvez sans peine procéder à des essais pour trouver les valeurs qui conviennent le mieux à votre modèle d'utilisation.
Exemples
L'exemple suivant affecte la valeur 4 Go à l'option max server memory.
sp_configure 'show advanced options', 1;
GO
RECONFIGURE;
GO
sp_configure 'max server memory', 4096;
GO
RECONFIGURE;
GO