Pamięć programu SQL Server
Chodzi o pamięć SQL Server. Gdy serwerowi kończy się pamięć, zalecamy dodanie dodatkowej pamięci do sprzętu, aby rozwiązać problemy z wykorzystaniem procesora.
Ale przed przystąpieniem do modernizacji pamięci, w ramach rozwiązywania problemów, w jaki sposób możemy sprawdzić / obliczyć ilość pamięci SQL, która jest obecnie używana w instancji.
Na przykład:
NAZWA SERWERA: XXXXXXXXXXXXX
Zainstalowana pamięć fizyczna (RAM): 64,0 GB
Aktualnie przydzielona pamięć programu SQL Server: 58982 MB -> 58,982 GB
W tym przypadku mamy tylko jedną instancję (MSSQLSERVER) na serwerze i 80% pamięci zostało przydzielone instancji zgodnie ze standardem. A 20% jest przydzielane do aplikacji i systemu operacyjnego.
Kiedy sprawdzamy Monitor zasobów, będzie on wyświetlany jako wypełniony w 80%, ponieważ ustawiliśmy na to pamięć SQL Server.
Ale nie oznacza to, że 80% SQL jest całkowicie wykorzystane, ponieważ SQL zachowa trochę miejsca w buforze na zapleczu. Kiedy surfowałem, otrzymałem poniższą formułę do obliczenia pamięci SQL używanej w instancji, ale te parametry zostały usunięte z narzędzia do monitorowania wydajności dawno temu.
Czy istnieje sposób, aby sprawdzić, ile obecnie używa SQL z 80% (LUB) dla jakich metryk możemy kontynuować aktualizację pamięci.
WZÓR OBLICZANIA PAMIĘCI SQL: (Poniższe parametry zostały usunięte z Monitora wydajności)
*Database Usage(GB) = (Totalpages-Freepages-Stolenpages)8/1024=MB/1024=GB
Odpowiedzi
jak sprawdzić / obliczyć pamięć SQL, która jest aktualnie używana w instancji.
To całkiem proste. Masz DMV sys.dm_os_process_memory , który dostarczy ci informacji. To da ci physical memory useditotal memory used (RAM+Page file)
select (physical_memory_in_use_kb/1024) as Phy_Mem_used_MB, (virtual_address_space_committed_kb/1024) as Total_mem_Used_MB
from sys.dm_os_process_memory
Ale nie oznacza to, że 80% SQL jest całkowicie wykorzystane, ponieważ SQL zachowa trochę miejsca w buforze na zapleczu
Gdy SQL Server osiągnie maksymalną wartość pamięci serwera, zachowa tę pamięć, chyba że powiadomienie o małej ilości pamięci zażąda zwolnienia pamięci. Więc tak, może nie używać tego wszystkiego, ale nadal będzie to trzymać. Nazywa się to buforowaniem, ponieważ pomaga to uniknąć twardych błędów stron.
Czy istnieje sposób, aby sprawdzić, ile obecnie używa SQL z 80% (LUB) dla jakich metryk możemy kontynuować aktualizację pamięci.
Jak już powiedziałem, pokaże całą pamięć jako wykorzystaną, nawet jeśli nie potrzebuje tych stron w przetwarzaniu zapytań. Gdy nadejdzie nowe żądanie, te strony zostaną przeniesione, aby zrobić miejsce na nowe strony.
Jak definiujesz „używane”? Czy strona, która została wczytana do pamięci podręcznej sekundę temu, zostanie policzona jako wykorzystana? Minutę temu? Godzina? Tydzień?
Chodzi o to, że nie ma czegoś takiego jak „zużyte”. Serwer SQL przechowuje strony (i inne rzeczy) w pamięci. Kiedy występuje presja pamięci (wewnętrzna lub zewnętrzna), tradycyjny mechanizm starzenia pamięci podręcznej (w zasadzie) jest używany do usuwania rzeczy, które są ostatnio używane. Oczywiście jest o wiele więcej szczegółów dotyczących obsługi pamięci (cache), ale w zasadzie jest obsługiwany jak każdy mechanizm buforowania.
Tak więc pojęcia takie jak „wykorzystane” lub optymalna konfiguracja po prostu nie istnieją. Oczywiście możesz zobaczyć, czy jest dużo pamięci, która nie jest w ogóle używana przez serwer SQL. Ale kiedy serwer SQL przydzieli pamięć, zawiesza się na niej, chyba że występuje presja pamięci. Kto wie, może ktoś będzie potrzebował tej strony w następnej sekundzie?
Możesz zmniejszyć maksymalną ilość pamięci serwera i zobaczyć, na przykład, kiedy wydajność zacznie spadać.
Użyj MemoryManagerInfoprocedury składowanej, którą można znaleźć tutaj:
https://github.com/aleksey-vitsko/Database-Administrator-Tools
Zapewnia ładny opis tego, jak SQL Server obecnie wykorzystuje pamięć:
Zobacz przykład na poniższym obrazku - oto, co obecnie zużywa mój serwer:
Z grubsza, Total Server Memory= Database Cache Memory+ Free Memory+ Stolen Server Memory(skradziona pamięć serwera obejmuje pamięć podręczną planu, zamki itp.)