Użyj polecenia DBCC MEMORYSTATUS, aby monitorować użycie pamięci w programie SQL Server
W tym artykule opisano sposób używania DBCC MEMORYSTATUS
polecenia do monitorowania użycia pamięci.
Oryginalna wersja produktu: SQL Server
Oryginalny numer KB: 907877
Wprowadzenie
Polecenie DBCC MEMORYSTATUS
zawiera migawkę bieżącego stanu pamięci programu Microsoft SQL Server i systemu operacyjnego. Zapewnia jedno z najbardziej szczegółowych danych wyjściowych dystrybucji pamięci i użycia w programie SQL Server. Dane wyjściowe umożliwiają rozwiązywanie problemów z użyciem pamięci w programie SQL Server lub rozwiązywanie określonych błędów braku pamięci. Wiele błędów braku pamięci automatycznie generuje te dane wyjściowe w dzienniku błędów. Jeśli wystąpi błąd związany z niskim stanem pamięci, możesz uruchomić DBCC MEMORYSTATUS
polecenie i podać dane wyjściowe po skontaktowaniu się z pomoc techniczna firmy Microsoft.
Dane wyjściowe DBCC MEMORYSTATUS
polecenia obejmują sekcje dotyczące zarządzania pamięcią, użycia pamięci, agregacji informacji o pamięci, informacji o puli i informacji o pamięci podręcznej procedury. Zawiera również opis danych wyjściowych obiektów pamięci globalnej, obiektów pamięci zapytań, optymalizacji i brokerów pamięci.
Uwaga 16.
monitor wydajności (PerfMon) i Menedżer zadań nie uwzględniają pełnego użycia pamięci, jeśli Opcja Zablokowane strony w pamięci jest włączona. Nie ma liczników wydajności, które pokazują użycie pamięci interfejsu API rozszerzeń okien adresowych (AWE).
Ważne
Polecenie DBCC MEMORYSTATUS
ma być narzędziem diagnostycznym dla pomoc techniczna firmy Microsoft. Format danych wyjściowych i podany poziom szczegółowości mogą ulec zmianie między pakietami Service Pack i wydaniami produktów. Funkcje, które DBCC MEMORYSTATUS
udostępnia polecenie, mogą zostać zastąpione przez inny mechanizm w nowszych wersjach produktu. W związku z tym w nowszych wersjach produktu to polecenie może już nie działać. Przed zmianą lub usunięciem tego polecenia nie zostaną podane żadne dodatkowe ostrzeżenia. W związku z tym aplikacje korzystające z tego polecenia mogą ulec awarii bez ostrzeżenia.
Dane wyjściowe DBCC MEMORYSTATUS
polecenia zostały zmienione z wcześniejszych wersji programu SQL Server. Obecnie zawiera kilka tabel, które były niedostępne we wcześniejszych wersjach produktu.
How to use DBCC MEMORYSTATUS
DBCC MEMORYSTATUS
jest zwykle używany do badania problemów z małą ilością pamięci zgłaszanych przez program SQL Server. Mała ilość pamięci może wystąpić, jeśli istnieje wykorzystanie pamięci zewnętrznej spoza procesu programu SQL Server lub ciśnienia wewnętrznego pochodzącego z procesu. Ciśnienie wewnętrzne może być spowodowane przez aparat bazy danych programu SQL Server lub przez inne składniki, które działają w ramach procesu (takie jak serwery połączone, XPs, SQLCLR, ochrona przed włamaniami lub oprogramowanie antywirusowe). Aby uzyskać więcej informacji na temat rozwiązywania problemów z ciśnieniem pamięci, zobacz Rozwiązywanie problemów z brakiem pamięci lub małą ilością pamięci w programie SQL Server.
Poniżej przedstawiono ogólne kroki używania polecenia i interpretowania jego wyników. Konkretne scenariusze mogą wymagać nieco innego podejścia do danych wyjściowych, ale ogólne podejście zostało opisane tutaj.
- Uruchom polecenie
DBCC MEMORYSTATUS
. - Użyj sekcji Liczba procesów/systemów i Menedżera pamięci, aby ustalić, czy istnieje wykorzystanie pamięci zewnętrznej (na przykład komputer jest niski w pamięci fizycznej lub wirtualnej, albo zestaw roboczy programu SQL Server jest stronicowany). Ponadto użyj tych sekcji, aby określić ilość pamięci przydzielonej przez aparat bazy danych programu SQL Server w porównaniu z ogólną pamięcią w systemie.
- Jeśli ustalisz, że istnieje wykorzystanie pamięci zewnętrznej, spróbuj zmniejszyć użycie pamięci przez inne aplikacje i przez system operacyjny lub dodać więcej pamięci RAM.
- Jeśli ustalisz, że aparat programu SQL Server korzysta z większości pamięci (wykorzystanie pamięci wewnętrznej), możesz użyć pozostałych sekcji programu
DBCC MEMORYSTATUS
, aby określić, które składniki (urzędnik pamięci, magazyn pamięci, magazyn użytkowników lub magazyn obiektów) są największym czynnikiem przyczyniającym się do tego użycia pamięci. - Zbadaj każdy składnik:
MEMORYCLEARK
, ,CACHESTORE
USERSTORE
iOBJECTSTORE
. Sprawdź wartość Przydzielone strony, aby określić ilość pamięci zużywanej przez składnik w programie SQL Server. Aby uzyskać krótki opis większości składników pamięci aparatu bazy danych, zobacz tabelę Typy urzędników pamięci.- W rzadkich przypadkach alokacja jest bezpośrednią alokacją wirtualną zamiast przechodzić przez menedżera pamięci programu SQL Server. W takich przypadkach sprawdź wartość Zatwierdzone maszyny wirtualnej w ramach określonego składnika zamiast przydzielonych stron.
- Jeśli komputer używa NUMA, niektóre składniki pamięci są podzielone na węzeł. Można na przykład obserwować
OBJECTSTORE_LOCK_MANAGER (node 0)
wartości , ,OBJECTSTORE_LOCK_MANAGER (node 1)
iOBJECTSTORE_LOCK_MANAGER (node 2)
tak dalej, a na koniec obserwować sumowaną wartość każdego węzła w elemecieOBJECTSTORE_LOCK_MANAGER (Total)
. Najlepszym miejscem do rozpoczęcia jest sekcja, która raportuje łączną wartość, a następnie zbada podział zgodnie z potrzebami. Aby uzyskać więcej informacji, zobacz Użycie pamięci z węzłami NUMA.
- Niektóre sekcje zawierają
DBCC MEMORYSTATUS
szczegółowe i wyspecjalizowane informacje o konkretnych alokatorach pamięci. Te sekcje umożliwiają zrozumienie dodatkowych szczegółów i dalsze podziały alokacji w ramach urzędnika pamięci. Przykłady takich sekcji obejmują pulę (dane i pamięć podręczną indeksu), pamięć podręczną procedury/pamięć podręczną planu, obiekty pamięci zapytań (przydziały pamięci), kolejkę optymalizacji oraz małe i średnie i duże bramy (optymalizator pamięci). Jeśli wiesz już, że określony składnik pamięci w programie SQL Server jest źródłem ciśnienia pamięci, możesz wolisz przejść bezpośrednio do tej konkretnej sekcji. Jeśli na przykład ustalono w inny sposób, że istnieje wysokie użycie przydziałów pamięci, które powoduje błędy pamięci, możesz przejrzeć sekcję Obiekty pamięci zapytania.
W pozostałej części tego artykułu opisano niektóre przydatne liczniki w DBCC MEMORYSTATUS
danych wyjściowych, które mogą umożliwić skuteczniejsze diagnozowanie problemów z pamięcią.
Liczba procesów/systemów
Ta sekcja zawiera przykładowe dane wyjściowe w formacie tabelarycznym i opisuje jej wartości.
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
Na poniższej liście omówiono wartości i ich opisy:
- Dostępna pamięć fizyczna: ta wartość pokazuje ogólną ilość wolnej pamięci na komputerze. W tym przykładzie ilość wolnej pamięci wynosi 5 060 247 552 bajty.
- Dostępna pamięć wirtualna: Ta wartość pokazuje całkowitą ilość wolnej pamięci wirtualnej dla procesu programu SQL Server wynosi 140 710 048 014 336 bajtów (128 TB). Aby uzyskać więcej informacji, zobacz Limity przestrzeni pamięci i adresów.
- Dostępny plik stronicowania: ta wartość pokazuje wolne miejsce na stronicowanie. W tym przykładzie wartość to 7 066 804 224 bajty.
- Zestaw roboczy: Ta wartość pokazuje ogólną ilość pamięci wirtualnej, którą proces programu SQL Server ma w pamięci RAM (nie został stronicowany) wynosi 430 026 752 bajty.
- Procent zatwierdzonej pamięci w programie WS: ta wartość pokazuje, jaki procent przydzielonej pamięci wirtualnej programu SQL Server znajduje się w pamięci RAM (lub jest zestawem roboczym). Wartość 100 procent pokazuje, że cała zatwierdzona pamięć jest przechowywana w pamięci RAM, a 0 procent zostanie wyświetlona.
- Błędy stron: ta wartość przedstawia ogólną ilość błędów strony twardej i miękkiej dla programu SQL Server. W tym przykładzie wartość to 151 138.
Pozostałe cztery wartości są binarne lub logiczne.
- Systemowa pamięć fizyczna o wysokiej wartości 1 wskazuje, że program SQL Server uważa, że dostępna pamięć fizyczna na komputerze jest wysoka. Dlatego wartość pamięci fizycznej systemu wynosi 0, co oznacza brak małej ilości pamięci. Podobna logika jest stosowana do małej ilości pamięci fizycznej procesów, a wartość 0 oznacza, że jest to fałsz, a 1 oznacza, że jest to prawda. W tym przykładzie obie wartości to 0, co oznacza, że istnieje wiele pamięci fizycznych i wirtualnych dla procesu programu SQL Server.
Menedżer pamięci
Ta sekcja zawiera przykładowe dane wyjściowe Menedżera pamięci, które pokazują ogólne zużycie pamięci przez program 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
Na poniższej liście omówiono wartości w danych wyjściowych i ich opisy:
Zarezerwowane maszyny wirtualnej: ta wartość przedstawia ogólną ilość wirtualnej przestrzeni adresowej (VAS) lub pamięci wirtualnej zarezerwowanej przez program SQL Server. Rezerwacja pamięci wirtualnej nie używa pamięci fizycznej; oznacza to po prostu, że adresy wirtualne są odsunięcia od dużych wazonów. Aby uzyskać więcej informacji, zobacz VirtualAlloc(), MEM_RESERVE.
Zatwierdzona maszyna wirtualna: ta wartość przedstawia ogólną ilość pamięci wirtualnej zatwierdzonej przez program SQL Server (w KB). Oznacza to, że pamięć używana przez proces jest wspierana przez pamięć fizyczną lub rzadziej przez plik strony. Wcześniej zarezerwowane adresy pamięci są teraz wspierane przez magazyn fizyczny; jest to, że są przydzielane. W przypadku włączenia zablokowanych stron w pamięci program SQL Server używa alternatywnej metody przydzielania pamięci, interfejsu API AWE i większości pamięci nie odzwierciedla się w tym liczniku. Zobacz [Przydzielone zablokowane strony](przydzielone strony #Locked) dla tych alokacji. Aby uzyskać więcej informacji, zobacz VirtualAlloc(), MEM_COMMIT.
Przydzielone strony: ta wartość przedstawia łączną liczbę stron pamięci przydzielonych przez aparat bazy danych programu SQL Server.
Przydzielone zablokowane strony: ta wartość reprezentuje ilość pamięci w kilobajtach (KB), które program SQL Server przydzielił i zablokował w fizycznej pamięci RAM przy użyciu interfejsu API AWE. Wskazuje ona, ile pamięci program SQL Server aktywnie używa i zażądał, aby był przechowywany w pamięci w celu zoptymalizowania wydajności. Blokując strony w pamięci, program SQL Server zapewnia, że krytyczne strony bazy danych są łatwo dostępne i nie są zamieniane na dysk. Aby uzyskać więcej informacji, zobacz Address Windows Extensions (AWE) memory (Address Windows Extensions, AWE) memory (Adres rozszerzenia systemu Windows ( AWE). Wartość zero wskazuje, że funkcja "zablokowane strony w pamięci" jest obecnie wyłączona, a program SQL Server używa zamiast tego pamięci wirtualnej. W takim przypadku wartość Zatwierdzona maszyna wirtualna będzie reprezentować pamięć przydzieloną do programu SQL Server.
Przydzielone duże strony: ta wartość reprezentuje ilość pamięci przydzielonej przez program SQL Server przy użyciu dużych stron. Large Pages to funkcja zarządzania pamięcią zapewniana przez system operacyjny. Zamiast używać standardowego rozmiaru strony (zazwyczaj 4 KB), ta funkcja używa większego rozmiaru strony, takiego jak 2 MB lub 4 MB. Wartość zero wskazuje, że funkcja nie jest włączona. Aby uzyskać więcej informacji, zobacz Virtual Alloc(), MEM_LARGE_PAGES.
Zatwierdzona wartość docelowa: ta wartość wskazuje docelową ilość pamięci, którą program SQL Server ma przeznaczyć na zatwierdzone, idealną ilość pamięci, jaką może zużywać program SQL Server w oparciu o ostatnie obciążenie.
Bieżące zatwierdzone: ta wartość wskazuje ilość pamięci systemu operacyjnego (w KB) menedżera pamięci programu SQL Server jest obecnie zatwierdzana (przydzielona w magazynie fizycznym). Ta wartość obejmuje "zablokowane strony w pamięci" (interfejs API AWE) lub pamięć wirtualną. W związku z tym ta wartość jest bliska lub taka sama jak przydzielona strona zatwierdzona lub zablokowana maszyny wirtualnej. Pamiętaj, że gdy program SQL Server używa interfejsu API AWE, część pamięci jest nadal przydzielana przez menedżera pamięci wirtualnej systemu operacyjnego i zostanie odzwierciedlona jako zatwierdzona maszyna wirtualna.
Faza wzrostu NUMA: ta wartość wskazuje, czy program SQL Server jest obecnie w fazie wzrostu NUMA. Aby uzyskać więcej informacji na temat tego początkowego zwiększania pamięci, gdy węzły NUMA istnieją na maszynie, zobacz How It Works: SQL Server (NUMA Local, Foreign and Away Memory Block).
Ostatni błąd systemu operacyjnego: Ta wartość pokazuje ostatni błąd systemu operacyjnego, który wystąpił, gdy wystąpiło wykorzystanie pamięci w systemie. Program SQL Server rejestruje błąd systemu operacyjnego i wyświetla go w danych wyjściowych. Aby uzyskać pełną listę błędów systemu operacyjnego, zobacz Kody błędów systemowych.
Użycie pamięci z węzłami NUMA
Po sekcji Menedżer pamięci znajduje się podsumowanie użycia pamięci dla każdego węzła pamięci. W systemie z włączonym dostępem do pamięci (NUMA) istnieje odpowiedni wpis węzła pamięci dla każdego sprzętowego węzła NUMA. W systemie SMP istnieje pojedynczy wpis węzła pamięci. Ten sam wzorzec jest stosowany do innych sekcji pamięci.
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
Uwaga 16.
- Wartość
Memory node Id
może nie odpowiadać identyfikatorowi węzła sprzętu. - Te wartości pokazują pamięć przydzieloną przez wątki uruchomione w tym węźle NUMA. Te wartości nie są pamięcią lokalną dla węzła NUMA.
- Suma wartości zarezerwowanych maszyny wirtualnej i wartości zatwierdzone przez maszynę wirtualną na wszystkich węzłach pamięci będzie nieco mniejsza niż odpowiednie wartości zgłaszane w tabeli Menedżer pamięci.
- Węzeł NUMA 64 (węzeł 64) jest zarezerwowany dla DAC i rzadko interesuje się badaniem pamięci, ponieważ to połączenie korzysta z ograniczonych zasobów pamięci. Aby uzyskać więcej informacji na temat dedykowanego połączenia administratora (DAC), zobacz Diagnostyka połączenia dla administratorów bazy danych.
Na poniższej liście omówiono wartości w tabeli wyjściowej i ich opisy:
- Zarezerwowane maszyny wirtualnej: przedstawia wirtualną przestrzeń adresową (VAS), która jest zarezerwowana przez wątki uruchomione w tym węźle.
- Zatwierdzona maszyna wirtualna: przedstawia wazon zatwierdzony przez wątki uruchomione w tym węźle.
Zagregowany pamięć
Poniższa tabela zawiera zagregowane informacje o pamięci dla każdego typu urzędnika i węzła NUMA. W przypadku systemu z obsługą NUMA mogą zostać wyświetlone dane wyjściowe podobne do następujących:
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
Pages Allocated
Wartość przedstawia ogólną liczbę stron pamięci przydzielonych przez określony składnik (urzędnik pamięci, magazyn użytkowników, magazyn obiektów lub magazyn pamięci).
Uwaga 16.
Te identyfikatory węzłów odpowiadają konfiguracji węzła NUMA komputera z uruchomionym programem SQL Server. Identyfikatory węzłów obejmują możliwe węzły NUMA oprogramowania zdefiniowane na węzłach NUMA sprzętu lub na podstawie systemu SMP. Aby znaleźć mapowanie między identyfikatorami węzłów i procesorami CPU dla każdego węzła, zobacz Informacje o identyfikatorze zdarzenia 17152. To zdarzenie jest rejestrowane w dzienniku aplikacji Podgląd zdarzeń podczas uruchamiania programu SQL Server.
W przypadku systemu SMP zobaczysz tylko jedną tabelę dla każdego typu urzędnika, nie licząc węzła = 64 używanego przez funkcję DAC. Ta tabela przypomina poniższy przykład.
MEMORYCLERK_SQLGENERAL (Total) KB
--------------------------------- --------------------
VM Reserved 0
VM Committed 0
AWE Allocated 0
SM Reserved 0
SM Commited 0
Pages Allocated 2928
Inne informacje w tych tabelach dotyczą pamięci udostępnionej:
- Sm Reserved: pokazuje vas, który jest zarezerwowany przez wszystkich urzędników tego typu, które korzystają z interfejsu API plików mapowanych w pamięci. Ten interfejs API jest również nazywany pamięcią współdzieloną.
- SM Zatwierdzone: przedstawia plik VAS zatwierdzony przez wszystkich urzędników tego typu, które korzystają z interfejsu API plików mapowanych na pamięć.
Alternatywną metodą jest uzyskanie informacji podsumowujących dla każdego typu urzędnika dla wszystkich węzłów pamięci przy użyciu dynamicznego widoku zarządzania (DMV) sys.dm_os_memory_clerks . W tym celu uruchom następujące zapytanie:
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
Szczegóły puli
Jest to ważna sekcja, która zawiera podział różnych stanów danych i stron indeksu w puli, nazywanych również pamięcią podręczną danych. Poniższa tabela danych wyjściowych zawiera szczegółowe informacje o puli i innych informacjach.
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
Na poniższej liście omówiono wartości w danych wyjściowych i ich opisy:
- Baza danych: przedstawia liczbę (stron), które mają zawartość bazy danych (dane i strony indeksu).
- Cel: pokazuje docelowy rozmiar puli (liczba). Zobacz Docelowa zatwierdzona pamięć w poprzednich sekcjach tego artykułu.
- Zanieczyszczone: pokazuje strony z zawartością bazy danych i zostały zmodyfikowane. Te zawierają zmiany, które muszą być opróżniane na dysk zwykle przez proces punktu kontrolnego.
- We/Wy: pokazuje oczekujące na oczekującą operację we/wy. Oznacza to, że zawartość tych stron jest zapisywana w magazynie lub odczytywana z magazynu.
- Zatrzaśnięty: pokazuje zatrzasane. Bufor jest zatrzaśnięty, gdy wątek odczytuje lub modyfikuje zawartość strony. Bufor jest również zatrzasany, gdy strona jest odczytywana z dysku lub zapisywana na dysku. Zatrzask służy do utrzymania fizycznej spójności danych na stronie podczas ich odczytywania lub modyfikowania. Z kolei blokada służy do utrzymania spójności logicznej i transakcyjnej.
- Błąd we/wy: pokazuje liczbę, które mogły napotkać błędy systemu operacyjnego związane z we/wy (niekoniecznie oznacza to problem).
- Oczekiwana długość życia strony: ten licznik mierzy czas w sekundach, przez który najstarsza strona pozostała w puli.
Szczegółowe informacje na temat puli dla stron bazy danych można uzyskać przy użyciu widoku sys.dm_os_buffer_descriptors
DMV. Należy jednak używać tego dynamicznego widoku zarządzania z ostrożnością, ponieważ może on działać długo i generować ogromne dane wyjściowe, jeśli serwer oparty na programie SQL Server może mieć do dyspozycji dużo pamięci RAM.
Pamięć podręczna planu
W tej sekcji omówiono pamięć podręczną planu, która była wcześniej nazywana pamięcią podręczną procedur.
Procedure Cache Value
----------------------- -----------
TotalProcs 4
TotalPages 25
InUsePages 0
Na poniższej liście omówiono wartości w danych wyjściowych i ich opisy:
TotalProcs: Ta wartość pokazuje łączną liczbę buforowanych obiektów znajdujących się obecnie w pamięci podręcznej procedury. Ta wartość odpowiada liczbie wpisów w
sys.dm_exec_cached_plans
widoku DMV.Uwaga 16.
Ze względu na dynamiczny charakter tych informacji dopasowanie może nie być dokładne. Narzędzie PerfMon umożliwia monitorowanie obiektu SQL Server: Planowanie pamięci podręcznej i
sys.dm_exec_cached_plans
widoku DMV w celu uzyskania szczegółowych informacji o typie buforowanych obiektów, takich jak wyzwalacze, procedury i obiekty ad hoc.TotalPages: przedstawia strony skumulowane używane do przechowywania wszystkich buforowanych obiektów w pamięci podręcznej planu lub procedury. Tę liczbę można pomnożyć przez 8 KB, aby uzyskać wartość wyrażoną w KB.
InUsePages: pokazuje strony w pamięci podręcznej procedury, które należą do procedur, które są obecnie aktywne. Tych stron nie można odrzucić.
Obiekty pamięci globalnej
Ta sekcja zawiera informacje o różnych obiektach pamięci globalnej i ilości używanej pamięci.
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
Na poniższej liście omówiono wartości w danych wyjściowych i ich opisy:
- Zasób: pokazuje pamięć używaną przez obiekt Resource. Jest on używany przez aparat magazynu dla różnych struktur obejmujących cały serwer.
- Blokady: pokazuje pamięć używaną przez Menedżera blokad.
- XDES: pokazuje pamięć używaną przez Menedżera transakcji.
- SETLS: przedstawia pamięć używaną do przydzielenia struktury specyficznej dla aparatu magazynu na wątek korzystającej z magazynu lokalnego wątku (TLS). Aby uzyskać więcej informacji, zobacz Magazyn lokalny wątku.
- SubpDesc Allocators: przedstawia pamięć używaną do zarządzania podprocesami na potrzeby zapytań równoległych, operacji tworzenia kopii zapasowych, operacji przywracania, operacji bazy danych, operacji na plikach, dublowania i kursorów asynchronicznych. Te podprocesy są również nazywane "procesami równoległymi".
- Se SchemaManager: pokazuje pamięć używaną przez Menedżera schematów do przechowywania metadanych specyficznych dla aparatu magazynu.
- SQLCache: przedstawia pamięć używaną do zapisywania tekstu ad hoc i przygotowanych instrukcji.
- Replikacja: pokazuje pamięć używaną przez serwer do podsystemów replikacji wewnętrznej.
- ServerGlobal: przedstawia obiekt pamięci serwera globalnego używany w sposób ogólny przez kilka podsystemów.
- XP Global: pokazuje pamięć używaną przez rozszerzone procedury składowane.
- SortTables: pokazuje pamięć używaną przez tabele sortowania.
Wykonywanie zapytań o obiekty pamięci
W tej sekcji opisano informacje dotyczące udzielania pamięci zapytań. Zawiera również migawkę użycia pamięci zapytania. Pamięć zapytania jest również nazywana "pamięcią obszaru roboczego".
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
Jeśli rozmiar i koszt zapytania spełniają "małe" progi pamięci zapytania, zapytanie zostanie umieszczone w małej kolejce zapytań. To zachowanie zapobiega opóźnianiu mniejszych zapytań za większymi zapytaniami, które znajdują się już w kolejce.
Na poniższej liście omówiono wartości w danych wyjściowych i ich opisy:
- Granty: pokazuje liczbę uruchomionych zapytań, które mają przydziały pamięci.
- Oczekiwanie: przedstawia liczbę zapytań oczekujących na uzyskanie dotacji pamięci.
- Dostępne: przedstawia, które są dostępne dla zapytań do użycia jako obszar roboczy skrótu i sortowanie obszaru roboczego.
Available
Wartość jest okresowo aktualizowana. - Następne żądanie: pokazuje rozmiar żądania pamięci w dla następnego oczekującego zapytania.
- Oczekiwanie na: pokazuje ilość pamięci, która musi być dostępna, aby uruchomić zapytanie, do którego odwołuje się wartość Następne żądanie. Wartość Oczekiwanie na wartość jest
Next Request
pomnożona przez współczynnik rozgłasku. Ta wartość skutecznie gwarantuje, że określona ilość pamięci będzie dostępna po uruchomieniu następnego oczekującego zapytania. - Koszt: przedstawia koszt następnego oczekującego zapytania.
- Limit czasu: pokazuje limit czasu (w sekundach) dla następnego oczekującego zapytania.
- Czas oczekiwania: pokazuje czas, który upłynął( w milisekundach), ponieważ następne oczekujące zapytanie zostało umieszczone w kolejce.
- Bieżąca wartość maksymalna: przedstawia ogólny limit pamięci dla wykonywania zapytań. Ta wartość jest łącznym limitem zarówno dla dużej kolejki zapytań, jak i małej kolejki zapytań.
Aby uzyskać więcej informacji o tym, jakie są przydziały pamięci, jakie są te wartości i jak rozwiązywać problemy z udzielaniem pamięci, zobacz Rozwiązywanie problemów z niską wydajnością lub małą ilością pamięci spowodowanych przez przydziały pamięci w programie SQL Server.
Optymalizacja pamięci
Zapytania są przesyłane do serwera na potrzeby kompilacji. Proces kompilacji obejmuje analizowanie, algebrazację i optymalizację. Zapytania są klasyfikowane na podstawie pamięci używanej przez każde zapytanie podczas procesu kompilacji.
Uwaga 16.
Ta ilość nie obejmuje pamięci wymaganej do uruchomienia zapytania.
Po uruchomieniu zapytania nie ma limitu liczby zapytań, które można skompilować. W miarę zwiększania i osiągnięcia progu zużycie pamięci zapytanie musi przekazać bramę, aby kontynuować. Istnieje stopniowo malejący limit równocześnie skompilowanych zapytań po każdej bramie. Rozmiar każdej bramy zależy od platformy i obciążenia. Rozmiary bramy są wybierane w celu zmaksymalizowania skalowalności i przepływności.
Jeśli zapytanie nie może przekazać bramy, czeka na dostępność pamięci lub zwraca błąd przekroczenia limitu czasu (błąd 8628). Ponadto zapytanie może nie uzyskać bramy w przypadku anulowania zapytania lub wykrycia zakleszczenia. Jeśli zapytanie przekazuje kilka bram, nie zwalnia mniejszych bram do momentu ukończenia procesu kompilacji.
To zachowanie pozwala jednocześnie na wykonanie tylko kilku kompilacji intensywnie korzystających z pamięci. Ponadto to zachowanie maksymalizuje przepływność dla mniejszych zapytań.
W następnej tabeli przedstawiono szczegóły oczekiwania na pamięć, które występują z powodu niewystarczającej ilości pamięci na potrzeby optymalizacji zapytań. Pamięć wewnętrzna odpowiada za pamięć optymalizatora używaną przez zapytania systemowe, natomiast domyślna pamięć optymalizacji raportów dla zapytań użytkowników lub aplikacji.
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
Oto opis niektórych z tych wartości:
- Skonfigurowane jednostki — wskazuje liczbę współbieżnych zapytań, które mogą używać pamięci kompilacji z bramy. W tym przykładzie 32 zapytania współbieżne mogą używać pamięci z bramy Small Gateway (wartość domyślna), ośmiu współbieżnych zapytań z bramy Medium i jednego zapytania z bramy Big Gateway. Jak wspomniano wcześniej, jeśli zapytanie wymaga więcej pamięci niż mała brama może przydzielić, przejdzie do bramy Średnie i to zapytanie zostanie zliczone, aby wykonać jednostkę w obu bramach. Większa ilość pamięci kompilacji wymaganej przez zapytanie, tym mniejsza liczba skonfigurowanych jednostek w bramie.
- Dostępne jednostki — wskazuje liczbę miejsc lub jednostek dostępnych dla współbieżnych zapytań do skompilowania z listy skonfigurowanych jednostek. Jeśli na przykład są dostępne 32 jednostki, ale trzy zapytania obecnie używają pamięci kompilacji,
Available Units
będzie to 32 minus 3 lub 29 jednostek. - Uzyskuje — wskazuje liczbę jednostek lub miejsc uzyskanych przez zapytania do skompilowania. Jeśli trzy zapytania obecnie używają pamięci z bramy, uzyskuje wartość = 3.
- Kelnerki — wskazuje, ile zapytań oczekuje na pamięć kompilacji w bramie. Jeśli wszystkie jednostki w bramie zostaną wyczerpane, wartość Kelnerów jest inna niż zero, która pokazuje liczbę oczekujących zapytań.
- Próg — wskazuje limit pamięci bramy, który określa, skąd zapytanie pobiera jego pamięć lub z której bramy pozostaje. Jeśli zapytanie nie wymaga więcej niż wartość progowa, pozostaje w małej bramie (zapytanie zawsze rozpoczyna się od małej bramy). Jeśli potrzebuje więcej pamięci do kompilacji, przejdzie do średniej, a jeśli ten próg będzie nadal niewystarczający, przejdzie do bramy big gateway. W przypadku małej bramy współczynnik progu wynosi 380 000 bajtów (może ulec zmianie w przyszłych wersjach) dla platformy x64.
- Współczynnik progu: określa wartość progową dla każdej bramy. W przypadku małej bramy, ponieważ próg jest wstępnie zdefiniowany, współczynnik jest również ustawiony na tę samą wartość. Czynniki progowe dla średniej i dużej bramy to ułamki całkowitej pamięci optymalizatora (ogólna pamięć w kolejce optymalizacji) i są ustawione odpowiednio na 12 i 8. Dlatego jeśli ogólna pamięć zostanie skorygowana, ponieważ inni użytkownicy pamięci programu SQL Server wymagają pamięci, czynniki progowe również spowodują dynamiczne dostosowanie progów.
- Limit czasu: wskazuje wartość w minutach, która definiuje czas oczekiwania zapytania na pamięć optymalizatora. Jeśli ta wartość limitu czasu zostanie osiągnięta, sesja przestanie czekać i zgłasza błąd 8628 —
A time out occurred while waiting to optimize the query. Rerun the query.
Brokerzy pamięci
Ta sekcja zawiera informacje o brokerach pamięci, które kontrolują pamięć podręczną, skradzioną pamięć i zarezerwowaną pamięć. Informacje w tych tabelach można używać tylko w przypadku diagnostyki wewnętrznej. W związku z tym te informacje nie są szczegółowe.
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