ogólne wymagania dotyczące pamięci dla serwera SQL 2008 R2


11

Nie mam doświadczenia w pracy z DBA, ale staram się uzasadnić żądanie dodatkowych zasobów dla naszego serwera SQL i miałem nadzieję, że uda mi się zdobyć kilku inteligentnych ludzi, którzy przedstawią przybliżoną ocenę tego, co powinniśmy uruchomić. Podejrzewam, że alokacja zasobów, które IT przekazał naszemu produkcyjnemu serwerowi SQL jest niska.

Sprzęt i oprogramowanie:

Baza danych: baza danych SQL Server 2008 R2 dla przedsiębiorstw

Windows: Windows 2008 R2 Enterprise 64 bit, całkiem pewne, że działa na VMware.

Procesor: Intel (R) Xeon (R) CPU E7-4860 @ 2,27 GHz 2,26 GHz (2 procesory)

Zainstalowana pamięć: 4 GB

Dysk twardy na pliki bazy danych: 300 GB

Dysk twardy do tworzenia kopii zapasowych: 150 GB

Dysk twardy na dzienniki: 100 GB

Podanie:

Mamy 3 główne bazy danych, które składają się na około 170 GB danych, bazę danych usług raportowania (SSRS) na tym samym serwerze, na której może znajdować się 10 różnych raportów (zawierających średnio 700 tys. Rekordów), które są generowane codziennie. Nasza baza użytkowników składa się z około 20 użytkowników jednocześnie, być może 5 z nich można uznać za „wymagające dużych zasobów” z generowaniem dużych raportów z kracowaniem danych. Większość użytkowników wchodzi w interakcję z bazą danych za pośrednictwem strony asp.net i witryny serwera raportów. Ponadto nasi programiści używają SSIS w BIDS na szeroką skalę, przenosząc je bezpośrednio na serwer (maksymalnie 2 zdalne połączenia). Wreszcie, mamy dość zaangażowaną operację hurtowni danych, która prawdopodobnie przynosi 3 miliony rekordów dziennie dzięki pakietom SSIS, które również działają na serwerze.

Obecne problemy:

Mamy chroniczne przerwy w działaniu serwera, a czas reakcji na stronę jest dość zły. Podejrzewam, że ilość dostępnej pamięci (4 GB) jest prawdopodobnie dużym wąskim gardłem. Nasze poprzednie prośby o dodatkową pamięć zostały odrzucone ze wspólną odpowiedzią, że musimy przeprowadzić więcej optymalizacji zapytań. Chociaż nie jesteśmy profesjonalistami sql lub (jak jestem pewien, można stwierdzić po naszej konfiguracji) db administratorami db, chcę się upewnić, że nie spędzam całego czasu na próbowaniu wyciśnięcia małej potencjalnej wydajności, jeśli sprzęt jest wąskie gardło.

Dzięki wszystkim za unikanie tl; dr!


7
Oczekują obsługi 170 GB danych przy 4 GB pamięci? Żadne dostrajanie zapytań nie naprawi tego i nie ma ich w drzewie.
Aaron Bertrand

Pokaż im liczby (statystyki wydajności). Możesz także pokazać im dokumentację Microsoft, która pokazuje, że minimalna pamięć dla Windows Server 2008 R2 wynosi 4 GB; nie pozostawia to wiele dla SQL Server.

2
Co pokazują statystyki oczekiwania? Podejrzewam, że dużo PAGEIOLATCH_XX czeka na Twoje zapytania. Jeśli tak, możesz użyć tego jako dowodu, że dodatkowa pamięć byłaby korzystna.
SQLRockstar

2
I masz pamięć, którą możesz zacząć pracować nad lepszym podsystemem IO. Hard DRIVE dla dobrze używanej bazy danych to żart IOPS. TO powinny być NAPĘDY. Nie kupujesz dysku jako pojemności, w przypadku baz danych kupujesz dysk jako źródło IOPS. Co oznacza, że ​​dysk SSD o pojemności 512 GB byłby przydatny dla plików bazy danych. Standardowe „pozwala uzyskać duże i tanie” zabije bazę danych.
TomTom

@TomTom Jestem pewien (mam nadzieję), że mamy tablicę rajdową. Nie jestem jednak pewien, jak to wykryć. Właśnie opierałem opis dysku twardego na tym, co Eksplorator okien komputera pokazywał na serwerze Windows.
RMuesi

Odpowiedzi:


14

... miałem nadzieję, że uda mi się ... z grubsza oszacować, co powinniśmy biegać.

Bez dodatkowych informacji o zapytaniach i rozmiarach danych naprawdę trudno jest podać jakiekolwiek oszacowanie, a co dopiero dokładne oszacowanie.

Baza danych: baza danych SQL Server 2008 R2 dla przedsiębiorstw

