Auf unserem Entwicklungsserver aktualisieren wir jede Woche die Datenbank (Wiederherstellung aus Produktionssicherung). Meine Frage ist, löscht die Wiederherstellung der Datenbank ihren Puffer-Cache / Cache für gespeicherte Prozeduren aus dem SQL-Speicher? Hat es den gleichen / ähnlichen Effekt von DBCC FREEPROCCACHE
undDBCC DROPCLEANBUFFERS
Vielen Dank.
sql-server
Joy Walker
quelle
quelle
Antworten:
Ja. Der Puffer und der Plan-Cache, die der Datenbank vor der Wiederherstellung zugeordnet sind, beziehen sich nicht auf die Datenbank nach der Wiederherstellung, sodass sie gelöscht werden. In jeder Hinsicht ist die wiederhergestellte Datenbank eine völlig separate, nicht verwandte Einheit. Es gibt nichts im Cache, das wiederverwendet werden kann.
quelle
Interessante Frage und (jetzt sehe ich, dass @ MarkStorey-Smith geantwortet hat, zögere ich zu antworten - also akzeptiere seine, da er zuerst geantwortet hat) Ich habe mich entschlossen, etwas zu überprüfen. Ich habe eine Datenbank mit dem Namen
analysis
einer meiner lokalen VMs. Also habe ich dieses Skript ausgeführt (weitere Informationen zum Puffer und die Basis für meine Abfragen finden Sie hier ):471 Pufferseiten vor der Wiederherstellung, 242 danach. Leider habe ich die Seitentypen im Cache nicht aggregiert, aber ich glaube, dass die Seiten im Cache damit zu tun haben, dass ich die Pufferanalyse-Abfragen ausgeführt habe.
Hier sind die Ergebnisse der Abfrage für vor und nach der Wiederherstellung Analyse ...
analysis
.VOR:
POST:
quelle
Wie Swasheck und Mark begann ich zu spielen, als dieser herauskam. Bitte akzeptiere diese Antwort nicht, akzeptiere Marks, gib mir nicht einmal Punkte, ich habe keine Screenshots, als ich sah, wie Swasheck schrieb, woran ich angefangen hatte zu arbeiten, aber das ist zu lang für einen Kommentar.
Die kurze Antwort lautet also: Ja, dir geht es gut
Trotzdem habe ich von Berichten in früheren SQL-Versionen gehört, in denen die Leute anscheinend dachten, dies sei erforderlich. Also wollte ich sicher sein und habe einen Test gemacht. Ich habe eine Datenbank erstellt, einige Tabellen erstellt und dann Glenns Abfrage verwendet, um festzustellen , wie viel von dieser Datenbank sich vor der Wiederherstellung im Puffercache befand. Bevor ich ungefähr 50,2 MB Daten hatte, nachdem ich ungefähr 1,5 MB hatte - dies ist höchstwahrscheinlich auf etwas nach der Wiederherstellung zurückzuführen, nicht auf Daten, die herumhängen.
Ich habe auch mehrere Abfragen zuvor ausgeführt und Tabellen-Aliase wie "foo" eingefügt, damit ich sie mithilfe der folgenden Abfrage im Cache finden konnte. Ich habe sie alle dort gesehen, die Wiederherstellung durchgeführt und sie waren weg.
Daher kann ich bei meinen eingeschränkten Tests unter SQL Server 2012 mit Sicherheit sagen, dass die Spuren der Datenbank vollständig aus dem Pufferpool und dem Plan-Cache entfernt wurden. Was Sinn macht, weil die DB, auf die sie sich bezogen, verschwunden ist, das ist das erwartete Verhalten.
Das heißt - nach einer Wiederherstellung sollten Sie auf jeden Fall in Betracht ziehen, Ihre Statistiken zu aktualisieren. Ich mag es, mit dem Aufbau sauberer Statistiken zu beginnen, und ich mag es wirklich, wenn Leute produktionsähnliche Daten in dev verwenden, und ich mag es, mit sauberen Statistiken zu beginnen. So gut, dass Sie echte Daten in dev verwenden. (Vorsichtsmaßnahme - manchmal müssen Sie Ihre Daten vorher identifizieren, bevor Sie dies tun, aber yay zum Testen mit realen Datenverteilungen und -größen.)
quelle
Ich melde mich gerne zurück. Die Wiederherstellung wurde vor einigen Minuten für eine VLDB (1 TB) (SQL2008R2 SP2CU7) durchgeführt. Wie vermutet, ist der Datencache nach der Wiederherstellung so gut wie verschwunden. Alle obigen Antworten sind also richtig.
Um die Statistiken zu erhalten, habe ich ein Skript verwendet, das aus einem von Mark angedeuteten verwandten Beitrag entlehnt / gestohlen wurde . Sehr hilfreich. Vielen Dank.
quelle