Partager via


Surveiller l’utilisation de la mémoire

S'applique à :SQL Server

Surveillez périodiquement une instance de SQL Server pour vous assurer que l’utilisation de la mémoire reste dans des limites normales.

Configurer la mémoire maximale de SQL Server

Par défaut, une instance SQL Server peut consommer la plupart de la mémoire du système d’exploitation Windows disponible sur le serveur. Une fois la mémoire acquise, elle n’est libérée que si une sollicitation de la mémoire est détectée. Cela est par conception et n’indique pas de fuite de mémoire dans le processus SQL Server. Utilisez l’option max server memory pour limiter la quantité de mémoire que SQL Server est autorisé à acquérir pour la plupart de ses utilisations. Pour plus d’informations, consultez le guide d’architecture de gestion de la mémoire.

Dans SQL Server sur Linux, définissez la limite de la mémoire avec l’outil mssql-conf et le paramètre memory.memorylimitmb.

Surveiller la mémoire du système d’exploitation

Pour surveiller une condition de mémoire insuffisante, utilisez les compteurs de serveur Windows suivants. Utilisez les vues de gestion dynamique sys.dm_os_process_memory et sys.dm_os_sys_memory pour interroger de nombreux compteurs de mémoire de système d’exploitation.

  • Mémoire : octets disponibles Ce compteur indique le nombre d’octets de mémoire actuellement disponibles pour une utilisation par les processus. Un compteur Octets disponibles avec des valeurs faibles peut indiquer une pénurie globale de la mémoire du système d’exploitation. Vous pouvez interroger cette valeur en T-SQL avec sys.dm_os_sys_memory.available_physical_memory_kb.

  • Mémoire : Pages/s Ce compteur indique le nombre de pages récupérées à partir du disque en raison d’erreurs de page dur ou écrites sur le disque pour libérer de l’espace dans le jeu de travail en raison d’erreurs de page. Une valeur élevée du compteur Pages/s peut indiquer une pagination excessive.

  • Mémoire : Défauts de page/s Ce compteur indique le taux de défauts de page pour tous les processus, y compris les processus système. Même si l’ordinateur a beaucoup de mémoire à sa disposition, il est normal d’avoir un taux de pagination sur disque faible, mais différent de zéro (d’où des défauts de page). Le gestionnaire de mémoire virtuelle de Microsoft Windows soustrait des pages à SQL Server et à d’autres processus quand il réduit la taille des parties actives de ces processus. Son activité a tendance à provoquer des défauts de page.

  • Processus : Défauts de page/s Ce compteur indique le taux de défauts de page pour un processus utilisateur donné. Surveillez Processus : Défauts de page/s pour déterminer si l’activité du disque est due à la pagination par SQL Server. Pour déterminer si SQL Server ou un autre processus provoque une pagination excessive, surveillez le compteur Processus : Défauts de page/s pour l’instance du processus SQL Server.

Pour plus d’informations sur la résolution d’une pagination excessive, consultez la documentation du système d’exploitation.

Isoler la mémoire utilisée par SQL Server

Pour surveiller l’utilisation de la mémoire SQL Server, utilisez les objets SQL Server suivants. Utilisez les vues de gestion dynamique sys.dm_os_performance_counters et sys.dm_os_process_memory pour interroger de nombreux compteurs d’objets SQL Server.

Par défaut, SQL Server gère ses besoins de mémoire de façon dynamique en fonction des ressources système disponibles. Si SQL Server a besoin de plus de mémoire, il demande au système d’exploitation de déterminer si de la mémoire physique libre est disponible. Dans l’affirmative, il l’utilise. S’il existe une mémoire faible pour le système d’exploitation, SQL Server libère de la mémoire sur le système d’exploitation jusqu’à ce que la condition de mémoire faible soit réduite ou jusqu’à ce que SQL Server atteigne la limite de mémoire minimale du serveur . Vous pouvez cependant ignorer cette option pour utiliser dynamiquement de la mémoire au moyen des options de configuration du serveur suivantes : min server memory et max server memory. Pour plus d’informations, consultez les options de configuration de la mémoire du serveur.

