Se connecter avec Microsoft
Connectez-vous ou créez un compte.
Bonjour,
Sélectionnez un autre compte.
Vous avez plusieurs comptes
Choisissez le compte avec lequel vous voulez vous connecter.

Résumé

Cet article présente la sortie de la commande DBCC MEMORYSTATUS. Cette commande est souvent utilisée pour résoudre des problèmes de la consommation de mémoire de Microsoft SQL Server.

Cet article décrit les éléments de la sortie pour le Gestionnaire de mémoire, pour la synthèse de l’utilisation de la mémoire, pour les informations de mémoire globale, pour obtenir les informations de distribution de mémoire tampon, pour les informations de pool de mémoire tampon et informations du cache de procédure. Il décrit également la sortie sur les objets de la mémoire globale sur les objets de mémoire de requête, sur l’optimisation et à propos des courtiers en mémoire.

INTRODUCTION

La commande DBCC MEMORYSTATUS fournit un instantané de l’état actuel de la mémoire de Microsoft SQL Server. Vous pouvez utiliser la sortie de cette commande pour résoudre les problèmes de consommation de mémoire dans SQL Server ou pour résoudre les problèmes d’insuffisance de mémoire spécifiques. (De nombreuses erreurs de mémoire insuffisante imprimer automatiquement ce résultat dans le journal des erreurs). Les Services de Support technique de Microsoft peut également demander que vous exécutez cette commande durant un incident de support spécifiques si vous rencontrez une erreur qui peut être associée à une condition de mémoire faible.

Remarque L’Analyseur de performances (PerfMon) et le Gestionnaire des tâches ne tiennent pas compte de mémoire correctement si la prise en charge des extensions AWE (Address Windowing) est activée.

Cet article décrit certaines des données que vous pouvez obtenir à partir de la sortie de la commande DBCC MEMORYSTATUS. Plusieurs sections de cet article incluent les détails d’implémentation de propriétaires qui ne sont pas décrites ici. Services de Support technique Microsoft ne sera pas toute question ou fournir plus d’informations sur la signification des compteurs spécifiques au-delà des informations fournies dans cet article.

Plus d'informations

Important La commande DBCC MEMORYSTATUS est destinée à être un outil de diagnostic pour les Services de Support technique de Microsoft. Le format de la sortie et le niveau de détail fourni sont susceptibles de changer entre les service packs et les versions du produit. La fonctionnalité fournie par la commande DBCC MEMORYSTATUS peut être remplacée par un mécanisme différent dans les versions ultérieures du produit. Par conséquent, dans les versions ultérieures, cette commande peut ne plus fonctionner. Aucun avertissement supplémentaire ne sera effectuée avant que cette commande est modifiée ou supprimée. Par conséquent, les applications qui utilisent cette commande peut s’interrompre sans avertissement.

La sortie de la commande DBCC MEMORYSTATUS a changé depuis les versions antérieures de SQL Server. Maintenant, la sortie contient plusieurs sections qui n’étaient pas disponibles dans les versions antérieures du produit.

Gestionnaire de mémoire

La première section de la sortie est le Gestionnaire de mémoire. Cette section indique la consommation globale de la mémoire par SQL Server. Memory Manager KB ------------------------------ --------------------
VM Reserved 1761400
VM Committed 1663556
AWE Allocated 0
Reserved Memory 1024
Reserved Memory In Use 0

(5 row(s) affected)
Les éléments de cette section sont les suivants :

  • Machine virtuelle réservée: cette valeur indique la quantité globale de l’espace d’adressage virtuel (VAS) que SQL Server a réservé.

  • Machine virtuelle validée: cette valeur indique le montant global du SAV que SQL Server a été validée. SAV qui s’engage a été associé avec la mémoire physique.

  • AWE allouée: cette valeur indique la quantité globale de mémoire qui est allouée via le mécanisme AWE sur la version 32 bits de SQL Server. Ou, cette valeur indique la quantité globale de mémoire qui a verrouillé les pages consommer sur la version 64 bits du produit.

  • Mémoire réservée: cette valeur indique la mémoire réservée à la connexion administrateur dédiée (DAC).


  • Mémoire réservée utilisée : Cette valeur indique la mémoire réservée qui est utilisée.

