Bei jedem Neustart meines Servers befindet sich die Datenbank immer im Wiederherstellungsmodus und es dauert ungefähr 20 Minuten, bis sie sich normal verhält. Dies passiert immer und nur, wenn ich den Server neu starte, also habe ich ein paar Fragen ...
- Mir wurde gesagt, dass dies durch eine große Protokolldatei verursacht werden könnte? Könnte das richtig sein? Wenn nicht, was könnten dann die anderen Ursachen sein?
- Ich muss den Speicherplatz der Protokolldatei verringern, um Wiederherstellungen zu verhindern. Was ist besser: schrumpfen oder abschneiden?
- Wie kann ich eine Protokolldatei / Datenbank verkleinern oder kürzen, um die Größe zu verringern? Wie ist die Syntax?
Ich verwende derzeit Microsoft SQL Server 2008.
Antworten:
Ich habe das gleiche Problem und glaube, ich habe es behoben, aber ich konnte es nicht vollständig testen, um es zu bestätigen.
Ich glaube, die Probleme hängen mit der Anzahl der VLFs zusammen, die Sie in Ihrer Protokolldatei haben, und nicht mit ihrer Größe. Wenn Sie eine große Protokolldatei haben, ist es wahrscheinlich, dass sie durch automatische Wachstumsereignisse organisch gewachsen ist und dass es sich nicht um ein beabsichtigtes geplantes Wachstum handelt. In diesem Fall befinden sich möglicherweise Tausende von VLFs in Protokolldateien.
Hier ist eine Abfrage, um zu sehen, wie viele VLFs Sie haben, die ich von hier aus verwendet habe :
Eine weitere Erklärung der VLFs finden Sie unter diesem Link .
Ich glaube, das Problem ist, dass SQL Server bei so vielen VLFs lange braucht, um ihren Status zu beurteilen und dann die Datenbank aus der Wiederherstellung zu bringen. Wenn Sie Ihre Protokolldatei auf die kleinstmögliche Größe verkleinern, häufig auf die Größe des ersten VLF, der in der Protokolldatei erstellt wurde, können Sie sie sofort absichtlich wieder vergrößern und dadurch die richtige Anzahl von VLFs erstellen lassen (etwas weniger als) 16).
Sobald dies abgeschlossen ist, können Sie sicher feststellen, dass Ihre Datenbank viel schneller wiederhergestellt wird.
Ich hatte keine Gelegenheit, ein Failover unserer Produktionsinstanzen zu testen, nachdem ich unsere eigenen VLF-Probleme behoben hatte. Daher wäre ich sehr gespannt, ob Sie bestätigen können, dass dies die Hauptursache des Problems ist. Experimentell habe ich gesehen, dass die Zeit, die für die Wiederherstellung in unserer Staging-Umgebung benötigt wird, aufgrund dieser Tatsache drastisch reduziert wurde. Hoffentlich ist es das.
quelle
Aus diesem MSDN- Artikel :
Es wird im Allgemeinen nicht empfohlen, eine DBCC-Schrumpfdatei in Produktionsdatenbanken auszuführen. Auch das Verhalten beim Abschneiden von Protokollen wurde von früheren Versionen auf 2008 geändert (danke @Edward) - laut diesem Blog :
Ich werde noch einmal erwähnen, wie oft Sie die Datenbank sichern? In der Regel "verwalten" regelmäßige Sicherungen die Protokollgröße am besten.
quelle
Das Reduzieren der Größe des Online-Transaktionsprotokolls kann das Problem beheben, dh das Online-Schalten der Datenbank beschleunigen. Sie sollten jedoch vorher über die Notfallwiederherstellung nachdenken. Beachten Sie, dass Sie im Simple Recovery-Modell zu einem bestimmten Zeitpunkt keine Wiederherstellung durchführen können. Wenn Sie sich jedoch im vollständigen Wiederherstellungsmodell befinden, können Sie die Größe des Online-Transaktionsprotokolls am besten beibehalten, indem Sie regelmäßig eine Transaktionsprotokollsicherung erstellen (planen).
Durch das Abschneiden des Transaktionsprotokolls wird kein physischer Festplattenspeicher freigegeben, sondern der SQL Server kann diesen Speicherplatz nur für Transaktionen wiederverwenden, die seit dem letzten CHEKPOINT (seit der letzten Sicherung des Transaktionsprotokolls) aufgetreten sind.
Wenn Sie die Datenbank verkleinern, reduzieren Sie die Größe der Dateien. So verkleinern Sie die MyDB-Datenbank um 15 Prozent:
DBCC SHRINKDATABASE (MyDB, 15); GEHEN
quelle