Czy ponowne uruchomienie programu SQL Server przyspiesza?

22

Zauważyłem, że niektóre DBA restartują SQL Server bardzo często, czasem nawet co noc. Sądzę, że robią to, aby zwolnić trochę pamięci lub przyspieszyć zapytania. Wiem, że po ponownym uruchomieniu kwerendy plany muszą zostać ponownie skompilowane, ale nawet uwzględniając to, zastanawiam się, czy taka korzyść przynosi korzyść.

Czy to prawda, że ​​codzienne ponowne uruchamianie programu SQL Server przyspiesza jego działanie?

Nick Chammas
źródło

Odpowiedzi:

37

Ponowne uruchomienie serwera jest prawdopodobnie jedną z najbardziej szkodliwych rzeczy dla wydajności. Oznacza to, że wymuszasz zimną pamięć podręczną dla danych, zimną pamięć podręczną dla planów zapytań, a wszystkie wewnętrzne pamięci podręczne programu SQL Server są również niszczone w tym procesie. Nie wspominając o tym, że odrzucając wszystkie statystyki zebrane w statystykach operacyjnych DMV, zmniejszasz swoje szanse na udane zbadanie czegoś.

Nie ma oficjalnych wskazówek popierających tę praktykę, nigdy nie widziałem o niej wspominanej w żadnej renomowanej pracy dobrej praktyki, nigdy nie słyszałem o renomowanym ekspercie, który wspominałby o tym jako praktyce. Nie rób tego

Remus Rusanu
źródło
Nie zgadzam się. SQL Server jest hostowany na serwerze Windows, na którym poprawki bezpieczeństwa i uaktualnienia MS wymagają okresowych restartów. Uważam, że lepszy projekt SQL jest kluczem do rozwiązania problemów z wydajnością i nie polega na ponownym uruchomieniu serwera, ale czasami jest to konieczny krok.
Fandango68
27

Podczas gdy inne odpowiedzi są dobre, brakuje w nich ważnego elementu: pamięci podręcznej plików systemu Windows.

W 64-bitowym systemie Windows nie ma ograniczenia ilości pamięci używanej przez system Windows do buforowania plików. System Windows może całkowicie pozbawić system pamięci i wtedy zaczniesz zamieniać się na dysk. Zostało to udokumentowane w kilku miejscach:

Ponowne uruchomienie programu SQL Server wymusza na SQL zrezygnowanie z pamięci, co pozwala Windowsowi uzyskać więcej, a stronicowanie zatrzymuje się chwilowo. SQL uruchomi się ponownie przy prawie zerowym zużyciu pamięci i będzie stopniowo wzrastał, a gdy w polu ponownie zabraknie pamięci, ponowne uruchomienie pomoże tymczasowo. Ponowne uruchomienie całego systemu operacyjnego wymusi również użycie pamięci podręcznej plików systemu Windows.

Prawdziwa poprawka: przestań kopiować pliki z serwera Windows lub ogranicz ilość pamięci podręcznej plików używanej z usługą Dynamicznej pamięci podręcznej plików, jak opisano w powyższych postach na blogu.

Brent Ozar
źródło
3
+1 Był świadomy problemu, nie był świadomy, że pamięć podręczna może zostać ograniczona za pomocą usługi dynamicznej pamięci podręcznej.
Mark Storey-Smith
Czy praktyka „przypinania” pamięci do MIN i MAX (choć powinna i powinna być dokładnie taka sama ilość KB) pomogłaby zapewnić, że SQL Server zużywa tylko wstępnie określoną ilość MIN / MAX RAM, pozwalając innym usługom / aplikacjom Windows / żądania sieciowe, aby kontynuować działanie. To była moja praktyka i działała ładnie. Jakieś inne myśli?
SnapJag,
@SnapJag - niekoniecznie, ponieważ SQL nie zużywa od razu minimalnej kwoty. SQL zaczyna się od zera i stopniowo rośnie w zależności od potrzeb.
Brent Ozar,
11

Jeśli przyspieszy to zapytania, może być zaangażowany wykrywanie parametrów . Jeśli plan bzdur zostanie zapisany w pamięci podręcznej i zastosowany do niewłaściwych kolejnych wywołań, wówczas cud ponownego uruchomienia pozwoli na buforowanie wspólnego / poprawnego planu. W takim przypadku istnieją nieskończenie lepsze sposoby korygowania zachowania, jak wskazali inni. Ale dopóki nie przestaną ponownie uruchamiać urządzenia, nie ma możliwości przeprowadzenia analizy pierwotnych przyczyn.