Résumé de l’utilisation de la mémoire

La section du Gestionnaire de mémoire est suivie d’un résumé de l’utilisation de la mémoire pour chaque nœud de la mémoire. Dans un système de l’accès (NUMA) mémoire Non uniforme, il y aura une entrée de nœud mémoire correspondante pour chaque nœud NUMA du matériel. Dans un système SMP, il y aura une entrée unique du nœud de mémoire.

Remarque L’ID de nœud de mémoire peut ne pas correspond à l’ID de nœud de matériel. Memory node Id = 0 KB ------------------------------ --------------------
VM Reserved 1757304
VM Committed 1659612
AWE Allocated 0
MultiPage Allocator 10760
SinglePage Allocator 73832

(5 row(s) affected)
Remarque Ces valeurs montrent la mémoire qui est allouée par les threads qui sont exécutent sur ce nœud NUMA. Ces valeurs ne sont pas la mémoire qui est locale pour le nœud NUMA.

Les éléments de cette section sont les suivants :

  • Machine virtuelle réservée: cette valeur indique le SAV qui est réservé par des threads qui sont exécutent sur ce nœud.

  • Machine virtuelle validée: cette valeur indique le SAV qui est validé par des threads qui s’exécutent sur ce nœud.

  • AWE allouée: cette valeur indique la mémoire qui est allouée par le biais du mécanisme AWE sur la version 32 bits du produit. Ou bien, cette valeur indique la quantité globale de mémoire qui est utilisée par les pages verrouillées sur la version 64 bits du produit.

    Dans un système NUMA, cette valeur peut être incorrecte ou négatif. Toutefois, la valeur globale de AWE allouée dans la section Gestionnaire de mémoire est une valeur correcte. Pour effectuer le suivi de la mémoire qui est allouée par les nœuds NUMA individuels, utilisez de SQL Server : Buffer nœud objets de performance. (Pour plus d’informations, consultez La documentation en ligne de SQL Server.)

  • Les allocateur multiPage: cette valeur indique la mémoire qui est allouée par le biais de l’allocateur multipage par des threads qui sont exécutent sur ce nœud. Cette mémoire provient en dehors du pool de mémoire tampon.

  • Allocateur SinglePage: cette valeur indique la mémoire qui est allouée par le biais de l’allocateur de page unique par des threads qui sont exécutent sur ce nœud. Cette mémoire est volée dans le pool de tampons.

Remarque Les sommes des valeurs Réservées de machine virtuelle et les valeurs Validées de la machine virtuelle sur tous les nœuds de mémoire seront légèrement inférieures aux valeurs correspondantes qui sont signalées dans la section Gestionnaire de mémoire.

Mémoire globale

La section suivante contient des informations de mémoire globale pour chaque type d’employé et pour chaque nœud NUMA. Pour un système NUMA, vous pouvez voir la sortie qui est semblable à la suivante.

Remarque Le tableau suivant contient uniquement une partie de la sortie.
MEMORYCLERK_SQLGENERAL (node 0) KB ---------------------------------------------------------------- --------------------
VM Reserved 0
VM Committed 0
AWE Allocated 0
SM Reserved 0
SM Commited 0
SinglePage Allocator 592
MultiPage Allocator 2160

(7 row(s) affected)

MEMORYCLERK_SQLGENERAL (node 1) KB
---------------------------------------------------------------- --------------------
VM Reserved 0
VM Committed 0
AWE Allocated 0
SM Reserved 0
SM Commited 0
SinglePage Allocator 136
MultiPage Allocator 0

(7 row(s) affected)

MEMORYCLERK_SQLGENERAL (Total) KB
---------------------------------------------------------------- --------------------
VM Reserved 0
VM Committed 0
AWE Allocated 0
SM Reserved 0
SM Commited 0
SinglePage Allocator 728
MultiPage Allocator 2160

