Mamy dedykowaną maszynę SQL Server 2008 R2, w której występują dziwne problemy z pamięcią. Sam maszyna ma wiele zasobów, w tym dwa czterordzeniowe procesory, 16 GB pamięci RAM i 64-bitowy Windows Server 2008 R2 Enterprise (jest to Dell PowerEdge 2950) .
Dziwny problem polega na tym, że system zgłasza 82% używanej pamięci, ale sqlservr.exe zgłasza tylko 155 MB w użyciu. Powodem, dla którego podejrzewam, że jest to problem z serwerem SQL, jest to, że jeśli zrestartuję proces sqlservr.exe, zużycie pamięci powróci do normy na pewien czas.
Czy ktoś ma jakieś pomysły na to, jak mogę rozpocząć śledzenie tego problemu?
Dzięki, Jason
sql-server-2008-r2
memory
process
maszyna do pisania
źródło
źródło
Odpowiedzi:
Nie uzyskasz prawdziwego obrazu wykorzystania pamięci od Menedżera zadań, jeśli konto, pod którym działa usługa, ma uprawnienia do blokowania stron (edycja: zgodnie z komentarzem / linkiem Marka Rasmussena). Aby określić, ile pamięci jest używane, możesz spojrzeć na:
Nie mogę sobie przypomnieć, czy istnieje DMV lub kombinacja, która da ci całkowity przydział pamięci, ale poniższe pokażą większość.
Drugi jest zwykle najciekawszym, alokacja puli buforów według bazy danych. W tym miejscu zostanie wykorzystany udział lwów i przydatne może być zrozumienie, które z twoich baz danych są największymi konsumentami.
źródło
Jest ostatni artykuł z naszego własnego Brenta Ozara, który zajmuje się tą sprawą, gdy Menedżer zadań nie pokazuje poprawnie pamięci zajętej przez SQLServer i jego dodatkowe usługi. Można go znaleźć tutaj: Przewodnik Sysadmin po pamięci Microsoft SQL Server .
Cytat: „ Dlaczego SQLServer.exe nie używa dużej ilości pamięci?
Kiedy zdalny pulpit na serwer i patrzysz na Menedżera zadań, użycie Mem w sqlservr.exe zawsze wydaje się zwariowane. To nie wina SQL Servera. Menedżer zadań to brudny, brudny kłamca. (Wiem, wygląda na to, że facet SQL przerzuca winę, ale trzymaj się mnie przez chwilę.) W 64-bitowych urządzeniach liczba ta jest nieco dokładniejsza, ale w 32-bitowych urządzeniach jest to po prostu zupełnie nie na bazie . Aby naprawdę uzyskać dokładny obraz ilości pamięci używanej przez SQL Server, potrzebujesz narzędzia takiego jak Process Explorer i musisz zidentyfikować wszystkie procesy SQL Server. Na serwerze, który pokazałem po prawej stronie, są dwie instancje SQL Server (pokazane przez sqlservr.exe), a także narzędzia SQL Agent, SQL Browser i SQL Server do tworzenia kopii zapasowych. Nie jest niczym niezwykłym, że SQL Server Analysis Services, Integration Services i Reporting Services również działają na tym samym serwerze - z których wszystkie zużywają pamięć.
Ile pamięci używa SQL? Ułatwię ci to. SQL Server zużywa całą pamięć. Kropka."
Radzę więc wypróbować zapytanie Marka i użyć lepszego narzędzia do raportowania pamięci. Lub po prostu zaufaj Perfmonowi, który zgłosi pamięć, a nie Menedżer zadań.
źródło
Ilość pamięci używanej przez SQL, jak pokazano w menedżerze zadań, będzie w większości ustawieniem maksymalnej pamięci. Oto jak działa ustawienie min./maks .:
Po uruchomieniu serwer SQL zaczyna pobierać pamięć do ustawienia minimalnej pamięci. W miarę wzrostu potrzebnego SQL, SQL zacznie zużywać więcej pamięci aż do ustawienia maksymalnej pamięci. Pamięć pozostaje wtedy w tym (maksymalnym) punkcie, nawet gdy zmniejsza się użycie SQL. To sprawia wrażenie, że SQL wykonuje ogromne zadania i zużywa tak dużo pamięci. W rzeczywistości pamięć ta jest zarezerwowana przez SQL.
Gdy na serwerze występuje presja pamięci inna niż SQL, SQL zwolni pamięć do punktu ustawienia minimalnej pamięci. W ten sposób wykorzystywane są ustawienia pamięci. Możesz użyć skryptów Marka, aby zobaczyć, jak SQL używa tej pamięci.
źródło