Ile pamięci należy zarezerwować na dedykowanym serwerze bazy danych dla systemu operacyjnego?

38

Zakładając, że masz dedykowany serwer do obsługi funkcji bazy danych - ile pamięci należy zarezerwować dla systemu operacyjnego?

Zdaję sobie sprawę, że prawdopodobnie będzie się to nieco różnić w zależności od konkretnego systemu operacyjnego, konkretnego oprogramowania bazy danych i tak dalej. Ponieważ jednak pamięć jest tak ważna dla wydajności bazy danych, chcę, aby baza danych miała maksymalny rozsądny poziom pamięci, bez głodzenia systemu operacyjnego hosta.

Więc

  • co jest dobrą ogólną zasadą na początek?
  • na jakie liczniki lub wskaźniki wydajności powinniśmy spojrzeć, aby stwierdzić, czy posunęliśmy się za daleko i czy baza danych w jakiś sposób głoduje system operacyjny?
Jeff Atwood
źródło
czy kiedykolwiek poprawiliście te ustawienia? Co powiedział ci profilowanie?
jcolebrand
@jcole nic do dodania w tej chwili; zwykle rezerwujemy 4 - 6 GB na system operacyjny, który jest nieco bardziej konserwatywny niż chciałbym
Jeff Atwood

Odpowiedzi:

30

Zakładając Windows i SQL Server ...

Istnieją dwie szkoły myślenia.

  1. Pozostaw 2-4 Gigs dla Windows (w zależności od tego, co jest zainstalowane oprócz SQL Server).
  2. Pozostaw 10% dostępnej pamięci wolnej. Gdy zdobędziesz ponad 64 koncertów, stanie się to szaloną dużą ilością pamięci do pozostawienia dla systemu operacyjnego, której prawdopodobnie nie będzie potrzebować.

Osobiście jestem w pierwszej grupie. Windows zwykle potrzebuje tylko 2-4 koncertów, czasem nawet do 6.

mrdenny
źródło
2
Skonfiguruj 2 GB pamięci RAM dla systemu operacyjnego.
jcolebrand
Również się zgadzam. Zwykle zostawiam 2 GB dla systemu operacyjnego i zapewniam ciągłe miejsce na stronie. Oczywiście przebieg może się różnić, a najlepszym rozwiązaniem jest skonfigurowanie ustawienia, monitorowanie wydajności i wprowadzanie ostrożnych zmian w razie potrzeby.
Matt M.
2
@matt prawda, ale co konkretnie najlepiej monitorować, patrząc na „czy głoduję system operacyjny z pamięci?”
Jeff Atwood
1
@Jeff Mój komentarz nie był tak precyzyjny, jak powinien. Jeśli chodzi o pamięć, zwykle patrzę na następujące liczniki wydajności: Pamięć: Strony / sek. I Pamięć: Dostępne bajty. Sprawdź te strony, aby uzyskać więcej informacji: sql-server-performance.com/articles/audit/… i technet.microsoft.com/en-us/library/cc966540.aspx (konkretnie sekcja wąskich gardeł w pamięci)
Matt M
6
Odpowiedź @Jeff Denny jest prawidłowa, a dla liczników Perfmon obejrzyj Pamięć: dostępne bajty. Jeśli spadnie poniżej, powiedzmy, 512 MB, grozi ci głodzenie systemu operacyjnego. Należy jednak pamiętać o pamięci podręcznej plików w systemach 64-bitowych, która nadal pojawia się jako dostępna, nawet jeśli nie jest: blogs.msdn.com/b/ntdebugging/archive/2007/11/27/…
Brent
16

Zakładając, że Linux, jeśli wyłączysz swap, a jądro nadal zabija proces DB, ponieważ brakuje pamięci, jest to dobry wskaźnik głodu pamięci dla systemu operacyjnego. Cofaj się, aż to się skończy. Kilkaset megapikseli to zwykle dużo.

Dan Grossman
źródło
+1 za profil profilu profil ~ jednak będąc Jeffem pytam Domyślam się, że to SQLServer i Windows na pewno;)
jcolebrand
1
@jcolebrand, ale wiedząc, że to @ jeff rozpoznasz, że nie powiedział, co oznacza, że ​​celowo pozostawił to otwarte dla wszystkich platform i baz danych.
Xenoterracide
2
I wciąż wiedząc, że to @jeff ... dlaczego nie miałby nauczyć się przestać martwić i pokochać Linuksa? ;-)
Jürgen A. Erhard
8

Tutaj możesz wykorzystać doświadczenie Amazon z działaniem tysięcy serwerów baz danych klientów: w usłudze Amazon Relational Database Service ustawiają pulę buforów innodb MySQL na 3/4 pamięci systemu, niezależnie od tego, ile to jest pamięci. Dodaj do kilku megabajtów na połączenie dla różnych buforów zapytań i prawdopodobnie pozostawiają 10-20% pamięci w systemie operacyjnym.

Dan Grossman
źródło
5

Powinieneś przeczytać pamięć Brenta Ozara . Ma kilka dość standardowych odpowiedzi na pytanie, dlaczego powinieneś szukać pamięci i dlaczego więcej pamięci oznacza lepszą wydajność. Ogólnie 4 GB lub 10% zarezerwowane dla systemu operacyjnego.

Troja
źródło