(7 row(s) affected)
Remarque Ces ID de nœud correspond à la configuration de nœuds NUMA de l’ordinateur qui exécute SQL Server. Le nœud ID incluent des nœuds NUMA logiciel possibles qui sont définies sur des nœuds de matériel NUMA ou sur un système SMP. Pour rechercher le mappage entre les ID de noeud et d’UC pour chaque nœud, permet d’afficher le numéro d’ID événement 17152 d’informations. Cet événement est enregistré dans le journal applications dans l’Observateur d’événements lorsque vous démarrez SQL Server.

Pour un système SMP, vous verrez qu’une seule section pour chaque type d’employé. Cette section est semblable à la suivante. MEMORYCLERK_SQLGENERAL (Total) KB ---------------------------------------------------------------- --------------------
VM Reserved 0
VM Committed 0
AWE Allocated 0
SM Reserved 0
SM Commited 0
SinglePage Allocator 768
MultiPage Allocator 2160

(7 row(s) affected)
Il est dans ces sections, d’autres informations sur la mémoire partagée :

  • SM réservé: cette valeur indique le SAV qui est réservé par tous les employés de ce type qui sont à l’aide de l’API de fichiers mappés en mémoire. Cette API est également connu sous le nom de mémoire partagée.

  • SM validées: cette valeur indique le SAV qui est validé par tous les employés de ce type qui sont à l’aide des fichiers mappés en mémoire API.



Vous pouvez obtenir des informations de synthèse pour chaque type d’employé pour tous les nœuds de mémoire à l’aide de la vue de gestion dynamique (DMV) de 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],
sum(single_pages_kb) as [SinlgePage Allocator]
from
sys.dm_os_memory_clerks
group by type

Distribution du tampon

La section suivante montre la distribution des mémoires tampons de 8 kilo-octets (Ko) dans le pool de tampons. Buffer Distribution Buffers ------------------------------ -----------
Stolen 553
Free 103
Cached 161
Database (clean) 1353
Database (dirty) 38
I/O 0
Latched 0

(7 row(s) affected)
Les éléments de cette section sont les suivants :

  • Volés: volés mémoire décrit les tampons de 8 Ko que le serveur utilise à des fins diverses. Ces tampons servent d’allocations de banque de mémoire génériques. Différents composants du serveur utilisent ces mémoires tampons pour stocker les structures de données internes. Le processus d’écriture différée n’est pas autorisé à purger les tampons volés sur le pool de tampons.

  • Free: cette valeur présente les mémoires tampons validées qui ne sont pas actuellement utilisés. Ces mémoires tampons sont disponibles pour la conservation de données. Ou autres composants peuvent demander ces mémoires tampon, puis marquez ces tampons comme volés.

  • Mise en cache: cette valeur présente les mémoires tampons qui sont utilisés pour les caches différents.

  • (Nettoyage) de la base de données: cette valeur présente les mémoires tampons qui ont le contenu de la base de données et qui n’ont pas été modifiés.

  • (« Dirty ») de la base de données: cette valeur présente les mémoires tampons qui ont le contenu de la base de données et qui ont été modifiées. Ceux-ci contiennent des modifications qui doivent être vidées sur le disque.


  • E/s : Cette valeur présente les mémoires tampons qui sont en attente pour une opération d’e/s en attente.

  • Latched: cette valeur présente les mémoires tampons d’accrochage . Une mémoire tampon verrouillé pour la lecture ou de la modification du contenu d’une page d’un thread. Une mémoire tampon verrouillé également lorsque la page est en cours de lecture à partir du disque ou écrites sur le disque. Un verrou est utilisé pour maintenir la cohérence physique des données dans la page pendant sa lecture ou modification. Un verrou est utilisé pour maintenir la cohérence logique et transactionnelle.

Détails du pool de mémoire tampon

Vous pouvez obtenir des informations détaillées sur les mémoires tampons de pool de mémoire tampon pour les pages de base de données à l’aide de la DMV sys.dm_os_buffer_descriptors . Et vous pouvez obtenir des informations détaillées sur les pages de pool de tampons sont utilisés pour les besoins divers du serveur à l’aide de la DMV sys.dm_os_memory_clerks .