Windows: Windows 2008 R2 Enterprise 64 bit, całkiem pewne, że działa na VMware.

Procesor: Intel (R) Xeon (R) CPU E7-4860 @ 2,27 GHz 2,26 GHz (2 procesory)

Zainstalowana pamięć: 4 GB

Dwa procesory (zakładam, że jest to widoczne w maszynie wirtualnej jako 2 rdzenie) mogą, ale nie muszą być niedostarczone. Rdzenie przypisane do maszyny Wirtualnej niekoniecznie są mapowane bezpośrednio na rdzenie fizyczne (lub nawet pozwalają na użycie 100% jednego rdzenia, gdy jest to potrzebne!), Więc może się okazać, że jest to bardziej elastyczny zasób niż pamięć. Bez żadnych dodatkowych informacji na temat obciążenia lub konfiguracji sprzętu / wirtualizacji powiedziałbym, że zwiększenie tego poziomu do 4 byłoby przyjemne.

Przydział pamięci. O chłopie. Jest to rażąco niedostarczone na obciążenie pracą. Sam system Windows potrzebuje minimum 2-3 GB, aby być zadowolonym, a każdy z 2 użytkowników korzystających z BIDS na urządzeniu będzie wymagał co najmniej 500 MB. I dzięki temu pudełko jest już maksymalne i nawet nie zacząłem zastanawiać się, ile bazy danych będzie potrzebować.

Większość użytkowników wchodzi w interakcję z bazą danych za pośrednictwem strony asp.net i witryny serwera raportów.

Nie powiedziałeś, ale jeśli są uruchomione na tym samym urządzeniu, należy również wziąć pod uwagę wymagania dotyczące pamięci.

Wreszcie, mamy dość zaangażowaną operację hurtowni danych, która prawdopodobnie przynosi 3 miliony rekordów dziennie dzięki pakietom SSIS, które również działają na serwerze.

Zakładając, że działa to w nocy, gdy w systemie nie ma aktywnych użytkowników, nie widzę w tym problemu, chyba że uruchomienie go potrwa zbyt długo. Ta część rzeczy jest najmniejszym z twoich zmartwień; użytkownicy na żywo są ważniejsi.

Nasze poprzednie prośby o dodatkową pamięć zostały odrzucone ze wspólną odpowiedzią, że musimy przeprowadzić więcej optymalizacji zapytań.

Jak wykazałem powyżej, bieżąca ilość pamięci, która została zainicjowana, jest całkowicie nieodpowiednia. Jednocześnie jednak, na drugim końcu spektrum, jest bardzo mało prawdopodobne, że będziesz w stanie uzyskać wystarczającą ilość pamięci, aby utrzymać całą bazę danych w pamięci jednocześnie.

Mimo że otrzymałeś taką ogólną odpowiedź (która, nawiasem mówiąc, prawdopodobnie miała więcej wspólnego z tym, jak przekonujące było twoje uzasadnienie dla dodatkowych zasobów, a nie samo faktyczne wykorzystanie zasobów), wysoce prawdopodobne jest, że wydajność bazy danych może być ulepszony. Jednak samo dostrojenie nie może rozwiązać problemów, które występują obecnie; Sugestia tego jest dla mnie kompletna.

Przyjęłbym ogólne podejście, że ilość obecnie udostępnianej pamięci jest niższa niż wymagane minimum (które należy poprawić jak najszybciej), i mogą być wymagane dodatkowe zasoby, aby poprawić wrażenia użytkownika do użytecznego poziomu, podczas gdy ulepszenia mają na celu zwiększenie wydajności systemy.

