Udostępnij za pośrednictwem


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.

  1. Uruchom polecenie DBCC MEMORYSTATUS.
  2. 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.
  3. 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.
  4. 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.
  5. Zbadaj każdy składnik: MEMORYCLEARK, , CACHESTOREUSERSTOREi OBJECTSTORE. 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.
    1. 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.
    2. 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)i OBJECTSTORE_LOCK_MANAGER (node 2)tak dalej, a na koniec obserwować sumowaną wartość każdego węzła w elemecie OBJECTSTORE_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.
  6. 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