La section suivante fournit des détails sur le pool de tampons ainsi que des informations supplémentaires. Buffer Counts Buffers ------------------------------ --------------------
Committed 1064
Target 17551
Hashed 345
Stolen Potential 121857
External Reservation 645
Min Free 64
Visible 17551
Available Paging File 451997

(8 row(s) affected)
Les éléments de cette section sont les suivants :

  • Validé: cette valeur présente les tampons de total sont validées. Les tampons sont validées ont associé de mémoire physique. La valeur de validé est la taille actuelle du pool de mémoire tampon. Cette valeur inclut la mémoire physique qui est allouée si la prise en charge AWE est activée.

  • Cible: cette valeur indique la taille de la cible du pool de mémoire tampon. Si la valeur de la cible est supérieure à la valeur validé , le pool de tampons est en pleine croissance. Si la valeur de la cible est inférieure à la valeur validé , le pool de tampons est réduction.

  • Hashed: cette valeur affiche les pages de données et les pages d’index sont stockés dans le pool de tampons.

  • Vol potentiels: cette valeur indique le nombre maximal de pages qui peut être volé à partir du pool de mémoire tampon.

  • RéservationExterne: cette valeur affiche les pages qui ont été réservées pour les requêtes qui effectuent une opération de tri ou une opération de hachage. Ces pages n’ont pas encore été volés.

  • Min libre: cette valeur affiche les pages que le pool de tampons essaie d’avoir sur la liste libre.

  • Visible: cette valeur présente les mémoires tampons qui sont visibles simultanément. Ces mémoires tampons sont directement accessibles en même temps. Cette valeur est généralement égale aux tampons de total. Toutefois, lorsque la prise en charge AWE est activée, cette valeur peut être inférieure aux tampons total.

  • Fichier d’échange disponible: cette valeur indique la mémoire qui est disponible pour être engagée. Cette valeur est exprimée en nombre de tampons de 8 Ko. Pour plus d’informations, consultez la rubrique « Fonction GlobalMemoryStatusEx » dans la documentation de l’API Windows.

Cache de procédure

La section suivante décrit la composition du cache de procédure. Procedure Cache Value ------------------------------ -----------
TotalProcs 4
TotalPages 25
InUsePages 0

(3 row(s) affected)
Les éléments de cette section sont les suivants :

  • TotalProcs: cette valeur indique le nombre total d’objets mis en cache qui se trouvent actuellement dans le cache de procédure. Cette valeur compare les entrées dans la vue sys.dm_exec_cached_plans .

    Remarque En raison de la nature dynamique de ces informations, la correspondance ne peut pas être exacte. Vous pouvez utiliser PerfMon pour analyser les de SQL Server : Cache de Plan objet et la sys.dm_exec_cached_plans DMV pour plus d’informations sur le type d’objets mis en cache, telles que des déclencheurs, des procédures et des objets ad hoc.

  • TotalPages: cette valeur affiche les pages cumulatives que vous devez disposer stocker tous les objets mis en cache dans le cache de procédure.

  • PagesUtilisées: cette valeur affiche les pages dans le cache de procédure qui appartiennent aux procédures en cours d’exécution. Ces pages ne peuvent pas être supprimées.

Objets de mémoire globale

La section suivante contient des informations sur les différents objets de mémoire globale. Cette section contient également des informations sur la quantité de mémoire la mémoire globale objets utilisent. Global Memory Objects Buffers ------------------------------ --------------------
Resource 126
Locks 85
XDES 10
SETLS 2
SE Dataset Allocators 4
SubpDesc Allocators 2
SE SchemaManager 44
SQLCache 41
Replication 2
ServerGlobal 25
XP Global 2
SortTables 2

