Wird das Transaktionsprotokoll in SQL Server automatisch verkleinert?

10

Wenn sich die SQL Server-Datenbank in einem EINFACHEN Modus befindet, müssen Sie sich nicht um die Transaktionsprotokoll-Bakcups kümmern. In einem EINFACHEN Modus scheint das Transaktionsprotokoll jedoch genauso zu wachsen wie im VOLLSTÄNDIGEN Modus. Wird irgendwann automatisch abgeschnitten? Oder muss ich es manuell abschneiden / verkleinern?

jrara
quelle

Antworten:

19

Es wird automatisch abgeschnitten, aber das ist ganz anders zu schrumpfen. Durch das Abschneiden wird der Protokollspeicherplatz für die Wiederverwendung zurückgewonnen. Durch physisches Verkleinern wird die Dateigröße verringert, um Speicherplatz für das Betriebssystem freizugeben. Wenn Ihr Protokoll auf die aktuelle Größe angewachsen ist, wächst es wahrscheinlich wieder, wenn Sie es verkleinern.

Ich würde vorschlagen, einen Überblick über die typische und maximale Protokollnutzung Ihres Systems zu erhalten. Die folgende Abfrage (nicht meine, die von Glen Berrys DMV-Skripten unterstützt wird) kann manuell ausgeführt werden oder Sie können die Ausgabe über einen Agentenjob in einer Tabelle erfassen. Wenn Sie es etwa eine Woche lang in einer Tabelle protokollieren, erhalten Sie ein Bild der typischen Verwendung und vor allem, wenn ein Prozess dazu führt, dass das Protokoll über Ihre Erwartungen hinaus wächst.

SELECT 
     db.[name] AS [Database Name]
   , db.recovery_model_desc AS [Recovery Model]
   , db.log_reuse_wait_desc AS [Log Reuse Wait Description]
   , ls.cntr_value AS [Log Size (KB)]
   , lu.cntr_value AS [Log Used (KB)]
   , CAST(
        CAST(lu.cntr_value AS FLOAT) / CAST(ls.cntr_value AS FLOAT) 
        AS DECIMAL(18,2)
     ) * 100 AS [Log Used %]
   , db.[compatibility_level] AS [DB Compatibility Level]
   , db.page_verify_option_desc AS [Page Verify Option]
   , db.is_auto_create_stats_on, db.is_auto_update_stats_on
   , db.is_auto_update_stats_async_on, db.is_parameterization_forced
   , db.snapshot_isolation_state_desc, db.is_read_committed_snapshot_on
FROM sys.databases AS db
   INNER JOIN sys.dm_os_performance_counters AS lu 
     ON db.name = lu.instance_name
   INNER JOIN sys.dm_os_performance_counters AS ls 
     ON db.name = ls.instance_name
WHERE lu.counter_name LIKE N'Log File(s) Used Size (KB)%' 
   AND ls.counter_name LIKE N'Log File(s) Size (KB)%'
   AND ls.cntr_value > 0 
OPTION (RECOMPILE);

Transaktionsprotokollabschneidung beschreibt sowohl das Wann als auch das Warum des Protokollabschneidens.

Wenn Protokolldatensätze niemals aus dem Transaktionsprotokoll gelöscht würden, würde dies möglicherweise den gesamten Speicherplatz füllen, der für die physischen Protokolldateien verfügbar ist. Durch das Abschneiden des Protokolls wird automatisch Speicherplatz im logischen Protokoll für die Wiederverwendung durch das Transaktionsprotokoll freigegeben.

Faktoren, die das Abschneiden von Protokollen verzögern können, sind eine nützliche Referenz, um zu verstehen, warum Ihr Protokoll möglicherweise nicht abgeschnitten wird und daher größer als erwartet wird.

Mark Storey-Smith
quelle
4

Nein und nein

  • es wird nicht schrumpfen oder abschneiden (im physischen LDF-Sinne wird es logisch funktionieren)
  • Es muss die Größe haben, die es hat, damit Sie es nicht verkleinern

Wenn Sie es verkleinern, wächst es wieder und Sie haben eine fragmentierte Datei

gbn
quelle
0

Wie bereits erwähnt, nein, es wird sich nicht automatisch verkleinern. Es wird jedoch etwas Müll aufräumen.

Der Grund dafür ist, dass Sie SQL im vollständigen Wiederherstellungsmodell mitteilen, dass Sie Tlog-Sicherungen für die Wiederherstellung zu einem bestimmten Zeitpunkt durchführen möchten, sodass alle Transaktionen aufgezeichnet werden, die für eine Datenbank ausgeführt wurden.

Da Sie angeben, dass Sie eine Wiederherstellung zu einem bestimmten Zeitpunkt wünschen, müssen Sie vollständige Sicherungen und Tlog-Sicherungen durchführen. Wenn Sie Ihre tlog-Sicherungen abschließen, wird der Inhalt des Protokolls (neben dem hinteren Ende) gelöscht und von vorne begonnen.

Es kann hilfreich sein, wenn Sie sich diese Dateien als Container vorstellen.

Mein Vorschlag ist, wenn die Tlogs groß und nicht mehr verwaltbar sind, ein vollständiges Backup zu erstellen. Wechseln Sie zum SIMPLE- Wiederherstellungsmodell und SHRINKEN Sie die tlog-Datei. Wechseln Sie zurück zum vollständigen Wiederherstellungsmodell und führen Sie die Fragmentierungswartung * durch. Wie andere bereits geschrieben haben, ist dies nicht die beste Vorgehensweise und führt zu einem hohen Grad an Fragmentierung.

Planen und starten Sie danach ein Backup-Regime.


* Indexwiederherstellung / Reorganisation von Vorgängen und Defragmentierung auf Festplattenebene . Dies ist kein Teil der Protokollpflege: Sie verwalten Ihre T-Protokolle, indem Sie sie sichern. Sie sind Container, die wachsen, wenn sie sich der Kapazität nähern. Das Wiederherstellen / Reorganisieren kann dazu beitragen, die fehlerhafte Protokollverwaltung wiederherzustellen, die zu einer großen Laufwerksauslastung führt.

Ryan
quelle