Note
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier les répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de changer de répertoire.
S'applique à :SQL Server
L’utilisation de la mémoire pour le moteur de base de données SQL Server est limitée par une paire de paramètres de configuration et min server memory (MB)max server memory (MB). Au fil du temps et dans des circonstances normales, SQL Server tentera de revendiquer la mémoire jusqu’à la limite définie par max server memory (MB).
Remarque
Index Columnstore : vue d’ensemble et In-Memory vue d’ensemble et scénarios d’utilisation OLTP ont leurs propres gestionnaires de mémoire, ce qui facilite la surveillance de l’utilisation de leur pool de mémoire tampon. Pour plus d’informations, consultez sys.dm_os_memory_clerks.
Dans les versions antérieures de SQL Server, l’utilisation de la mémoire n’a pas été mise à jour, indiquant à SQL Server que toutes les mémoires système étaient disponibles. Il est recommandé dans toutes les versions de SQL Server de configurer une limite supérieure pour l’utilisation de la mémoire SQL Server en configurant le max server memory (MB).
- Depuis SQL Server 2019 (15.x), le programme d’installation sql dans les serveurs Windows fournit une recommandation pour
max server memory (MB)une instance SQL Server autonome basée sur un pourcentage de mémoire système disponible au moment de l’installation. - À tout moment, vous pouvez reconfigurer les limites de la mémoire (en mégaoctets) pour un processus SQL Server utilisé par une instance de SQL Server via les options de configuration et
min server memory (MB)lesmax server memory (MB)options de configuration.
Remarque
Ce guide fait référence à l’instance SQL sur Windows. Pour plus d’informations sur la configuration de la mémoire dans Linux, consultez les meilleures pratiques en matière de performances et les instructions de configuration pour SQL Server sur Linux et le paramètre memory.memorylimitmb.
Recommandations
Les paramètres par défaut et les valeurs minimales autorisées pour ces options sont les suivants :
| Choix | Par défaut | Minimum autorisé | Recommandé |
|---|---|---|---|
min server memory (MB) |
0 | 0 | 0 |
max server memory (MB) |
2,147,483,647 mégaoctets (Mo) | 128 Mo | 75 % de la mémoire système disponible non consommée par d’autres processus, y compris les autres instances. Pour obtenir des suggestions, consultez mémoire minimale du serveur. |
Dans le cadre de ces limites, SQL Server peut modifier dynamiquement sa configuration mémoire en fonction des ressources système disponibles. Pour plus d’informations, consultez Gestion de la mémoire dynamique.
- La
max server memory (MB)définition de la valeur trop élevée peut entraîner la concurrence d’une seule instance de SQL Server pour la mémoire avec d’autres instances SQL Server hébergées sur le même hôte. - Toutefois, le paramètre
max server memory (MB)trop faible est une opportunité de perte de performances et peut entraîner des problèmes de pression de mémoire et de performances dans l’instance SQL Server. - Le paramètre
max server memory (MB)sur la valeur minimale peut même empêcher le démarrage de SQL Server. 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 et réinitialisez-la-fmax server memory (MB)à sa valeur précédente. Pour plus d’informations, consultez Options de démarrage du service moteur de base de données. - Il n’est pas recommandé de définir
max server memory (MB)etmin server memory (MB)d’être la même valeur, ou près des mêmes valeurs.
Remarque
L’option de mémoire maximale du serveur limite uniquement la taille du pool de mémoires tampons SQL Server. L’option de mémoire maximale du serveur ne limite pas une zone de mémoire non réservée restante que SQL Server laisse pour les allocations d’autres composants tels que les procédures stockées étendues, les objets COM, les DLL non partagées et les fichiers EXE.
SQL Server peut utiliser la mémoire dynamiquement. Toutefois, vous pouvez configurer manuellement les options de mémoire et limiter la quantité de mémoire accessible à 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, de la mémoire totale, de la mémoire requise pour le système d’exploitation, des allocations de mémoire non contrôlées par le max server memory (MB) paramètre et d’autres instances de SQL Server (et d’autres utilisations du système, si le serveur héberge d’autres applications qui consomment de la mémoire, y compris d’autres instances de SQL Server). Cette différence représente la mémoire maximale que vous pouvez allouer à l’instance actuelle de SQL Server.
La mémoire peut être configurée jusqu’à la limite de l’espace d’adressage virtuel utilisé par le processus dans toutes les éditions de SQL Server. Pour plus d’informations, consultez Limites de mémoire pour les versions de Windows et de Windows Server.
mémoire minimale du serveur
Permet min server memory (MB) de garantir une quantité minimale de mémoire disponible pour le Gestionnaire de mémoire SQL Server.
SQL Server n’alloue pas immédiatement la quantité de mémoire spécifiée au
min server memory (MB)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 estmin server memory (MB)réduite. Par exemple, lorsque plusieurs instances de SQL Server sont installées simultanément sur le même serveur, envisagez de définir le paramètre pour réserver de lamin server memory (MB)mémoire pour une instance.La définition d’une
min server memory (MB)valeur 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 invitée au-delà de ce qui est nécessaire pour des performances acceptables. Dans l’idéal, les instances de SQL Server dans une machine virtuelle n’ont pas à concurrencer les processus de désallocation de mémoire proactive de l’hôte virtuel.SQL Server n’est pas garanti pour allouer la quantité de mémoire spécifiée dans
min server memory (MB). Si la charge sur le serveur ne nécessite jamais l’allocation de la quantité de mémoire spécifiée,min server memory (MB)SQL Server utilise moins de mémoire.
mémoire maximale du serveur
Permet max server memory (MB) de garantir que le système d’exploitation et d’autres applications ne subissent pas de pression néfaste sur la mémoire provenant de SQL Server.
- Avant de définir la
max server memory (MB)configuration, surveillez la consommation globale de mémoire du serveur hébergeant l’instance SQL Server, pendant l’opération normale, pour déterminer la disponibilité et les exigences de la mémoire. Pour une configuration initiale ou lorsqu’il n’y avait aucune possibilité de collecter l’utilisation de la mémoire du processus SQL Server au fil du temps, utilisez l’approche de bonne pratique généralisée suivante pour configurermax server memory (MB)pour une seule instance :- À partir de la mémoire totale du système d’exploitation, soustrait l’équivalent des allocations de mémoire de thread SQL Server potentielles en dehors
max server memory (MB)du contrôle, qui est la taille de pile1 multipliée par les threads de travail maximum calculés2. - Soustrait ensuite 25% pour d’autres allocations de mémoire en dehors
max server memory (MB)du contrôle, telles que les mémoires tampons de sauvegarde, les DLL de procédure stockée étendue, les objets créés à l’aide de procédures Automation (sp_OAappels) et les allocations des fournisseurs de serveurs liés. Il s’agit d’une approximation générique. Votre kilométrage peut varier. - Ce qui reste doit être le
max server memory (MB)paramètre d’une configuration d’instance unique.
- À partir de la mémoire totale du système d’exploitation, soustrait l’équivalent des allocations de mémoire de thread SQL Server potentielles en dehors
1 Pour plus d’informations sur les tailles de piles de threads par architecture, consultez le guide d’architecture de gestion de la mémoire.
2 Pour plus d’informations sur les threads de travail par défaut calculés pour un nombre donné de processeurs affinitisés dans l’hôte actuel, consultez Configuration du serveur : nombre maximal de threads de travail.
Définir manuellement les options
Les options min server memory (MB) de serveur et max server memory (MB) 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 bases de données qui souhaitent configurer une instance de SQL Server en accord avec la mémoire exigée par d’autres applications ou d’autres instances de SQL Server qui s’exécutent sur le même hôte.
Utiliser Transact-SQL
Les min server memory (MB) options et max server memory (MB) les options 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 afficher les options avancées a la valeur 1. Ces paramètres entrent immédiatement en vigueur, sans redémarrage du serveur. Pour plus d’informations, consultez sp_configure.
L’exemple suivant définit l’option max server memory (MB) sur 12 288 Mo ou 12 Go. Bien que sp_configure spécifie le nom de l’option comme max server memory (MB), vous pouvez omettre le (MB).
EXECUTE sp_configure 'show advanced options', 1;
GO
RECONFIGURE;
GO
EXECUTE sp_configure 'max server memory', 12288;
GO
RECONFIGURE;
GO
La requête suivante retourne des informations sur les valeurs actuellement configurées et la valeur en cours d’utilisation. Cette requête retourne des résultats, que l’option sp_configure « afficher les options avancées » soit activée ou non.
SELECT [name],
[value],
[value_in_use]
FROM sys.configurations
WHERE [name] = 'max server memory (MB)'
OR [name] = 'min server memory (MB)';
Utilisez SQL Server Management Studio.
Utilisez min server memory (MB) et max server memory (MB) reconfigurez 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.
Dans l’Explorateur d’objets, cliquez avec le bouton droit sur un serveur et sélectionnez Propriétés.
Sélectionnez la page Mémoire de la fenêtre Propriétés du serveur. Les valeurs actuelles de Mémoire minimale du serveur et Mémoire maximale du serveur sont affichées.
Dans Options de mémoire du serveur, entrez les nombres souhaités pour Mémoire minimale du serveur et Mémoire maximale du serveur. Pour obtenir des suggestions, consultez mémoire minimale du serveur (Mo) et mémoire maximale du serveur (Mo) dans cet article.
La capture d’écran suivante illustre les trois étapes :
Verrouiller les pages en mémoire (LPIM)
Les applications Windows peuvent utiliser les API Windows Address Windowing Extensions (AWE) pour allouer et mapper la mémoire physique dans l’espace d’adressage du processus. La stratégie Windows LPIM détermine quels comptes peuvent accéder à l’API pour conserver les données dans la mémoire physique et éviter leur pagination en mémoire virtuelle sur le disque. La mémoire allouée à l’aide d’AWE est verrouillée jusqu’à ce que l’application la libère explicitement ou se ferme. L’utilisation des API AWE pour la gestion de la mémoire dans SQL Server 64 bits est également fréquemment appelée pages verrouillées. Le verrouillage des pages en mémoire peut permettre de conserver sa réactivité au serveur lors de la pagination de la mémoire sur disque. L’option Verrouiller les pages en mémoire est activée dans les instances de l’édition standard SQL Server et éditions supérieures quand le compte avec les privilèges nécessaires pour exécuter sqlservr.exe dispose du droit d’utilisateur Windows Verrouiller les pages en mémoire (LPIM).
Pour désactiver l’option Verrouiller les pages en mémoire pour SQL Server, supprimez le droit d’utilisateur Verrouiller les pages en mémoire pour le compte disposant de privilèges pour exécuter le compte de démarrage sqlservr.exe (compte de démarrage de SQL Server).
L’utilisation de l’option LPIM n’affecte pas la gestion de la mémoire dynamique de SQL Server. Elle peut donc être augmentée ou réduite à la demande d’autres régisseurs de mémoire. Lors de l’utilisation des pages de verrouillage en mémoire , il est fortement recommandé de définir une limite supérieure pour max server memory (MB). Pour plus d’informations, consultez mémoire maximale du serveur (Mo).
L’option LPIM doit être utilisée quand il y a des raisons de penser que le processus sqlservr est hors page. Dans ce cas, l’erreur 17890 est signalée dans le journal des erreurs, comme dans l’exemple ci-dessous :
A significant part of sql server process memory has been paged out. This may result in a performance degradation. Duration: #### seconds. Working set (KB): ####, committed (KB): ####, memory utilization: ##%.
L’utilisation de LPIM avec un paramètre mal configuré max server memory (MB) qui ne tient pas compte des autres consommateurs de mémoire dans le système peut entraîner une instabilité, en fonction de la quantité de mémoire requise par d’autres processus ou des exigences de mémoire SQL Server en dehors de l’étendue de max server memory (MB). Pour plus d’informations, consultez Mémoire maximale du serveur. Si le privilège Verrouiller les pages en mémoire (LPIM) est accordé (sur les systèmes 32 bits ou 64 bits), nous vous recommandons vivement de définir max server memory (MB) une valeur spécifique, plutôt que de laisser la valeur par défaut de 2 147 483 647 mégaoctets (Mo).
Remarque
À compter de SQL Server 2012 (11.x), l’indicateur de trace 845 n’est pas nécessaire pour que Standard Edition utilise des pages verrouillées.
Activer Verrouiller des pages en mémoire
Après avoir examiné les informations précédentes, pour activer l’option Verrouiller les pages en mémoire en accordant le privilège au compte de service pour l’instance de SQL Server, consultez Activer l’option Verrouiller les pages en mémoire (Windows).
Pour déterminer le compte de service de l’instance de SQL Server, reportez-vous au Gestionnaire de configuration SQL Server ou interrogez service_account de sys.dm_server_services. Pour plus d’informations, consultez sys.dm_server_services.
Afficher l’état de Verrouiller les pages en mémoire
Pour déterminer si le privilège Verrouiller les pages en mémoire est accordé au compte de service pour l’instance de SQL Server, utilisez la requête suivante. Cette requête est prise en charge dans SQL Server 2016 (13.x) SP1 et versions ultérieures.
SELECT sql_memory_model_desc FROM sys.dm_os_sys_info;
Les valeurs suivantes de sql_memory_model_desc indiquent l’état de LPIM :
-
CONVENTIONAL. Le privilège Verrouiller les pages en mémoire n’est pas accordé. -
LOCK_PAGES. Le privilège Verrouiller les pages en mémoire est accordé. -
LARGE_PAGES. Les privilèges de verrouillage des pages en mémoire sont accordés en mode entreprise lorsque l’indicateur de trace 834 est activé. Il s’agit d’une configuration avancée et non recommandée pour la plupart des environnements. Pour plus d’informations et des mises en garde importantes, consultez l’indicateur de trace 834.
Utilisez les méthodes suivantes pour déterminer si l’instance de SQL Server utilise des pages verrouillées :
La sortie de la requête Transact-SQL suivante indique des valeurs non nulles pour
locked_page_allocations_kb:SELECT osn.node_id, osn.memory_node_id, osn.node_state_desc, omn.locked_page_allocations_kb FROM sys.dm_os_memory_nodes AS omn INNER JOIN sys.dm_os_nodes AS osn ON (omn.memory_node_id = osn.memory_node_id) WHERE osn.node_state_desc <> 'ONLINE DAC';Le journal des erreurs SQL Server actuel signale le message,
Using locked pages in the memory managerau démarrage du serveur.La section Gestionnaire de mémoire de la sortie DBCC MEMORYSTATUS affiche une valeur non nulle pour l’élément
AWE Allocated.
Instances multiples de SQL Server
Lorsque vous exécutez plusieurs instances du Moteur de base de données, plusieurs approches s’offrent à vous pour gérer la mémoire :
Utilisez
max server memory (MB)dans chaque instance pour contrôler l’utilisation de la mémoire, comme indiqué précédemment. 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 utilisées, aucune instance en cours d’exécution ne pourra utiliser la mémoire libre restante.Utilisez
min server memory (MB)dans chaque instance pour contrôler l’utilisation de la mémoire, comme indiqué précédemment. 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. Cette approche 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.Utilisez à la fois
max server memory (MB)etmin server memory (MB)dans chaque instance pour contrôler l’utilisation de la mémoire, observer et régler l’utilisation maximale de chaque instance et la protection minimale de la mémoire dans un large éventail de niveaux d’utilisation potentiels de la mémoire.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 leur occupation mémoire. Windows n'équilibre pas la mémoire entre les applications avec l'API de notification de mémoire. 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
R. Définir l’option de mémoire maximale du serveur sur 4 Go
L’exemple suivant définit l’option max server memory (MB) sur 4 096 Mo ou 4 Go. Bien que sp_configure spécifie le nom de l’option comme max server memory (MB), vous pouvez omettre le (MB).
EXECUTE sp_configure 'show advanced options', 1;
GO
RECONFIGURE;
GO
EXECUTE sp_configure 'max server memory', 4096;
GO
RECONFIGURE;
GO
Cette opération génère une instruction similaire à Configuration option 'max server memory (MB)' changed from 2147483647 to 4096. Run the RECONFIGURE statement to install. La nouvelle limite de mémoire prend effet immédiatement lors de l’exécution de RECONFIGURE. Pour plus d’informations, consultez sp_configure.
B. Déterminer 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 sql_physical_memory_in_use_MB,
large_page_allocations_kb / 1024 AS sql_large_page_allocations_MB,
locked_page_allocations_kb / 1024 AS sql_locked_page_allocations_MB,
virtual_address_space_reserved_kb / 1024 AS sql_VAS_reserved_MB,
virtual_address_space_committed_kb / 1024 AS sql_VAS_committed_MB,
virtual_address_space_available_kb / 1024 AS sql_VAS_available_MB,
page_fault_count AS sql_page_fault_count,
memory_utilization_percentage AS sql_memory_utilization_percentage,
process_physical_memory_low AS sql_process_physical_memory_low,
process_virtual_memory_low AS sql_process_virtual_memory_low
FROM sys.dm_os_process_memory;
Chapitre C. Affichez la valeur sous max server memory (MB)
La requête suivante retourne des informations sur la valeur actuellement configurée et la valeur en cours d’utilisation. Cette requête retourne des résultats, que l’option sp_configure « afficher les options avancées » soit activée ou non.
SELECT [value], [value_in_use]
FROM sys.configurations
WHERE [name] = 'max server memory (MB)';
Contenu connexe
- Guide d’architecture de gestion de la mémoire
- Surveillance et réglage des performances
- RECONFIGURE (Transact-SQL)
- Options de configuration de serveur
- sp_configure (Transact-SQL)
- Options de démarrage du service de moteur de base de données
- Limites de mémoire pour les versions de Windows et de Windows Server