(12 row(s) affected)
Les éléments de cette section sont les suivants :

  • Ressource: cette valeur indique la mémoire utilisée par l’objet de ressource . L’objet de ressource est utilisée par le moteur de stockage et pour les différentes structures au niveau du serveur.

  • Verrous: cette valeur indique la mémoire qui utilise le Gestionnaire de verrouillage.

  • XDES: cette valeur indique la mémoire qui utilise le Gestionnaire de transactions.

  • SETLS: cette valeur indique la mémoire qui est utilisée pour allouer la structure spécifiques du moteur de stockage par thread qui utilise le stockage local des threads.

  • Allocateurs de Dataset SE: cette valeur indique la mémoire qui est utilisée pour allouer des structures de table paramètre l’accès via le Méthodes d’accès .

  • Allocateurs de SubpDesc: cette valeur indique la mémoire qui est utilisée pour la gestion de sous-processus pour des requêtes en parallèle, les opérations de sauvegarde, les opérations de restauration, opérations de base de données, les opérations de fichier, la mise en miroir et curseurs asynchrones. Ces sous-processus sont également appelés des traitements parallèles.

  • SchemaManager SE: cette valeur indique la mémoire que le Gestionnaire de schéma utilise pour stocker les métadonnées de stockage spécifiques au moteur.

  • CacheSQL: cette valeur indique la mémoire utilisée pour stocker le texte d’instructions ad hoc et d’instructions préparées.

  • Réplication: cette valeur indique la mémoire que le serveur utilise pour les sous-systèmes de réplication interne.

  • ServerGlobal: cette valeur indique l’objet de mémoire serveur global qui est utilisé de façon générique par plusieurs sous-systèmes.

  • XP Global: cette valeur indique la mémoire qui a étendu l’utilisation des procédures stockées.

  • Tables de tri: cette valeur indique la mémoire que trier les tables utiliser.

Objets de mémoire de requête

La section suivante décrit les informations de licence de mémoire de requête. Cette section contient un instantané de l’utilisation de la mémoire de requête. Mémoire de requête est également appelée mémoire de l’espace de travail. Query Memory Objects Value ------------------------------ -----------
Grants 0
Waiting 0
Available (Buffers) 14820
Maximum (Buffers) 14820
Limit 10880
Next Request 0
Waiting For 0
Cost 0
Timeout 0
Wait Time 0
Last Target 11520

(11 row(s) affected)

Small Query Memory Objects Value
------------------------------ -----------
Grants 0
Waiting 0
Available (Buffers) 640
Maximum (Buffers) 640
Limit 640

(5 row(s) affected)
Si la taille et le coût d’une requête satisfait aux seuils de mémoire de requête « petite », la requête est placée dans une file d’attente de la requête de petite taille. Ce comportement empêche les requêtes plus petites ne soit retardée derrière les grandes requêtes qui se trouvent déjà dans la file d’attente.

Les éléments de cette section sont les suivants :

  • Accorde: cette valeur affiche les requêtes qui ont des demandes de mémoire en cours d’exécution.

  • En attente: cette valeur affiche les requêtes afin d’obtenir des demandes de mémoire en attente.

  • Disponible: cette valeur présente les mémoires tampons qui sont disponibles pour les requêtes à utiliser comme espace de travail de hachage et de comme espace de travail de tri. La valeur disponible est mis à jour périodiquement.

  • Maximum: cette valeur présente les tampons de total qui peuvent être attribués à toutes les requêtes à utiliser en tant qu’espace de travail.

  • Limite: cette valeur affiche la cible d’exécution de requête pour la file d’attente de requête volumineux. Cette valeur est différente de la valeur maximale (tampons) parce que la valeur maximale (tampons) n’est pas mis à jour jusqu'à ce que la modification de la file d’attente.

  • Demande suivante: cette valeur indique la taille mémoire de la demande, dans les mémoires tampons, pour la prochaine requête en attente.

  • En attente: cette valeur indique la quantité de mémoire qui doit être disponible pour exécuter la requête à laquelle fait référence la valeur de La demande suivante . La valeur En attente est la valeur de La demande suivante multipliée par un facteur de réserve. Cette valeur efficace garantit une quantité spécifique de mémoire disponible lors de l’exécution de la requête en attente suivante.

  • Coût: cette valeur affiche le coût de la requête suivante en attente.

  • Délai d’attente: cette valeur indique le délai d’attente, en secondes, pour la prochaine requête en attente.


  • Temps d’attente : Cette valeur indique le temps écoulé, en millisecondes, dans la mesure où la requête suivante en attente a été placée dans la file d’attente.

  • Dernière cible: cette valeur indique la limite de la mémoire globale pour l’exécution de la requête. Cette valeur est la limite combinée pour la file d’attente de requête volumineux et la file d’attente de la requête de petite taille.

