Partager via


Options de configuration de la mémoire du serveur

Utilisez les deux options de mémoire du serveur, la mémoire minimale du serveur et la mémoire maximale du serveur, pour reconfigurer la quantité de mémoire (en mégaoctets) gérée par le Gestionnaire de mémoire SQL Server pour un processus SQL Server utilisé par une instance de SQL Server.

Le paramètre par défaut pour la mémoire minimale du serveur est 0 et le paramètre par défaut pour la mémoire maximale du serveur est 2147483647 Mo. Par défaut, SQL Server peut modifier dynamiquement ses besoins en mémoire en fonction des ressources système disponibles.

Remarque

La définition de la mémoire maximale du serveur sur la valeur minimale peut réduire gravement les performances de SQL Server et même l’empêcher de démarrer. Si vous ne pouvez pas démarrer SQL Server après avoir modifié cette option, démarrez-la à l’aide de l’option de démarrage -f et réinitialisez la mémoire maximale du serveur sur sa valeur précédente. Pour plus d’informations, consultez Options de démarrage du service moteur de base de données.

Quand SQL Server utilise la mémoire dynamiquement, il interroge régulièrement le système pour déterminer la quantité de mémoire libre. La maintenance de cette mémoire libre empêche le système d’exploitation de paginer. Si moins de mémoire est libre, SQL Server libère de la mémoire sur le système d’exploitation. Si plus de mémoire est libre, SQL Server peut allouer plus de mémoire. SQL Server ajoute de la mémoire uniquement lorsque sa charge de travail nécessite plus de mémoire ; un serveur au repos n’augmente pas la taille de son espace d’adressage virtuel.

Consultez l’exemple B d’une requête pour retourner la mémoire actuellement utilisée. la mémoire maximale du serveur contrôle l’allocation de mémoire SQL Server, notamment le pool de mémoires tampons, la mémoire de compilation, tous les caches, les allocations de mémoire qe, la mémoire du gestionnaire de verrous et la mémoire clr (essentiellement tout commis de mémoire trouvé dans sys.dm_os_memory_clerks). La mémoire pour les piles de threads, les segments de mémoire, les fournisseurs de serveurs liés autres que SQL Server et toute mémoire allouée par une DLL non SQL Server ne sont pas contrôlées par la mémoire maximale du serveur.

SQL Server utilise l’API de notification de mémoire QueryMemoryResourceNotification pour déterminer quand le Gestionnaire de mémoire SQL Server peut allouer de la mémoire et libérer de la mémoire.

L’autorisation de SQL Server d’utiliser la mémoire dynamiquement est recommandée ; Toutefois, vous pouvez définir manuellement les options de mémoire et limiter la quantité de mémoire accessible par SQL Server. Avant de définir la quantité de mémoire pour SQL Server, déterminez le paramètre de mémoire approprié en soustrayant, à partir de la mémoire physique totale, de la mémoire requise pour le système d’exploitation et d’autres instances de SQL Server (et d’autres utilisations du système, si l’ordinateur n’est pas entièrement dédié à SQL Server). Cette différence est la quantité maximale de mémoire que vous pouvez affecter à SQL Server.

Définition manuelle des options de mémoire

Les options de serveur min mémoire du serveur et mémoire maximale du serveur peuvent être définies pour couvrir une plage de valeurs de mémoire. Cette méthode est utile pour les administrateurs système ou de base de données pour configurer une instance de SQL Server conjointement avec les exigences en mémoire d’autres applications ou d’autres instances de SQL Server qui s’exécutent sur le même hôte.

Remarque

La mémoire minimale du serveur et les options de mémoire maximale du serveur sont des options avancées. Si vous utilisez la procédure stockée système sp_configure pour modifier ces paramètres, vous pouvez les modifier uniquement lorsque les options avancées sont définies sur 1. Ces paramètres prennent effet immédiatement sans redémarrage du serveur.

