Partager via


Utiliser la commande DBCC MEMORYSTATUS pour surveiller l’utilisation de la mémoire dans SQL Server

Cet article explique comment utiliser la DBCC MEMORYSTATUS commande pour surveiller l’utilisation de la mémoire.

Version du produit d’origine : SQL Server
Numéro de base de connaissances d’origine : 907877

Introduction

La DBCC MEMORYSTATUS commande fournit un instantané de l’état de mémoire actuel de Microsoft SQL Server et du système d’exploitation. Il fournit l’une des sorties les plus détaillées de la distribution et de l’utilisation de la mémoire dans SQL Server. Vous pouvez utiliser la sortie pour résoudre les problèmes de consommation de mémoire dans SQL Server ou pour résoudre des erreurs de mémoire insuffisante spécifiques. De nombreuses erreurs hors mémoire génèrent automatiquement cette sortie dans le journal des erreurs. Si vous rencontrez une erreur liée à une condition de mémoire faible, vous pouvez exécuter la DBCC MEMORYSTATUS commande et fournir la sortie lorsque vous contactez Support Microsoft.

La sortie de la commande inclut des sections pour la gestion de la DBCC MEMORYSTATUS mémoire, l’utilisation de la mémoire, les informations de mémoire agrégée, les informations du pool de mémoires tampons et les informations de cache de procédure. Elle décrit également la sortie des objets mémoire globaux, des objets mémoire de requête, de l’optimisation et des courtiers de mémoire.

Note

Analyseur de performances (PerfMon) et le Gestionnaire des tâches ne comptent pas pour l’utilisation complète de la mémoire si le L’option Pages verrouillées en mémoire est activée. Il n’existe aucun compteur de performances qui affiche l’utilisation de la mémoire de l’API AWE (Address Windowing Extensions).

Important

La DBCC MEMORYSTATUS commande est destinée à être un outil de diagnostic pour Support Microsoft. Le format de la sortie et le niveau de détail fourni sont susceptibles de changer entre les Service Packs et les versions de produit. Les fonctionnalités que la DBCC MEMORYSTATUS commande fournit peuvent être remplacées par un autre mécanisme dans les versions ultérieures du produit. Par conséquent, dans les versions ultérieures du produit, cette commande peut ne plus fonctionner. Aucun avertissement supplémentaire n’est fourni avant la modification ou la suppression de cette commande. Par conséquent, les applications qui utilisent cette commande peuvent s’arrêter sans avertissement.

La sortie de la DBCC MEMORYSTATUS commande a changé à partir des versions antérieures de SQL Server. Actuellement, il contient plusieurs tables qui n’étaient pas disponibles dans les versions antérieures du produit.

Utilisation de DBCC MEMORYSTATUS

DBCC MEMORYSTATUS est généralement utilisé pour examiner les problèmes de mémoire faible signalés par SQL Server. Une faible mémoire peut se produire s’il existe une pression de mémoire externe à partir de l’extérieur du processus SQL Server ou d’une pression interne qui provient du processus. La pression interne peut être causée par le moteur de base de données SQL Server ou par d’autres composants qui s’exécutent dans le processus (tels que les serveurs liés, les XPs, SQLCLR, la protection contre les intrusions ou les logiciels antivirus). Pour plus d’informations sur la résolution des problèmes de sollicitation de la mémoire, consultez Résoudre les problèmes de mémoire insuffisante ou de mémoire insuffisante dans SQL Server.