billinkc
źródło
To powinna być zaakceptowana odpowiedź. Właściwy projekt SQL i projekt planu ma kluczowe znaczenie, aby uniknąć konieczności ponownego uruchamiania serwera, ale zrestartowanie serwera może być konieczne mimo to ze względu na zasady serwera - takie jak poprawki bezpieczeństwa itp.
Fandango68
11

Nie powinieneś ponownie uruchamiać programu SQL Server, chyba że zmieniłeś właściwości usługi lub ustawiłeś ślady uruchamiania, które chcesz natychmiast zastosować.

Ponieważ @RemusRusanu stwierdził wiele punktów, usuwa wiele pamięci podręcznych i powoduje, że SQL Server wykonuje wiele niepotrzebnych prac rozruchowych .

Wygląda na to, że ten serwer nie jest dedykowanym serwerem SQL Server / bazą danych. Najlepszą praktyką jest, aby produkcyjny serwer bazy danych miał tylko jeden cel ... być serwerem bazy danych. W takim przypadku zarezerwujesz wystarczającą ilość pamięci i zasobów dla systemu operacyjnego i oddasz wszystko inne SQL Serverowi. Doprowadziłoby to do nie głodzenia żadnych innych aplikacji lub ról serwera.

Thomas Stringer
źródło
2

Zgadzam się z opinią, że jeśli wszystko robisz dobrze, może nie być konieczne ponowne uruchomienie / zrestartowanie serwera MSSQL.
Dla mnie dotyczy to scenariusza, w którym każdy jest kompetentny i możesz naprawić wszystko.

Nie jestem DBA. Jestem architektem oprogramowania i częścią tego jest tworzenie całych schematów baz danych od podstaw i, niestety , praca z bazami danych innych firm, nad którymi absolutnie NIE mam kontroli.
Ludzie, którzy utworzyli i utrzymują jedną z naszych głównych baz danych stron trzecich, ledwo sprawili, że funkcjonuje.

Czy wspomniałem, że nie jestem również ekspertem od bezpieczeństwa ani inżynierem sieci?

  • Co najmniej jedna aktualizacja głównego systemu operacyjnego Windows, aktualizacja zabezpieczeń, aktualizacja systemu BIOS, dodatek Service Pack dla systemu OS / MSSQL lub aktualizacja zbiorcza MSSQL będą publikowane co miesiąc lub dwa.
  • Zastosowanie ich w odpowiednim czasie oznacza ponowne uruchamianie / restartowanie serwera mniej więcej co kwartał.
  • Nawet jeśli działasz w intranecie, dlaczego nie miałbyś stosować aktualizacji zabezpieczeń?
  • Gdybym mógł mieć SSL na naszych stronach intranetowych PHI, zrobiłbym to, ponieważ żadna sieć nie jest niezawodna. Chyba jestem paranoikiem.


Dla mnie pytanie brzmi: czy powinienem restartować SQL Server częściej niż co 3 miesiące?

Planowanie restartów dla obietnicy dodatkowego centymetra występu jest jak taniec dla deszczu.
Może to nadejdzie, może nie, ale nie wiadomo na pewno, co spowodowało, że spadł deszcz.

  • Jeśli zauważysz znaczny spadek wydajności po ponownym uruchomieniu serwera z powodu regularnej konserwacji, powinieneś dowiedzieć się, dlaczego tak się dzieje.
  • Jeśli masz problemy i nie masz pewności, co je powoduje, zmniejszając zmienne, zatrzymując usługi i zadania, aby znaleźć coś w rodzaju wycieku pamięci (w skrajnych przypadkach takich jak ten), być może ponowne uruchomienie / ponowne uruchomienie serwera przy niektórych usługach włączonych wyłączona (lub włączone śledzenie) pomoże ci wykluczyć inne usługi jako przyczynę.

Ja nie twierdzę, że jak nigdy nie trzeba go ponownie uruchomić, aby rozwiązać problem lub zweryfikować pracy awaryjnej, ale zrobić problem z restartuje planowania zachować nieznany problem wydajności z losowo występujące.

Tylko Wyjątkiem jest jeśli uda fałszywego 3rd party bazy danych, gdzie restartowania go co tydzień lub dwa wydaje się być jedynym sposobem, aby utrzymać to działa i nie są dopuszczone do poprawki lub nawet go dotknąć.
Nawet wtedy powinieneś szukać poprawek, dzielić się nimi z właścicielem i wznosić piekło, dopóki nie zostanie rozwiązane.

MikeTeeVee
źródło