Utilisez min_server_memory pour garantir une quantité minimale de mémoire disponible pour le Gestionnaire de mémoire SQL Server pour une instance de SQL Server. SQL Server n’alloue pas immédiatement la quantité de mémoire spécifiée en mémoire minimale du serveur au démarrage. Toutefois, une fois que l’utilisation de la mémoire a atteint cette valeur en raison de la charge du client, SQL Server ne peut pas libérer de mémoire, sauf si la valeur de la mémoire minimale du serveur est réduite. Par exemple, lorsque plusieurs instances de SQL Server peuvent exister simultanément dans le même hôte, définissez le paramètre min_server_memory au lieu de max_server_memory pour réserver de la mémoire pour une instance. En outre, la définition d’une valeur min_server_memory est essentielle dans un environnement virtualisé pour garantir que la pression de la mémoire provenant de l’hôte sous-jacent ne tente pas de libérer de la mémoire du pool de mémoires tampons sur une machine virtuelle SQL Server invitée au-delà de ce qui est nécessaire pour des performances acceptables.

Remarque

SQL Server n’est pas garanti pour allouer la quantité de mémoire spécifiée en mémoire minimale du serveur. Si la charge sur le serveur ne nécessite jamais l’allocation de la quantité de mémoire spécifiée en mémoire minimale du serveur, SQL Server s’exécute avec moins de mémoire.

Utilisez max_server_memory pour garantir que le système d’exploitation n’a pas de pression négative sur la mémoire. Pour définir la configuration maximale de la mémoire du serveur, surveillez la consommation globale du processus SQL Server afin de déterminer les besoins en mémoire. Pour être plus précis avec ces calculs pour une seule instance :

  • À partir de la mémoire totale du système d’exploitation, réservez 1 Go à 4 Go au système d’exploitation lui-même.
  • Soustrayez ensuite l'équivalent des allocations potentielles de mémoire SQL Server en dehors du contrôle du max server memory, qui est composé par la taille de la pile 1 * nombre maximal de threads de travail calculés 2 + -g paramètre de démarrage 3 (ou 256 Mo par défaut si -g n’est pas défini). Ce qui reste doit être le paramètre max_server_memory pour une configuration d’instance unique.

1 Reportez-vous au guide d’architecture de gestion de la mémoire pour plus d’informations sur les tailles de pile de threads par architecture.

2 Reportez-vous à la page de documentation sur la configuration maximale des threads de travail, pour plus d’informations sur les threads de travail par défaut calculés pour un nombre donné de processeurs affinités dans l’hôte actuel.

3 Reportez-vous à la page de documentation des options de démarrage du service du moteur de base de données pour plus d’informations sur le paramètre de démarrage -g . Aplicable uniquement à SQL Server 32 bits (SQL Server 2005 à SQL Server 2014).

Type de système d’exploitation Quantités de mémoire minimales autorisées pour la mémoire maximale du serveur
32 bits 64 Mo
64 bits 128 Mo

Comment configurer des options de mémoire à l’aide de SQL Server Management Studio

Utilisez les deux options de mémoire du serveur, la mémoire minimale du serveur et la mémoire maximale du serveur, pour reconfigurer la quantité de mémoire (en mégaoctets) gérée par le Gestionnaire de mémoire SQL Server pour une instance de SQL Server. Par défaut, SQL Server peut modifier dynamiquement ses besoins en mémoire en fonction des ressources système disponibles.

Procédure de configuration d’une quantité fixe de mémoire

Pour définir une quantité fixe de mémoire :

  1. Dans l’Explorateur d’objets, cliquez avec le bouton droit sur un serveur et sélectionnez Propriétés.

  2. Cliquez sur le nœud Mémoire .

  3. Sous Options de mémoire du serveur, entrez la quantité souhaitée pour la mémoire minimale du serveur et la mémoire maximale du serveur.

    Utilisez les paramètres par défaut pour permettre à SQL Server de modifier dynamiquement ses besoins en mémoire en fonction des ressources système disponibles. Le paramètre par défaut pour la mémoire minimale du serveur est 0 et le paramètre par défaut pour la mémoire maximale du serveur est 2147483647 mégaoctets (Mo).

Optimiser le débit des données 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 de fichiers. Pour limiter le cache du système de fichiers, assurez-vous que l’option Optimiser le débit des données pour le partage de fichiers n’est pas sélectionnée. Vous pouvez spécifier le plus petit cache du système de fichiers en sélectionnant Réduire la mémoire utilisée ou Balance.

Pour vérifier le paramètre actuel sur votre système d’exploitation

  1. Cliquez sur Démarrer, cliquez sur Panneau de configuration, double-cliquez sur Connexions réseau, puis double-cliquez sur Connexion de zone locale.

  2. Sous l’onglet Général, cliquez sur Propriétés, sélectionnez Partage de fichiers et d'imprimantes pour les réseaux Microsoft, puis cliquez sur Propriétés.

  3. Si l’option Agrandir le débit des données pour les applications réseau est sélectionnée, choisissez une autre option, cliquez sur OK, puis fermez le reste des boîtes de dialogue.