Voici les étapes générales pour utiliser la commande et interpréter ses résultats. Des scénarios spécifiques peuvent nécessiter que vous approchez la sortie un peu différemment, mais l’approche globale est décrite ici.

  1. Exécutez la commande DBCC MEMORYSTATUS.
  2. Utilisez les sections Nombres de processus/système et Gestionnaire de mémoire pour déterminer s’il existe une pression de mémoire externe (par exemple, l’ordinateur est faible sur la mémoire physique ou virtuelle, ou si le jeu de travail SQL Server est paginé). Utilisez également ces sections pour déterminer la quantité de mémoire allouée par le moteur de base de données SQL Server par rapport à la mémoire globale sur le système.
  3. Si vous établissez qu’il existe une pression sur la mémoire externe, essayez de réduire l’utilisation de la mémoire par d’autres applications et par le système d’exploitation, ou ajoutez davantage de RAM.
  4. Si vous établissez que le moteur SQL Server utilise la plupart de la mémoire (sollicitation de la mémoire interne), vous pouvez utiliser les sections restantes pour DBCC MEMORYSTATUS identifier les composants (commis mémoire, Cachestore, UserStore ou Objectstore) sont le plus grand contributeur à cette utilisation de la mémoire.
  5. Examinez chaque composant : MEMORYCLEARK, , CACHESTOREUSERSTORE, et OBJECTSTORE. Examinez sa valeur Pages Allouées pour déterminer la quantité de mémoire consommée par le composant dans SQL Server. Pour obtenir une brève description de la plupart des composants de mémoire du moteur de base de données, consultez la table types Memory Clerk.
    1. Dans de rares cas, l’allocation est une allocation virtuelle directe au lieu de passer par le gestionnaire de mémoire SQL Server. Dans ce cas, examinez la valeur validée de la machine virtuelle sous le composant spécifique au lieu de Pages allouées.
    2. Si votre ordinateur utilise NUMA, certains composants de mémoire sont décomposés par nœud. Par exemple, vous pouvez observer OBJECTSTORE_LOCK_MANAGER (node 0), OBJECTSTORE_LOCK_MANAGER (node 1), OBJECTSTORE_LOCK_MANAGER (node 2)et ainsi de suite, et enfin observer une valeur additionnée de chaque nœud en OBJECTSTORE_LOCK_MANAGER (Total). Le meilleur endroit pour commencer est à la section qui signale la valeur totale, puis examinez la répartition, si nécessaire. Pour plus d’informations, consultez Utilisation de la mémoire avec des nœuds NUMA.
  6. Certaines sections fournissent DBCC MEMORYSTATUS des informations détaillées et spécialisées sur des allocateurs de mémoire particuliers. Vous pouvez utiliser ces sections pour comprendre des détails supplémentaires et voir une répartition plus approfondie des allocations au sein d’un commis de mémoire. Parmi ces sections, citons le pool de mémoires tampons (données et cache d’index), le cache de procédures/le cache de plan, les objets mémoire de requête (allocations de mémoire), la file d’attente d’optimisation et les passerelles moyennes et volumineuses (mémoire optimiseur). Si vous savez déjà qu’un composant particulier de la mémoire dans SQL Server est la source de pression de la mémoire, vous préférerez peut-être accéder directement à cette section spécifique. Par exemple, si vous avez établi d’une autre façon qu’il existe une utilisation élevée des allocations de mémoire qui provoquent des erreurs de mémoire, vous pouvez passer en revue la section Objets mémoire de requête.

Le reste de cet article décrit certains des compteurs utiles dans la DBCC MEMORYSTATUS sortie qui peuvent vous permettre de diagnostiquer plus efficacement les problèmes de mémoire.

Nombres de processus/système

Cette section fournit un exemple de sortie dans un format tabulaire et décrit ses valeurs.

Process/System Counts                Value
------------------------------------ ------------
Available Physical Memory            5060247552
Available Virtual Memory             140710048014336
Available Paging File                7066804224
Working Set                          430026752
Percent of Committed Memory in WS    100
Page Faults                          151138
System physical memory high          1
System physical memory low           0
Process physical memory low          0
Process virtual memory low           0

La liste suivante décrit les valeurs et leurs descriptions :

  • Mémoire physique disponible : cette valeur indique la quantité globale de mémoire libre sur l’ordinateur. Dans l’exemple, la mémoire libre est de 5 060 247 552 octets.
  • Mémoire virtuelle disponible : cette valeur indique la quantité globale de mémoire virtuelle libre pour le processus SQL Server est de 140 710 048 014 336 octets (128 To). Pour plus d’informations, consultez Limites d’espace d’adressage et de mémoire.
  • Fichier de pagination disponible : cette valeur affiche l’espace de fichier de pagination libre. Dans l’exemple, la valeur est de 7 066 804 224 octets.
  • Jeu de travail : cette valeur indique la quantité globale de mémoire virtuelle que le processus SQL Server contient dans la RAM (n’est pas paginée) est de 430 026 752 octets.
  • Pourcentage de mémoire validée dans WS : cette valeur indique le pourcentage de mémoire virtuelle allouée par SQL Server dans la RAM (ou fonctionne). La valeur de 100 % indique que toutes les mémoires validées sont stockées dans la RAM et que 0 % d’entre elles sont paginées.
  • Erreurs de page : cette valeur affiche la quantité globale d’erreurs de page difficiles et réversibles pour SQL Server. Dans l’exemple, la valeur est 151 138.

