Zastanawiam się, czy ponowne uruchomienie serwera zgodnie z harmonogramem byłoby dobrym pomysłem na wydajność.
Powiedzmy, że chcemy zrestartować serwer o godzinie 02:00 na 2 noce.
Serwer jest tutaj Windows Server 2008 R2
. Na tym serwerze działają głównie SQL Server i IIS 7.5 (działa prawie 15 aplikacji). Serwer ma 4 GB pamięci.
Odpowiedzi:
Chociaż zgodziłbym się z tym, że nie ma nic złego w ponownym uruchomieniu komputera, per se, w oparciu o twoją uwagę, że SQL Server Agent się zatrzymuje, zaleciłbym dodatkową analizę przyczyn źródłowych. Usługi zwykle nie tylko się zatrzymują, a usługi SQL Server Agent zazwyczaj nie działały w ten sposób.
Sądzę, że dobrze byłoby, oprócz ponownego uruchomienia, zbadać dzienniki zdarzeń i uruchomić długoterminowy dziennik liczników wydajności, który można przeanalizować za pomocą analizy wydajności dzienników (PAL), aby sprawdzić, czy coś „widzi” coś złego. Powinieneś spróbować skorelować zdarzenia związane z zatrzymaniem agenta SQL przez inne czynniki.
źródło
Jeśli chcesz zrestartować komputer, aby poprawić wydajność, prawdopodobnie oznacza to, że w końcu masz problemy z zarządzaniem pamięcią.
Buforowanie jest dobre
Zresztą zrestartowanie serwerów zaszkodziłoby wydajności (i oczywiście dostępności) w bardziej idealnym środowisku . Jedną z podstaw wydajności obliczeń jest skorzystanie z buforowania (posiadanie danych w szybkiej pamięci). Za każdym razem, gdy uruchamiasz się ponownie, wysadzasz swoją pamięć podręczną. Dotyczy to zarówno serwera SQL, jak i IIS. Chociaż możesz nie mieć idealnego środowiska, poniższe wskazówki powinny pomóc ci wybrać lepszą opcję niż ponowne uruchamianie serwera zgodnie z harmonogramem.
Wycieki pamięci IIS?
Teraz wspomniałeś, że jest to IIS 7.5. Chociaż uważam to za przygnębiające, tak wiele aplikacji internetowych działających w IIS 7.5 ma wycieki pamięci, że domyślnie w IIS jest restartowanie aplikacji co X minut i wyłączanie jej, jeśli pula aplikacji jest bezczynna. Idealnym rozwiązaniem jest usunięcie wycieków pamięci - ale jeśli nie możesz, możesz to zmienić te ustawienia, w tym limity pamięci i timery. Możesz użyć perfmon, aby dowiedzieć się, który proces w3wp korzysta z pamięci. Jest to trochę uciążliwe, ale możesz je przywiązać do puli aplikacji
%systemroot%\system32\inetsrv\APPCMD list wps
.Pamięć SQL
Wracając do buforowania, SQL zajmie tyle pamięci, ile może. Możesz to ograniczyć we właściwościach serwera SQL. Jeśli nie ograniczysz pamięci, a także używasz IIS na urządzeniu, mogą one zacząć walczyć o wydajność zabijania pamięci. W tym znakomitym artykule omówiono szczegółowo: Przewodnik Sysadmin po pamięci Microsoft SQL .
Saldo
Ponieważ masz zarówno IIS, jak i SQL na tym samym pudełku, będziesz musiał zrównoważyć zużycie pamięci. Jeśli tego nie zrobisz, możesz dostać pamięć, która prawdopodobnie zostanie ponownie użyta, zamieniona na dysk - co jest okropnym miejscem (powinny istnieć liczniki perfmon dla aktywności wymiany). Korzystając z ustawień Kosza IIS i limitów pamięci SQL, powinieneś być w stanie ustabilizować ten system. Aby to zrównoważyć, możesz potrzebować więcej pamięci niż 4 GB. Ponadto, jeśli jest to opcja, zdecydowanie zaleciłbym umieszczenie serwera SQL na dedykowanej maszynie - to znacznie poprawi wydajność i znacznie uprości rzeczy.
źródło
Nie jestem zwolennikiem restartowania serwerów zgodnie z harmonogramem, szczególnie nie jako sposób na rozwiązanie niektórych podstawowych problemów. Jeśli musisz zrestartować ten serwer, aby rozwiązać problem z wydajnością, lepiej jest znaleźć przyczynę problemu i go rozwiązać. Ponowne uruchamianie serwera w regularnych odstępach czasu tylko zaciemnia podstawowy problem.
źródło
Jeśli masz znaczące wycieki pamięci, to na pewno, czemu nie - w przeciwnym razie restartuj co miesiąc z aktualizacjami.
źródło
Jeśli naprawdę chcesz zrestartować serwer zgodnie z harmonogramem (z powodu wspomnianych wycieków pamięci lub aktualizacji lub z innego powodu) - dlaczego nie spojrzeć na rozwiązanie klastrowe? Ustaw równolegle inny serwer, podłącz go do modułu równoważenia obciążenia (nawet prosty), a będziesz mógł uruchomić go ponownie tak długo, jak chcesz, bez utraty czasu działania usługi lub martwienia się, że serwer w ogóle się nie uruchomi i wyjdziesz.
źródło
To nie jest straszne pomysł, ale jeśli jest to po prostu „voodoo”, prawdopodobnie nie pomoże ci zbytnio.
Istnieją jednak dwa powody, dla których nie należy kończyć dochodzenia dotyczącego poprawy wydajności.
Jednym z nich jest skalowalność w przyszłości. Jeśli awarie są wynikiem ładowania, określonej liczby zapytań, konkretnego zapytania trafiającego do pamięci podręcznej, kompilacji zapytań lub błędu indeksowania btree lub innych problemów, które obecnie występują codziennie, prawdopodobnie będą występować częściej jako ładowanie wzrasta z czasem. Zanurz to w zarodku.
Innym problemem jest to, że podejrzewam, że będziesz musiał zatrzymać przychodzące żądania z usług zależnych podczas restartu. Właśnie utworzyłeś kadencję operacyjną. Za każdym razem, gdy trzeba uruchomić jakieś codzienne zadanie, zostanie ono powiązane z ponownym uruchomieniem. W pewnym momencie będziesz mieć te masowe restarty, które trwają sześć godzin (nie przesadzam tutaj, widziałem, że zdarzyło się to w więcej niż jednej firmie) i nikt nie będzie pamiętał, dlaczego wszystko trzeba zatrzymać i ponownie uruchomić w środku nocy.
Zalecam monitorowanie procesu SQL i restartowanie w razie potrzeby. Jak wspomniano we wcześniejszym plakacie, SQL nie ma przecieku pamięci, który ludzie myślą, że ma (i mówię to jako osoba, która była w zespole MSSQL w połowie lat 90.). Ty chcesz serwer bazy danych, aby korzystać z prawie 100% pamięci i procesora. Coś mniej marnuje zasoby.
źródło
Jeśli masz źle napisany kod i wycieki pamięci, ponowne uruchomienie może być jedynym sposobem na powrót przydzielonej pamięci z powrotem do puli. Jeśli masz procesy powiązane z pamięcią, to odświeżenie puli do stanu czystego z pewnością może poprawić wydajność .... przez jakiś czas. Ale to naprawdę zły sposób radzenia sobie z problemami z wydajnością, faktyczna przyczyna powinna zostać ustalona i naprawiona.
W przeciwnym razie pozwól mu działać, dopóki nie potrzebujesz okna konserwacji, aby zastosować łatki / aplikacje / przywrócić dane. To może być dobry moment, aby zasugerować inżynierowi ds. Wydajności przyjrzenie się danym serwerom, aby dowiedzieć się dokładnie, dlaczego / jakie problemy są tego przyczyną.
źródło
Chociaż nie jest to kompletna odpowiedź sama w sobie , ale czy to realna opcja, aby dodać więcej pamięci RAM do serwera? 4 GB to odrobina niskiej ceny dla maszyny IIS / SQL Server. W zależności od tego, czy jest to faktycznie dedykowana jednostka serwerowa, czy komputer stacjonarny wciśnięty do pracy, możesz uzyskać 8 GB lub więcej za dość niski koszt. To prawda, że jeśli jest to serwer, może kosztować nieco więcej niż standardowa pamięć RAM dla komputerów stacjonarnych, ale dałoby to nieco więcej czasu między wymuszonymi restartami.
Mówiąc to, sprawdź, czy możesz ograniczyć program SQL Server do użycia maksymalnie 80% pamięci RAM, lub przejrzyj dzienniki, aby dokładnie określić, co dzieje się źle i / lub dlaczego usługa się zatrzymuje.
źródło
Nie ma to związku z problemem SQL, z którym możesz mieć do czynienia, jeśli masz serwery Windows i postępujesz zgodnie z jakąkolwiek procedurą łatania, będziesz regularnie restartować serwery bez konieczności restartowania „tylko dlatego, że”. Kiedy pracowałem dla „BIG MULTINATIONAL”, byliśmy zobowiązani do łatania co miesiąc i jako takie wszystkie nasze serwery były restartowane co najmniej raz w miesiącu.
źródło
Robię to na 3 serwerach, 1 jest naszym i 2 klientami. Skonfigurowałem go z różnych powodów - jeden serwer 2008R1 ma wiele aktualizacji oczekujących na instalację, ale nie mogę zainstalować go wsadowo, więc instaluję go jeden po drugim każdego dnia; inny serwer 2012R2 - do rozwiązywania problemów z uruchamianiem i niektórych problemów z wydajnością itp. Nie sądzę, że to zła praktyka, aby planować okresowe ponowne uruchamianie z drugiej strony Może to pomóc w śledzeniu różnych problemów sprzętowych i programowych, zwłaszcza tych, które są zaangażowane w automatyczny start .
źródło
Znam dużą firmę, która nie tylko co noc restartuje serwery Windows, ale niektóre z nich są instalowane ponownie co 24 godziny. Dla nich jest to konieczne z powodu porów pamięci w oprogramowaniu i problemów bezpieczeństwa.
Wydaje się, że niektóre firmy uruchamiają się ponownie co 24 godziny - chociaż wydaje mi się to dziwne jako administrator Linuksa. Aby to wyjaśnić: nigdy nie zalecałbym tego robić z powodu problemu z pamięcią - wyśledzić problem i rozwiązać go.
Jeśli zużycie pamięci pozostaje stałe na poziomie 75% przez miesiące, prawdopodobnie nie ma potrzeby ponownego uruchamiania - jest to zupełnie normalne, że aplikacja serwera używa całej dostępnej pamięci - znacznie zwiększa wydajność, ponieważ potrzebujesz mniejszej liczby operacji na dysku, jeśli używasz pamięć RAM do buforowania danych.
źródło