Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy:SQL Server
Wykorzystanie pamięci dla silnika baz danych programu SQL Server jest ograniczone przez parę ustawień konfiguracji, minimalną pamięć dla serwera (MB) i maksymalną pamięć dla serwera (MB). Podczas normalnych okoliczności SQL Server będzie starał się zarezerwować pamięć do limitu ustawionego przez maksymalną pamięć serwera (MB).
Uwaga / Notatka
Indeksy magazynu kolumn: omówienie iIn-Memory omówienie obiektów OLTP i scenariuszy użycia mają własne urzędy certyfikacji pamięci, co ułatwia monitorowanie użycia puli. Aby uzyskać więcej informacji, zobacz sys.dm_os_memory_clerks.
W starszych wersjach programu SQL Server wykorzystanie pamięci było praktycznie nieograniczone, co oznaczało, że cały system pamięci był dostępny do użytku przez SQL Server. Zaleca się, aby we wszystkich wersjach programu SQL Server skonfigurować górny limit wykorzystania pamięci programu SQL Server przez skonfigurowanie maksymalnej pamięci serwera (MB).
- Ponieważ program SQL Server 2019 (15.x), instalator SQL na serwerach z systemem Windows udostępnia zalecenie dotyczące maksymalnej pamięci serwera (MB) dla autonomicznego wystąpienia programu SQL Server na podstawie procentu dostępnej pamięci systemowej w momencie instalacji.
- W dowolnym momencie można ponownie skonfigurować granice pamięci (w megabajtach) dla procesu programu SQL Server używanego przez wystąpienie programu SQL Server za pośrednictwem opcji konfiguracji minimalnej pamięci serwera (MB) i maksymalnej pamięci serwera (MB).
Uwaga / Notatka
Ten przewodnik dotyczy instancji programu SQL Server w systemie Windows. Aby uzyskać informacje na temat konfiguracji pamięci w systemie Linux, zobacz Najlepsze praktyki wydajności i wytyczne dotyczące konfiguracji dla SQL Server na systemie Linux oraz ustawienie memory.memorylimitmb.
Rekomendacje
Ustawienia domyślne i minimalne dozwolone wartości dla tych opcji to:
Opcja | Wartość domyślna | Minimalna dozwolona | Zalecane |
---|---|---|---|
minimalna pamięć serwera (MB) | 0 | 0 | 0 |
maksymalna pamięć serwera (MB) | 2,147,483,647 megabajtów (MB) | 128 MB | 75% dostępnej pamięci systemowej, która nie jest zużywana przez inne procesy, w tym inne wystąpienia. Aby uzyskać bardziej szczegółowe zalecenia, zobacz maksymalna ilość pamięci serwera. |
W ramach tych granic program SQL Server może dynamicznie zmieniać wymagania dotyczące pamięci na podstawie dostępnych zasobów systemowych. Aby uzyskać więcej informacji, zobacz dynamiczne zarządzanie pamięcią.
- Ustawienie maksymalnej wartości pamięci serwera (MB) może spowodować, że pojedyncze wystąpienie programu SQL Server będzie konkurować o pamięć z innymi wystąpieniami programu SQL Server hostowanymi na tym samym hoście.
- Jednak ustawienie maksymalnej pamięci serwera (MB) zbyt nisko to utracona szansa na wydajność i może spowodować zapotrzebowanie na pamięć oraz problemy z wydajnością w instancji SQL Server.
- Ustawienie maksymalnej pamięci serwera (MB) na minimalną wartość może nawet uniemożliwić uruchamianie programu SQL Server. Jeśli nie możesz uruchomić programu SQL Server po zmianie tej opcji, uruchom go przy użyciu opcji uruchamiania i zresetuj
-f
do poprzedniej wartości. Aby uzyskać więcej informacji, zapoznaj się z opcjami uruchamiania usługi silnika bazy danych . - Nie zaleca się ustawiania maksymalnej pamięci serwera (MB) i minimalnej pamięci serwera (MB) na tę samą wartość lub w pobliżu tych samych wartości.
Uwaga / Notatka
Opcja maksymalnej pamięci serwera ogranicza tylko rozmiar puli buforowej SQL Server. Opcja maksymalnej pamięci serwera nie ogranicza pozostałego niezarezerwowanego obszaru pamięci, który program SQL Server pozostawia do alokacji innych składników, takich jak rozszerzone procedury składowane, obiekty COM, nieshared biblioteki DLL i EXE.
Program SQL Server może używać pamięci dynamicznie. Można jednak ręcznie ustawić opcje pamięci i ograniczyć ilość pamięci, do której program SQL Server ma dostęp. Przed ustawieniem ilości pamięci dla SQL Server, określ odpowiednie ustawienie pamięci, odejmując od całkowitej pamięci fizycznej pamięć wymaganą dla systemu operacyjnego, alokacje pamięci niekontrolowane przez ustawienie maksymalna pamięć serwera (MB), oraz pamięć potrzebną dla innych instancji SQL Server (oraz inne zastosowania systemowe, jeśli serwer obsługuje aplikacje zużywające pamięć, w tym inne instancje SQL Server). Ta różnica jest maksymalną ilością pamięci, którą można przypisać do bieżącego wystąpienia programu SQL Server.
Pamięć można skonfigurować do limitu przestrzeni adresowej wirtualnej procesu we wszystkich wersjach programu SQL Server. Aby uzyskać więcej informacji, zobacz Limity pamięci dla wydań systemu Windows i Windows Server.
Minimalna pamięć serwera
Użyj minimalnej pamięci serwera (MB), aby zagwarantować minimalną ilość pamięci dostępnej dla Menedżera pamięci programu SQL Server.
Program SQL Server nie będzie natychmiast przydzielać ilości pamięci określonej w minimalnej pamięci serwera (MB) podczas uruchamiania. Jednak po osiągnięciu tej wartości przez użycie pamięci z powodu obciążenia klienta program SQL Server nie może zwolnić pamięci, chyba że zostanie zmniejszona wartość minimalnej pamięci serwera (MB). Jeśli na przykład kilka wystąpień programu SQL Server jest zainstalowanych współbieżnie na tym samym serwerze, rozważ ustawienie parametru minimalna pamięć serwera (MB), aby zarezerwować pamięć dla wystąpienia.
Ustawienie minimalnej wartości pamięci serwera (MB) jest kluczowe w środowisku zwirtualizowanym, aby zapewnić, że presja pamięci z hosta podstawowego nie prowadzi do cofnięcia przydziału pamięci z puli buforowej na maszynie wirtualnej gościa poza poziom potrzebny do utrzymania akceptowalnej wydajności. W idealnym przypadku wystąpienia programu SQL Server na maszynie wirtualnej nie muszą konkurować z procesami proaktywnej alokacji pamięci hosta wirtualnego.
Program SQL Server nie ma gwarancji przydzielenia ilości pamięci określonej w minimalnej pamięci serwera (MB). Jeśli obciążenie serwera nigdy nie wymaga przydzielenia ilości pamięci określonej w minimalnej pamięci serwera (MB), program SQL Server będzie używać mniej pamięci.
Maksymalna pamięć serwera
Użyj maksymalnej pamięci serwera (MB), aby zagwarantować, że system operacyjny i inne aplikacje nie mają szkodliwego użycia pamięci pochodzącej z programu SQL Server.
- Przed ustawieniem konfiguracji maksymalnej pamięci serwera (MB) należy monitorować ogólne zużycie pamięci przez serwer hostowany wystąpienie programu SQL Server podczas normalnego działania, aby określić dostępność i wymagania dotyczące pamięci. W przypadku początkowej konfiguracji lub braku możliwości zbierania użycia pamięci procesu programu SQL Server w czasie należy użyć następującego uogólnionego podejścia do najlepszych rozwiązań w celu skonfigurowania maksymalnej ilości pamięci serwera (MB) dla pojedynczego wystąpienia:
- Z całkowitej pamięci systemu operacyjnego odejmij odpowiednik potencjalnych alokacji pamięci wątku programu SQL Server poza kontrolą maksymalnej pamięci serwera (MB), czyli rozmiar stosu1 pomnożony przez obliczone maksymalne wątki robocze2.
- Następnie odejmij 25% dla innych przydziałów pamięci poza kontrolą maksymalnej pamięci serwera (MB), takich jak bufory kopii zapasowych, rozszerzone procedury składowane DLL, obiekty tworzone za pomocą procedur automatyzacji (
sp_OA
wywołań) i alokacje od dostawców serwerów połączonych. To ogólne przybliżenie, a wyniki mogą się różnić. - Pozostaje ustawienie maksymalnej pamięci serwera (MB) dla konfiguracji pojedynczego wystąpienia.
1 Zapoznaj się z przewodnikiem dotyczącym architektury zarządzania pamięcią aby uzyskać informacje na temat rozmiarów stosów wątków w zależności od architektury.
2 Aby uzyskać więcej informacji na temat obliczonych domyślnych wątków roboczych dla określonej liczby przypisanych procesorów CPU w bieżącym hoście, zobacz Konfiguracja serwera: maksymalna liczba wątków roboczych.
Ręczne ustawianie opcji
Opcje serwera minimalna pamięć serwera (MB) i maksymalna pamięć serwera (MB) można ustawić tak, aby obejmował zakres wartości pamięci. Ta metoda jest przydatna dla administratorów systemu lub bazy danych w celu skonfigurowania wystąpienia programu SQL Server z wymaganiami dotyczącymi pamięci innych aplikacji lub innych wystąpień programu SQL Server, które działają na tym samym hoście.
Korzystanie z Transact-SQL
Opcje minimalnej pamięci serwera (MB) i maksymalnej pamięci serwera (MB) to opcje zaawansowane. W przypadku używania sp_configure
procedury składowanej systemowej w celu zmiany tych ustawień można je zmienić tylko wtedy, gdy pokaż opcje zaawansowane jest ustawiona na 1. Te ustawienia zostaną zastosowane natychmiast bez ponownego uruchomienia serwera. Aby uzyskać więcej informacji, zobacz sp_configure.
W poniższym przykładzie ustawiono opcję maksymalnej pamięci serwera (MB) na 12 288 MB lub 12 GB. Mimo że sp_configure
określa nazwę opcji jako max server memory (MB)
, można pominąć (MB)
.
EXECUTE sp_configure 'show advanced options', 1;
GO
RECONFIGURE;
GO
EXECUTE sp_configure 'max server memory', 12288;
GO
RECONFIGURE;
GO
Poniższe zapytanie zwraca informacje o aktualnie skonfigurowanych wartościach i aktualnie używanej wartości. To zapytanie zwraca wyniki niezależnie od tego, czy sp_configure
opcja "pokaż opcje zaawansowane" jest włączona.
SELECT [name],
[value],
[value_in_use]
FROM sys.configurations
WHERE [name] = 'max server memory (MB)'
OR [name] = 'min server memory (MB)';
Korzystanie z programu SQL Server Management Studio
Użyj minimalnej pamięci serwera (MB) i maksymalnej pamięci serwera (MB), aby ponownie skonfigurować ilość pamięci (w megabajtach) zarządzanych przez Menedżera pamięci programu SQL Server dla wystąpienia programu SQL Server.
W Eksploratorze obiektów kliknij prawym przyciskiem myszy serwer i wybierz polecenie Właściwości.
Wybierz stronę Pamięć okna Właściwości serwera . Zostaną wyświetlone bieżące wartości minimalnej pamięci serwera i maksymalna pamięć serwera .
W obszarze Opcje pamięci serwera wprowadź żądane liczby dla opcji Minimalna pamięć serwera i Maksymalna pamięć serwera. Aby uzyskać zalecenia, zobacz minimalna pamięć serwera (MB) i maksymalna pamięć serwera (MB) w tym artykule.
Poniższy zrzut ekranu przedstawia wszystkie trzy kroki:
Blokowanie stron w pamięci (LPIM)
Aplikacje oparte na systemie Windows mogą używać interfejsów API rozszerzeń okien adresowych systemu Windows (AWE) do przydzielania i mapowania pamięci fizycznej do przestrzeni adresowej procesu. Zasady systemu Windows LPIM określają, które konta mogą uzyskiwać dostęp do interfejsu API w celu przechowywania danych w pamięci fizycznej, uniemożliwiając systemowi stronicowanie danych do pamięci wirtualnej na dysku. Pamięć przydzielona przy użyciu AWE jest zablokowana, dopóki aplikacja wyraźnie ją zwolni lub zakończy działanie. Używanie interfejsów API AWE do zarządzania pamięcią w 64-bitowym programie SQL Server jest również często nazywane zablokowanymi stronami. Blokowanie stron w pamięci może utrzymać responsywność serwera podczas stronicowania pamięci na dysk. Opcja Blokuj strony w pamięci jest włączona w wystąpieniach wersji SQL Server Standard i nowszych, gdy konto z uprawnieniami do uruchomienia sqlservr.exe
otrzymało prawa użytkownika Blokada systemu Windows (LPIM).
Aby wyłączyć opcję Blokuj strony w pamięci dla programu SQL Server, usuń prawo użytkownika Blokuj strony w pamięci dla konta uruchamiającego sqlservr.exe
(konto uruchamiania programu SQL Server).
Użycie LPIM nie ma wpływu na dynamiczne zarządzanie pamięcią programu SQL Server, co pozwala na rozszerzanie lub zmniejszanie się na żądanie innych zarządzających pamięcią. W przypadku korzystania z praw użytkownika Blokowanie stron w pamięci zdecydowanie zaleca się ustawienie górnej granicy maksymalnej pamięci serwera (MB). Aby uzyskać więcej informacji, zobacz maksymalna ilość pamięci serwera (MB).
Funkcja LPIM powinna być używana, gdy są oznaki, że sqlservr
proces jest wypychany do pamięci wirtualnej. W takim przypadku w pliku dziennika błędów zostanie zgłoszony błąd 17890 podobny do poniższego przykładu:
A significant part of sql server process memory has been paged out. This may result in a performance degradation. Duration: #### seconds. Working set (KB): ####, committed (KB): ####, memory utilization: ##%.
Użycie funkcji LPIM z niepoprawnie skonfigurowanym ustawieniem maksymalnej pamięci serwera (MB), które nie uwzględnia innych użytkowników pamięci w systemie, może spowodować niestabilność, w zależności od ilości pamięci wymaganej przez inne procesy lub wymagania dotyczące pamięci programu SQL Server poza zakresem maksymalnej pamięci serwera (MB). Aby uzyskać więcej informacji, zobacz maksymalna ilość pamięci serwera. Jeśli zostanie przyznane uprawnienie Blokuj strony w pamięci (LPIM) (w systemach 32-bitowych lub 64-bitowych), zdecydowanie zalecamy ustawienie maksymalnej pamięci serwera (MB) na określoną wartość, a nie pozostawienie wartości domyślnej 2147 483 647 megabajtów (MB).
Uwaga / Notatka
Począwszy od programu SQL Server 2012 (11.x), flaga śledzenia 845 nie jest wymagana, aby wersja Standard Edition korzystała z zablokowanych stron.
Włącz blokowanie stron w pamięci
Po uwzględnieniu poprzednich informacji, aby włączyć opcję Zablokuj strony w pamięci, udziel uprawnienia do konta usługowego dla wystąpienia programu SQL Server, zobacz Włączanie opcji Zablokuj strony w pamięci (Windows).
Aby określić konto usługi dla wystąpienia programu SQL Server, skorzystaj z Menedżera konfiguracji programu SQL Server lub wykonaj zapytanie dotyczące service_account
z sys.dm_server_services
. Aby uzyskać więcej informacji, zobacz sys.dm_server_services.
Wyświetl status blokady stron w pamięci
Aby określić, czy dla wystąpienia programu SQL Server udzielono uprawnień do blokowania stron w pamięci , użyj następującego zapytania. To zapytanie jest obsługiwane w programie SQL Server 2016 (13.x) SP1 lub nowszym.
SELECT sql_memory_model_desc FROM sys.dm_os_sys_info;
Następujące wartości sql_memory_model_desc
wskazują stan LPIM:
-
CONVENTIONAL
. Uprawnienia do blokowania stron w pamięci nie są przyznawane. -
LOCK_PAGES
. Przyznano uprawnienie do blokowania stron w pamięci. -
LARGE_PAGES
. Uprawnienia do blokowania stron w pamięci są przyznawane w trybie Enterprise z włączoną flagą śledzenia 834. Jest to zaawansowana konfiguracja i nie jest zalecana w przypadku większości środowisk. Aby uzyskać więcej informacji i ważnych zastrzeżeń, zobacz Trace Flag 834.
Użyj następujących metod, aby określić, czy wystąpienie programu SQL Server używa zablokowanych stron:
Dane wyjściowe następującego zapytania Transact-SQL wskazują wartości inne niżzerowe dla elementu
locked_page_allocations_kb
:SELECT osn.node_id, osn.memory_node_id, osn.node_state_desc, omn.locked_page_allocations_kb FROM sys.dm_os_memory_nodes AS omn INNER JOIN sys.dm_os_nodes AS osn ON (omn.memory_node_id = osn.memory_node_id) WHERE osn.node_state_desc <> 'ONLINE DAC';
Bieżący dziennik błędów programu SQL Server zgłasza komunikat
Using locked pages in the memory manager
podczas uruchamiania serwera.W sekcji Menedżera pamięci w danych wyjściowych DBCC MEMORYSTATUS jest wyświetlona wartość niezerowa dla elementu
AWE Allocated
.
Wiele wystąpień programu SQL Server
W przypadku uruchamiania wielu wystąpień aparatu bazy danych istnieją różne podejścia, których można użyć do zarządzania pamięcią:
Użyj maksymalnej pamięci serwera (MB) w każdym wystąpieniu, aby kontrolować użycie pamięci zgodnie z wcześniejszym opisem. Określ maksymalne ustawienia dla każdego wystąpienia, dbając o to, by łączny przydział nie przekraczał całkowitej ilości pamięci fizycznej na maszynie. Możesz przydzielić każdemu wystąpieniu pamięć proporcjonalną do jego oczekiwanego obciążenia lub rozmiaru bazy danych. Takie podejście ma zaletę, że po uruchomieniu nowych procesów lub wystąpień ilość wolnej pamięci będzie dostępna natychmiast. Wadą jest to, że jeśli nie uruchamiasz wszystkich wystąpień, żadne z uruchomionych wystąpień nie będzie mogło korzystać z pozostałej wolnej pamięci.
Użyj minimalnej pamięci serwera (MB) w każdym wystąpieniu, aby kontrolować użycie pamięci, zgodnie z wcześniejszym opisem. Ustanów minimalne ustawienia dla każdego wystąpienia, aby suma tych minimalnych wartości wynosi 1– 2 GB mniejsza niż łączna ilość pamięci fizycznej na maszynie. Ponownie można ustalić te minimum proporcjonalnie do oczekiwanego obciążenia tego wystąpienia. Takie podejście ma zaletę, że jeśli nie wszystkie wystąpienia są uruchomione w tym samym czasie, te, które są uruchomione, mogą korzystać z pozostałej wolnej pamięci. Takie podejście jest również przydatne w przypadku innego procesu intensywnie korzystającego z pamięci na komputerze, ponieważ zapewni to, że program SQL Server przynajmniej uzyska rozsądną ilość pamięci. Wadą jest to, że uruchomienie nowego wystąpienia (lub innego procesu) może zająć trochę czasu, aby uruchomione wystąpienia zwolniły pamięć, zwłaszcza jeśli muszą zapisywać zmodyfikowane strony z powrotem do swoich baz danych.
Użyj zarówno maksymalnej pamięci serwera (MB) i minimalnej pamięci serwera (MB) w każdym wystąpieniu, aby kontrolować użycie pamięci, obserwować i dostrajać maksymalne wykorzystanie każdego wystąpienia oraz minimalną ochronę pamięci w szerokim zakresie potencjalnych poziomów wykorzystania pamięci.
Nic nie rób (niezalecane). Pierwsze instancje obciążone zadaniem zwykle przydzielają całą dostępną pamięć. Bezczynne maszyny wirtualne lub maszyny wirtualne uruchomione później mogą działać tylko z minimalną dostępną ilością pamięci. Program SQL Server nie próbuje równoważyć użycia pamięci między wystąpieniami. Wszystkie wystąpienia będą jednak reagować na sygnały powiadomień o pamięci systemu Windows w celu dostosowania rozmiaru swojego użycia pamięci. System Windows nie zarządza równomiernie zasobami pamięci między aplikacjami przy użyciu interfejsu API powiadomień o pamięci. Zapewnia jedynie ogólne informacje zwrotne dotyczące dostępności pamięci w systemie.
Możesz zmienić te ustawienia bez ponownego uruchamiania wystąpień, aby łatwo eksperymentować, aby znaleźć najlepsze ustawienia dla wzorca użycia.
Przykłady
Odp. Ustaw opcję maksymalnej pamięci serwera na 4 GB
W poniższym przykładzie ustawiono opcję maksymalnej pamięci serwera (MB) na 4096 MB lub 4 GB. Mimo że sp_configure
określa nazwę opcji jako max server memory (MB)
, można pominąć (MB)
.
EXECUTE sp_configure 'show advanced options', 1;
GO
RECONFIGURE;
GO
EXECUTE sp_configure 'max server memory', 4096;
GO
RECONFIGURE;
GO
Spowoduje to wyświetlenie komunikatu podobnego do Configuration option 'max server memory (MB)' changed from 2147483647 to 4096. Run the RECONFIGURE statement to install.
. Nowy limit pamięci zacznie obowiązywać natychmiast po wykonaniu RECONFIGURE
. Aby uzyskać więcej informacji, zobacz sp_configure.
B. Określanie bieżącej alokacji pamięci
Poniższe zapytanie zwraca informacje o aktualnie przydzielonej pamięci.
SELECT physical_memory_in_use_kb / 1024 AS sql_physical_memory_in_use_MB,
large_page_allocations_kb / 1024 AS sql_large_page_allocations_MB,
locked_page_allocations_kb / 1024 AS sql_locked_page_allocations_MB,
virtual_address_space_reserved_kb / 1024 AS sql_VAS_reserved_MB,
virtual_address_space_committed_kb / 1024 AS sql_VAS_committed_MB,
virtual_address_space_available_kb / 1024 AS sql_VAS_available_MB,
page_fault_count AS sql_page_fault_count,
memory_utilization_percentage AS sql_memory_utilization_percentage,
process_physical_memory_low AS sql_process_physical_memory_low,
process_virtual_memory_low AS sql_process_virtual_memory_low
FROM sys.dm_os_process_memory;
C. Wyświetlanie wartości max server memory (MB)
Poniższe zapytanie zwraca informacje o aktualnie skonfigurowanej wartości i używanej wartości. To zapytanie zwraca wyniki niezależnie od tego, czy sp_configure
opcja "pokaż opcje zaawansowane" jest włączona.
SELECT [value], [value_in_use]
FROM sys.configurations
WHERE [name] = 'max server memory (MB)';
Treści powiązane
- przewodnik po architekturze zarządzania pamięcią
- Monitorowanie i dostrajanie pod kątem wydajności
- KONFIGURUJ PONOWNIE (Transact-SQL)
- opcje konfiguracji serwera
- sp_configure (Transact-SQL)
- Opcje uruchamiania usługi silnika bazy danych
- Limity pamięci dla wersji systemu Windows i Windows Server