Usługa Resource Monitor wprowadza warunek powodujący niezgodny z wydajnością na serwerze z systemem SQL Server

Ten artykuł zawiera więcej informacji dotyczących braku wydajności usługi Resource Monitor.

Oryginalna wersja produktu: SQL Server
Oryginalny numer KB: 2216485

Symptomy

Na serwerze z systemem Microsoft SQL Server 2008 lub nowszej wersji zadanie monitora zasobów rejestruje następujący komunikat co 5 sekund:

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.

Przyczyna

Zadanie monitora zasobów jest okresowo wznawcze w celu nasłuchiwania zdarzeń pamięci sklasyfikowanych jako niskie, wysokie lub stałe. Monitor powiadamia subskrybentów zdarzeń, gdy wystąpią te zdarzenia.

Te zdarzenia pamięci mogą być zewnętrzne dla SQL Server. Zdarzenia zewnętrzne obejmują powiadomienia z systemu operacyjnego i są dostępne w całym systemie. Inne zdarzenia są wewnętrzne do SQL Server. Zdarzenia wewnętrzne obejmują powiadomienia z puli buforów i obejmują cały proces. Po odebraniu takich powiadomień różni użytkownicy pamięci przycinają użycie pamięci.

Uwaga

Użytkownicy mogą być urzędnikami pamięci, które są magazynami pamięci podręcznej, magazynami użytkowników lub magazynami obiektów.

Jeśli niektórzy użytkownicy pamięci używają dużej ilości pamięci, przygotowanie przycinania wykonywane przez konsumentów może zająć dużo czasu.

Zadanie Scheduler Monitor jest uruchamiane co 5 sekund. Monitor harmonogramu sprawdza, czy monitor zasobów został przeniesiony z jednego konsumenta do innego w ciągu ostatnich 60 sekund. Gdy monitor harmonogramu wykryje, że monitor zasobów nie przeszedł obok konsumenta przez 60 sekund, monitor harmonogramu interpretuje ten scenariusz jako monitor zasobów wprowadzający stan nieodzyskania. Ta interpretacja powoduje, że monitor harmonogramu rejestruje komunikat o błędzie wymieniony w sekcji Objawy.

Uwaga

Począwszy od SQL Server 2019 r., interwał 60 sekund zostanie zwiększony do 120 sekund. Ten wzrost zmniejsza częstotliwość tych powiadomień diagnostycznych. Zmniejsza to generowanie plików zrzutu pamięci.

Te komunikaty są również wywoływane, jeśli szybkość zwalniania pamięci przez monitor zasobów jest mniejsza niż 2 MB co 5 sekund.

Te komunikaty wskazują tylko, że usługa Resource Monitor jest zajęta czyszczeniem dużych użytkowników. Te komunikaty niekoniecznie wskazują na problem z samym monitorem zasobów.

Rozwiązanie

Począwszy od następujących dodatków Service Pack, komunikat o braku wydajności monitora zasobów rozszerza się, aby łatwo wyizolować urzędnika pamięci, który prowadzi do stanu niepodjętego wydajności:

  • Dodatek Service Pack 2 firmy Microsoft SQL Server 2008 r.
  • Dodatek Service Pack 1 firmy Microsoft SQL Server 2008 R2

Nowy komunikat będzie podobny do następującego przykładu:

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.

Poniżej przedstawiono opisy różnych pól, które są używane w tym komunikacie:

  • Pamięć uwolniona: W tym polu jest zwalniana ilość pamięci przez usługę Resource Monitor dla określonego interwału. Jest mierzony w kilobajtach. Jeśli szybkość zwalniania pamięci nie przekracza 2 MB co 5 sekund, monitor harmonogramu wykrywa ten warunek jako warunek niepodobny.

  • Ostatnie oczekiwanie: To pole jest ostatnim typem oczekiwania dla wątku usługi Resource Monitor. Tego pola można użyć w połączeniu z polem Approx CPU Used . Ta kombinacja pól może określić, czy wątek monitora zasobów jest uruchomiony, czy czeka na znaczną część interwału.

  • Ostatni urzędnik: To pole jest typem i nazwą urzędnika pamięci, który przycinał pamięć, gdy wystąpił stan niepodnoszenie.

  • Przybliżony użyty procesor CPU: To pole jest jądrem i czasem użytkownika używanym przez usługę Resource Monitor, mierzonym w milisekundach. To pole można użyć razem z innymi polami, aby sprawdzić, czy usługa Resource Monitor czyni postępy w określonym interwale.

  • Interwał: To pole jest czas, który upłynął od ostatniego urzędnika został powiadomiony jako mierzona w milisekundach.

Ten komunikat służy do identyfikowania źródła powiadomienia o małej ilości pamięci. Możesz również użyć wpisów RING_BUFFER_RESOURCE_MONITOR z czasu komunikatu.

Zasoby

Aby uzyskać więcej informacji na temat interpretowania RING_BUFFER_RESOURCE MONITOR, zobacz następujący wpis w blogu techcommunity:

Zadanie Monitor zasobów może rozwiązywać problemy z wydajnością związane z pamięcią w SQL Server. SQL Server nasłuchuje powiadomień dotyczących pamięci i odpowiada na nie. Aby uzyskać więcej informacji na temat tych elementów, zobacz następujące artykuły w blogu MSDN: