Beschleunigt ein Neustart von SQL Server die Ausführung?

22

Ich habe festgestellt, dass einige DBAs SQL Server sehr häufig neu starten, manchmal sogar nachts. Ich glaube, sie tun dies, um Speicher freizugeben oder um Abfragen zu beschleunigen. Ich weiß, dass Abfragepläne nach einem Neustart neu kompiliert werden müssen, auch wenn ich mich frage, ob diese Vorgehensweise einen Nettovorteil hat.

Stimmt es, dass ein täglicher Neustart von SQL Server die Ausführung beschleunigt?

Nick Chammas
quelle

Antworten:

37

Ein Neustart des Servers ist wahrscheinlich eines der leistungsschädlichsten Dinge. Dies bedeutet, dass Sie einen Cold-Cache für Daten und einen Cold-Cache für Abfragepläne erzwingen. Alle internen SQL Server-Caches werden dabei ebenfalls überarbeitet. Ganz zu schweigen davon, dass Sie durch das Wegwerfen aller in den DMVs für Betriebsstatistiken gesammelten Statistiken Ihre Chancen verringern, jemals etwas erfolgreich zu untersuchen.

Es gibt keine offizielle Anleitung, die diese Praxis unterstützt. Ich habe noch nie gesehen, dass in einer guten Praxis eine seriöse Arbeit erwähnt wird. Ich habe noch nie von einem seriösen Experten gehört, der dies jemals als eine Praxis erwähnt hat. Tu es nicht.

Remus Rusanu
quelle
Ich stimme dir nicht zu. SQL Server wird auf einem Windows-Server gehostet, auf dem Sicherheitspatches und MS-Upgrades regelmäßig neu gestartet werden müssen. Ich glaube, dass ein besseres SQL-Design der Schlüssel zur Lösung von Leistungsproblemen ist und nicht auf Serverneustarts angewiesen ist, aber manchmal ist es ein notwendiger Schritt.
Fandango68
27

Die anderen Antworten sind zwar gut, ihnen fehlt jedoch ein wichtiges Element: der Windows-Dateicache.

Unter 64-Bit-Windows gibt es keine Obergrenze für den Speicher, den Windows zum Zwischenspeichern von Dateien verwendet. Windows kann Ihr System vollständig entleeren und zu diesem Zeitpunkt werden Sie auf die Festplatte wechseln. Es wurde an einigen Stellen dokumentiert:

Durch einen Neustart von SQL Server erzwingen Sie, dass SQL Speicher freigibt, wodurch Windows mehr Speicher erhält, und der Seitenwechsel wird vorübergehend angehalten. SQL startet erneut mit einer Speicherauslastung von nahezu Null und steigt allmählich an. Wenn die Box wieder über genügend Speicher verfügt, hilft der Neustart vorübergehend. Wenn Sie das gesamte Betriebssystem neu starten, erzwingen Sie auch die Verwendung des Windows-Dateicache.

Die eigentliche Lösung: Beenden Sie das Kopieren von Dateien vom Windows-Server oder begrenzen Sie den Umfang des Dateicaches, der mit dem Dynamic File Cache Service verwendet wird, wie in den obigen Blogposts dokumentiert.

Brent Ozar
quelle
3
+1 war sich des Problems bewusst, wusste aber nicht, dass der Cache mithilfe des dynamischen Cacheservices eingeschränkt werden kann.
Mark Storey-Smith
Würde die Praxis des "Fixierens" des Speichers auf MIN und MAX (obwohl sie genau dieselbe KB-Menge sein sollten und könnten) dazu beitragen, sicherzustellen, dass SQL Server nur eine vordefinierte Menge an MIN / MAX-RAM verbraucht, die andere Windows-Dienste / -Anwendungen / zulässt? Netzwerkanforderungen, um weiterhin zu funktionieren. Dies war meine Praxis und hat gut funktioniert. Irgendwelche anderen Gedanken?
SnapJag
@ SnapJag - nicht unbedingt, da SQL die Mindestmenge nicht sofort verbraucht. SQL beginnt bei Null und läuft je nach Bedarf schrittweise an.
Brent Ozar
11

Wenn dadurch Abfragen beschleunigt werden, ist möglicherweise ein Parameter-Sniffing erforderlich. Wenn ein Mistplan zwischengespeichert und auf unangemessene nachfolgende Aufrufe angewendet wird, ermöglicht das Wunder des Neustarts, dass der gemeinsame / korrekte Plan zwischengespeichert wird. In diesem Fall gibt es unendlich bessere Möglichkeiten, das Verhalten zu korrigieren, als andere angegeben haben. Solange die Box nicht neu gestartet wird, können keine Ursachenanalysen durchgeführt werden.

