it-swarm.com.de

SQL Server - Best Practices für das Wachsen von Datenbankdateien

Ich habe zwei Wochen lang das Dateiwachstum über den Datenkollektor in SQL Server 2008 R2 überwacht. Die Datenbank wächst stetig mit rund 35 (MB)/Tag. Die Datenbank hat die ursprüngliche Größe von 2 GB noch nicht erreicht.

Das automatische Wachstum der DB-Dateien ist auf 5 MB eingestellt, und ich möchte einen anderen Ansatz ausprobieren. Daher suche ich nach Vorschlägen und/oder Kommentaren.

Es gibt eine Tuning-Aufgabe, die jede Woche am Sonntagabend um 1:30 Uhr ausgeführt wird. Die Aufgabe wird:

  • Überprüfen Sie die Datenbankintegrität
  • Verkleinern Sie die Protokolldatei - (Dies ist in Ordnung, da der Protokollierungsmodus einfach ist.)
  • Datenbank verkleinern
  • Index neu organisieren
  • Index neu erstellen
  • Statistiken aktualisieren
  • Bereinigungsverlauf

Ich möchte dem wöchentlichen Tuning-Plan zwei weitere Schritte hinzufügen:

  1. Erweitern Sie die Datenbankdatei um 500 MB, wenn der verwendete Speicherplatz einen bestimmten Schwellenwert oder eine bestimmte Gesamtgröße erreicht.
  2. Erweitern Sie die Protokolldatei um 250 MB (nach dem Verkleinern), wenn der verwendete Speicherplatz einen bestimmten Schwellenwert für die Gesamtgröße erreicht.

Durch die Platzierung der Wachstumslast in Offline-Stunden hoffe ich, die Leistung zu steigern, indem die Anzahl der Ereignisse mit automatischem Wachstum bei hoher Belastung verringert wird.

Ich habe zwei Fragen zu automatisch wachsenden Dateien.

  • Der beste Ort, um die Schritte zum Dateiwachstum zu platzieren, ist vor oder nach den aktuellen Schritten?
  • Wenn ich die Datei mit ALTER DATABASE|MODIFY FILE Vergrößere, wie kann ich dann feststellen, ob SpaceUsedInFile >= ([email protected])?
16
Ross Bush

Sie sollten darauf abzielen, so wenig wie möglich automatisch zu wachsen. Sieben Mal am Tag ist es unerträglich, selbst bei sofortiger Dateiinitialisierung.

Machen Sie keine Shrink-Datenbank. Je. Shrinkfile vielleicht, aber erst nach einem außergewöhnlichen Ereignis. Es zu verkleinern, um wieder zu wachsen, ist eine Übung der Sinnlosigkeit und sollte eigentlich als Auto-Fragment bezeichnet werden.

Wenn das Wiederherstellungsmodell einfach ist, sollten Sie Ihre Protokolldatei auf keinen Fall um 250 GB vergrößern müssen. Der verwendete Speicherplatz in der Datei wird im Laufe der Zeit automatisch bereinigt, es sei denn, Sie haben vor einem Monat eine Transaktion gestartet und haben nicht die Absicht, sie jemals festzuschreiben oder zurückzusetzen.

Mein Rat wäre also:

Vergrößern Sie die Datendatei in einer ruhigen Zeit manuell auf eine Größe, die mehrere Monate Wachstum ermöglicht. Wofür speichern Sie es in der Zwischenzeit?

Stellen Sie das automatische Wachstumsinkrement für die Datendatei auf einen relativ kleinen Wert ein (damit Benutzer nicht unterbrochen werden, wenn dies geschieht), und warnen Sie bei diesem Ereignis (Sie können es beispielsweise in der Standardablaufverfolgung oder über erweitert abfangen Veranstaltungen). Dies kann Ihnen sagen, dass Sie den von Ihnen geschätzten Höhepunkt erreichen und es Zeit ist, wieder manuell zu wachsen. An dieser Stelle sollten Sie dieses Handbuch aufbewahren, falls Sie eine neue Datei/Dateigruppe auf einem anderen Laufwerk hinzufügen möchten, um den Speicherplatz aufzunehmen, da Sie schließlich das aktuelle Laufwerk füllen werden.

Vergrößern Sie die Protokolldatei automatisch auf beispielsweise das Doppelte der größten, die es je gab. Es sollte nicht automatisch weiter wachsen, es sei denn, es gibt eine abnormale Transaktion, die die Dinge aufhält. Sie sollten auch dieses Ereignis überwachen, damit Sie über sie Bescheid wissen.

24
Aaron Bertrand

Automatisches Wachstum sollten Sie nach Möglichkeit vermeiden. Das Problem ist, dass Sie keine Kontrolle darüber haben, wann das Wachstum stattfinden kann und Ihr System dabei einen ernsthaften Schlag erleiden kann.

Stellen Sie Ihre Dateigröße für einen Monat oder so auf einen vernünftigen Wert ein und überwachen Sie von dort aus Ihre Wachstumsrate. Ermitteln Sie, wie viel Speicherplatz Sie für X Zeit schätzen, und stellen Sie Ihre Größe auf diese + Fehlerquote ein.

Ich habe einen einfachen Überwachungsjob eingerichtet, der mich benachrichtigt, wenn die Dateigröße vor dem automatischen Wachstum ein vordefiniertes Maximum erreicht. Sie könnten so etwas verwenden:

SELECT instance_name,
       [Data File(s) Size (KB)],
       [LOG File(s) Size (KB)],
       [Log File(s) Used Size (KB)],
       [Percent Log Used]
       into ##Logsize
FROM
(
   SELECT *
   FROM sys.dm_os_performance_counters
   WHERE counter_name IN
   (
       'Data File(s) Size (KB)',
       'Log File(s) Size (KB)',
       'Log File(s) Used Size (KB)',
       'Percent Log Used'
   )
     AND instance_name = 'database your interested in' 
) AS Src
PIVOT
(
   MAX(cntr_value)
   FOR counter_name IN
   (
       [Data File(s) Size (KB)],
       [LOG File(s) Size (KB)],
       [Log File(s) Used Size (KB)],
       [Percent Log Used]
   )
) AS pvt 
go
declare @logsize int
Select @logsize = [Percent Log Used] from ##Logsize

If @logsize > the maximum percent you want the log to fill too i.e 90
    BEGIN
        --Do your thing here
    END

Drop table ##Logsize

Dies könnte natürlich als Job geplant werden.

10
Nick Winstanley