Użyj polecenia DBCC MEMORYSTATUS, aby monitorować użycie pamięci w 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 udostępnia migawkę bieżącego stanu pamięci microsoft SQL Server i systemu operacyjnego. Zapewnia jeden z najbardziej szczegółowych danych wyjściowych dystrybucji pamięci i użycia w SQL Server. Dane wyjściowe umożliwiają rozwiązywanie problemów z użyciem pamięci w 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 warunkiem małej ilości 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 zawierają sekcje dotyczące zarządzania pamięcią, użycia pamięci, agregowania informacji o pamięci, informacji o puli buforów i informacji o pamięci podręcznej procedur. Opisano w nim również dane wyjściowe obiektów pamięci globalnej, obiektów pamięci zapytań, optymalizacji i brokerów pamięci.

Uwaga

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. Brak liczników wydajności, które pokazują użycie pamięci interfejsu API rozszerzeń okien adresowych (AWE).

Ważna

Polecenie DBCC MEMORYSTATUS ma być narzędziem diagnostycznym dla pomoc techniczna firmy Microsoft. Format danych wyjściowych i podany poziom szczegółów mogą ulec zmianie między dodatkami Service Pack i wersjami produktów. Funkcje, które udostępnia polecenie, DBCC MEMORYSTATUS mogą zostać zastąpione przez inny mechanizm w późniejszych wersjach produktu. W związku z tym w późniejszych 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ą zostać przerwane bez ostrzeżenia.

Dane wyjściowe DBCC MEMORYSTATUS polecenia zostały zmienione z wcześniejszych wersji SQL Server. Obecnie zawiera kilka tabel, które były niedostępne we wcześniejszych wersjach produktu.

Jak używać DBCC MEMORYSTATUS

DBCC MEMORYSTATUSJest zwykle używany do badania problemów z małą ilością pamięci zgłaszanych przez SQL Server. Mała ilość pamięci może wystąpić, jeśli istnieje zewnętrzne wykorzystanie pamięci spoza procesu SQL Server lub wewnętrzne ciśnienie pochodzące z procesu. Wewnętrzne ciśnienie może być spowodowane przez aparat bazy danych SQL Server lub przez inne składniki uruchamiane 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 obciążeniem pamięcią, zobacz Rozwiązywanie problemów z brakiem pamięci lub małą ilością pamięci w SQL Server.

