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!
Odpowiedzi:
Bez dodatkowych informacji o zapytaniach i rozmiarach danych naprawdę trudno jest podać jakiekolwiek oszacowanie, a co dopiero dokładne oszacowanie.
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ć.
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.
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.
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_XX
najczę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.
źródło
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.
źródło
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.
źródło