Oto kilka myśli (w kolejności ataku):

  • Będziesz wygrać , jeśli można udowodnić, jak bardzo poprawia wydajność za każdym razem można dostać więcej środków zabezpieczony. Śledź wskaźniki wydajności za pomocą rejestrowania Monitora wydajności (uwaga: część rejestrowania jest bardzo ważna), w tym czasy reakcji witryny, jeśli możesz. Zacznij to robić teraz , zanim zrobisz cokolwiek innego. Kiedy w końcu osiągniesz minimalną ilość pamięci (nie dostaniesz od razu 32 GB), nagle masz teraz dowody, że dodana pamięć poprawiła rzeczy ... co oznacza, że ​​dodanie jeszcze większej ilości prawdopodobnie również by pomogło! Jeśli nie zbierzesz linii bazowej w bieżącej konfiguracji, będziesz tęsknił za łodzią, gdy rzeczy spadną do minimalnego zalecanego poziomu.

  • Przeanalizuj statystyki oczekiwania serwera . Dzięki temu dowiesz się, jakie jest największe wąskie gardło w systemie. Prawdopodobnie będziesz mieć PAGEIOLATCH_XXnajczęstszy / najwyższy czas oczekiwania, co oznacza, że ​​zrobiono zbyt wiele operacji we / wy, aby pobrać strony z dysku. Można to złagodzić poprzez dodanie pamięci, więc fizyczne operacje we / wy stają się mniej częste, ponieważ potrzebne dane są już w pamięci. Chociaż ta analiza jest prawie przesądzona, fakt, że zebrałeś te statystyki, daje ci więcej amunicji, uzasadniając zapotrzebowanie na zasoby.

  • Jak wspomniałem powyżej, absolutne minimalne wymagania dotyczące pamięci nie są spełnione. Zbierz zestaw zalecanych wymagań sprzętowych dla całego uruchomionego oprogramowania, a może także zrób zrzuty ekranu Menedżera zadań. Samo to powinno wystarczyć, aby uzasadnić na miejscu co najmniej 4-8 GB więcej. Jeśli nadal odmawiają, spróbuj ich przekonać, aby pozwolili ci na wypróbowanie go przez tydzień, i oddaj go później (zbierasz statystyki wydajności, więc nie musisz go oddawać, ponieważ w połowie tygodnia „ Będę w stanie udowodnić, jak bardzo to poprawiło sytuację). Jeśli nadal odmawiają, jesteś nastawiony na porażkę; URLT .

  • Jeśli możesz odciążyć część obciążenia (w szczególności, jeśli to możliwe, unikaj przenoszenia na odległość), zwiększy to ilość pamięci dostępnej dla bazy danych, co jest bardziej krytyczne.

  • Nie będziesz w stanie jednocześnie zmieścić całej bazy danych w pamięci, co oznacza, że ​​musisz bardzo ostrożnie ustawić maksymalne ustawienie pamięci SQL Server, aby zapobiec nadmiernemu zatwierdzeniu pamięci , co zabija wydajność jak nic innego . Nadmierne zatwierdzenie jest nawet gorsze niż po prostu niemożność zmieszczenia wszystkich danych w pamięci. Jest wysoce prawdopodobne, że jesteś teraz w tym scenariuszu po prostu dlatego, że po prostu w ogóle nie ma dostępnej pamięci i prawdopodobne jest, że ustawienie maksymalnej pamięci jest ustawione na wartość domyślną (nieograniczoną).

  • Ponieważ korzystasz z SQL Server Enterprise Edition, a pamięć jest na wagę złota, zdecydowanie rozważę wdrożenie kompresji danych . Spowoduje to zmniejszenie zużycia procesora w celu zaoszczędzenia miejsca w pamięci (a tym samym zmniejszenie dostępu do dysku, które są stosunkowo bardzo wolne).

  • Dostrój bazę danych. Prawdopodobnie w strukturach i zapytaniach można zastosować ulepszenia w zakresie wzorców indeksowania i dostępu. Ponadto, jeśli wiele danych jest często skanowanych i agregowanych, tworzenie indeksowanych widoków, tabel podsumowań lub wstępnie obliczonych raportów może być bardzo pomocne.

  • Może to być długi cel, ponieważ prawdopodobnie oznacza to więcej udostępniania sprzętu, ale zaimplementuj rozwiązanie buforowania. Najszybsze zapytanie jest tym, którego nigdy nie wykonałeś .

To tylko kilka pomysłów. Najważniejsze jest to, że samo strojenie nie rozwiąże tutaj problemów, podobnie jak sam sprzęt, chociaż ten ostatni prawdopodobnie złagodzi większość bezpośrednich problemów. Tak to naprawdę wygląda: rzuć sprzęt na problem w krótkim czasie, aby ugasić pożar, i rzuć tunel na problem w perspektywie długoterminowej, aby naprawić podstawową przyczynę najlepiej, jak potrafisz.


1
John Uwielbiam twoją odpowiedź i +1, ale w tym scenariuszu wydaje się, że komentarz Aarona uderzył go w głowę i po prostu potrzebują więcej barana, niezależnie od tego, jak bardzo starają się go nastroić.
Ali Razeghi,

2
@Ali: Tak, zgadzam się i wspomniałem o tym w mojej odpowiedzi. Głównie chciałem skoncentrować się na strategiach, aby uzyskać więcej pamięci RAM, ponieważ wydaje się, że tutaj jest problem. (Jeśli to po prostu niedostępne , to osobny problem.)
Jon Seigel

Dziękuję bardzo za szczegółową odpowiedź! Jestem nowy w dostrajaniu wydajności db, więc po prostu próbuję zrozumieć, od czego zacząć. Mam trochę materiałów do czytania i Monitora wydajności, teraz po prostu muszę zrozumieć wskaźniki. Ale twoje sugestie stanowią dobrą mapę drogową do rozwiązania tego problemu. Dzięki jeszcze raz.
RMuesi