Poniżej przedstawiono ogólne kroki korzystania z 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.

  1. Uruchom polecenie DBCC MEMORYSTATUS.
  2. Użyj sekcji Process/System Counts i Memory Manager, aby ustalić, czy występuje obciążenie pamięci zewnętrznej (na przykład komputer ma mało pamięci fizycznej lub wirtualnej, czy SQL Server zestaw roboczy jest stronicowany). Ponadto użyj tych sekcji, aby określić ilość pamięci przydzieloną aparatowi bazy danych SQL Server w porównaniu z ogólną pamięcią w systemie.
  3. Jeśli ustalisz, że występuje presja 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.
  4. Jeśli ustalisz, że aparat SQL Server używa większości pamięci (ciśnienie pamięci wewnętrznej), możesz użyć pozostałych DBCC MEMORYSTATUS sekcji, aby określić, które składniki (urzędnik pamięci, magazyn pamięci podręcznej, magazyn użytkowników lub magazyn obiektów) są największym czynnikiem przyczyniającym się do tego użycia pamięci.
  5. Sprawdź każdy składnik: MEMORYCLEARK, CACHESTORE, USERSTORE, i OBJECTSTORE. Sprawdź jego wartość Przydzielone strony, aby określić, ile pamięci zużywa składnik wewnątrz SQL Server. Aby uzyskać krótki opis większości składników pamięci aparatu bazy danych, zobacz tabelę Typy urzędnika pamięci .
    1. W rzadkich przypadkach alokacja jest bezpośrednią alokacją wirtualną zamiast przechodzić przez menedżera pamięci SQL Server. W takich przypadkach należy zbadać wartość zatwierdzoną maszyny wirtualnej w ramach określonego składnika zamiast przydzielonych stron.
    2. Jeśli na komputerze jest używana funkcja NUMA, niektóre składniki pamięci są podzielone na węzeł. Na przykład można obserwować OBJECTSTORE_LOCK_MANAGER (node 0), OBJECTSTORE_LOCK_MANAGER (node 1), OBJECTSTORE_LOCK_MANAGER (node 2)i tak dalej, i na koniec obserwować sumowane wartości każdego węzła w OBJECTSTORE_LOCK_MANAGER (Total). Najlepszym miejscem do rozpoczęcia jest sekcja, która zgłasza całkowitą wartość, a następnie sprawdź podział w razie potrzeby. Aby uzyskać więcej informacji, zobacz Użycie pamięci w węzłach NUMA.
  6. Niektóre sekcje DBCC MEMORYSTATUS zawierają szczegółowe i wyspecjalizowane informacje o konkretnych alokatorach pamięci. Te sekcje umożliwiają zrozumienie dodatkowych szczegółów i zapoznanie się z dalszym podziałem alokacji w obrębie urzędnika pamięci. Przykłady takich sekcji obejmują pulę buforów (pamięć podręczną danych i indeksów), pamięć podręczną procedury/plan, obiekty pamięci zapytań (dotacje na pamięć), kolejkę optymalizacji oraz małe i średnie i duże bramy (pamięć optymalizatora). Jeśli wiesz już, że konkretny składnik pamięci w SQL Server jest źródłem nacisku pamięci, warto przejść bezpośrednio do tej konkretnej sekcji. Jeśli na przykład w jakiś inny sposób ustalono, że istnieje wysokie użycie dotacji pamięci powodujących błędy pamięci, możesz przejrzeć sekcję Obiekty pamięci zapytania .

W pozostałej części tego artykułu opisano niektóre z przydatnych liczników 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 jego 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ść wolnego miejsca na komputerze. W tym przykładzie wolna pamięć wynosi 5 060 247 552 bajtów.
  • Dostępna pamięć wirtualna: ta wartość pokazuje ogólną ilość bezpłatnej pamięci wirtualnej dla procesu SQL Server wynosi 140 710 048 014 336 bajtów (128 TB). Aby uzyskać więcej informacji, zobacz Limity przestrzeni adresowej i pamięci.
  • Dostępny plik stronicowania: ta wartość pokazuje wolne miejsce na pliki stronicowania. W tym przykładzie wartość to 7 066 804 224 bajtów.
  • Zestaw roboczy: ta wartość pokazuje ogólną ilość pamięci wirtualnej, którą proces SQL Server ma w pamięci RAM (nie jest stronicowana) wynosi 430 026 752 bajtów.
  • Procent zatwierdzonej pamięci w systemie WS: ta wartość pokazuje, jaki procent SQL Server przydzielonej pamięci wirtualnej 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 jest stronicowana.
  • Błędy strony: ta wartość pokazuje ogólną liczbę błędów twardych i nietrwałych stron dla SQL Server. W tym przykładzie wartość to 151 138.

