Wie soll ich am besten mit einer schnell wachsenden Datenbank umgehen?

7

Ich habe eine Datenbank, die ich pflegen muss.

Leider kann ich an der Einrichtung und Verwendung dieser Datenbank nicht viel ändern (dank einiger interner Richtlinien).

Es läuft unter SQL Server 2008r2.

Es ist erst seit 5 Tagen aktiv und ist in dieser Zeit von 20 GB auf über 120 GB angewachsen. (Im Wesentlichen werden die meisten Daten gelöscht und dann importiert, aber wie gesagt, ich kann diese Seite der Dinge nicht kontrollieren.)

Ich würde gerne nächtliche Jobs ausführen, um die Datenbank zu verkleinern und die Indizes neu zu organisieren, aber ich weiß, dass dies weit von den Best Practices entfernt ist und zu mehr Problemen führen kann, als ich bereits habe!

FRAGEN

  • Was ist der beste Weg, um mit einer Datenbank umzugehen, deren Größe schnell zunimmt?
  • Sollte ich versuchen, die Dateigruppe zu verschieben, um die physische Größe auf der Festplatte niedrig zu halten?
  • Gibt es eine Möglichkeit, zu verhindern, dass dem Server innerhalb eines Monats der Speicherplatz ausgeht?
James Sinclair
quelle
2
Können Sie uns das von Ihnen verwendete Wiederherstellungsmodell mitteilen? Können Sie auch erweitern, was Sie unter "gelöscht und dann importiert" verstehen?
Liam Confrey
Einfaches Wiederherstellungsmodell und mit "gelöscht und importiert" meine ich, dass anstelle von UPDATE DELETE und INSERT verwendet werden. Ich weiß, es ist schlecht, schrecklich schrecklich schlecht, aber ich kann es nicht ändern!
James Sinclair

Antworten:

11

Ich empfehle nicht, Ihre Datenbankdateien zu verkleinern, es sei denn, Sie sind sich völlig sicher, dass der Speicherplatz nie wieder benötigt wird . Warum jede Nacht schrumpfen, damit es jeden Tag wächst? Sie werden auf die Schwachstellen stoßen, wenn Sie Ihre Datendateien verkleinern, und Sie müssen sich auf die Leistung auswirken, wenn die Datenbankdateien im Laufe des Tages wachsen müssen .

Wenn es aufgrund des anfänglichen Speicherplatzbedarfs auf 120 GB hochgefahren ist, kann man mit Sicherheit sagen, dass die Datenbank nicht größer sein wird (offensichtlich mit etwas Puffer)? Passen Sie die Größe Ihrer Datenbank entsprechend an.

Andernfalls müssen Sie lediglich sicherstellen, dass die Datenbank kontinuierlich wächst und Sie keine Eingaben zum Datenwachstum haben (dh wenn Sie keine Daten aus der Datenbank archivieren können) ausreichend Platz für das erforderliche Wachstum.

Wissen Sie, welche Datenbankdateien gewachsen sind? Es gibt ein anderes Verhalten, das dazu führt, dass Datendateien wachsen, im Gegensatz zu Transaktionsprotokollen und deren Größe. Wenn das Transaktionsprotokoll aufgrund stark protokollierter Transaktionen der Hauptverbraucher des Speicherplatzes ist, können Sie häufigere Transaktionsprotokollsicherungen in Betracht ziehen, um sicherzustellen, dass das Protokoll häufiger wiederverwendet wird (hier gibt es einige Stopps als offene Transaktionen, sodass dies möglicherweise nicht möglich ist über die Grenze).

Weitere Informationen zum Wachstum und zum Szenario sind erforderlich, um genauer zu werden. Ich empfehle jedoch nicht, Ihre Datenbankdateien planmäßig zu verkleinern .

Thomas Stringer
quelle
3

