Monitorowanie użycia pamięci
Dotyczy:programu SQL Server
Okresowo monitoruj wystąpienie programu SQL Server, aby potwierdzić, że użycie pamięci mieści się w typowych zakresach.
Konfigurowanie maksymalnej pamięci programu SQL Server
Domyślnie wystąpienie programu SQL Server może stopniowo zużywać znaczną część dostępnej pamięci systemu operacyjnego Windows na serwerze. Po uzyskaniu pamięci nie zostanie ona zwolniona, chyba że zostanie wykryte przeciążenie pamięci. Jest to zgodnie z projektem i nie wskazuje przecieku pamięci w procesie programu SQL Server. Użyj opcji maksymalnej pamięci serwera, aby ograniczyć ilość pamięci, którą program SQL Server może uzyskać w większości zastosowań. Aby uzyskać więcej informacji, zobacz przewodnik po architekturze zarządzania pamięcią .
W programie SQL Server w systemie Linux ustawić limit pamięci za pomocą narzędzia mssql-conf i ustawienia memory.memorylimitmb.
Monitorowanie pamięci systemu operacyjnego
Aby monitorować stan małej ilości pamięci, użyj następujących liczników systemu Windows Server. Wiele liczników pamięci systemu operacyjnego można odpytywać przez dynamiczne widoki zarządzania sys.dm_os_process_memory i sys.dm_os_sys_memory.
pamięć : dostępne bajty
Ten licznik wskazuje, ile bajtów pamięci jest obecnie dostępnych do użycia przez procesy. Niskie wartości licznika Dostępne bajty mogą wskazywać na ogólny niedobór pamięci systemu operacyjnego. Tę wartość można odczytać za pomocą języka T-SQL, korzystając z sys.dm_os_sys_memory.available_physical_memory_kb.Pamięć : Strony na sekundę
Ten licznik wskazuje liczbę stron, które zostały pobrane z dysku z powodu błędów strony twardej lub zapisane na dysku w celu zwolnienia miejsca w zestawie roboczym z powodu błędów strony. Wysoki współczynnik dla licznika Strony/sek może wskazywać na nadmierne stronicowanie.pamięci: błędy strony na sekundę Ten licznik wskazuje szybkość błędów strony dla wszystkich procesów, w tym procesów systemowych. Niska, ale niezerowa szybkość stronicowania na dysk (a tym samym błędy stron) jest typowa, nawet jeśli komputer ma dużo dostępnej pamięci. Program Microsoft Windows Virtual Memory Manager (VMM) pobiera strony z programu SQL Server i innych procesów, ponieważ przycina rozmiary zestawu roboczego tych procesów. To działanie programu VMM zwykle powoduje błędy strony.
Proces: błędy strony na sekundę Ten licznik wskazuje częstotliwość błędów strony dla danego procesu użytkownika. Monitoruj proces : Page Faults/sec, aby określić, czy aktywność dysku jest spowodowana stronicowaniem przez serwer SQL Server. Aby określić, czy SQL Server czy inny proces jest przyczyną nadmiernego stronicowania, monitoruj licznik Proces: błędy strony/s dla wystąpienia procesu SQL Server.
Aby uzyskać więcej informacji o rozwiązywaniu problemów z nadmiernym stronicowaniem, zapoznaj się z dokumentacją systemu operacyjnego.
Izolowanie pamięci używanej przez program SQL Server
Aby monitorować użycie pamięci programu SQL Server, użyj następujących liczników obiektów programu SQL Server. Wiele liczników obiektów programu SQL Server można wykonywać w zapytaniach za pośrednictwem dynamicznych widoków zarządzania sys.dm_os_performance_counters lub sys.dm_os_process_memory.
Domyślnie program SQL Server dynamicznie zarządza wymaganiami dotyczącymi pamięci na podstawie dostępnych zasobów systemowych. Jeśli program SQL Server potrzebuje więcej pamięci, wysyła zapytanie do systemu operacyjnego, aby określić, czy jest dostępna bezpłatna pamięć fizyczna i używa dostępnej pamięci. Jeśli dla systemu operacyjnego jest mało wolnej pamięci, program SQL Server zwolni pamięć do systemu operacyjnego, dopóki niski poziom pamięci nie zostanie złagodzony, lub dopóki program SQL Server nie osiągnie minimalnej pamięci serwera. Można jednak zastąpić opcję dynamicznego używania pamięci przy użyciu opcji minimalnej pamięci serwerai maksymalnej pamięci serwera opcji konfiguracji serwera. Aby uzyskać więcej informacji, zobacz opcje pamięci serwera .
Aby monitorować ilość pamięci używanej przez program SQL Server, sprawdź następujące liczniki wydajności:
SQL Server: Menedżer pamięci: łączna ilość pamięci serwera (KB)
Ten licznik wskazuje ilość pamięci systemu operacyjnego, która jest obecnie przeznaczona dla programu SQL Server przez menedżera pamięci. Oczekuje się, że ta liczba będzie rosła zgodnie z wymaganiami w ramach rzeczywistej aktywności i będzie rosła po uruchomieniu programu SQL Server. Wykonaj zapytanie dotyczące tego licznika przy użyciu dynamicznego widoku zarządzania sys.dm_os_sys_info, obserwując kolumnę committed_kb.SQL Server: Menedżer pamięci: pamięć docelowa serwera (KB)
Ten licznik wskazuje idealną ilość pamięci, jaką może zużywać program SQL Server w oparciu o ostatnie obciążenie. Porównaj z łączną ilość pamięci serwera po okresie typowej operacji, aby określić, czy program SQL Server ma przydzieloną żądaną ilość pamięci. Po typowej operacji Całkowita pamięć serwera i Docelowa pamięć serwera powinny być podobne. Jeśli Całkowita pamięć serwera jest znacznie niższa niż docelowa pamięć serwera, instancja programu SQL Server może doświadczać ograniczenia pamięciowego. W okresie po uruchomieniu programu SQL Server, Całkowita pamięć serwera powinna być niższa niż Docelowa pamięć serwera, ponieważ Całkowita pamięć serwera rośnie. Wykonaj zapytanie dotyczące tego licznika przy użyciu dynamicznego widoku zarządzania sys.dm_os_sys_info, obserwując kolumnę committed_target_kb. Aby uzyskać więcej informacji i najlepszych rozwiązań dotyczących konfigurowania pamięci, zobacz Opcje konfiguracji pamięci serwera.Proces: Zestaw Roboczy
Ten licznik wskazuje ilość pamięci fizycznej, która jest obecnie używana przez proces zgodnie z systemem operacyjnym. Obserwuj instancję sqlservr.exe tego licznika. Wykonaj zapytanie dotyczące tego licznika przy użyciu dynamicznego widoku zarządzania sys.dm_os_process_memory, obserwując kolumnęphysical_memory_in_use_kb
.proces : bajtów prywatnych
Ten licznik wskazuje ilość pamięci, którą proces zażądał do własnego użycia w systemie operacyjnym. Obserwuj instancję sqlservr.exe tego licznika. Ponieważ ten licznik obejmuje wszystkie alokacje pamięci żądane przez sqlservr.exe, w tym te, które nie są ograniczone przez opcji maksymalnej pamięci serwera, ten licznik może zgłaszać wartości większe niż opcji maksymalnej pamięci serwera.SQL Server: Menedżer buforów: strony bazy danych
Ten licznik wskazuje liczbę stron w puli z zawartością bazy danych. Nie obejmuje innych rodzajów pamięci poza pamięcią puli buforowej w procesie SQL Server. Wykonaj zapytanie dotyczące tego licznika przy użyciu dynamicznego widoku zarządzania sys.dm_os_performance_counters.pl-PL: SQL Server: Menedżer Bufora: Współczynnik Trafień Pamięci Podręcznej Buforu
Ten licznik jest specyficzny dla programu SQL Server. Współczynnik 90 lub wyższy jest pożądany. Wartość większa niż 90 wskazuje, że ponad 90 procent wszystkich żądań dotyczących danych zostało spełnionych z pamięci podręcznej danych bez konieczności odczytu z dysku. Aby uzyskać więcej informacji na temat Menedżera buforów SQL Server, zobacz obiekt Menedżera buforów SQL Server. Wykonaj zapytanie dotyczące tego licznika przy użyciu dynamicznego widoku zarządzania sys.dm_os_performance_counters.programu SQL Server: Menedżer bufora: czas życia strony
Ten licznik mierzy ilość czasu w sekundach, przez który najstarsza strona pozostaje w puli pamięci podręcznej. W przypadku systemów korzystających z architektury NUMA jest to średnia dla wszystkich węzłów NUMA. Wyższa, rosnąca wartość jest najlepsza. Nagły spadek wskazuje na znaczną wymianę danych przepływających do i z puli bufora, co oznacza, że obciążenie nie mogło w pełni korzystać z danych już znajdujących się w pamięci. Każdy węzeł NUMA ma własny węzeł puli buforowej. Na serwerach z więcej niż jednym węzłem NUMA, wyświetl oczekiwaną długość życia strony dla każdego węzła puli buforów, używając SQL Server: Węzeł buforu: oczekiwana długość życia strony. Wykonaj zapytanie dotyczące tego licznika przy użyciu dynamicznego widoku zarządzania sys.dm_os_performance_counters.
Przykłady
Określanie bieżącej alokacji pamięci
Następujące zapytania zwracają informacje o aktualnie przydzielonej pamięci.
SELECT
(total_physical_memory_kb/1024) AS Total_OS_Memory_MB,
(available_physical_memory_kb/1024) AS Available_OS_Memory_MB
FROM sys.dm_os_sys_memory;
SELECT
(physical_memory_in_use_kb/1024) AS Memory_used_by_Sqlserver_MB,
(locked_page_allocations_kb/1024) AS Locked_pages_used_by_Sqlserver_MB,
(total_virtual_address_space_kb/1024) AS Total_VAS_in_MB,
process_physical_memory_low,
process_virtual_memory_low
FROM sys.dm_os_process_memory;
Określanie bieżącego wykorzystania pamięci programu SQL Server
Poniższe zapytanie zwraca informacje o bieżącym wykorzystaniu pamięci programu SQL Server.
SELECT
sqlserver_start_time,
(committed_kb/1024) AS Total_Server_Memory_MB,
(committed_target_kb/1024) AS Target_Server_Memory_MB
FROM sys.dm_os_sys_info;
Określanie średniej długości życia strony
Poniższe zapytanie używa sys.dm_os_performance_counters
do obserwowania bieżącej długości czasu strony wystąpienia programu SQL Server wartości na poziomie ogólnego menedżera i na każdym poziomie węzła NUMA.
SELECT
CASE instance_name WHEN '' THEN 'Overall' ELSE instance_name END AS NUMA_Node, cntr_value AS PLE_s
FROM sys.dm_os_performance_counters
WHERE counter_name = 'Page life expectancy';
Powiązana zawartość
- monitorowanie użycia zasobów (Monitor wydajności)
- sys.dm_os_sys_memory (Transact-SQL)
- sys.dm_os_process_memory (Transact-SQL)
- sys.dm_os_sys_info (Transact-SQL)
- sys.dm_os_performance_counters (Transact-SQL)
- SQL Server, obiekt Menedżera Pamięci
- programu SQL Server, obiektu Menedżera buforu
- opcje konfiguracji pamięci serwera
- przewodnik po architekturze zarządzania pamięcią