Les quatre valeurs restantes sont binaires ou booléennes.

  • La valeur élevée de la mémoire physique système de 1 indique que SQL Server considère que la mémoire physique disponible sur l’ordinateur est élevée. C’est pourquoi la valeur de la mémoire physique système faible est 0, ce qui signifie qu’aucune mémoire faible n’est insuffisante. Une logique similaire est appliquée à la mémoire physique de traitement faible et à la mémoire virtuelle de traitement faible, où 0 signifie qu’elle est false, et 1 signifie qu’elle est vraie. Dans cet exemple, les deux valeurs sont 0, ce qui signifie qu’il y a beaucoup de mémoire physique et virtuelle pour le processus SQL Server.

Gestionnaire de mémoire

Cette section fournit un exemple de sortie du Gestionnaire de mémoire qui montre la consommation globale de mémoire par SQL Server.

Memory Manager             KB
-------------------------- --------------------
VM Reserved                36228032
VM Committed               326188
Locked Pages Allocated     0
Large Pages Allocated      0
Emergency Memory           1024
Emergency Memory In Use    16
Target Committed           14210416
Current Committed          326192
Pages Allocated            161904
Pages Reserved             0
Pages Free                 5056
Pages In Use               286928
Page Alloc Potential       15650992
NUMA Growth Phase          0
Last OOM Factor            0
Last OS Error              0