billinkc
quelle
Dies hätte die akzeptierte Antwort sein sollen. Die richtige SQL - Design und Plan - Design, ist entscheidend , um die Notwendigkeit für einen Neustart des Servers zu vermeiden, aber Server Neustarts ohnehin Richtlinien aufgrund Server erforderlich sein kann - wie Sicherheits - Patches usw.
Fandango68
11

Sie sollten SQL Server erst dann neu starten, wenn Sie die Diensteigenschaften geändert oder Startprotokolle festgelegt haben, die sofort wirksam werden sollen.

Da @RemusRusanu viele Punkte angegeben hat, werden viele Caches gelöscht, und SQL Server führt zu vielen unnötigen Startvorgängen .

Es scheint, dass dieser Server kein dedizierter SQL Server / Datenbankserver ist. Es wird empfohlen, dass ein Produktionsdatenbankserver nur einen Zweck hat: ein Datenbankserver zu sein. In diesem Fall würden Sie genügend Arbeitsspeicher und Ressourcen für das Betriebssystem reservieren und alles andere an SQL Server übergeben. Dies würde dazu führen, dass Sie keine anderen Anwendungen oder Serverrollen aushungern.

Thomas Stringer
quelle
2

Ich stimme der Ansicht zu, dass Sie Ihren MSSQL-Server möglicherweise nicht neu starten / neu starten müssen, wenn Sie alles richtig machen.
Für mich gilt dies für das Szenario, in dem jeder kompetent ist und Sie alles reparieren können.

Ich bin kein DBA. Ich bin ein Software-Architekt und dazu gehört es, komplette Datenbankschemata von Grund auf neu zu erstellen und leider mit Datenbanken von Drittanbietern zu arbeiten, über die ich keinerlei Kontrolle habe.
Die Leute, die eine unserer wichtigsten Datenbanken von Drittanbietern erstellt und gepflegt haben, haben sie kaum funktionsfähig gemacht.

Habe ich erwähnt, dass ich auch kein Sicherheitsexperte oder Netzwerkingenieur bin?

  • Mindestens ein Hauptfenster-Betriebssystemupdate, Sicherheitsupdate, BIOS-Update, OS / MSSQL Service Pack oder kumulatives MSSQL-Update wird voraussichtlich alle ein oder zwei Monate veröffentlicht.
  • Bei rechtzeitiger Anwendung wird der Server etwa vierteljährlich neu gestartet bzw. neu gestartet.
  • Warum sollten Sie Sicherheitsupdates nicht anwenden, selbst wenn Sie innerhalb eines Intranets arbeiten?
  • Wenn ich SSL auf unseren PHI-Intranet-Websites haben dürfe, würde ich das tun, weil kein Netzwerk unfehlbar ist. Ich bin wohl paranoid.


Für mich wird die Frage dann: Soll ich SQL Server öfter als alle 3 Monate neu starten?

Planen von Neustarts, um zusätzliche Leistung zu versprechen, ist wie Regentanzen.
Vielleicht kommt es, vielleicht nicht, aber Sie werden nicht genau wissen, warum es geregnet hat.

  • Wenn Sie nach dem Neustart des Servers aufgrund regelmäßiger Wartung eine erhebliche Leistungsbeeinträchtigung feststellen, sollten Sie untersuchen, warum dies geschieht.
  • Wenn Sie Probleme haben und nicht sicher sind, was diese verursacht, können Sie beim Reduzieren Ihrer Variablen durch Stoppen von Diensten und Aufträgen (in extremen Fällen wie diesen) einen Neustart / Neustart Ihres Servers mit eingeschalteten Diensten durchführen Durch Deaktivieren (oder Aktivieren von Traces) können Sie diese anderen Dienste als Ursache ausschließen.

Ich sage nicht gern, dass Sie es NIEMALS neu starten müssen, um ein Problem zu beheben oder ein Failover zu überprüfen, aber ich tue es ein Problem mit Scheduling - Neustarts müssen eine unbekannte Leistungsproblem zu verhindern , zufällig auftreten.

Die einzige Ausnahme ist, wenn Sie eine Drittanbieter-Datenbank verwalten, bei der ein wöchentlicher oder zweimaliger Neustart der einzige Weg ist, um den Betrieb aufrechtzuerhalten, und Sie dürfen sie nicht reparieren oder gar berühren.
Selbst dann sollten Sie nach Lösungen suchen, diese mit dem Eigentümer teilen und die Hölle in Schwung bringen, bis sie behoben ist.

MikeTeeVee
quelle