Verrouiller des pages en mémoire

Cette stratégie Windows détermine quels comptes peuvent utiliser un processus destiné à conserver les données en mémoire physique pour éviter leur pagination en mémoire virtuelle sur le disque. Le verrouillage des pages en mémoire peut maintenir le serveur réactif lors de la pagination de la mémoire sur le disque. L’option Verrouiller les pages en mémoire SQL Server est définie sur ON dans les instances 32 bits et 64 bits de SQL Server 2014 Édition Standard et ultérieure lorsque le compte disposant de privilèges pour exécuter sqlservr.exe a reçu le droit utilisateur Windows « Pages verrouillées en mémoire » (LPIM). Dans les versions antérieures de SQL Server, la définition de l’option Pages de verrouillage pour une instance 32 bits de SQL Server nécessite que le compte avec les privilèges pour exécuter sqlservr.exe dispose du droit utilisateur LPIM et que l’option de configuration « awe_enabled » soit définie sur ON.

Pour désactiver l’option Verrouiller les pages en mémoire pour SQL Server, supprimez l’utilisateur « Pages verrouillées en mémoire » pour le compte de démarrage SQL Server.

Pour désactiver le verrouillage de pages en mémoire

Pour désactiver l’option verrouiller les pages en mémoire :

  1. Dans le menu Démarrer , cliquez sur Exécuter. Dans la zone Ouvrir, tapez gpedit.msc.

    La boîte de dialogue Stratégie de groupe s'affiche.

  2. Dans la console stratégie de groupe , développez Configuration de l’ordinateur, puis développez Paramètres Windows.

  3. Développez Paramètres de sécurité, puis développez Stratégies locales.

  4. Sélectionnez le dossier Attribution des droits utilisateur .

    Les stratégies s'affichent dans le volet Détails.

  5. Dans le volet, double-cliquez sur Verrouiller les pages en mémoire.

  6. Dans la boîte de dialogue Paramètre de stratégie de sécurité locale , sélectionnez le compte avec des privilèges pour exécuter sqlservr.exe, puis cliquez sur Supprimer.

Gestionnaire de mémoire virtuelle

Les systèmes d’exploitation 32 bits permettent d’accéder à 4 Go d’espace d’adressage virtuel. 2 Go de mémoire virtuelle sont privés par processus et disponibles pour l’utilisation de l’application. 2 Go sont réservés pour l’utilisation du système d’exploitation. Toutes les éditions du système d’exploitation incluent un commutateur qui peut fournir aux applications un accès jusqu’à 3 Go d’espace d’adressage virtuel, limitant le système d’exploitation à 1 Go. Pour plus d’informations sur l’utilisation de la configuration de la mémoire du commutateur, consultez la documentation Windows sur le réglage de 4 gigaoctets (4GT). Lorsque le serveur SQL Server 32 bits s’exécute sur le système d’exploitation 64 bits, son espace d’adressage virtuel disponible est le total de 4 Go.

Les régions validées de l’espace d’adressage sont mappées à la mémoire physique disponible par le Gestionnaire de mémoire virtuelle Windows (VMM).

Pour plus d’informations sur la quantité de mémoire physique prise en charge par différents systèmes d’exploitation, consultez la documentation Windows « Limites de mémoire pour les versions windows ».

Les systèmes de mémoire virtuelle permettent le sur-engagement de la mémoire physique, afin que le ratio de mémoire virtuelle à mémoire physique puisse dépasser 1:1. Par conséquent, les programmes plus volumineux peuvent s’exécuter sur des ordinateurs avec diverses configurations de mémoire physique. Toutefois, l’utilisation d’une mémoire virtuelle beaucoup plus élevée que les ensembles de travail moyens combinés de tous les processus peut entraîner des performances médiocres.

La mémoire minimale du serveur et les options de mémoire maximale du serveur sont des options avancées. Si vous utilisez la procédure stockée système sp_configure pour modifier ces paramètres, vous pouvez les modifier uniquement lorsque les options avancées sont définies sur 1. Ces paramètres prennent effet immédiatement sans redémarrage du serveur.

Exécution de plusieurs instances de SQL Server

