Resource Monitor entre dans une condition de non-rendement sur un serveur exécutant SQL Server

Cet article fournit plus d’informations sur l’absence de rendement du Moniteur de ressources.

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

Symptômes

Sur un serveur exécutant Microsoft SQL Server 2008 ou une version ultérieure, la tâche Moniteur de ressources enregistre le message suivant toutes les 5 secondes :

Date_And_Time Server Using 'dbghelp.dll' version '4.0.5'
Date_And_TimeServer **Dump thread - spid = 0, PSS = 0x0000000000000
000, EC = 0x0000000000000000
Date_And_TimeLogon Login succeeded for user 'OPENTEXT\sqlcrmusr'. Connection: trusted. [CLIENT:
IP_Address]
Date_And_Timespid78 Error: 4014, Severity: 20, State: 2.
Date_And_Timespid78 A fatal error occurred while reading the input stream from the network. The session will be terminated.
Date_And_TimeServer ***Stack Dump being sent to Drive:\MSSQL2005\LOG\SQLDump####.txt
Date_And_TimeServer * *******************************************************************************
Date_And_TimeServer *
Date_And_TimeServer * BEGIN STACK DUMP:
Date_And_TimeServer *
Date_And_Timespid 0
Date_And_TimeServer *
Date_And_TimeServer * Non-yielding Resource Monitor
Date_And_TimeServer *
Date_And_TimeServer * *******************************************************************************
Date_And_TimeServer * -------------------------------------------------------------------------------
Date_And_TimeServer * Short Stack Dump
Date_And_TimeServer Stack Signature for the dump is 0x000000000000005C
Date_And_Time,Server,Unknown,Resource Monitor (0x9b0) Worker 0x0000000003A2C1C0 appears to be non-yielding on
Node_#. Memory freed: 0 KB. Approx CPU Used: kernel 0 msnull user 0 msnull Interval:
Interval_value.

Cause

La tâche Moniteur de ressources se réveille régulièrement pour écouter les événements de mémoire classés comme faibles, élevés ou stables. Le moniteur avertit les abonnés aux événements lorsque ces événements se produisent.

Ces événements de mémoire peuvent être externes à SQL Server. Les événements externes incluent des notifications du système d’exploitation et sont à l’échelle du système. Les autres événements sont internes à SQL Server. Les événements internes incluent des notifications provenant du pool de mémoires tampons et sont à l’échelle du processus. Lorsque de telles notifications sont reçues, différents consommateurs de mémoire réduisent leur utilisation de la mémoire.

Remarque

Les consommateurs peuvent être des commis de mémoire qui sont des magasins de cache, des magasins d’utilisateurs ou des magasins d’objets.

Si certains consommateurs de mémoire utilisent une grande quantité de mémoire, la préparation du découpage effectué par les consommateurs peut prendre beaucoup de temps.

La tâche De surveillance du planificateur s’exécute toutes les 5 secondes. Le moniteur de planification vérifie si le moniteur de ressources a été déplacé d’un consommateur à un autre au cours des 60 dernières secondes. Lorsque le Moniteur du planificateur détecte que le moniteur de ressources n’a pas dépassé un consommateur pendant 60 secondes, le moniteur de planification interprète ce scénario comme le moniteur de ressources entrant dans un état non rentable. Cette interprétation amène le Moniteur de planification à journaliser le message d’erreur mentionné dans la section Symptômes.

Remarque

À compter de SQL Server 2019, l’intervalle de 60 secondes est augmenté à 120 secondes. Cette augmentation réduit la fréquence de ces notifications de diagnostic. Et cela réduit la génération de fichiers de vidage de mémoire.

Ces messages sont également déclenchés si la vitesse à laquelle le Moniteur de ressources libère de la mémoire est inférieure à 2 Mo toutes les 5 secondes.

Ces messages ne sont qu’une indication que le Moniteur de ressources est occupé à nettoyer les grands consommateurs. Ces messages n’indiquent pas nécessairement un problème avec le moniteur de ressources lui-même.

Résolution

À compter des Service Packs suivants, le message moniteur de ressources sans rendement s’étend pour isoler facilement le commis de mémoire qui conduit à la condition de non-rendement :

  • Service Pack 2 de Microsoft SQL Server 2008
  • Service Pack 1 de Microsoft SQL Server 2008 R2

Le nouveau message ressemblera à l’exemple suivant :

Resource Monitor (0x9b0) Worker 0x0000000003A2C1C0 appears to be non-yielding on Node Node_#. Memory freed: 0 KB. Last wait: > lastwaittype. Last clerk: type clerk_type, name clerk_name. Approx CPU Used: kernel 0 ms, user 0 ms, Interval: Interval_value.

Voici une description des différents champs utilisés dans ce message :

  • Mémoire libérée : Ce champ correspond à la quantité de mémoire libérée par le Moniteur de ressources pour l’intervalle spécifié. Il est mesuré en kilo-octets. Si la vitesse à laquelle la mémoire est libérée ne dépasse pas 2 Mo toutes les 5 secondes, le moniteur du planificateur détecte cette condition comme une condition sans rendement.

  • Dernière attente : Ce champ est le dernier type d’attente pour le thread Moniteur de ressources. Vous pouvez utiliser ce champ en combinaison avec le Approx CPU Used champ . Cette combinaison de champs peut déterminer si le thread Resource Monitor est en cours d’exécution ou en attente d’une partie significative de l’intervalle.

  • Dernier commis : Ce champ est le type et le nom du commis de mémoire qui a réduit sa mémoire lorsque la condition de non-rendement s’est produite.

  • Processeur approximatif utilisé : Ce champ correspond au temps du noyau et de l’utilisateur utilisé par Resource Monitor, tel qu’il est mesuré en millisecondes. Vous pouvez utiliser ce champ avec d’autres champs pour vérifier que le Moniteur de ressources progresse pendant l’intervalle spécifié.

  • Intervalle: Ce champ est le temps qui s’est écoulé depuis que le dernier greffier a été notifié comme mesuré en millisecondes.

Vous pouvez utiliser ce message pour identifier la source de la notification de mémoire insuffisante. Vous pouvez également utiliser les entrées RING_BUFFER_RESOURCE_MONITOR à partir de l’heure du message.

Ressources

Pour plus d’informations sur l’interprétation des RING_BUFFER_RESOURCE MONITOR, consultez le billet de blog techcommunity suivant :

La tâche Moniteur de ressources peut résoudre les problèmes de performances liés à la mémoire dans SQL Server. SQL Server écoute les notifications mémoire et y répond. Pour plus d’informations sur ces éléments, consultez les articles de blog MSDN suivants :