it-swarm.com.de

Ist es sicher, dass die automatische Verkleinerung von SQL Server aktiviert ist?

Es gibt viele SQL Server-Optionen, die für Datenbanken aktiviert werden können, und eine der am meisten missverstandenen ist das automatische Verkleinern. Ist es sicher? Wenn nicht, warum nicht?

44
Paul Randal

(Ich habe ursprünglich als reguläre Frage gestellt, dann aber die richtige Methode herausgefunden - danke BrentO)

Nein niemals.

Ich bin jetzt schon mehrmals auf ServerFault darauf gestoßen und möchte mit einigen guten Ratschlägen ein schönes breites Publikum erreichen. Wenn die Leute diese Art der Arbeit missbilligen, stimmen Sie ab und ich werde dies gerne entfernen.

Das automatische Verkleinern ist eine sehr häufige Datenbankeinstellung, die aktiviert wurde. Es scheint eine gute Idee zu sein - entfernen Sie den zusätzlichen Speicherplatz aus der Datenbank. Es gibt viele "unfreiwillige Datenbankadministratoren" (denken Sie an TFS, SharePoint, BizTalk oder nur normalen alten SQL Server), die möglicherweise nicht wissen, dass das automatische Verkleinern positiv 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, musste sie jedoch aus Gründen der Abwärtskompatibilität beibehalten.

Warum ist das automatische Schrumpfen so schlecht?

Die Datenbank wird wahrscheinlich wieder wachsen. Warum also verkleinern?

  1. Shrink-Grow-Shrink-Grow verursacht eine Fragmentierung auf Dateisystemebene und beansprucht viele Ressourcen.
  2. Sie können nicht steuern, wann es losgeht (obwohl es normal ist)
  3. Es verbraucht viele Ressourcen. Das Verschieben von Seiten in der Datenbank erfordert CPU, viel E/A und viel Transaktionsprotokoll.
  4. Hier ist der eigentliche Kicker: Das Verkleinern von Datendateien (ob automatisch oder nicht) führt zu einer massiven Indexfragmentierung, die zu einer schlechten Leistung führt.

Ich habe vor einiger Zeit einen Blog-Beitrag verfasst, der ein SQL-Beispielskript enthält, das die dadurch verursachten Probleme zeigt und etwas ausführlicher erklärt. Siehe Automatisch verkleinern - ausschalten! (keine Werbung oder Müll wie dieser in meinem Blog). Verwechseln Sie dies nicht mit dem Verkleinern der Protokolldatei, was gelegentlich nützlich und notwendig ist.

Tun Sie sich selbst einen Gefallen - schauen Sie in Ihre Datenbankeinstellungen und deaktivieren Sie die automatische Verkleinerung. Aus genau dem gleichen Grund sollten Sie auch Ihre Wartungspläne nicht verkleinern. Verbreiten Sie das Wort an Ihre Kollegen.

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 bei einer Unterbrechung ausgeführt wird.

Hoffe das hilft!

71
Paul Randal

Natürlich hat Paul recht.

Alle DBs und ihre Autoshrink-Einstellungen anzeigen. Wenn Sie viele Datenbanken haben, wird sich eine einschleichen.

sp_msforeachdb  @command1 = 'Select ''[?]'',DATABASEPROPERTYEX(''?'',''IsAutoShrink'')'

Ist das irgendwo im dmv ... frage ich mich.

4
Sam

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 teure Neuanordnungsübung zu starten, kurz bevor ein Stapel von Anforderungen eingeht, sodass die Bearbeitung dieser Anforderungen länger dauert. Sie sind viel besser dran, wenn Sie Shrink-Vorgänge zusammen mit anderen Wartungsvorgängen wie Sicherungen planen (tatsächlich nach Sicherungen - auf diese Weise wird mehr aus dem Transaktionsprotokoll entfernt). Oder schrumpfen Sie überhaupt nicht, es sei denn, es liegt ein Wachstumsproblem vor. Sie können jederzeit einen Monitor einrichten, der Sie darüber informiert, wenn der nicht genutzte zugewiesene Speicherplatz über ein bestimmtes Verhältnis oder eine feste Größe hinaus wächst.

IIRC Die Option ist standardmäßig für alle Datenbanken in allen MSSQL-Editionen außer Express deaktiviert.

2
David Spillett

Im TechNet ist ein Whitepaper verfügbar, in dem die SQL-Wartung ausführlicher erläutert wird.

http://technet.Microsoft.com/en-us/library/cc262731.aspx

1
Jeremy Thake

Ich habe einen SQL Server gesehen, auf dem sowohl Autogrow als auch Autoshrink aktiviert sind. 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:

  1. Deaktivieren Sie Autoshrink standardmäßig.
  2. Dokumentieren Sie Ihre Serverkonfigurationen, damit Sie wissen, wo Autogrow und Autoshrink aktiviert sind und wo nicht.
1
Carl C

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 hatten großzügigen freien Speicherplatz. Leider müssen Sie eine Datenbank mit denselben Dateigrößen wiederherstellen, mit denen Sie sie gesichert haben. Ich hatte also keine andere Wahl, als die Produktion vor dem Sichern zu verkleinern. (Der Rückgang dauerte ewig, es wurden viele Ressourcen verbraucht und das anschließende Wachstum des Transaktionsprotokolls war problematisch.)

1
SuperCoolMoss

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