Utilisez 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 la base de connaissances d’origine : 907877

Introduction

La DBCC MEMORYSTATUS commande fournit une instantané de la mémoire actuelle status 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 spécifiques de mémoire insuffisante. De nombreuses erreurs de mémoire insuffisante génèrent automatiquement cette sortie dans le journal des erreurs. Si vous rencontrez une erreur liée à une condition de mémoire insuffisante, vous pouvez exécuter la commande et fournir la DBCC MEMORYSTATUS sortie lorsque vous contactez Support Microsoft.

La sortie de la commande comprend des sections pour la gestion de la mémoire, l’utilisation de la mémoire, les informations de mémoire agrégées, les informations sur le DBCC MEMORYSTATUS pool de mémoires tampons et les informations sur le cache de procédures. Il décrit également la sortie des objets mémoire globaux, des objets de mémoire de requête, de l’optimisation et des répartiteurs de mémoire.

Remarque

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

Importante

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 produits. Les fonctionnalités que fournit la DBCC MEMORYSTATUS commande peuvent être remplacées par un mécanisme différent 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 ne sera 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é depuis les versions antérieures de SQL Server. Actuellement, il contient plusieurs tables qui n’étaient pas disponibles dans les versions antérieures du produit.

Comment utiliser DBCC MEMORYSTATUS