@RMuesi: Nie ma za co. Jeśli masz jakieś konkretne pytania dotyczące tego, co musisz zrobić, nie krępuj się opublikować je (oczywiście najpierw wyszukaj), a społeczność chętnie Ci pomoże.
Jon Seigel

9

To szaleństwo na koncie. 1100– 2500 USD, które wydasz na pamięć RAM, może zwrócić się w ciągu tygodnia !

Dostają przerwy na pracę dla 20 pracowników, a 5 z nich wykonuje pracę „wymagającą dużych nakładów”. Wyobrażam sobie, że ich czas nie jest tani, a niektóre z tych raportów to te, które szef nie wypisałby z wypłaty, by pokochał. To mnóstwo zmarnowanych zmarnowanych transmisji i radzenia sobie z frustracją.

Wyjaśnij im, że prawdopodobnie oczekują od 15 do 20 USD za GB pamięci RAM. 128 GB pamięci RAM to w tej chwili około 2200– 2500 USD, a ceny pamięci RAM nieco wzrosły. Nawet jeśli płyta główna twojego serwera nie może go obsłużyć (byłoby to dziwne), wtedy 64 GB to 1100-1200 USD (właśnie sprawdziłem, a to jakość pamięci RAM od Dell bez rabatów). Nawet 64 GB pamięci RAM może zrobić OGROMNĄ różnicę (szczególnie, jeśli unikniemy skanowania dużych tabel).

Sprawdź, ile czasu jest marnowane, i zapytaj, czy jest ono warte 1100– 2500 USD. Jeśli wydasz tylko 1100 $ i dostaniesz 64 GB pamięci RAM, unikaj skanowania tabel na dużych stołach. Użyj więcej dysku z indeksami (jeśli masz opóźnienie, aby je obsługiwać), aby uniknąć dużego zrzutu pamięci zrzucania skanów.


5
Dobrze powiedziane za szaleństwo. Pamięć 4 GB to mniej niż sugerowałbym w dzisiejszych czasach na komputery stacjonarne. I to próbuje teraz działać w środowisku bazy danych 170 GB. Cholerny żart. Ale hej, wirtualizacja dla beancounters oznacza, że ​​możesz pozbyć się dużych, drogich serwerów;)
TomTom

2
Całkowicie się zgadzam. Przynajmniej liczniki fasoli w scenariuszu PO miały pazury zdjęte z fizycznego serwera (mam nadzieję!)
Ali Razeghi

1
Uwierz w to. Ja nie. TYPICAL byłby serwerem z dużą ilością pamięci RAM i - tanimi dyskami LAAAAARGE. Możesz więc uruchomić na nich DUŻO maszyn wirtualnych. W końcu RAM jest zwykle czynnikiem ograniczającym, prawda;)? Rezultatem będzie ogromna wydajność IOPS - nawet bez bazy danych. Byłem tam, widziałem to. Pamięć 64 GB, dysk SATA 2tb dubluje dysk;)
TomTom

Dziękuję za odpowiedź. Podejrzewałem tyle samo, ale po prostu nie mam danych, aby udowodnić, że problem jest częściowo imitacją sprzętową. Pracuję nad tym teraz.
RMuesi

2
Możesz po prostu poinformować ich, że SQL Server to silnik bazy danych w pamięci. Czytanie z dysku, nawet dyski SSD (jestem pewien, że ten sklep nie korzysta) jest boleśnie powolne. Odczyt z pamięci RAM zajmuje około 5ns. Pokaż im plan wykonania z SET STATISTICSIO ON, który pokazuje skanowanie tabeli i odczyty. Pokaż im odczyty fizyczne a odczyty logiczne. Fizyczne jest przeprowadzane z dysku.
Ali Razeghi,

-1

Używam 2008 R2 z 46 GB pamięci RAM. Brak maszyn wirtualnych. SQL Server 2008.

Bazy danych mają około 300 GB.

Ostatnio umieściłem bazy danych na dysku SSD i potroiłem dane wyjściowe.

Serwer używa obecnie 45 GB pamięci RAM i działa dobrze.

FC Sata Raids i SAS SCSI Raids. Łącznie 26 logicznych napędów. 144 Wirujące dyski.

Wczoraj używałem tylko 24 GB pamięci RAM, gdy miałem tylko 50 TB pełnych dysków twardych podłączonych i przesyłających dane. Dzisiaj mam 160 TB pełnych dysków twardych i używam 45 GB pamięci RAM.

Moja aplikacja nie wykorzystuje ponad 400 MB pamięci RAM.

Podejrzewam, że potrzebujesz baz danych na szybkim dysku SSD lub pamięci RAM. Zasadniczo potrzebujesz dużo więcej pamięci RAM.


IBM exFlash 400 GB MCS 4400 USD. Tam właśnie idę.
David
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.