Pozostałe cztery wartości to wartości binarne lub logiczne.

  • Systemowa pamięć fizyczna o wysokiej wartości 1 wskazuje, że SQL Server uważa, że dostępna pamięć fizyczna na komputerze jest wysoka. Dlatego wartość małej pamięci fizycznej systemu wynosi 0, co oznacza brak małej ilości pamięci. Podobna logika jest stosowana do niskiego poziomu pamięci fizycznej przetwarzania i niskiego poziomu pamięci wirtualnej przetwarzania, gdzie 0 oznacza wartość false, a 1 oznacza, że jest prawdziwa. W tym przykładzie obie wartości to 0, co oznacza, że jest dużo pamięci fizycznej i wirtualnej dla procesu 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 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:

  • Zarezerwowana maszyna wirtualna: ta wartość pokazuje ogólną ilość wirtualnej przestrzeni adresowej (VAS) lub pamięci wirtualnej (VM), która SQL Server została zarezerwowana. Rezerwacja pamięci wirtualnej w rzeczywistości nie używa pamięci fizycznej; Oznacza to po prostu, że adresy wirtualne są odłożone z dużej bazy danych VAS. Aby uzyskać więcej informacji, zobacz VirtualAlloc(), MEM_RESERVE.

  • Maszyna wirtualna zatwierdzona: ta wartość pokazuje ogólną ilość pamięci wirtualnej, która została zatwierdzona przez 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; oznacza to, że są one przydzielone. Jeśli włączono opcję Zablokowane strony w pamięci, SQL Server używa alternatywnej metody do przydzielania pamięci, interfejsu API AWE, a większość pamięci nie jest odzwierciedlana w tym liczniku. Zobacz [Przydzielone zablokowane strony](#Locked Przydzielone strony) dla tych alokacji. Aby uzyskać więcej informacji, zobacz VirtualAlloc(), MEM_COMMIT.

  • Przydzielone strony: ta wartość pokazuje całkowitą liczbę stron pamięci przydzielonych przez aparat bazy danych SQL Server.

  • Przydzielone zablokowane strony: ta wartość reprezentuje ilość pamięci w kilobajtach (KB), która SQL Server została przydzielona i zablokowana w fizycznej pamięci RAM przy użyciu interfejsu API AWE. Wskazuje ona, ile pamięci SQL Server aktywnie używa i zażądała, aby była przechowywana w pamięci w celu optymalizacji wydajności. Blokując strony w pamięci, SQL Server zapewnia, że krytyczne strony bazy danych są łatwo dostępne i nie są zamieniane na dysk. Aby uzyskać więcej informacji, zobacz Adresy pamięci rozszerzeń systemu Windows (AWE). Wartość zero wskazuje, że funkcja "zablokowane strony w pamięci" jest obecnie wyłączona, a SQL Server używa pamięci wirtualnej. W takim przypadku wartość zatwierdzona maszyny wirtualnej będzie reprezentować pamięć przydzieloną do SQL Server.

  • Przydzielone duże strony: ta wartość reprezentuje ilość pamięci przydzielonej przez SQL Server przy użyciu dużych stron. Large Pages to funkcja zarządzania pamięcią udostępniana przez system operacyjny. Zamiast 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.

  • Zatwierdzone przez obiekt docelowy: ta wartość wskazuje docelową ilość pamięci, która SQL Server ma zostać zatwierdzona, co jest idealną ilością pamięci, SQL Server może być zużywana na podstawie ostatnich obciążeń.

  • Bieżące zatwierdzone: ta wartość wskazuje ilość pamięci systemu operacyjnego (w KB) obecnie zatwierdzonego menedżera pamięci SQL Server (przydzielonego 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 zbliżona lub taka sama jak przydzielona maszyna wirtualna lub zablokowane strony. Należy pamiętać, że gdy SQL Server używa interfejsu API AWE, część pamięci jest nadal przydzielana przez menedżera pamięci wirtualnej systemu operacyjnego i będzie odzwierciedlana jako maszyna wirtualna zatwierdzona.

  • Faza wzrostu NUMA: ta wartość wskazuje, czy SQL Server jest obecnie w fazie wzrostu NUMA. Aby uzyskać więcej informacji na temat tego początkowego zwiększania pamięci, gdy na maszynie istnieją węzły NUMA, zobacz How It Works: SQL Server (NUMA Local, Foreign and Away Memory Blocks).

  • Ostatni błąd systemu operacyjnego: ta wartość pokazuje ostatni błąd systemu operacyjnego, który wystąpił, gdy w systemie wystąpiło obciążenie pamięcią. 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 systemu.

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 węzła sprzętowego NUMA. W systemie SMP istnieje jeden 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

  • Wartość Memory node Id może nie odpowiadać identyfikatorowi węzła sprzętowego.
  • 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.
  • Sumy wartości zarezerwowanych maszyn wirtualnych i wartości zatwierdzonych maszyny wirtualnej we wszystkich węzłach pamięci będą nieco mniejsze niż odpowiednie wartości, które są 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 używa ograniczonych zasobów pamięci. Aby uzyskać więcej informacji na temat dedykowanego połączenia administratora (DAC), zobacz Diagnostic connection for database administrators (Połączenie diagnostyczne dla administratorów bazy danych).

Na poniższej liście omówiono wartości w tabeli wyjściowej i ich opisy:

  • Zarezerwowana maszyna wirtualna: pokazuje wirtualną przestrzeń adresową (VAS), która jest zarezerwowana przez wątki uruchomione w tym węźle.
  • Maszyna wirtualna zatwierdzona: pokazuje interfejs VAS zatwierdzony przez wątki działające w tym węźle.

Agregowanie pamięci

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ą interfejsu 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

Wartość Pages Allocated pokazuje 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 podręcznej).

Uwaga

Te identyfikatory węzłów odpowiadają konfiguracji węzła NUMA komputera z systemem SQL Server. Identyfikatory węzłów obejmują możliwe węzły NUMA oprogramowania, które są zdefiniowane na podstawie sprzętowych węzłów NUMA lub w systemie SMP. Aby znaleźć mapowanie między identyfikatorami węzłów i procesorami CPU dla każdego węzła, zobacz Information Event ID 17152 (Identyfikator zdarzenia informacji 17152). To zdarzenie jest rejestrowane w dzienniku aplikacji w Podgląd zdarzeń po uruchomieniu SQL Server.

W systemie SMP jest widoczna tylko jedna tabela dla każdego typu urzędnika, nie licząc węzła = 64 używanego przez 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: przedstawia interfejs VAS zarezerwowany przez wszystkich urzędników tego typu, którzy korzystają z interfejsu API plików mapowanych w pamięci. Ten interfejs API jest również nazywany pamięcią udostępnioną.
  • Zatwierdzone przez maszynę wirtualną: pokazuje interfejs VAS zatwierdzony przez wszystkich urzędników tego rodzaju, którzy korzystają z interfejsu API plików mapowanych pamięcią.

Alternatywną metodą jest uzyskanie informacji podsumowania dla każdego typu urzędnika dla wszystkich węzłów pamięci przy użyciu widoku zarządzania dynamicznego sys.dm_os_memory_clerks (DMV). 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 buforów

Jest to ważna sekcja, która zawiera podział różnych stanów danych i stron indeksu w puli buforów, znanej również jako pamięć podręczna danych. W poniższej tabeli wyjściowej wymieniono szczegółowe informacje o puli buforów i inne informacje.

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: pokazuje liczbę buforów (stron), które mają zawartość bazy danych (dane i strony indeksu).
  • Cel: pokazuje rozmiar docelowy puli buforów (liczba buforów). Zobacz Docelowa zatwierdzona pamięć w poprzednich sekcjach tego artykułu.
  • Brudne: pokazuje strony, które mają zawartość bazy danych i zostały zmodyfikowane. Te bufory zawierają zmiany, które muszą być opróżniane na dysku zwykle przez proces punktu kontrolnego.
  • W operacji we/wy: pokazuje bufory oczekujące na oczekującą operację we/wy. Oznacza to, że zawartość tych stron jest zapisywana lub odczytywana z magazynu.
  • Zatrzaśnięcie: pokazuje bufory z zatrzaśnięciem. Bufor jest zablokowany, gdy wątek odczytuje lub modyfikuje zawartość strony. Bufor jest również zatrzaśany, gdy strona jest odczytywana z dysku lub zapisywana na dysku. Zatrzaśnięcie służy do zachowania spójności fizycznej danych na stronie podczas ich odczytywania lub modyfikowania. Natomiast blokada służy do zachowania spójności logicznej i transakcyjnej.
  • Błąd we/wy: pokazuje liczbę buforów, które mogły napotkać jakiekolwiek błędy systemu operacyjnego związane z we/wy (nie musi to oznaczać problemu).
  • Oczekiwana długość życia strony: ten licznik mierzy czas w sekundach, przez który najstarsza strona pozostała w puli buforów.

Szczegółowe informacje o puli buforów dla stron bazy danych można uzyskać przy użyciu funkcji sys.dm_os_buffer_descriptors DMV. Jednak należy zachować ostrożność, ponieważ może on działać długo i generować ogromne dane wyjściowe, jeśli serwer oparty na SQL Server może mieć do dyspozycji dużo pamięci RAM.

Planowanie pamięci podręcznej

W tej sekcji omówiono pamięć podręczną planu, która wcześniej była 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ę obiektów buforowanych obecnie w pamięci podręcznej procedury. Ta wartość jest zgodna z liczbą wpisów w maszynie wirtualnej sys.dm_exec_cached_plans DMV.

    Uwaga

    Ze względu na dynamiczny charakter tych informacji dopasowanie może nie być dokładne. Za pomocą narzędzia PerfMon można monitorować SQL Server: Plan Cache object (Planowanie pamięci podręcznej) i sys.dm_exec_cached_plans DMV (DMV), aby uzyskać szczegółowe informacje o typie obiektów buforowanych, takich jak wyzwalacze, procedury i obiekty ad hoc.

  • TotalPages: pokazuje skumulowane strony używane do przechowywania wszystkich buforowanych obiektów w pamięci podręcznej planu lub procedury. Możesz pomnożyć tę liczbę przez 8 KB, aby uzyskać wartość wyrażoną w kb/s.

  • InUsePages: pokazuje strony w pamięci podręcznej procedur, 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 pamięci, których używają.

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 Zasoby. Jest on używany przez aparat magazynu dla różnych struktur całego serwera.
  • Blokady: pokazuje pamięć używaną przez Menedżera blokad.
  • XDES: pokazuje pamięć używaną przez Menedżera transakcji.
  • SETLS: pokazuje pamięć, która jest używana do przydzielania specyficznej dla aparatu magazynu struktury dla wątku, która używa magazynu lokalnego wątków (TLS). Aby uzyskać więcej informacji, zobacz Magazyn lokalny wątków.
  • Alokatory subpDesc: pokazuje 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: pokazuje pamięć używaną do zapisywania tekstu ad hoc i przygotowanych instrukcji.
  • Replikacja: pokazuje pamięć używaną przez serwer dla podsystemów replikacji wewnętrznej.
  • ServerGlobal: przedstawia obiekt pamięci serwera globalnego używany ogólnie 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ń względem obiektów pamięci

W tej sekcji opisano informacje o przyznawaniu pamięci zapytań. Zawiera również migawkę użycia pamięci zapytania. Pamięć zapytań 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 zapytań, zapytanie jest umieszczane 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:

  • Dotacje: pokazuje liczbę uruchomionych zapytań, które mają dotacje na pamięć.
  • Oczekiwanie: pokazuje liczbę zapytań oczekujących na uzyskanie dotacji na pamięć.
  • Dostępne: pokazuje bufory, które są dostępne dla zapytań do użycia jako obszar roboczy skrótów i obszar roboczy sortowania. Wartość Available jest okresowo aktualizowana.
  • Następne żądanie: pokazuje rozmiar żądania pamięci w buforach dla następnego zapytania oczekującego.
  • Oczekiwanie na: pokazuje ilość pamięci, która musi być dostępna do uruchomienia zapytania, do którego odwołuje się wartość Następne żądanie. Wartość Waiting For jest wartością Next Request pomnożoną przez współczynnik miejsca na poczcie. Ta wartość skutecznie gwarantuje, że określona ilość pamięci będzie dostępna po uruchomieniu następnego oczekującego zapytania.
  • Koszt: pokazuje koszt następnego oczekującego zapytania.
  • Limit czasu: pokazuje limit czasu w sekundach dla następnego zapytania oczekującego.
  • Czas oczekiwania: pokazuje czas, który upłynął w milisekundach, ponieważ następne zapytanie oczekujące zostało umieszczone w kolejce.
  • Bieżące maksimum: pokazuje ogólny limit pamięci na potrzeby wykonywania zapytań. Ta wartość jest połączonym limitem zarówno dla dużej kolejki zapytań, jak i dla małej kolejki zapytań.

Aby uzyskać więcej informacji o tym, czym są dotacje na pamięć, co oznaczają te wartości i jak rozwiązywać problemy z przyznawaniem pamięci, zobacz Rozwiązywanie problemów z niską wydajnością lub małą ilością pamięci spowodowanych przez przyznawanie pamięci w SQL Server.

Pamięć optymalizacji

Zapytania są przesyłane do serwera w celu kompilacji. Proces kompilacji obejmuje analizowanie, algebraizację i optymalizację. Zapytania są klasyfikowane na podstawie pamięci używanej przez każde zapytanie podczas procesu kompilacji.

Uwaga

Ta kwota nie obejmuje pamięci wymaganej do uruchomienia zapytania.

Po uruchomieniu zapytania nie ma limitu liczby zapytań, które można skompilować. W miarę wzrostu zużycia pamięci i osiągnięcia progu zapytanie musi przekazać bramę, aby kontynuować. Istnieje stopniowo malejący limit jednocześnie skompilowanych zapytań po każdej bramie. Rozmiar każdej bramy zależy od platformy i obciążenia. Rozmiary bram są wybierane w celu zmaksymalizowania skalowalności i przepływności.

Jeśli zapytanie nie może przekazać bramy, czeka na udostępnienie 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 przejdzie kilka bram, nie zwalnia mniejszych bram, dopóki proces kompilacji nie zostanie zakończony.

To zachowanie umożliwia jednoczesne wystąpienie tylko kilku kompilacji intensywnie korzystających z pamięci. Ponadto to zachowanie maksymalizuje przepływność dla mniejszych zapytań.

W następnej tabeli przedstawiono szczegółowe informacje o oczekiwaniach na pamięć, które występują z powodu niewystarczającej ilości pamięci na potrzeby optymalizacji zapytań. Pamięć wewnętrzna stanowi 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 współbieżne zapytania mogą używać pamięci z małej bramy (domyślnie), 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ż może przydzielić mała brama, nastąpi przejście do bramy Średniej i zliczono to zapytanie w celu wykonania jednostki w obu bramach. Tym większa ilość pamięci kompilacji wymaganej przez zapytanie, tym mniej 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 jest dostępnych 32 jednostki, ale trzy zapytania używają obecnie pamięci kompilacji, będzie to Available Units 32 minus 3 lub 29 jednostek.
  • Acquires — wskazuje liczbę jednostek lub miejsc uzyskanych przez zapytania do skompilowania. Jeśli trzy zapytania używają obecnie pamięci z bramy, a następnie pobiera = 3.
  • Kelnerzy — wskazuje, ile zapytań czeka na pamięć kompilacji w bramie. Jeśli wszystkie jednostki w bramie zostaną wyczerpane, wartość Waiters 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 pamięć lub z której bramy pozostaje. Jeśli zapytanie nie wymaga więcej niż wartości progowej, pozostaje w małej bramie (zapytanie zawsze zaczyna się od małej bramy). Jeśli wymaga więcej pamięci do kompilacji, przejdzie do średniej, a jeśli ten próg jest nadal niewystarczający, przechodzi do dużej bramy. W przypadku małej bramy współczynnik progowy 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 ś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 dostosowana, ponieważ inne SQL Server użytkowników pamięci wymagają pamięci, czynniki progowe spowodują również dynamiczne dostosowanie progów.
  • Limit czasu: wskazuje wartość w minutach, która określa, jak długo zapytanie czeka na pamięć optymalizatora. Jeśli ta wartość limitu czasu zostanie osiągnięta, sesja przestaje 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órzy kontrolują pamięć w pamięci podręcznej, skradzioną pamięć i pamięć zarezerwowaną. Informacji w tych tabelach można używać tylko do 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