DBCC MEMORYSTATUSest généralement utilisé pour examiner les problèmes de mémoire insuffisante signalés par SQL Server. Une mémoire insuffisante peut se produire en cas de sollicitation de la mémoire externe en dehors du processus SQL Server ou d’une pression interne qui provient du processus. La pression interne peut être due à l’SQL Server moteur de base de données ou à d’autres composants qui s’exécutent dans le processus (tels que les serveurs liés, les services XPs, SQLCLR, la protection contre les intrusions ou les logiciels antivirus). Pour plus d’informations sur la résolution de la 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 l’utilisation de la commande et l’interprétation de ses résultats. Des scénarios spécifiques peuvent nécessiter que vous abordiez 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 Process/System Counts et Memory Manager pour déterminer s’il existe une sollicitation de la mémoire externe (par exemple, l’ordinateur manque de mémoire physique ou virtuelle, ou si le SQL Server jeu de travail 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 sollicitation de 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 plus de RAM.
  4. Si vous établissez que le moteur de SQL Server utilise la majeure partie de la mémoire (sollicitation de la mémoire interne), vous pouvez utiliser les sections restantes de DBCC MEMORYSTATUS pour identifier les composants (commis de mémoire, Cachestore, UserStore ou Objectstore) qui sont les plus contributeur à cette utilisation de la mémoire.
  5. Examinez chaque composant : MEMORYCLEARK, CACHESTORE, USERSTOREet OBJECTSTORE. Examinez sa valeur Pages allouées pour déterminer la quantité de mémoire consommée par ce composant dans SQL Server. Pour obtenir une brève description de la plupart des composants mémoire du moteur de base de données, consultez le tableau Types de commis de mémoire .
    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 de la machine virtuelle Validée 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 dans OBJECTSTORE_LOCK_MANAGER (Total). Le meilleur point de départ est la section qui indique la valeur totale, puis examinez la répartition, si nécessaire. Pour plus d’informations, consultez Utilisation de la mémoire avec les nœuds NUMA.
  6. Certaines sections de DBCC MEMORYSTATUS fournissent 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 supplémentaire des allocations au sein d’un commis de mémoire. Parmi ces sections, citons le pool de mémoires tampons (cache de données et d’index), le cache de procédure/cache de plan, les objets de mémoire de requête (allocations de mémoire), la file d’attente d’optimisation et les passerelles petites et moyennes et volumineuses (mémoire de l’optimiseur). Si vous savez déjà qu’un composant particulier de la mémoire dans SQL Server est la source de la sollicitation 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 manière qu’il existe une utilisation élevée des allocations de mémoire qui provoque des erreurs de mémoire, vous pouvez consulter la section Objets de 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 les problèmes de mémoire plus efficacement.

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é totale 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é totale de mémoire virtuelle disponible pour SQL Server processus est de 140 710 048 014 336 octets (128 To). Pour plus d’informations, consultez Limites de la mémoire et de l’espace d’adressage.
  • Fichier de pagination disponible : cette valeur affiche l’espace libre du fichier de pagination. Dans l’exemple, la valeur est 7 066 804 224 octets.
  • Jeu de travail : cette valeur indique que la quantité globale de mémoire virtuelle que le processus SQL Server a en RAM (n’est pas paginé) est de 430 026 752 octets.
  • Pourcentage de mémoire validée dans WS : cette valeur indique le pourcentage de SQL Server mémoire virtuelle allouée réside dans la RAM (ou est en cours de travail). La valeur de 100 % indique que toute la mémoire validée est stockée dans la RAM et que 0 % de celle-ci est paginée.
  • Erreurs de page : cette valeur indique le nombre total d’erreurs de page matérielle et logicielle pour le SQL Server. Dans l’exemple, la valeur est 151 138.

Les quatre valeurs restantes sont binaires ou booléennes.

  • La valeur 1 de la mémoire physique système indique que SQL Server considère que la mémoire physique disponible sur l’ordinateur est élevée. C’est pourquoi la valeur de mémoire physique système insuffisante est 0, ce qui signifie qu’il n’y a pas de mémoire insuffisante. Une logique similaire est appliquée à Traiter la mémoire physique faible et à Traiter la mémoire virtuelle 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) que SQL Server a réservée. La réservation de mémoire virtuelle n’utilise pas réellement de mémoire physique ; cela signifie simplement que les adresses virtuelles sont mises de côté à partir de la grande VAS. Pour plus d’informations, consultez VirtualAlloc(), MEM_RESERVE.

  • Machine virtuelle validée : cette valeur indique la quantité globale de mémoire virtuelle (VM) que SQL Server a validée (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 un fichier de page. Les adresses 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 pages verrouillées en mémoire est activée, 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 indique le nombre total de pages mémoire allouées par SQL Server moteur de base de données.

  • 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. Il 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 disque. Pour plus d’informations, consultez Address Windows Extensions (AWE) memory. La valeur zéro indique que la fonctionnalité « pages verrouillées en mémoire » est actuellement désactivée et SQL Server utilise la mémoire virtuelle à la place. Dans ce cas, la valeur vm Committed représente la mémoire allouée à SQL Server.

  • Grandes pages allouées : cette valeur représente la quantité de mémoire allouée par SQL Server à l’aide de grandes pages. Les pages volumineuses 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 taille de page plus grande, 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.

  • Target Committed : cette valeur indique la quantité cible de mémoire que SQL Server vise à avoir validée, une quantité idéale de mémoire que SQL Server pouvez consommer, en fonction de la charge de travail récente.

  • Actuel commité : 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 les « pages verrouillées en mémoire » (API AWE) ou la mémoire virtuelle. Par conséquent, cette valeur est proche ou identique à la machine virtuelle Committed ou Locked Pages Allocation. Notez que lorsque SQL Server utilise l’API AWE, une partie de la mémoire est toujours allouée par le gestionnaire de mémoire virtuelle du système d’exploitation et est répercutée comme 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 How It Works : SQL Server (NUMA Local, Foreign and Away Memory Blocks).

  • Erreur du dernier système d’exploitation : cette valeur indique la dernière erreur de système d’exploitation qui s’est produite lors d’une sollicitation de la mémoire 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 les 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 de mémoire. Dans un système n’activant l’accès mémoire non uniforme (NUMA), il existe une entrée de nœud mémoire correspondante pour chaque nœud NUMA matériel. Dans un système SMP, il existe une seule entrée de nœud mémoire. 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

Remarque

  • La Memory node Id valeur peut ne pas correspondre à l’ID du 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 du nœud NUMA.
  • La somme des valeurs réservées de machine virtuelle et des valeurs de machine virtuelle validée sur tous les nœuds de mémoire sera légèrement inférieure aux valeurs correspondantes signalées dans la table Gestionnaire de mémoire.
  • Le nœud NUMA 64 (nœud 64) est réservé à la DAC et est rarement intéressant dans l’investigation de la mémoire, car cette connexion utilise des ressources mémoire limitées. Pour plus d’informations sur la connexion administrateur dédiée (DAC), consultez Connexion de diagnostic pour les administrateurs de base de données.

La liste suivante décrit les valeurs de 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 l’objet VAS qui est commité par les threads qui s’exécutent sur ce nœud.

Mémoire d’agrégation

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 qui ressemble à 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 de Pages Allocated indique le nombre total de pages de mémoire allouées par un composant spécifique (commis de mémoire, userstore, magasin d’objets ou magasin de cache).

Remarque

Ces ID de nœud correspondent à la configuration de nœud NUMA de l’ordinateur qui exécute SQL Server. Les ID de nœud incluent des nœuds NUMA logiciels possibles qui sont définis sur des 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 ID d’événement d’informations 17152. Cet événement est enregistré dans le journal des applications 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. Cette table 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

Les autres informations contenues dans ces tables concernent la mémoire partagée :

  • SM Reserved : affiche le VAS réservé 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 Committed : affiche le VAS qui est commité par tous les commis de ce type qui utilisent l’API de fichiers mappés en mémoire.

Comme autre méthode, 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 des pages d’index dans le pool de mémoires tampons, également appelé cache de données. Le tableau de sortie suivant répertorie des détails sur le 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 : indique le nombre de mémoires tampons (pages) qui ont du contenu de base de données (pages de données et d’index).
  • Cible : affiche la taille cible du pool de mémoires tampons (nombre de mémoires tampons). Consultez 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 écrit dans ou lu à partir du stockage.
  • Latched : affiche les mémoires tampons bloquées. 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 sa lecture ou sa modification. En revanche, un verrou est utilisé pour maintenir la cohérence logique et transactionnelle.
  • Erreur d’E/S : indique 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 des pages : 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 de la 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 de beaucoup de RAM.

Planifier le cache

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 indique 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 DMV.

    Remarque

    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 : Plan Cache et la sys.dm_exec_cached_plans vue 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 à des procédures actuellement actives. Ces pages ne peuvent pas être ignorées.

Objets mémoire globale

Cette section contient des informations sur les 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 diverses 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 des threads (TLS). Pour plus d’informations, consultez Stockage local des threads.
  • SubpDesc Allocators : affiche la mémoire utilisée pour gérer les 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 fichiers, 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 Schema Manager 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 de 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’allocation de mémoire de requête. Il inclut également une instantané de l’utilisation de la mémoire des requêtes. La mémoire de requête est également appelée « mémoire d’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 : indique 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 en tant qu’espace de travail de hachage et espace de travail de tri. 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 de : affiche la quantité de mémoire qui doit être disponible pour exécuter la requête à laquelle la valeur Requête suivante fait référence. La valeur En attente de est la Next Request valeur multipliée par un facteur d’espace. Cette valeur garantit efficacement qu’une quantité spécifique de mémoire sera disponible lors de l’exécution de la prochaine requête en attente.
  • Coût : affiche le coût de la requête en attente suivante.
  • Délai d’expiration : affiche le délai d’expiration, en secondes, pour la requête en attente suivante.
  • Temps d’attente : indique le temps écoulé, en millisecondes, depuis que la requête en attente suivante a été placée dans la file d’attente.
  • Max 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 la signification de ces valeurs et sur la façon de résoudre les problèmes d’allocation de mémoire, consultez Résoudre les problèmes de performances lentes ou de mémoire insuffisante causés 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 consommée par chaque requête pendant le processus de compilation.

Remarque

Cette quantité n’inclut pas la mémoire nécessaire à l’exécution de la requête.

Lorsqu’une requête démarre, le nombre de requêtes pouvant être compilées n’est pas limité. À 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 de 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 la scalabilité 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 interblocage est détecté. Si la requête passe 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 de se produire 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. La mémoire interne compte la mémoire de l’optimiseur utilisée par les requêtes système, tandis que la mémoire par défaut indique la mémoire d’optimisation pour les requêtes d’utilisateur ou d’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 la mémoire de la petite passerelle (par défaut), huit requêtes simultanées de la passerelle moyenne et une requête de la passerelle Big. Comme mentionné précédemment, si une requête a besoin de plus de mémoire que la petite passerelle peut allouer, elle passe à Passerelle moyenne et cette requête est comptabilisée comme ayant pris une unité dans les deux passerelles. Plus la quantité de mémoire de compilation dont une requête a besoin est importante, moins il y a d’unités configurées dans une passerelle.
  • 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, Available Units la valeur est de 32 moins 3 ou 29 unités.
  • Acquires : indique le nombre d’unités ou d’emplacements acquis par les requêtes à compiler. Si trois requêtes utilisent actuellement la mémoire d’une passerelle, acquiert = 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 serveurs est différente de zéro, ce qui indique le nombre de requêtes en attente.
  • Seuil : indique une limite de mémoire de passerelle qui détermine l’emplacement d’où une requête obtient sa mémoire ou la passerelle dans laquelle elle reste. Si une requête n’a pas besoin de plus de la valeur de seuil, elle reste dans la petite passerelle (une requête commence toujours par la petite passerelle). S’il a besoin de davantage de mémoire pour la compilation, il passe à la moyenne, et si ce seuil est encore insuffisant, il passe à la grande passerelle. Pour la petite passerelle, le facteur de seuil est de 380 000 octets (susceptible d’être modifié 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 totale de l’optimiseur (mémoire globale dans la file d’attente d’optimisation) et sont définis sur 12 et 8, respectivement. Par conséquent, si la mémoire globale est ajustée parce que d’autres consommateurs de mémoire SQL Server ont besoin de 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 d’attente d’une requête pour la mémoire de l’optimiseur. Si cette valeur de délai d’expiration est atteinte, la session cesse d’attendre et génère 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