Monitoraggio risorse entra in una condizione di non rendimento in un server che esegue SQL Server

Questo articolo fornisce altre informazioni su Monitoraggio risorse non cedenti.

Versione originale del prodotto: SQL Server
Numero KB originale: 2216485

Sintomi

In un server che esegue Microsoft SQL Server 2008 o una versione successiva, l'attività Monitoraggio risorse registra il messaggio seguente ogni 5 secondi:

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.

Causa

L'attività Monitoraggio risorse viene riattivata periodicamente per restare in ascolto degli eventi di memoria classificati come bassi, alti o stabili. Il monitoraggio notifica ai sottoscrittori eventi quando si verificano questi eventi.

Questi eventi di memoria possono essere esterni a SQL Server. Gli eventi esterni includono notifiche dal sistema operativo e sono a livello di sistema. Altri eventi sono interni a SQL Server. Gli eventi interni includono notifiche dal pool di buffer e sono a livello di processo. Quando tali notifiche vengono ricevute, vari consumer di memoria tagliano l'utilizzo della memoria.

Nota

I consumer possono essere archivi di memoria che sono archivi cache, archivi utenti o archivi oggetti.

Se alcuni consumer di memoria usano una grande quantità di memoria, il taglio eseguito dai consumer potrebbe richiedere molto tempo per la preparazione.

L'attività Monitoraggio utilità di pianificazione viene eseguita ogni 5 secondi. Monitoraggio pianificazione controlla se Monitoraggio risorse è stato spostato da un consumer a un altro negli ultimi 60 secondi. Quando Monitoraggio utilità di pianificazione rileva che Monitoraggio risorse non è stato spostato oltre un consumer per 60 secondi, Monitoraggio pianificazione interpreta questo scenario come Monitoraggio risorse che entra in uno stato non cedente. Questa interpretazione fa sì che Monitoraggio pianificazione registri il messaggio di errore indicato nella sezione Sintomi.

Nota

A partire da SQL Server 2019, l'intervallo di 60 secondi viene aumentato a 120 secondi. Questo aumento riduce la frequenza di queste notifiche di diagnostica. E riduce la generazione di file dump di memoria.

Questi messaggi vengono generati anche se la velocità con cui Monitoraggio risorse libera memoria è inferiore a 2 MB ogni 5 secondi.

Questi messaggi sono solo un'indicazione che Monitoraggio risorse è occupato a pulire i consumer di grandi dimensioni. Questi messaggi non indicano necessariamente un problema con Monitoraggio risorse stesso.

Risoluzione

A partire dai Service Pack seguenti, il messaggio monitoraggio risorse non cedente si estende per isolare facilmente l'impiegato di memoria che porta alla condizione di non rendimento:

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

Il nuovo messaggio sarà simile all'esempio seguente:

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.

Di seguito sono riportate le descrizioni dei vari campi usati in questo messaggio:

  • Memoria liberata: Questo campo indica la quantità di memoria liberata da Monitoraggio risorse per l'intervallo specificato. Viene misurato in kilobyte. Se la frequenza con cui la memoria viene liberata non supera i 2 MB ogni 5 secondi, Monitoraggio utilità di pianificazione rileva questa condizione come condizione non cedente.

  • Ultima attesa: Questo campo è l'ultimo tipo di attesa per il thread di Monitoraggio risorse. È possibile utilizzare questo campo in combinazione con il Approx CPU Used campo . Questa combinazione di campi può identificare se il thread di Monitoraggio risorse è in esecuzione o in attesa di una parte significativa dell'intervallo.

  • Ultimo impiegato: Questo campo è il tipo e il nome dell'impiegato di memoria che ne stava tagliando la memoria quando si è verificata la condizione non cedente.

  • Utilizzo approssimativo della CPU: Questo campo è il tempo del kernel e dell'utente usato da Monitoraggio risorse, misurato in millisecondi. È possibile usare questo campo insieme ad altri campi per verificare che Monitoraggio risorse stia procedendo durante l'intervallo specificato.

  • Intervallo: Questo campo è il tempo trascorso dall'ultima notifica inviata all'impiegato in millisecondi.

È possibile usare questo messaggio per identificare l'origine della notifica con memoria insufficiente. È anche possibile usare le voci RING_BUFFER_RESOURCE_MONITOR dall'ora del messaggio.

Risorse

Per altre informazioni su come interpretare il monitor RING_BUFFER_RESOURCE, vedere il seguente post di blog techcommunity:

L'attività Monitoraggio risorse può risolvere i problemi di prestazioni correlati alla memoria in SQL Server. SQL Server è in ascolto e risponde alle notifiche di memoria. Per altre informazioni su questi elementi, vedere gli articoli di blog MSDN seguenti: