SQL Server Max Pamięć nie ogranicza użycia pamięci RAM

18

Chciałbym uzyskać twój wkład w tej sprawie. Mam serwer SQL Server 2008r2 Ent. Ed. 64-bitowy z 16 rdzeniami i 64 GB pamięci RAM. Istnieje jedna instancja całkowicie poprawionego serwera SQL na 20111014.

Maksymalny RAM jest ustawiony na 60000 MB. Ilość darmowego RAMu wynosi 0 według menedżera zadań po kilku dniach online.

Jeśli zmienię maksymalny RAM na poniżej 53 GB, po kilku dniach ustabilizuje się i otrzymam trochę wolnego RAM.

Jest to proces SQL, który alokuje pamięci RAM zgodnie z menedżerem zadań. Jak pogodzić się z tym, na czym tak naprawdę polega problem? Jest rzeczą oczywistą, że przeprowadziłem już wiele testów, ale jeszcze nie rozwiązałem tego według własnych upodobań. i och, nie dostajemy typowego głodu pamięci, gdy dostępny taran spada do 0 za darmo.

Aktualizacja 1:

Zainspirowany innym pytaniem dotyczącym pamięci RAM na tej stronie /dba//a/7062/2744 . Użyłem tych dwóch, aby zobaczyć, do czego używana jest pamięć RAM.

SELECT TOP ( 10 )
        [type] AS [Memory Clerk Type] ,
        SUM(single_pages_kb) AS [SPA Mem, Kb]
FROM    sys.dm_os_memory_clerks
GROUP BY [type]
ORDER BY SUM(single_pages_kb) DESC
OPTION  ( RECOMPILE ) ;

SELECT  DB_NAME(database_id) AS [Database Name] ,
        COUNT(*) * 8 / 1024.0 AS [Cached Size (MB)]
FROM    sys.dm_os_buffer_descriptors
--WHERE   database_id > 4 -- system databases
--        AND database_id <> 32767 -- ResourceDB
GROUP BY DB_NAME(database_id)
ORDER BY [Cached Size (MB)] DESC
OPTION  ( RECOMPILE ) ;

Pokazane przez nich kwoty to najpierw wybierz 7948432 Kb drugi 44030 57812 MB, czyli w sumie około 52 GB używane przez serwer sql ... więc gdzie poszła reszta mojej pamięci RAM? :-) Menedżer zadań pokazuje teraz buforowane 363, dostępne 401, wolne 40 i sqlservr.exe ma prywatny zestaw pamięci 64 459 656. Max Ram ustawiony na 60000 MB jak poprzednio.

Martin Sjöberg
źródło

Odpowiedzi:

20

Ustawienie maksymalnej pamięci serwerów SQL określa limity wykorzystania tylko puli buforów. Będą różne, ale znaczące przydziały wymagane powyżej tego limitu.

Jonathan Kehayias , Christian Bolton i John Samson mają posty na poziomie 300/400 na ten temat. Brent Ozar ma łatwiejszy do przeczytania artykuł, który może być lepszym miejscem do rozpoczęcia.

Powiązane również: SQL Server 2008 R2 „Ghost Memory”

Mark Storey-Smith
źródło
tak, zgadzam się, że ogranicza tylko pulę buforów. Dziękuję za zakładki, które zaglądam do nich.
Martin Sjöberg
Czytam o tych linkach i są tam pewne dobre rzeczy def. Zaktualizuję moje pytanie o to, co się dowiem. Czuję też relikację, że mam gotowy numer Max Pizzeria… Ciekawe, czy to dostawa domowa?
Martin Sjöberg
16

Jak wspomniano, pula buforów i pamięć podręczna procedur dotyczą jedynych rzeczy kontrolowanych przez maksymalną pamięć serwera. Istnieje wiele innych rzeczy w SQL Server, które mogą zużywać pamięć poza tym limitem. Obejmują one (ale nie wyłącznie):

  • Poczta bazy danych
  • SQLCLR
  • Rozszerzone procedury składowane
  • Pliki binarne
  • Poczta SQL
  • SSIS
  • SSAS
  • SSRS
mrdenny
źródło
Z wyżej wymienionych używamy plików binarnych ofc i ssis na tym serwerze.
Martin Sjöberg
1
Jakie inne oprogramowanie jest zainstalowane na serwerze? I mam na myśli wszystko. Sterowniki MPIO, sterowniki napędu flash, oprogramowanie do tworzenia kopii zapasowych, oprogramowanie antywirusowe, wewnętrzne
systemy
Serwer jest całkiem czysty i nowo zainstalowany, ale często go mamy. Spróbuję zebrać pełną listę pod koniec tego tygodnia. Krótko i z mojej pamięci ... mamy iodrive (dell), mcafee, processexplorer na pulpicie, iometr, rozmiar drzewa ...
Martin Sjöberg
1
Sterownik FusionIO potrzebuje dużo pamięci do pracy. To prawdopodobnie zajmuje dużo.
mrdenny,
Czy można to udowodnić? Lub skonfigurować go tak, aby zużywał mniej pamięci RAM? Sofar wydaje się, że zwalnia pamięć RAM, kiedy jest to konieczne i nie zauważyłem żadnych wad, ale po prostu musimy zwiększyć liczbę pakietów ssis Jestem zaniepokojony tym, co może się stać z użyciem pamięci RAM.
Martin Sjöberg,
2

http://msdn.microsoft.com/en-us/library/ms178067.aspx

Aby zmniejszyć maksymalną pamięć serwera, konieczne może być ponowne uruchomienie programu SQL Server w celu zwolnienia pamięci.

Rozumiem, że jeśli strona w puli buforów nie została zapisana na dysku, nie zostanie zwolniona, dopóki nie zostanie zapisana.

Czy obniżenie ustawienia maksymalnej pamięci powoduje, że SQL Server wypłukuje brudne strony?

Mógł monitorować menedżera buforów w perfmon, aby to sprawdzić. Perfmon -> SQLServer: Menedżer buforów: Strony bazy danych

Craig Efrein
źródło
Może być konieczne ponowne uruchomienie programu SQL Server. Nie zawsze jest to wymagane. Czy znasz warunki, w których ponowne uruchomienie jest wymagane lub nie jest wymagane do zwolnienia pamięci?
Nick Chammas
Chciałbym edytować te szczegóły w twojej istniejącej odpowiedzi i usunąć tę. Być może mrdenny może odpowiedzieć na twoje pytanie dotyczące opróżniania brudnych stron.
Nick Chammas,
1
Prawidłowo, SQL nie może zwolnić strony pamięci, gdy jest brudna (została napisana). Za każdym razem, gdy system sprawdza, brudne strony są zapisywane na dysku. Nie wierzę, że zmiana maksymalnej pamięci serwera powoduje punkt kontrolny.
mrdenny
1
Ponowne uruchomienie instancji w celu zmiany ustawień pamięci może być dużym błędem. Zmiana ustawień pamięci nie powoduje CHECKPOINToperacji na bazach danych, ale opróżnia pamięć podręczną procedur. Jeśli zrestartujesz instancję tylko w celu zmiany ustawień pamięci, pamięć podręczna procedur będzie nie tylko zimna, ale pamięć podręczna danych również będzie zimna. Jeśli nie można zmniejszyć maksymalnej pamięci z powodu brudnych stron w pamięci, uruchom CHECKPOINTpolecenie w bazach danych, aby opróżnić brudne strony na dysk, a następnie zmień ustawienie pamięci w godzinach poza szczytem bez ponownego uruchamiania instancji.
Jon Seigel