Basierend auf den von Ihnen angegebenen Informationen würde ich sagen, dass der beste Weg zur Verwaltung dieser Datenbank darin besteht, sich mit den Hauptbenutzern zusammenzusetzen und die erwartete Wachstumsrate für 1, 3, 5 und 7 Jahre zu bestimmen. Passen Sie die Größe der Datendateien an die von den Benutzern erwartete Größe von 3 Jahren an, ermöglichen Sie ein automatisches Wachstum in überschaubaren Schritten bis zur Größe von 5 Jahren, wenn die Datenbank die 3-Jahres-Größe schneller als erwartet erreicht, und stellen Sie sicher, dass Sie dies tun Sie verfügen über genügend Laufwerk und Speicherplatz für die 7-Jahres-Größe, um alle Ihre Sicherungsstrategien und DR-Pläne einzuschließen.

Ich werde eine Einschränkung hinzufügen: Da Sie R2 verwenden, möchten Sie möglicherweise einen Utility Control Point für die Datenbankinstanz installieren. Auf diese Weise können Sie den in den Datendateien verwendeten Speicherplatz verfolgen. Wenn die anfängliche Dateneingabe tatsächlich 5x größer als erforderlich war, können Sie dies möglicherweise feststellen und die Größe der Datendateien auf eine kleinere Größe ändern und dann den Wachstumsplan für 1 bis 7 Jahre initiieren.

MSDN UCP-Informationen

Cougar9000
quelle
0

Sie erwähnen, dass Datensätze "mit DELETE und INSERT not UPDATE geändert werden". Wenn dies der Fall ist, können Sie dann bestätigen, dass das Wachstum nur in den Datenbankdateien und nicht auch in den Protokolldateien liegt?

Wenn Sie einen hohen Durchsatz haben und jedes UPDATE als DELETE / INSERT verdoppelt wird, werden Sie wahrscheinlich ein höheres Protokollwachstum als üblich feststellen. Dies sollte festgestellt werden, solange Ihre Sicherungen regelmäßig durchgeführt werden und das Protokoll ordnungsgemäß abgeschnitten wird.

Ich würde ein Tabellenkalkulationsdokument erhalten und jeden Tag mit der Protokollierung von Daten / Protokollgrößen beginnen, um zu sehen, wie lange es dauert, bis Ihnen der praktische Raum ausgeht. (Vielleicht erhalten Sie ein schönes Diagramm, das eine anständige Trendlinie zeigt, die auf Ihren maximalen Speicherplatz abzielt.) Sie geben nicht den maximal verfügbaren Speicherplatz an, aber selbst bei mehr als 1 TB Speicherplatz kann es vorkommen, dass die Festplattennutzung E / A-Probleme verursacht, wenn dies der Fall ist besonders "beschäftigt".

Wenn Sie zeigen können, dass Sie sehr bald die Kapazität erreichen werden, könnte dies ein gutes Argument für das Management sein;)

Dinge, die das Wachstum (leicht) verringern. Wenn Sie datetime in datetime2, nvarchar in varchar usw. konvertieren, werden gegebenenfalls einige Bytes (aus den Daten und den Indizes der Daten) entfernt, aber Sie benötigen wahrscheinlich Ausfallzeiten, um dies zu tun. Führen Sie http://www.brentozar.com/blitzindex/ für Schlüsseltabellen aus. Möglicherweise finden Sie Indizes mit 0 Lesezahlen, die sicher gelöscht werden können, wenn niemand beabsichtigt, sie zu verwenden.

Stellen Sie sicher, dass alle Ihre Tabellen gute Clustered-Indizes haben. Nach meiner (begrenzten) Erfahrung können große Tabellen halbiert werden, wenn sie noch keine haben. Wenn Sie Best Practices befolgen, erhalten Sie viel weniger Fragmentierung: https: // www .simple-talk.com / sql / learn-sql-server / effektive-clustered-indexes /

Dies kann Ihnen Zeit verschaffen, aber nur strukturelle Änderungen lösen die Wurzel des Problems.

Greg Robson
quelle