Löscht der Neustart der SQL Services (auf dem Computer) den Server-Cache (z. B. für Abfragepläne und Statistiken)?


Antworten:


12

Ja tut es. Da SQL Server für die Verwaltung dieser Caches verantwortlich ist, gibt es beim Herunterfahren der Dienste von SQL Server den Speicher wieder an das Betriebssystem frei.


Vielen Dank! Wissen Sie als Bonusfrage, ob ein Neustart nur der Dienste während eines Rollbacks einer Abfrage möglicherweise dazu führen kann, dass der Server wieder in den Status "Wiederherstellen" versetzt wird, oder ist dies nur ein potenzielles Ergebnis eines Neustarts der gesamten Instanz / Maschine?
JD

1
Es könnte, aber ich weiß nicht, ob es würde. Der fortwährende Rollback ist natürlich ein Problem, und ich musste tun, worüber Sie vorher gefragt haben. Die DB kam nicht in einem erholsamen Zustand zurück, aber ich hätte einfach Glück gehabt. Einige der Berater, wie die Crew von Brent Ozar oder Aaron Bertrand, wissen es vielleicht genau.
Lachender Vergil

Wiederherstellung ist nur bei unsauberem Herunterfahren oder bei bereits bestehender Korruption
erforderlich

3
Eine Datenbank startet immer im Wiederherstellungszustand, aber die Wiederherstellung ist normalerweise so schnell, dass Sie sie nicht abfangen. (Es gibt eine Ausnahme, in der die MDF-Datei ein bisschen enthält, das besagt, dass die saubere Datenbank heruntergefahren wurde. Sie sollten sich jedoch konzeptionell überlegen, ob eine Datenbank immer im Wiederherstellungszustand startet.) Die Wiederherstellungsphase kann lange dauern, wenn Sie einen großen Rollback haben, dh Sie bemerken diesen Status möglicherweise jetzt. Sie können aber auch ein Problem mit der Wiederherstellung haben, z. B. eine fehlende Datenbankdatei, und jetzt steht "Wiederherstellung ausstehend" (und dies wird sich nicht von selbst regeln).
Tibor Karaszi

15

Das Verhalten unterscheidet sich nicht zwischen einem Neustart des Dienstes allein oder einem Neustart des Dienstes aufgrund eines Neustarts des zugrunde liegenden Betriebssystems. Welche Informationen werden bei einem solchen Neustart gelöscht?

  • Abfragepläne? Ja.
  • Tabellen- / Indexdaten? Ja.
  • Statistiken? Nein.

(Abfragepläne, die Statistiken verwenden, müssen neu kompiliert werden, aber Statistiken müssen nicht neu erstellt werden, es sei denn, es gab auch ein Ereignis oder eine Bedingung, die dies auslöste (es gibt mehrere).)

Wenn Sie den Dienst beenden, während eine Transaktion zurückgesetzt wird, haben Sie wahrscheinlich nichts erreicht, da der Rollback möglicherweise nur an der Stelle neu gestartet wird, an der er aufgehört hat (oder je nach Art der Aktivität, die ausgeführt wird, vollständig neu gestartet werden muss) zurückgerollt).

Wenn Sie den Dienst neu gestartet haben, weil Sie ungeduldig auf den Abschluss eines Rollbacks gewartet haben, ist dies wahrscheinlich eine teure Lektion, die Sie nur ein oder zwei Mal durchführen müssen, bevor Sie aufhören, es zu versuchen. Sehen:


Danke Aaron, aufschlussreich wie immer! Wenn Sie sagen "Wenn Sie den Dienst beenden, während eine Transaktion zurückgesetzt wird, haben Sie nichts erreicht, beginnt der Rollback nur dort, wo er aufgehört hat", sagen Sie, dass dies immer der Fall ist oder in den meisten Fällen? Wenn erstere, wie kommt es, dass sp_who2 beim Neustart der Dienste nicht mehr zeigte, dass die Prozesse zurückgesetzt wurden (ihre SPIDs waren weg)?
JD

1
@ JD Entschuldigung, wird sollte Mai sein . Es ist möglich, dass der Rollback vor dem Neustart blockiert wurde und nach dem Neustart nichts blockiert wurde, sodass er sofort abgeschlossen werden konnte. Das Töten der Dienste ist nur ein gefährliches und unvorhersehbares Spiel.
Aaron Bertrand

Ah gotcha. Und stimmte zu, leider war es in diesem Fall nicht meine Wahl, aber ich dachte, es hätte die gleichen möglichen Auswirkungen wie ein Neustart der Instanz. Wissen Sie, ob es möglich ist, dass die Datenbank auch in einem "Wiederherstellungs" -Status wiederhergestellt wird, wenn nur die Dienste neu gestartet werden, ähnlich wie dies beim Neustart der Instanz während eines Rollbacks passieren kann?
JD

1
@JD Sicher, alles ist möglich, wenn Sie die Arterie von SQL Server durchtrennen. :-) Abhängig davon, was zum Zeitpunkt des Abbruchs des Dienstes noch in der Datenbank vor sich ging, müssen Sie warten, bis das Wiederherstellen und Rückgängigmachen abgeschlossen ist, bevor die Datenbank verfügbar ist, und es kann andere katastrophalere Ursachen für die Wiederherstellung geben Speziell ausstehend.
Aaron Bertrand

0

Der SQL Server reserviert beim Start den Betriebssystemspeicher, der als Pufferpool bezeichnet wird. Die tägliche Arbeitslast erhöht den Pufferpool und jede Seite, jeder Cache, jede Abfragestatistik, jede Prozedurstatistik usw. werden im Pufferpool gespeichert. Diese Informationen befinden sich im Pufferpool, bis folgende Ereignisse eintreten.

  1. SQL Server / System Neustart
  2. dbcc dropcleanbuffers-Anweisung wird ausgeführt
  3. Speicherdruck.

Ich hoffe, das würde Ihnen helfen, zu verstehen.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.