web-dev-qa-db-ger.com

Wie kann ich die SQL Server-Protokollgröße verwalten?

Ich versuche, die Größe einer SQL Server 2008-Protokolldatei zu verwalten. Ich habe eine Berichtsdatenbank, die einmal täglich geladen wird. Das einfache Wiederherstellungsmodell ist am besten geeignet, da es außer der morgendlichen Auslastung keine Transaktionen gibt und ich diese Datensätze neu erstellen kann. Mein Ziel ist es, das Transaktionsprotokoll auf eine feste Größe zu bringen, die so groß ist, dass während des Ladens kein neuer Speicherplatz zugewiesen werden muss.

Mein Problem ist, dass das Protokoll immer weiter wächst. Ich weiß, dass das Protokoll für die Wiederverwendung markiert werden soll, aber warum wächst das Protokoll immer weiter? Der log_reuse_wait_desc zeigt "Nothing".

Ich kann die Protokolldatei auf 1 MB verkleinern, daher weiß ich, dass darin keine Transaktionen enthalten sind. Ich kann einen Job einrichten, aber ich würde es vorziehen, das Protokoll bei 500 MB zu belassen, was für die täglichen Ladevorgänge ausreichend ist. Wenn ich das tue, wächst das Protokoll.

Wie kann ich das Protokoll auf einer konstanten Größe halten?

Bitte beachten Sie: Durch das Verkleinern der Protokolldatei wird dieses Problem nicht behoben. Ich weiß, wie das geht. Ich versuche, einen Weg zu finden, wie Speicherplatz im Transaktionslog erneut verwendet werden kann.

15
Ed Mays

Die Protokolldatei wird für Transaktionszwecke verwendet, auch wenn sich die Datenbank im SIMPLE RECOVERY MODE befindet. Wenn die Größe des LOG tatsächlich über 500 MB steigt, führt jemand eine Abfrage oder eine gespeicherte Prozedur aus, die diesen Speicherplatz benötigt.

Beispielsweise erstellen Sie möglicherweise Indizes für Ihre Berichtstabellen. Dies geschieht innerhalb einer Transaktion, damit die Änderungen im Fehlerfall rückgängig gemacht werden können. Der belegte Speicherplatz wird jedoch nach Abschluss für andere Transaktionen freigegeben.

Wenn also die Protokollgröße bei 1 MB beginnt und auf 700 MB ansteigt, wird etwas getan, das diesen Speicherplatz benötigt. Wenn Sie die Größe auf 500 MB beschränken, erhalten Sie schließlich die Fehlermeldung "Protokolldatei nicht genügend Speicherplatz".

Wenn Sie es wirklich bei 500 MB beheben wollen, können Sie Folgendes tun: (Ich verwende SQL Server 2005)

  1. Starten Sie Microsoft SQL Server Management Studio
  2. Suchen Sie Ihre Datenbank und klicken Sie mit der rechten Maustaste darauf. Wählen Sie Eigenschaften aus.
  3. Klicken Sie auf den Abschnitt Dateien
  4. Suchen Sie die LOG FILE-Zeile.
  5. Ändern Sie die Anfangsgröße in: 500
  6. Suchen Sie nach dem Abschnitt Autogrowth und klicken Sie auf die Ellipse (...).
  7. Deaktivieren Sie "Automatische Vergrößerung aktivieren". OK klicken.
  8. Klicken Sie auf OK, um die Änderung vorzunehmen.

Hinweis: Sie können auch eine maximale Protokolldateigröße im Abschnitt "Autogrowth" festlegen.

Alternativ können Sie das folgende Skript verwenden, um die Änderung vorzunehmen. Ersetzen Sie DATABASENAME durch den entsprechenden Wert. Ändern Sie ggf. auch den Namen der Protokolldatei.

USE [master]
GO
ALTER DATABASE [DatabaseName] MODIFY FILE ( NAME = N'DATABASENAME_Log', SIZE = 512000KB , FILEGROWTH = 0)
GO

25
beach

erstellen Sie einen Wartungsjob, der die Datenbank sichert und das Protokoll verkleinert

4
SQLMenace

Mit dem Befehl DBCC Shrinkfile können Sie eine Zielgröße angeben:

DBCC SHRINKFILE (DataFile1, 7)

Verkleinert die Datei DataFile1 auf 7 MB

Dokument unter: MSDN

3
cjk

Ganz oben in meinem Kopf können Sie dazu DBCC SHRINKFILE verwenden.

0
Miles D