Wiem, że SQL lubi pamięć RAM, ale zwalnia ją, gdy Windows pyta. Wiem, że tak powinien działać SQL. Ale mam administratora systemu Windows, który nie jest przekonany, że SQL faktycznie zwróci pamięć RAM, a na tym konkretnym (wirtualnym) serwerze SQL nie potrzebuje wiele po zakończeniu usług Analysis Services, ale na tym serwerze nie ma nic, co by przeszkadzało zapytaj SQL za dużo.
Próbuję więc uspokoić administratorów systemu Windows, że problemy ze środowiskiem wirtualnym nie polegają na tym, że „SQL używa zbyt dużo pamięci RAM”, ale nie wydaje mi się, aby przekonać SQL do zwolnienia go bez ponownego uruchomienia usługi.
Podczas przetwarzania kostek usługa SQL szczęśliwie zajmuje 8 GB pamięci RAM, ale ponieważ nie ma na nią presji, nie uwalnia jej dużo w ciągu normalnego dnia. Faceci z Windows krzyczą i byłoby znacznie przyjemniej, gdyby SQL to wydał.
Nie chcę używać ustawienia maksymalnej pamięci, ponieważ tak naprawdę chcę, aby SQL zużywał tyle pamięci RAM podczas przetwarzania. Chcę tylko, żeby potem znów się obniżyło.
Jest to potencjalnie duplikat zarówno programu SQL Server, który nie zwalnia pamięci, ani odzyskuje pamięć z programu SQL Server , ale zastanawiam się, czy istnieje inna odpowiedź. Oczekiwanie na odzyskanie systemu Windows nie przekonuje tutaj facetów z Windows. Ponowne uruchomienie usługi jest opcją, ale tak naprawdę nie jestem fanem tego pomysłu.
Chcę wiedzieć, jak zmusić system Windows do żądania zwrotu ...
źródło
sp_configure
jest ogólnie rzeczą, którą powinieneś ustawić raz i zostawić w spokoju.Odpowiedzi:
Uważam, że jedyną opcją jest ponowne uruchomienie usługi SQL lub uruchomienie aplikacji, która zużywa dużo pamięci, aby zmusić SQL do jej zwolnienia.
Podoba mi się sugestia @Nick Kavadias: monitoruj licznik wydajności Pamięć: Błędy stron / s, aby pokazać, że SQL nie naruszył pamięci systemu operacyjnego.
źródło
Jednym ze sposobów, aby pokazać im, że to zrobi, jest sprawienie, by SQL Server sprawdził całą pamięć. Następnie skopiuj ogromny plik przez sieć (duże pliki SQL Backup świetnie nadają się do tego). Spowoduje to zapełnienie pamięci podręcznej systemu, a system Windows zacznie pytać SQL o pamięć. SQL zacznie zwracać pamięć z powrotem do systemu operacyjnego, dopóki nie osiągnie minimalnego ustawienia pamięci.
(Niestety nie dostałem całego pytania za pośrednictwem Twittera, najwyraźniej potrzeba było ponad 140 znaków).
źródło
Wspominasz o „kostkach”, więc nie jest jasne, czy mówisz o silniku AS, czy silniku relacyjnym. Silnik relacyjny może zwolnić pamięć na żądanie:
Gdzie „nazwa pamięci podręcznej” jest pobierana z sys.dm_os_memory_clerks . Specyfikacja DBCC FREESYSTEMCACHE wspomina tylko o pulach zarządzających, ale w rzeczywistości można eksmitować wiele innych pamięci podręcznych.
Ale jeśli cała pamięć zostanie wykorzystana przez pulę buforów, wówczas usunięcie całej puli buforów spowoduje ogromny spadek wydajności i ogromne obciążenie IO. Lepiej pozwól SQL sam sobie z tym poradzić.
źródło
Zarówno w silnikach AS, jak i DS można nałożyć ograniczenie na pamięć, aby pozostały poniżej bezpiecznego progu; jest to zalecane na 64-bitowych komputerach z dużą ilością pamięci RAM i / lub wieloma wystąpieniami SQL. Przynajmniej dla silnika bazy danych, jeśli zmienisz limit pamięci na niższy niż bieżące użycie, zmniejszy on ilość pamięci w locie bez konieczności restartowania usługi, ale nie jestem pewien co do SSAS.
źródło
Najłatwiejszy do znalezienia jest przejście do właściwości pamięci serwera, wprowadzenie mniejszej wartości, zastosowanie, odczekanie kilku minut i dostosowanie kopii zapasowej konfiguracji.
Odkryliśmy również, że użycie pamięci przez dławiące serwery SQL może faktycznie poprawić wydajność serwera, ponieważ daje Windows więcej pamięci RAM do buforowania itp.
źródło