La liste suivante décrit les valeurs dans la sortie et leurs descriptions :

  • Machine virtuelle réservée : cette valeur indique la quantité globale d’espace d’adressage virtuel (VAS) ou de mémoire virtuelle (VM) réservée par SQL Server. La réservation de mémoire virtuelle n’utilise pas réellement la mémoire physique ; cela signifie simplement que les adresses virtuelles sont mises à part dans le grand VAS. Pour plus d’informations, consultez VirtualAlloc(), MEM_RESERVE.

  • Machine virtuelle validée : cette valeur indique la quantité globale de mémoire virtuelle (machine virtuelle) validée par SQL Server (en Ko). Cela signifie que la mémoire utilisée par le processus est sauvegardée par la mémoire physique ou moins fréquemment par fichier de page. Les adresses de mémoire précédemment réservées sont désormais sauvegardées par un stockage physique ; c’est-à-dire qu’ils sont alloués. Si les pages verrouillées en mémoire sont activées, SQL Server utilise une autre méthode pour allouer de la mémoire, l’API AWE et la plupart de la mémoire n’est pas reflétée dans ce compteur. Consultez [Pages verrouillées allouées](#Locked Pages allouées) pour ces allocations. Pour plus d’informations, consultez VirtualAlloc(), MEM_COMMIT.

  • Pages allouées : cette valeur affiche le nombre total de pages mémoire allouées par le moteur de base de données SQL Server.

  • Pages verrouillées allouées : cette valeur représente la quantité de mémoire, en kilo-octets (Ko), que SQL Server a allouée et verrouillée dans la RAM physique à l’aide de l’API AWE. Elle indique la quantité de mémoire que SQL Server utilise activement et a demandé à être conservée en mémoire pour optimiser les performances. En verrouillant les pages en mémoire, SQL Server garantit que les pages de base de données critiques sont facilement disponibles et ne sont pas permutées sur le disque. Pour plus d’informations, consultez La mémoire AWE (Address Windows Extensions). La valeur zéro indique que la fonctionnalité « pages verrouillées en mémoire » est actuellement désactivée et SQL Server utilise plutôt la mémoire virtuelle. Dans ce cas, la valeur validée de la machine virtuelle représente la mémoire allouée à SQL Server.

  • Pages volumineuses allouées : cette valeur représente la quantité de mémoire allouée par SQL Server à l’aide de pages volumineuses. Les grandes pages sont une fonctionnalité de gestion de la mémoire fournie par le système d’exploitation. Au lieu d’utiliser la taille de page standard (généralement 4 Ko), cette fonctionnalité utilise une plus grande taille de page, telle que 2 Mo ou 4 Mo. La valeur zéro indique que la fonctionnalité n’est pas activée. Pour plus d’informations, consultez Virtual Alloc(), MEM_LARGE_PAGES.

  • Cible validée : cette valeur indique la quantité cible de mémoire que SQL Server a pour objectif d’avoir validée, une quantité idéale de mémoire que SQL Server peut consommer, en fonction de la charge de travail récente.

  • Actif validé : cette valeur indique la quantité de mémoire du système d’exploitation (en Ko) que le gestionnaire de mémoire SQL Server a actuellement validée (allouée dans le magasin physique). Cette valeur inclut « pages verrouillées en mémoire » (API AWE) ou mémoire virtuelle. Par conséquent, cette valeur est proche ou identique à la machine virtuelle validée ou verrouillée pages allouées. Notez que lorsque SQL Server utilise l’API AWE, certaines mémoires sont toujours allouées par le Gestionnaire de mémoire virtuelle du système d’exploitation et sont reflétées en tant que machine virtuelle validée.

  • Phase de croissance NUMA : cette valeur indique si SQL Server est actuellement en phase de croissance NUMA. Pour plus d’informations sur cette montée en puissance initiale de la mémoire lorsque des nœuds NUMA existent sur l’ordinateur, consultez Comment il fonctionne : SQL Server (local NUMA Local, Foreign and Away Memory Blocks).

  • Dernière erreur de système d’exploitation : cette valeur affiche la dernière erreur de système d’exploitation qui s’est produite lorsqu’une pression de mémoire s’est produite sur le système. SQL Server enregistre cette erreur de système d’exploitation et l’affiche dans la sortie. Pour obtenir la liste complète des erreurs de système d’exploitation, consultez Codes d’erreur système.

Utilisation de la mémoire avec des nœuds NUMA

La section Gestionnaire de mémoire est suivie d’un résumé de l’utilisation de la mémoire pour chaque nœud mémoire. Dans un système n’ayant pas accès à la mémoire uniforme (NUMA), il existe une entrée de nœud de mémoire correspondante pour chaque nœud NUMA matériel. Dans un système SMP, il existe une entrée de nœud mémoire unique. Le même modèle est appliqué à d’autres sections de mémoire.

Memory node Id = 0      KB
----------------------- -----------
VM Reserved             21289792
VM Committed            272808
Locked Pages Allocated  0
Pages Allocated         168904
Pages Free              3040
Target Committed        6664712
Current Committed       272808
Foreign Committed       0
Away Committed          0
Taken Away Committed    0

Note

  • La Memory node Id valeur peut ne pas correspondre à l’ID de nœud matériel.
  • Ces valeurs indiquent la mémoire allouée par les threads qui s’exécutent sur ce nœud NUMA. Ces valeurs ne sont pas la mémoire locale au nœud NUMA.
  • Les sommes des valeurs réservées de la machine virtuelle et les valeurs validées de la machine virtuelle sur tous les nœuds de mémoire sont légèrement inférieures aux valeurs correspondantes signalées dans la table Memory Manager.
  • Le nœud NUMA 64 (nœud 64) est réservé à la DAC et est rarement intéressé par l’examen de la mémoire, car cette connexion utilise des ressources de mémoire limitées. Pour plus d’informations sur la connexion d’administrateur dédié (DAC), consultez Connexion de diagnostic pour les administrateurs de base de données.

La liste suivante décrit les valeurs dans la table de sortie et leurs descriptions :

  • Machine virtuelle réservée : affiche l’espace d’adressage virtuel (VAS) réservé par les threads qui s’exécutent sur ce nœud.
  • Machine virtuelle validée : affiche les vas qui sont validés par les threads qui s’exécutent sur ce nœud.

Agréger la mémoire

Le tableau suivant contient des informations de mémoire agrégées pour chaque type de commis et nœud NUMA. Pour un système compatible NUMA, vous pouvez voir une sortie semblable à ce qui suit :

MEMORYCLERK_SQLGENERAL (node 0) KB
------------------------------  --------------------
VM Reserved                     0
VM Committed                    0
Locked Pages Allocated          0
SM Reserved                     0
SM Commited                     0
Pages Allocated                 5416

MEMORYCLERK_SQLGENERAL (node 1) KB
------------------------------- --------------------
VM Reserved                     0
VM Committed                    0
Locked Pages Allocated          0
SM Reserved                     0
SM Commited                     0
Pages Allocated                 136

MEMORYCLERK_SQLGENERAL (Total)  KB
------------------------------- --------------------
VM Reserved                     0
VM Committed                    0
Locked Pages Allocated          0
SM Reserved                     0
SM Commited                     0
Pages Allocated                 5552

La valeur d’affiche Pages Allocated le nombre global de pages de mémoire allouées par un composant spécifique (commis à la mémoire, magasin d’utilisateurs, magasin d’objets ou magasin de cache).

Note

Ces ID de nœud correspondent à la configuration du nœud NUMA de l’ordinateur exécutant SQL Server. Les ID de nœud incluent les nœuds NUMA logiciels possibles définis sur les nœuds NUMA matériels ou sur un système SMP. Pour rechercher le mappage entre les ID de nœud et les PROCESSEURs pour chaque nœud, consultez l’ID d’événement d’information 17152. Cet événement est journalisé dans le journal des applications dans l’Observateur d’événements lorsque vous démarrez SQL Server.

Pour un système SMP, vous ne voyez qu’une seule table pour chaque type de commis, sans compter le nœud = 64 utilisé par DAC. Ce tableau ressemble à l’exemple suivant.

MEMORYCLERK_SQLGENERAL (Total)     KB
--------------------------------- --------------------
VM Reserved                        0
VM Committed                       0
AWE Allocated                      0
SM Reserved                        0
SM Commited                        0
Pages Allocated                    2928

D’autres informations de ces tables concernent la mémoire partagée :

  • SM Réservé : affiche les vas qui sont réservés par tous les commis de ce type qui utilisent l’API de fichiers mappés en mémoire. Cette API est également appelée mémoire partagée.
  • SM Commit : Affiche la fonction VAS validée par tous les commis de ce type qui utilisent l’API de fichiers mappés en mémoire.

En guise de méthode alternative, vous pouvez obtenir des informations récapitulatives pour chaque type de commis pour tous les nœuds de mémoire à l’aide de la vue de gestion dynamique (DMV) sys.dm_os_memory_clerks . Pour ce faire, exécutez la requête suivante :

SELECT
  TYPE,
  SUM(virtual_memory_reserved_kb) AS [VM Reserved],
  SUM(virtual_memory_committed_kb) AS [VM Committed],
  SUM(awe_allocated_kb) AS [AWE Allocated],
  SUM(shared_memory_reserved_kb) AS [SM Reserved],
  SUM(shared_memory_committed_kb) AS [SM Committed],
  -- SUM(multi_pages_kb) AS [MultiPage Allocator],          /*Applies to: SQL Server 2008   (10.0.x) through SQL Server 2008 R2 (10.50.x).*/
  -- SUM(single_pages_kb) AS [SinlgePage Allocator],        /*Applies to: SQL Server 2008   (10.0.x) through SQL Server 2008 R2 (10.50.x).*/
  SUM(pages_kb) AS [Page Allocated]                      /*Applies to: SQL Server 2012 (11.  x) and later.*/
FROM sys.dm_os_memory_clerks
GROUP BY TYPE

Détails du pool de mémoires tampons

Il s’agit d’une section importante qui fournit une répartition des différentes données d’états et pages d’index dans le pool de mémoires tampons, également appelée cache de données. Le tableau de sortie suivant répertorie les détails du pool de mémoires tampons et d’autres informations.

Buffer Pool                                       Pages
------------------------------------------------- ---------
Database                                          5404
Simulated                                         0
Target                                            16384000
Dirty                                             298
In IO                                             0
Latched                                           0
IO error                                          125
In Internal Pool                                  0
Page Life Expectancy                              3965

La liste suivante décrit les valeurs dans la sortie et leurs descriptions :

  • Base de données : affiche le nombre de mémoires tampons (pages) qui ont du contenu de base de données (données et pages d’index).
  • Cible : affiche la taille cible du pool de mémoires tampons (nombre de mémoires tampons). Consultez la mémoire validée cible dans les sections précédentes de cet article.
  • Dirty : affiche les pages qui ont du contenu de base de données et qui ont été modifiées. Ces mémoires tampons contiennent des modifications qui doivent être vidées sur le disque généralement par le processus de point de contrôle.
  • En E/S : affiche les mémoires tampons qui attendent une opération d’E/S en attente. Cela signifie que le contenu de ces pages est en cours d’écriture ou de lecture à partir du stockage.
  • Latched : affiche les mémoires tampons en verrou. Une mémoire tampon est bloquée lorsqu’un thread lit ou modifie le contenu d’une page. Une mémoire tampon est également bloquée lorsque la page est lue à partir du disque ou écrite sur le disque. Un verrou est utilisé pour maintenir la cohérence physique des données sur la page pendant qu’elles sont lues ou modifiées. En revanche, un verrou est utilisé pour maintenir la cohérence logique et transactionnelle.
  • Erreur d’E/S : affiche le nombre de mémoires tampons susceptibles d’avoir rencontré des erreurs de système d’exploitation liées aux E/S (cela n’indique pas nécessairement un problème).
  • Espérance de vie de la page : ce compteur mesure la durée en secondes pendant laquelle la page la plus ancienne est restée dans le pool de mémoires tampons.

Vous pouvez obtenir des informations détaillées sur le pool de mémoires tampons pour les pages de base de données à l’aide du sys.dm_os_buffer_descriptors DMV. Mais utilisez cette DMV avec prudence, car elle peut s’exécuter longtemps et produire une sortie énorme si votre serveur SQL Server est autorisé à disposer d’un grand nombre de RAM à sa disposition.

Cache de plan

Cette section décrit le cache de plan précédemment appelé cache de procédure.

Procedure Cache         Value
----------------------- -----------
TotalProcs              4
TotalPages              25
InUsePages              0

La liste suivante décrit les valeurs dans la sortie et leurs descriptions :

  • TotalProcs : cette valeur affiche le nombre total d’objets mis en cache actuellement dans le cache de procédure. Cette valeur correspond au nombre d’entrées dans la sys.dm_exec_cached_plans vue dynamique.

    Note

    En raison de la nature dynamique de ces informations, la correspondance peut ne pas être exacte. Vous pouvez utiliser PerfMon pour surveiller l’objet SQL Server : Planifier le cache et la sys.dm_exec_cached_plans DMV pour obtenir des informations détaillées sur le type d’objets mis en cache, tels que les déclencheurs, les procédures et les objets ad hoc.

  • TotalPages : affiche les pages cumulatives utilisées pour stocker tous les objets mis en cache dans le cache de plan ou de procédure. Vous pouvez multiplier ce nombre par 8 Ko pour obtenir la valeur exprimée en ko.

  • InUsePages : affiche les pages du cache de procédures qui appartiennent aux procédures actuellement actives. Ces pages ne peuvent pas être ignorées.

Objets de mémoire globale

Cette section contient des informations sur différents objets de mémoire globale et la quantité de mémoire qu’ils utilisent.

Global Memory Objects               Buffers
----------------------------------  ----------------
Resource                            576
Locks                               96
XDES                                61
DirtyPageTracking                   52
SETLS                               8
SubpDesc Allocators                 8
SE SchemaManager                    139
SE Column Metadata Cache            159
SE Column Metadata Cache Store      2
SE Column Store Metadata Cache      8
SQLCache                            224
Replication                         2
ServerGlobal                        1509
XP Global                           2
SortTables                          3

La liste suivante décrit les valeurs dans la sortie et leurs descriptions :

  • Ressource : affiche la mémoire utilisée par l’objet Resource. Il est utilisé par le moteur de stockage pour différentes structures à l’échelle du serveur.
  • Verrous : affiche la mémoire utilisée par le Gestionnaire de verrous.
  • XDES : affiche la mémoire utilisée par le Gestionnaire de transactions.
  • SETLS : affiche la mémoire utilisée pour allouer la structure par thread spécifique au moteur de stockage qui utilise le stockage local de thread (TLS). Pour plus d’informations, consultez Stockage local thread.
  • SubpDesc Allocators : affiche la mémoire utilisée pour la gestion des sous-processus pour les requêtes parallèles, les opérations de sauvegarde, les opérations de restauration, les opérations de base de données, les opérations de fichier, la mise en miroir et les curseurs asynchrones. Ces sous-processus sont également appelés « processus parallèles ».
  • SE SchemaManager : affiche la mémoire utilisée par Le Gestionnaire de schémas pour stocker les métadonnées spécifiques au moteur de stockage.
  • SQLCache : affiche la mémoire utilisée pour enregistrer le texte des instructions ad hoc et préparées.
  • Réplication : affiche la mémoire utilisée par le serveur pour les sous-systèmes de réplication internes.
  • ServerGlobal : affiche l’objet mémoire du serveur global utilisé de manière générique par plusieurs sous-systèmes.
  • XP Global : affiche la mémoire utilisée par les procédures stockées étendues.
  • SortTables : affiche la mémoire utilisée par les tables de tri.

Interroger des objets de mémoire

Cette section décrit les informations d’octroi de mémoire de requête. Il inclut également un instantané de l’utilisation de la mémoire de requête. La mémoire de requête est également appelée « mémoire de l’espace de travail ».

Query Memory Objects (default)           Value
---------------------------------------- -------
Grants                                    0
Waiting                                   0
Available                                 436307
Current Max                               436307
Future Max                                436307
Physical Max                              436307
Next Request                              0
Waiting For                               0
Cost                                      0
Timeout                                   0
Wait Time                                 0

Si la taille et le coût d’une requête répondent à des seuils de mémoire de requête « petits », la requête est placée dans une petite file d’attente de requêtes. Ce comportement empêche les requêtes plus petites d’être retardées derrière des requêtes plus volumineuses qui se trouvent déjà dans la file d’attente.

La liste suivante décrit les valeurs dans la sortie et leurs descriptions :

  • Octrois : indique le nombre de requêtes en cours d’exécution qui ont des allocations de mémoire.
  • En attente : affiche le nombre de requêtes qui attendent d’obtenir des allocations de mémoire.
  • Disponible : affiche les mémoires tampons disponibles pour les requêtes à utiliser comme espace de travail de hachage et trier l’espace de travail. La Available valeur est mise à jour régulièrement.
  • Requête suivante : affiche la taille de la demande de mémoire, dans les mémoires tampons, pour la requête en attente suivante.
  • En attente : affiche la quantité de mémoire qui doit être disponible pour exécuter la requête à laquelle la valeur de requête suivante fait référence. La valeur En attente est la Next Request valeur multipliée par un facteur de salle de tête. Cette valeur garantit efficacement qu’une quantité spécifique de mémoire sera disponible lors de l’exécution de la requête en attente suivante.
  • Coût : affiche le coût de la requête en attente suivante.
  • Délai d’attente : affiche le délai d’expiration, en secondes, pour la requête en attente suivante.
  • Temps d’attente : affiche le temps écoulé, en millisecondes, depuis que la requête en attente suivante a été placée dans la file d’attente.
  • Nombre maximal actuel : affiche la limite de mémoire globale pour l’exécution des requêtes. Cette valeur est la limite combinée pour la file d’attente de requêtes volumineuse et la petite file d’attente de requêtes.

Pour plus d’informations sur les allocations de mémoire, sur ce que signifient ces valeurs et sur la résolution des problèmes d’allocations de mémoire, consultez Résoudre les problèmes de performances lentes ou de mémoire faible causées par les allocations de mémoire dans SQL Server.

Mémoire d’optimisation

Les requêtes sont envoyées au serveur pour compilation. Le processus de compilation comprend l’analyse, l’algébrisation et l’optimisation. Les requêtes sont classées en fonction de la mémoire que chaque requête consomme pendant le processus de compilation.

Note

Cette quantité n’inclut pas la mémoire requise pour exécuter la requête.

Quand une requête démarre, il n’existe aucune limite quant au nombre de requêtes qui peuvent être compilées. À mesure que la consommation de mémoire augmente et atteint un seuil, la requête doit passer une passerelle pour continuer. Il existe une limite progressivement décroissante des requêtes compilées simultanément après chaque passerelle. La taille de chaque passerelle dépend de la plateforme et de la charge. Les tailles de passerelle sont choisies pour optimiser l’extensibilité et le débit.

Si la requête ne peut pas passer une passerelle, elle attend que la mémoire soit disponible ou retourne une erreur de délai d’attente (erreur 8628). En outre, la requête peut ne pas acquérir de passerelle si vous annulez la requête ou si un blocage est détecté. Si la requête transmet plusieurs passerelles, elle ne libère pas les passerelles plus petites tant que le processus de compilation n’est pas terminé.

Ce comportement ne permet que quelques compilations gourmandes en mémoire en même temps. En outre, ce comportement optimise le débit pour les requêtes plus petites.

Le tableau suivant fournit des détails sur les attentes de mémoire qui se produisent en raison d’une mémoire insuffisante pour l’optimisation des requêtes. Les comptes de mémoire interne pour la mémoire d’optimiseur utilisée par les requêtes système, tandis que la mémoire d’optimisation par défaut signale la mémoire d’optimisation pour les requêtes utilisateur ou application.

Optimization Queue (internal)      Value
---------------------------------- ----------------
Overall Memory                     4013162496
Target Memory                      3673882624
Last Notification                  1
Timeout                            6
Early Termination Factor           5

Small Gateway (internal)           Value
---------------------------------- ----------------
Configured Units                   32
Available Units                    32
Acquires                           0
Waiters                            0
Threshold Factor                   380000
Threshold                          380000

Medium Gateway (internal)          Value
---------------------------------- ----------------
Configured Units                   8
Available Units                    8
Acquires                           0
Waiters                            0
Threshold Factor                   12
Threshold                          -1

Big Gateway (internal)             Value
---------------------------------- ----------------
Configured Units                   1
Available Units                    1
Acquires                           0
Waiters                            0
Threshold Factor                   8
Threshold                          -1

Optimization Queue (default)       Value
---------------------------------- ----------------
Overall Memory                     4013162496
Target Memory                      3542319104
Last Notification                  1
Timeout                            6
Early Termination Factor           5

Small Gateway (default)            Value
---------------------------------- ----------------
Configured Units                   32
Available Units                    32
Acquires                           0
Waiters                            0
Threshold Factor                   380000
Threshold                          380000

Medium Gateway (default)           Value
---------------------------------- ----------------
Configured Units                   8
Available Units                    8
Acquires                           0
Waiters                            2
Threshold Factor                   12
Threshold                          -1

Big Gateway (default)              Value
---------------------------------- ----------------
Configured Units                   1
Available Units                    1
Acquires                           0
Waiters                            0
Threshold Factor                   8
Threshold                          -1

Voici une description de certaines de ces valeurs :

  • Unités configurées : indique le nombre de requêtes simultanées qui peuvent utiliser la mémoire de compilation à partir de la passerelle. Dans l’exemple, 32 requêtes simultanées peuvent utiliser de la mémoire à partir de la petite passerelle (par défaut), huit requêtes simultanées à partir de la passerelle moyenne et une requête à partir de la passerelle Big. Comme mentionné précédemment, si une requête a besoin de plus de mémoire que la petite passerelle, elle accéderait à la passerelle moyenne et cette requête est comptée pour avoir pris une unité dans les deux passerelles. Plus la quantité de mémoire de compilation dont une requête a besoin, moins d’unités configurées dans une passerelle sont importantes.
  • Unités disponibles : indique le nombre d’emplacements ou d’unités disponibles pour les requêtes simultanées à compiler à partir de la liste des unités configurées. Par exemple, si 32 unités sont disponibles, mais que trois requêtes utilisent actuellement la mémoire de compilation, elles Available Units sont de 32 moins 3 ou 29 unités.
  • Acquisitions : indique le nombre d’unités ou d’emplacements acquis par les requêtes à compiler. Si trois requêtes utilisent actuellement la mémoire à partir d’une passerelle, acquires = 3.
  • Serveurs : indique le nombre de requêtes en attente de mémoire de compilation dans une passerelle. Si toutes les unités d’une passerelle sont épuisées, la valeur des serveurs est différente de zéro qui indique le nombre de requêtes en attente.
  • Seuil : indique une limite de mémoire de passerelle qui détermine où une requête obtient sa mémoire, ou la passerelle à partir de laquelle elle reste. Si une requête ne nécessite pas plus que la valeur de seuil, elle reste dans la petite passerelle (une requête commence toujours par la petite passerelle). S’il a besoin de plus de mémoire pour la compilation, il va au moyen de celui-ci, et si ce seuil est encore insuffisant, il accède à la grande passerelle. Pour la petite passerelle, le facteur de seuil est de 380 000 octets (peut être susceptible de changer dans les versions ultérieures) pour la plateforme x64.
  • Facteur de seuil : détermine la valeur de seuil pour chaque passerelle. Pour la petite passerelle, étant donné que le seuil est prédéfini, le facteur est également défini sur la même valeur. Les facteurs de seuil pour la passerelle moyenne et grande sont des fractions de la mémoire d’optimiseur totale (mémoire globale dans la file d’attente d’optimisation) et sont définis respectivement sur 12 et 8. Par conséquent, si la mémoire globale est ajustée, car d’autres consommateurs de mémoire SQL Server nécessitent de la mémoire, les facteurs de seuil entraînent également l’ajustement dynamique des seuils.
  • Délai d’expiration : indique la valeur en minutes qui définit la durée pendant laquelle une requête attend la mémoire de l’optimiseur. Si cette valeur de délai d’expiration est atteinte, la session cesse d’attendre et déclenche l’erreur 8628 - A time out occurred while waiting to optimize the query. Rerun the query.

Répartiteurs de mémoire

Cette section fournit des informations sur les répartiteurs de mémoire qui contrôlent la mémoire mise en cache, la mémoire volée et la mémoire réservée. Vous pouvez utiliser les informations de ces tables uniquement pour les diagnostics internes. Par conséquent, ces informations ne sont pas détaillées.

MEMORYBROKER_FOR_CACHE (internal)       Value
--------------------------------------- -------------
Allocations                             20040
Rate                                    0
Target Allocations                      3477904
Future Allocations                      0
Overall                                 3919104
Last Notification                       1

MEMORYBROKER_FOR_STEAL (internal)       Value
--------------------------------------- -------------
Allocations                             129872
Rate                                    40
Target Allocations                      3587776
Future Allocations                      0
Overall                                 3919104
Last Notification                       1

MEMORYBROKER_FOR_RESERVE (internal)     Value
--------------------------------------- -------------
Allocations                             0
Rate                                    0
Target Allocations                      3457864
Future Allocations                      0
Overall                                 3919104
Last Notification                       1

MEMORYBROKER_FOR_CACHE (default)        Value
--------------------------------------- -------------
Allocations                             44592
Rate                                    8552
Target Allocations                      3511008
Future Allocations                      0
Overall                                 3919104
Last Notification                       1

MEMORYBROKER_FOR_STEAL (default)        Value
--------------------------------------- -------------
Allocations                             1432
Rate                                    -520
Target Allocations                      3459296
Future Allocations                      0
Overall                                 3919104
Last Notification                       1

MEMORYBROKER_FOR_RESERVE (default)      Value
--------------------------------------- -------------
Allocations                             0
Rate                                    0
Target Allocations                      3919104
Future Allocations                      872608
Overall                                 3919104
Last Notification                       1