Pour surveiller la mémoire utilisée par SQL Server, examinez les compteurs de performances suivants :

  • SQL Server : Gestionnaire de mémoire : Mémoire totale du serveur (Ko) Ce compteur indique la quantité de mémoire du système d’exploitation que le gestionnaire de mémoire SQL Server a actuellement validée sur SQL Server. Ce nombre doit augmenter en fonction des besoins de l’activité réelle et augmente après le démarrage de SQL Server. Interrogez ce compteur à l’aide de la vue de gestion dynamique sys.dm_os_sys_info et observez la colonne committed_kb.

  • SQL Server : Gestionnaire de mémoire : Mémoire cible (Ko) Ce compteur indique une quantité idéale de mémoire que SQL Server peut consommer, en fonction de la charge de travail récente. Comparez-le à la Mémoire totale du serveur après une période de fonctionnement normal pour déterminer si la quantité de mémoire allouée à SQL Server convient. Après une période de fonctionnement normal, Mémoire totale du serveur et Mémoire du serveur cible doivent être similaires. Si la mémoire totale du serveur est nettement inférieure à la mémoire du serveur cible, l’instance SQL Server peut subir une pression de mémoire. Pendant un certain temps après le démarrage de SQL Server, la Mémoire totale du serveur est censée être inférieure à la Mémoire du serveur cible, dans la mesure où la Mémoire totale du serveur augmente. Interrogez ce compteur à l’aide de la vue de gestion dynamique sys.dm_os_sys_info et observez la colonne committed_target_kb. Pour obtenir plus d’informations et les bonnes pratiques relatives à la configuration de la mémoire, consultez les options de configuration de la mémoire du serveur.

  • Processus : Ensemble de travail Ce compteur indique la quantité de mémoire physique utilisée par un processus actuellement, selon le système d’exploitation. Observez l’instance sqlservr.exe de ce compteur. Interrogez ce compteur à l’aide de la vue de gestion dynamique sys.dm_os_process_memory et observez la colonne physical_memory_in_use_kb.

  • Processus : octets privés Ce compteur indique la quantité de mémoire demandée par un processus pour son propre utilisation au système d’exploitation. Observez l’instance sqlservr.exe de ce compteur. Étant donné que ce compteur inclut toutes les allocations de mémoire demandées par sqlservr.exe, notamment celles non limitées par l’option max server memory, ce compteur peut signaler des valeurs supérieures à l’option max server memory.

  • SQL Server : Gestionnaire de mémoires tampons : Pages de base de données Ce compteur indique le nombre de pages du pool de mémoires tampons avec du contenu de base de données. N’inclut pas d’autres mémoires de pool nonbuffer dans le processus SQL Server. Utilisez la vue de gestion dynamique sys.dm_os_performance_counters pour interroger ce compteur.

  • SQL Server : Gestionnaire de mémoires tampons : Taux d’accès au cache de mémoire tampon Ce compteur est spécifique à SQL Server. Un ratio de 90 ou plus est souhaitable. Une valeur supérieure à 90 indique que plus de 90 % de toutes les requêtes ont été satisfaites à partir de la mémoire cache sans avoir à lire sur le disque. Pour plus d’informations sur le Gestionnaire de mémoires tampons SQL Server, consultez l’objet SQL Server, Buffer Manager. Utilisez la vue de gestion dynamique sys.dm_os_performance_counters pour interroger ce compteur.

  • SQL Server : Gestionnaire de mémoires tampons : Espérance de vie des pages Ce compteur mesure la durée en secondes pendant laquelle la page la plus ancienne reste dans le pool de mémoires tampons. Pour les systèmes qui utilisent une architecture NUMA, il s’agit de la moyenne sur tous les nœuds NUMA. Une valeur élevée et croissante est préférable. Une baisse soudaine indique une évolution significative des données dans et hors du pool de mémoires tampons, ce qui indique que la charge de travail n’a pas pu tirer pleinement parti des données déjà en mémoire. Chaque nœud NUMA a son propre nœud du pool de mémoires tampons. Sur les serveurs contenant plusieurs nœuds NUMA, vous pouvez voir l’espérance de vie d’une page de chaque nœud du pool de mémoires tampons avec SQL Server: Buffer Node: Page life expectancy. Utilisez la vue de gestion dynamique sys.dm_os_performance_counters pour interroger ce compteur.

Exemples

Déterminer l’allocation de mémoire actuelle

Les requêtes suivantes retournent des informations sur la mémoire actuellement allouée.

SELECT
(total_physical_memory_kb/1024) AS Total_OS_Memory_MB,
(available_physical_memory_kb/1024)  AS Available_OS_Memory_MB
FROM sys.dm_os_sys_memory;

SELECT
(physical_memory_in_use_kb/1024) AS Memory_used_by_Sqlserver_MB,
(locked_page_allocations_kb/1024) AS Locked_pages_used_by_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;

Déterminer l’utilisation actuelle de la mémoire par SQL Server

La requête suivante retourne des informations sur l’utilisation actuelle de la mémoire par SQL Server.

SELECT
sqlserver_start_time,
(committed_kb/1024) AS Total_Server_Memory_MB,
(committed_target_kb/1024)  AS Target_Server_Memory_MB
FROM sys.dm_os_sys_info;

Déterminer l’espérance de vie d’une page

La requête suivante utilise sys.dm_os_performance_counters pour observer la valeur actuelle d’espérance de vie d’une page de l’instance SQL Server au niveau du gestionnaire de tampons global et au niveau de chaque nœud NUMA.

SELECT
CASE instance_name WHEN '' THEN 'Overall' ELSE instance_name END AS NUMA_Node, cntr_value AS PLE_s
FROM sys.dm_os_performance_counters
WHERE counter_name = 'Page life expectancy';