Jak zwolnić pamięć SQL Server?

9

Mam instalację piaskownicy programu SQL Server na moim komputerze lokalnym. Ustawiłem pamięć wystąpienia SQL Server wystąpienie do 1000 mb. Podczas intensywnej operacji zużycie pamięci wzrasta do 1000 mb. Po zakończeniu operacji SQL Server nadal utrzymuje pamięć. Jak zwolnić tę rezerwację pamięci?

jrara
źródło
2
Jakie są twoje min server memoryi max server memory ustawienia ? Gdy SQL Server zarezerwuje określone minimum, nigdy go nie zwolni, chyba że zmienisz ustawienie lub odrzucisz instancję. Jak zauważył James, jeśli rezerwy przekraczają określone przez ciebie minimum, teoretycznie powinny one zostać zwolnione, gdy nie będą potrzebne i na maszynie będzie presja pamięci.
Nick Chammas
@Nick: min pamięć serwera: 0 (MB); maksymalna pamięć serwera: 600 (MB).
jrara,

Odpowiedzi:

13

Zatrzymaj / uruchom usługę, nic więcej nie zwolni pamięci z powrotem do systemu operacyjnego.

Oczywiście nie jest to coś, co kiedykolwiek chciałbyś zrobić z działającym serwerem, ale całkowicie uzasadnione dla lokalnego piaskownicy. Z 3 różnymi instancjami na moim laptopie, jest to jedyny realny sposób.

Edytuj następujący komentarz @ Nicka.

Jak zauważył James, jeśli rezerwy przekraczają określone przez ciebie minimum, teoretycznie powinny one zostać zwolnione, gdy nie będą potrzebne i na maszynie będzie presja pamięci.

Jaka jest twoja definicja „nie potrzebuje tego”? Gdy pula buforów zostanie zapełniona, strony nie zostaną usunięte, dopóki nie zostaną zniechęcone przez inne strony. Jeśli chcesz natychmiast przywrócić pamięć, tak jak w przypadku @jrara, musisz przestać /początek.

Mark Storey-Smith
źródło
2
Na Microsoft : „W systemie Windows Server 2003 SQL Server używa interfejsu API powiadomień o pamięci, QueryMemoryResourceNotificationaby ustalić, kiedy pula buforów może przydzielić pamięć i zwolnić pamięć”. Jeśli więc martwisz się głodowaniem innych aplikacji, które mogą potrzebować więcej pamięci, SQL Server teoretycznie zwolni pamięć, której nie potrzebuje, gdy system Windows tak nakazuje. Jedynym powodem, dla którego należy wymusić zwolnienie poprzez ponowne uruchomienie instancji, jest to, że ten mechanizm nie działa zgodnie z przeznaczeniem lub ustawienia pamięci min / maks są nieprawidłowe.
Nick Chammas,
Kolejny przydatny artykuł msdn do wyjaśnienia na temat tego msdn.microsoft.com/en-us/library/ms178145.aspx . Dopóki SQL Server osiągnie swoje minimalne ustawienie pamięci serwera, zwalnia pamięć w odpowiedzi na powiadomienia o niskim poziomie pamięci z systemu operacyjnego. Z mojego doświadczenia wynika, że ​​to musi być ekstremalne.
georgeb,
Dokładnie @georgeb_dba, nie podda się łatwo. Ergo, zatrzymaj / uruchom i natychmiast odzyskaj ograniczoną pamięć laptopów.
Mark Storey-Smith
4
DBCC FREESYSTEMCACHE ('ALL') 
DBCC FREESESSIONCACHE
DBCC FREEPROCCACHE 

uwolni basen.

https://msdn.microsoft.com/en-us/library/ms178529.aspx

Uwagi

Wykonanie DBCC FREESYSTEMCACHE czyści pamięć podręczną planu dla instancji SQL Server. Wyczyszczenie pamięci podręcznej planu powoduje rekompilację wszystkich kolejnych planów wykonania i może spowodować nagły, tymczasowy spadek wydajności zapytania. Dla każdego wyczyszczonego magazynu pamięci podręcznej w pamięci podręcznej planu dziennik błędów programu SQL Server będzie zawierał następujący komunikat informacyjny: „Program SQL Server napotkał% d wystąpienia pamięci podręcznej pamięci podręcznej dla pamięci podręcznej„% s ”(część pamięci podręcznej planu) z powodu Operacje „DBCC FREEPROCCACHE” lub „DBCC FREESYSTEMCACHE”. ” Ta wiadomość jest rejestrowana co pięć minut, o ile pamięć podręczna jest opróżniana w tym przedziale czasu.

Daniel Decasse
źródło
1
całkiem pewne, że tak naprawdę nie zmniejszy to ilości pamięci zarezerwowanej przez SQL na poziomie systemu operacyjnego
Greg
3

Porzuci pamięć, której nie używa automatycznie, ponieważ inne aplikacje próbują ją zatwierdzić.

JamesRyan
źródło