Optimisation

La section suivante est un résumé des utilisateurs qui tentent d’optimiser les requêtes en même temps. Optimization Queue Value ------------------------------ --------------------
Overall Memory 156672000
Last Notification 1
Timeout 6
Early Termination Factor 5

(4 row(s) affected)

Small Gateway Value
------------------------------ --------------------
Configured Units 8
Available Units 8
Acquires 0
Waiters 0
Threshold Factor 250000
Threshold 250000

(6 row(s) affected)

Medium Gateway Value
------------------------------ --------------------
Configured Units 2
Available Units 2
Acquires 0
Waiters 0
Threshold Factor 12

(5 row(s) affected)

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

(5 row(s) affected)
Les requêtes sont envoyées au serveur pour la compilation. Le processus de compilation inclut l’analyse, algebraization et optimisation. Les requêtes sont classées en fonction de la quantité de mémoire que chaque requête utilisent pendant le processus de compilation.

Remarque Ce montant n’inclut pas la mémoire qui est nécessaire pour exécuter la requête.


Lorsqu’une requête lance, il n’est pas limité sur le nombre de requêtes peuvent être compilés. Comme la consommation de mémoire augmente et atteint un seuil, la requête doit passer une passerelle pour continuer. Il existe une baisse progressivement limite de requêtes compilées simultanément après chaque passerelle. La taille de chaque passerelle dépend de la plate-forme et de la charge. Les tailles de passerelle sont choisis pour optimiser le débit et l’évolutivité.

Si la requête ne peut pas passer d’une passerelle, la requête attend jusqu'à ce que la mémoire est disponible. Ou bien, la requête renverra une erreur de délai d’attente (erreur 8628). En outre, la requête ne peut pas acquérir une passerelle si l’utilisateur annule la requête ou si un blocage est détecté. Si une requête passe plusieurs passerelles, la requête ne libère pas les passerelles plus petits jusqu'à ce que le processus de compilation est terminée.


Ce comportement permet uniquement quelques compilations de beaucoup de mémoire se produisent en même temps. En outre, ce comportement optimise le débit pour les requêtes plus petites.

Courtiers en mémoire

Les trois sections suivantes afficher des informations sur les courtiers en mémoire que contrôle mis en cache mémoire, la mémoire volé et mémoire réservée. Les sections suivantes fournissent des informations peuvent uniquement être utilisées pour diagnostics internes. Par conséquent, ces informations ne sont pas détaillées ici.

   MEMORYBROKER_FOR_CACHE           Value   -------------------------------- --------------------
Allocations 1843
Rate 0
Target Allocations 1843
Future Allocations 0
Last Notification 1

(4 row(s) affected)

MEMORYBROKER_FOR_STEAL Value
-------------------------------- --------------------
Allocations 380
Rate 0
Target Allocations 1195
Future Allocations 0
Last Notification 1

(4 row(s) affected)

MEMORYBROKER_FOR_RESERVE Value
-------------------------------- --------------------
Allocations 0
Rate 0
Target Allocations 1195
Future Allocations 0
Last Notification 1

(4 row(s) affected)

Besoin d’aide ?

Développez vos compétences
Découvrez des formations
Accédez aux nouvelles fonctionnalités en avant-première
Rejoindre Microsoft Insider

Ces informations vous ont-elles été utiles ?

Dans quelle mesure êtes-vous satisfait(e) de la qualité de la langue ?
Qu’est-ce qui a affecté votre expérience ?

Nous vous remercions de vos commentaires.

×