Lorsque vous exécutez plusieurs instances du moteur de base de données, vous pouvez utiliser trois approches pour gérer la mémoire :

  • Utilisez la mémoire maximale du serveur pour contrôler l’utilisation de la mémoire. Établissez les paramètres maximum pour chaque instance, en étant prudent que l’allocation totale n’est pas supérieure à la mémoire physique totale sur votre ordinateur. Vous pouvez donner à chaque instance une mémoire proportionnelle à sa charge de travail ou à sa taille de base de données attendue. Cette approche présente l’avantage que lorsque de nouveaux processus ou instances démarrent, la mémoire libre sera disponible immédiatement. L’inconvénient est que si vous n’exécutez pas toutes les instances, aucune des instances en cours d’exécution ne pourra utiliser la mémoire libre restante.

  • Utilisez min server memory pour contrôler l’utilisation de la mémoire. Établissez des paramètres minimaux pour chaque instance afin que la somme de ces minimums soit inférieure à 1 à 2 Go de mémoire physique totale sur votre ordinateur. Là encore, vous pouvez établir ces minimums proportionnellement à la charge attendue de cette instance. Cette approche présente l’avantage que si toutes les instances ne s’exécutent pas en même temps, celles qui s’exécutent peuvent utiliser la mémoire libre restante. Cette approche est également utile lorsqu’il existe un autre processus gourmand en mémoire sur l’ordinateur, car il s’assurerait que SQL Server obtiendrait au moins une quantité raisonnable de mémoire. L’inconvénient est que lorsqu’une nouvelle instance (ou tout autre processus) démarre, il peut prendre un certain temps pour que les instances en cours d’exécution libèrent de la mémoire, en particulier s’ils doivent réécrire des pages modifiées dans leurs bases de données pour le faire.

  • Ne rien faire (non recommandé). Les premières instances présentées avec une charge de travail ont tendance à allouer toute la mémoire. Les instances inactives ou les instances démarrées ultérieurement peuvent se terminer par une quantité minimale de mémoire disponible. SQL Server n’essaie pas d’équilibrer l’utilisation de la mémoire entre les instances. Toutefois, toutes les instances répondent aux signaux de notification de mémoire Windows pour ajuster la taille de leur empreinte mémoire. Windows n’équilibre pas la mémoire entre les applications avec l’API De notification de mémoire. Il fournit simplement des commentaires globaux quant à la disponibilité de la mémoire sur le système.

Vous pouvez modifier ces paramètres sans redémarrer les instances. Vous pouvez donc facilement expérimenter pour trouver les meilleurs paramètres pour votre modèle d’utilisation.

Fourniture de la quantité maximale de mémoire à SQL Server

32 bits 64 bits
Mémoire conventionnelle Jusqu’à traiter la limite d’espace d’adressage virtuel dans toutes les éditions de SQL Server :

2 Go

3 Go avec le paramètre de démarrage /3 Go *

4 Go sur WOW64**
Jusqu’à traiter la limite d’espace d’adressage virtuel dans toutes les éditions de SQL Server :

8 To sur l’architecture x64

* /3 Go est un paramètre de démarrage du système d’exploitation. Pour plus d’informations, consultez MSDN Library.

**WOW64 (Windows sur Windows 64) est un mode dans lequel SQL Server 32 bits s’exécute sur un système d’exploitation 64 bits. Pour plus d’informations, consultez MSDN Library.

Exemples

Exemple A

L’exemple suivant définit l’option max server memory sur 4 Go :

sp_configure 'show advanced options', 1;  
GO  
RECONFIGURE;  
GO  
sp_configure 'max server memory', 4096;  
GO  
RECONFIGURE;  
GO  

Exemple B. Détermination de l’allocation de mémoire actuelle

La requête suivante retourne des informations sur la mémoire allouée actuellement.

SELECT  
(physical_memory_in_use_kb/1024) AS Memory_usedby_Sqlserver_MB,  
(locked_page_allocations_kb/1024) AS Locked_pages_used_Sqlserver_MB,  
(total_virtual_address_space_kb/1024) AS Total_VAS_in_MB,  
process_physical_memory_low,  
process_virtual_memory_low  
FROM sys.dm_os_process_memory;  

Voir aussi

Surveiller et régler pour la performance
RECONFIGURE (Transact-SQL)
Options de configuration du serveur (SQL Server)
sp_configure (Transact-SQL)