Zalecany rozmiar pliku strony dla SQL 2008R2 w Windows 2008R2

25

W tym artykule Microsoft - jak określić odpowiedni rozmiar pliku strony dla 64-bitowych wersji systemu Windows Server 2008 i Windows 2008 R2 podano wskazówki dotyczące obliczania rozmiaru pliku strony dla 64-bitowego systemu Windows 2008 i Windows 2008R2. To bez wątpienia działa dobrze w przypadku serwerów ogólnego przeznaczenia. Zastanawiam się, jakie są wytyczne dla SQL Server 2008R2 działającego na 64-bitowym systemie Windows 2008 / R2?

Zakładam, że chcemy, aby tak mało danych w pamięci trafiało do pliku strony, w przeciwnym razie SQL mógłby uderzyć dwukrotnie w dysk w celu uzyskania danych. Czy SQL Server pozwala nawet na trafienie danych w pamięci do pliku strony? Przeszukiwałem SQL Server 2008 R2 Books Online w celu uzyskania wskazówek, ale nie znalazłem jeszcze żadnej wzmianki o używaniu plików stronicowania.

Oto potencjalny scenariusz użycia: Biorąc pod uwagę fizyczny serwer z 64 GB pamięci RAM, czy plik stronicowania jest niezbędny dla całego 64 GB pamięci RAM? Czy powinniśmy przygotować go na 96 GB pliku strony? To wydaje się nieco przesadne w przypadku pojedynczego pliku. Wiem, że konwencjonalna mądrość głosi, że system Windows łączy plik stronicowania z pamięcią, aby ułatwić wymianę aplikacji na pamięci RAM, ale czy to prawda? Czy plik stronicowania o pojemności mniejszej niż 64 GB utrudni tutaj wydajność?

Kev
źródło

Odpowiedzi:

15

Nie ma specjalnych ustawień dla SQL Server, który normalnie używa pamięci fizycznej

Po prostu zrób to, co mówią MS dla Windows i to wszystko

Aha, i tak i tak kup więcej pamięci RAM, a my będziemy tematem ...

gbn
źródło
6

Zajrzyj do lock pages in memory. W ten sposób można preferować, aby konto usługi SQL używało dostępnej pamięci RAM zamiast stronicowania na dysk. Aby przeczytać więcej na temat blokowania stron w pamięci, sprawdź ten link . Fragment kodu wygląda następująco:

Opcja Zablokuj strony w pamięci zasad systemu Windows jest domyślnie wyłączona. To uprawnienie musi być włączone, aby skonfigurować rozszerzenia okna (AWE). Ta zasada określa, które konta mogą wykorzystywać proces do przechowywania danych w pamięci fizycznej, zapobiegając stronicowaniu danych do pamięci wirtualnej na dysku przez system. W 32-bitowych systemach operacyjnych ustawienie tego uprawnienia, gdy AWE nie jest używane, może znacznie obniżyć wydajność systemu. Blokowanie stron w pamięci nie jest wymagane w 64-bitowych systemach operacyjnych.

Proszę przetestować tę funkcję przed użyciem w swoich systemach.

StanleyJohns
źródło
4
„Zablokuj strony w pamięci” można by lepiej opisać jako zabezpieczenie, aby system stronicował pamięć SQL. support.microsoft.com/kb/918483
Mark Storey-Smith
4

Tak, w przypadku 64 GB pamięci RAM potrzebujesz co najmniej 64 GB pliku wymiany (zalecane 96 GB). Nie z powodu potencjalnej zamiany, ale z powodu projektu Menedżera pamięci systemu Windows. O tym problemie pisałem już wcześniej w rozmiarze pliku stronicowania systemu na komputerach z dużą pamięcią RAM :

Gdy proces prosi o MEM_COMMITpamięć przez VirtualAlloc/ VirtualAllocEx, żądany rozmiar musi być zarezerwowany w pliku stronicowania. Było to prawdą w pierwszym systemie Win NT i nadal jest prawdą dzisiaj, patrz Zarządzanie pamięcią wirtualną w Win32 :

Po zatwierdzeniu pamięci fizyczne strony pamięci są przydzielane, a miejsce jest rezerwowane w pliku stronicowania.

Alternatywą byłoby coś w rodzaju oom_killer .

Postępuj zgodnie z zaleceniami, czasami rzeczy są nieco bardziej złożone niż się wydaje. I nawet nie dotknąłem komplikacji spowodowanych przez AWE i przywileju blokowania stron ...

Remus Rusanu
źródło
Bardzo interesujące ... Jak to działa, kiedy ustawisz plik wymiany mniejszy niż pamięć RAM w komputerze? Jeśli rzeczywiście musimy zarezerwować miejsce w pliku stronicowania dla każdej alokacji pamięci, czy nie bylibyśmy w stanie użyć więcej niż wielkość pamięci pliku strony? Nie jestem pewien, jak to działa w praktyce.
shlomoid
1
Dokładnie tak to działa w praktyce. Wybrany region VA musi być poparty prawdziwą rezerwacją wymiany. Zastrzeżone regionu VA nie musi być, ale SQL Server praktycznie nigdy nie żąda Niezaangażowane rezerwacje.
Remus Rusanu,
2
Nie sądzę, żeby to było poprawne. Rozumiem z różnych źródeł, takich jak książki Windows Wewnętrzne, że wirtualna przestrzeń adresowa musi być poparta czymś fizycznym , plikiem stronicowania lub pamięcią RAM. Jeśli więc spróbujesz zatwierdzić pamięć wirtualną> ([Pamięć fizyczna, którą widzi Windows] + [Rozmiar pliku stronicowania]), otrzymasz niesławny komunikat o błędzie „W systemie brakuje pamięci wirtualnej”. Mark Russinovich mówi o tym w sekcji zatytułowanej „pamięć zaangażowana” tutaj .
James L
5
Myślę, że możesz potwierdzić sobie, że zatwierdzone regiony VA nie muszą być wspierane przez rezerwację wymiany, po prostu uruchamiając system bez pliku stronicowania i potwierdzając, że system Windows się uruchamia, a zatem musi być więcej niż 0 bajtów zatwierdzonego VAS.
James L
Ten post jest nieprawidłowy - jest całkowicie możliwe uruchomienie bez pliku strony, jeśli masz więcej pamięci niż wymagania dotyczące maksymalnego zatwierdzenia. Oznacza to jednak, że nie możesz pisać zrzutów awaryjnych.
Steve365,