Czy ponowne uruchomienie serwera zgodnie z harmonogramem byłoby dobrym pomysłem na wydajność?

14

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.

tugberk
źródło
9
Czy rzeczywiście masz problemy z wydajnością? System Windows może działać przez lata bez konieczności ponownego uruchamiania. Nie powinno to trwać tak długo bez ponownego uruchomienia, po prostu dlatego, że łatki muszą być zainstalowane, ale z pewnością jest to możliwe. Osobiście mam serwer w całkowicie odizolowanej sieci, która działała przez <checks> 489 dni. Nadal działa dobrze, a wydajność jest akceptowalna.
Ben Pilbrow
6
Zakładam, że robi to, gdy ilość pamięci lub procesora jest ograniczona. - błędnie zakładasz.
Rob Moir
4
Osoba, która oddała głos na to stanowisko, powinna wyjaśnić dlaczego. To dobrze wyjaśnione pytanie i nie ma w tym nic złego.
tugberk
17
Prawidłowe rzeczą do zrobienia jest rozwiązywanie problemów , dlaczego masz problemy, nie tylko uruchomić go ponownie. Komputery rutynowo uruchamiane ponownie nazywane są komputerami stacjonarnymi.
Bart Silverstrim,
4
Mogą głosować za odrzuceniem, ponieważ niektóre pytania są również złym pomysłem; przykład nie przychodzi mi teraz na myśl. Jest wiele powodów. Ludzie są dziwni. Liczymy na ogólny zdrowy rozsądek, aby przezwyciężyć złe i złe osądy. Dlatego jest to społeczna witryna Q / A.
Bart Silverstrim,

Odpowiedzi:

32

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.

Evan Anderson
źródło
2
„addt'l” ? Błąd analizy w linii 2.
Tomas
@tugberk - jeśli to jest odpowiedź, jaka była przyczyna zatrzymania agenta SQL po sugestii Evana?
sierpień
@fluffy: Cześć! Fajnie cię tu widzieć! Nie wiem, czy kiedykolwiek znałeś moje „prawdziwe imię”. Jestem starym znajomym Song Fight z okresu 2003-2005. Pomyśl o gównianym synth-popie i nazwie „band”, która przywołuje wizje wysypisk śmieci i możesz sobie przypomnieć.
Evan Anderson
Cóż, to dość nie na temat! Cześć Dostrajacz. ;) (To oczywiście powinno zostać przeniesione na e-mail, ale nie mogę znaleźć twojego adresu.)
puszysty
38

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.

Kyle Brandt
źródło
Niesamowita odpowiedź Kyle, szkoda, że ​​nie miałem jednego z tych miesięcy temu na moich pytaniach związanych z wydajnością SBS2011! Uderzyłem w każdą z rzeczy, o których wspomniałeś podczas moich własnych (wielomiesięcznych) badań. Wciąż napotykasz problemy, ale to inna sprawa.
HaydnWVN,
12

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.

joeqwerty
źródło
5

Jeśli masz znaczące wycieki pamięci, to na pewno, czemu nie - w przeciwnym razie restartuj co miesiąc z aktualizacjami.

Siekacz 3
źródło
dzięki za wskazówkę. Patrzę teraz na menedżera zadań i widzę, że system zużywa 75% pamięci.
tugberk
6
Jeśli działa SQL Server, należy się tego spodziewać. SQL Server spróbuje (i powinieneś pozwolić) na wykorzystanie całej dostępnej pamięci.
Ben Pilbrow
4
to nie znaczy, że masz przecieki pamięci. Pamięć jest do wykorzystania. Ponowne uruchomienie w celu usunięcia wycieków pamięci jest całkowicie pragmatycznym obejściem, ale lepszym rozwiązaniem w dłuższej perspektywie jest znalezienie i usunięcie usterki, która je powoduje.
Rob Moir,
1
@tugberk: Jak powiedziałem w mojej odpowiedzi, nie było moim doświadczeniem, że usługa SQL Server Agent zatrzymuje się z powodu warunków presji pamięci. Przypuszczalnie są warunki, w których by to działało, ale spodziewam się, że będziesz mieć problemy z innymi usługami, zanim dotrzesz do tego punktu (ponieważ prawdopodobnie będzie to dość poważne).
Evan Anderson
2
Gdyby to było wspomnienie, powinno być widać, że swap został mocno uderzony, zanim „umrze”, pomyślałbym. Pamięć zawsze będzie wykorzystywana w jak największym stopniu do buforowania i tym podobnych. Prawdopodobnie powinieneś najpierw użyć narzędzi do analizy użycia bazy danych. A jeśli używasz 15 aplikacji i masz mało pamięci (15 aplikacji + baza danych na 4 koncerty? Jak duże są te rzeczy?) Prawdopodobnie powinieneś już patrzeć na zerwanie komponentu bazy danych z serwera WWW na serwer dedykowany.
Bart Silverstrim,
2

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.

V. Romanow
źródło
1

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.

Art Taylor
źródło
0

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ą.

James Pulley
źródło
0

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.

tombull89
źródło
0

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.

Mitch
źródło
0

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 .

integratorIT
źródło
-2

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.

Subito
źródło
dzięki @Subito. Cóż, właściwie jestem web devem (nie administratorem serwera), ale obecnie muszę utrzymywać serwer. Dlatego zadaję te proste pytania. Myślę, że masz rację. Ale jestem zszokowany, że firmy robią takie rzeczy. Czy nie przynoszą one żadnych korzyści po stronie serwera?
tugberk
Wszystkie ich aplikacje są napisane przez siebie i przeznaczone do użytku z DOS lub 3.11. Udało im się uzyskać bazę danych poza tymi aplikacjami i jakoś przenieść je na Server 2008. Cud, że to nadal działa. Nikt nie miałby orzechów i nie próbowałby wszystkiego zmieniać, aby używać pamięci podręcznych. Mają kilka osób, które tam siedzą i czekają na awarię, a następnie ponownie uruchamiają aplikację / serwer / cokolwiek innego.
Subito,
6
Nie jest „uzasadnione” ponowne uruchamianie serwera co 24 godziny. Albo mają bardzo ekstremalny problem ze skrzynką, albo ich sieć i serwery są zarządzane przez największych idiotów w branży.
Rob Moir
tak, są oni rzeczywiście największymi idiotami - ale to nie jedyna firma, jaką znam, która robi to z ich serwerami Windows ... Wydaje się, że jest to dość powszechny sposób radzenia sobie z problemami z pamięcią. - Nie zrozum mnie źle, myślę, że to straszny, straszny błąd, nie badać i nie rozwiązywać problemów!
Subito
7
@Subito - W swojej odpowiedzi mówisz: „Wydaje się, że można zrestartować komputer co 24 godziny” To po prostu zła rada. Mówisz OP, że jest to uzasadniony pomysł, gdy powołujesz się na firmę, która według ciebie jest pełna idiotów z okropnym oprogramowaniem. Nie wydaje mi się to uzasadnione.
MDMarra,