Es gibt viele SQL Server-Optionen, die für Datenbanken aktiviert werden können, und eine der am häufigsten missverstandenen ist das automatische Verkleinern. Ist es sicher? Wenn nein, warum nicht?
Es gibt viele SQL Server-Optionen, die für Datenbanken aktiviert werden können, und eine der am häufigsten missverstandenen ist das automatische Verkleinern. Ist es sicher? Wenn nein, warum nicht?
Antworten:
(Ich habe ursprünglich als normale Frage gestellt, dann aber die richtige Methode herausgefunden - danke BrentO)
Nein niemals.
Ich bin auf ServerFault schon mehrmals darauf gestoßen und möchte mit guten Ratschlägen ein nettes, breites Publikum erreichen. Wenn die Leute über diese Art und Weise die Stirn runzeln, stimmen sie ab und ich werde das gerne entfernen.
Das automatische Verkleinern ist eine sehr häufig zu aktivierende Datenbankeinstellung. Es scheint eine gute Idee zu sein - entfernen Sie den zusätzlichen Speicherplatz aus der Datenbank. Es gibt viele "unfreiwillige DBAs" (denken Sie an TFS, SharePoint, BizTalk oder einfach an normalen alten SQL Server), die möglicherweise nicht wissen, dass das automatische Verkleinern absolut böse ist.
Während meiner Zeit bei Microsoft besaß ich die SQL Server Storage Engine und versuchte, die Funktion zum automatischen Verkleinern zu entfernen, sie musste jedoch aus Gründen der Abwärtskompatibilität beibehalten werden.
Warum ist das automatische Schrumpfen so schlecht?
Es ist wahrscheinlich, dass die Datenbank erneut wächst. Warum also verkleinern?
Vor einiger Zeit habe ich einen Blog-Beitrag verfasst, der ein SQL-Beispielskript enthält, das die dadurch verursachten Probleme aufzeigt und etwas ausführlicher erklärt. Siehe Automatisch verkleinern - ausschalten! (keine Werbung oder ähnlicher Müll auf meinem Blog). Verwechseln Sie dies nicht mit dem Verkleinern der Protokolldatei, was gelegentlich nützlich und notwendig ist.
Tun Sie sich selbst einen Gefallen - sehen Sie in Ihren Datenbankeinstellungen nach und deaktivieren Sie die automatische Verkleinerung. Aus genau dem gleichen Grund sollten Sie Ihre Wartungspläne auch nicht verkleinern. Teilen Sie es Ihren Kollegen mit.
Bearbeiten: Ich sollte dies hinzufügen, erinnert an die zweite Antwort - es gibt ein weit verbreitetes Missverständnis, dass das Unterbrechen eines Verkleinerungsvorgangs zu Korruption führen kann. Nein, wird es nicht. Früher besaß ich den Verkleinerungscode in SQL Server - er setzt die aktuelle Seitenverschiebung zurück, die ausgeführt wird, wenn sie unterbrochen wird.
Hoffe das hilft!
Natürlich hat Paul Recht.
Alle DBs und ihre Autoshrink-Einstellungen anzeigen. Wenn Sie viele Datenbanken haben, wird man sich einschleichen.
sp_msforeachdb @command1 = 'Select ''[?]'',DATABASEPROPERTYEX(''?'',''IsAutoShrink'')'
Ist das irgendwo im dmv .... Ich frage mich.
Es ist nicht "unsicher" - es wird nichts beschädigen.
Es wird jedoch nicht für Produktionsumgebungen empfohlen, in denen sich die Datenbank möglicherweise dazu entschließt, eine kostspielige Neuanordnung vorzunehmen, bevor ein Stapel von Anforderungen eingeht, sodass die Bearbeitung dieser Anforderungen länger dauert. Sie sind viel besser dran, wenn Sie die Planung von Verkleinerungsvorgängen zusammen mit anderen Wartungsvorgängen, wie z. B. Sicherungen, verwenden (tatsächlich nach Sicherungen - auf diese Weise wird mehr aus dem Transaktionsprotokoll entnommen). Sie können jederzeit einen Monitor einrichten, der Sie darüber informiert, wenn der nicht verwendete zugewiesene Speicherplatz ein bestimmtes Verhältnis oder eine feste Größe überschreitet.
IIRC Die Option ist standardmäßig für alle Datenbanken in allen MSSQL-Editionen mit Ausnahme von Express deaktiviert.
Im TechNet ist ein Whitepaper verfügbar, in dem die SQL-Wartung ausführlicher erläutert wird.
Ich habe einen SQL Server mit aktiviertem Autogrow und Autoshrink gesehen. Dieser (relativ leistungsfähige) Server war furchtbar langsam, da er den ganzen Tag nur die Datenbankdateien verkleinerte und vergrößerte. Autoshrink kann nützlich sein, aber ich würde zwei Dinge empfehlen:
Das einzige Mal, dass ich gezwungen war, eine Datenbank zu verkleinern, war das Aktualisieren einer Kopie auf einem Testserver mit weniger Speicherplatz (nicht ausreichend, um die Produktionsdatenbank zu speichern).
Die Datei (en) der Produktionsdatenbank verfügten über ausreichend freien Speicherplatz. Leider müssen Sie eine Datenbank mit den gleichen Dateigrößen wiederherstellen, mit denen Sie sie gesichert haben. Es blieb also nichts anderes übrig, als die Produktion zu verkleinern, bevor sie gesichert wurde. (Die Verkleinerung dauerte Ewigkeiten, es wurden viele Ressourcen verbraucht und das anschließende Wachstum des Transaktionsprotokolls war problematisch.)
Schauen Sie sich auch dieses Video-Tutorial an ....
Sehen Sie, wie Paul Randal demonstriert, wie das Verkleinern und automatische Verkleinern schwerwiegende Fragmentierungsprobleme für Ihre Datenbank verursachen kann. Http://wtv.watchtechvideos.com/topic194.html