Größe des virtuellen SQL Server-Protokolls

8

Ich bin ein zufälliger DBA, ein Entwickler, der einige Datenbankserver (2005 und 2008) von jemandem geerbt hat, der wenig über Datenbankadministration wusste und anscheinend noch weniger Interesse daran hatte, mehr über das Thema zu erfahren.

Ich lerne gerade und versuche gerade, Transaktionsprotokolldateien herauszufinden.

Alle unsere Datenbanken wurden mit dem einfachen Wiederherstellungsmodell und dem automatischen Schrumpfen eingerichtet. Ich habe verstanden, dass die Verwendung von Autoshrink normalerweise eine schreckliche Idee ist, aber ich verstehe, dass dies getan wurde, um zu verhindern, dass die Transaktionsprotokolle außer Kontrolle geraten. (Verkleinert Autoshrink tatsächlich die Protokolldatei (en) oder nur die Datenbank?)

Ich fand dies über SQL Server 2012 und fragte mich, ob es für 2005 und / oder 2008 zutrifft und was es genau bedeutet: "Wenn eine Datenbank das einfache Wiederherstellungsmodell verwendet, schneidet das Datenbankmodul das Transaktionsprotokoll nach einem Prüfpunkt ab. [. ..] Das Datenbankmodul löst einen automatischen Prüfpunkt unter dem einfachen Wiederherstellungsmodell aus, wenn das virtuelle Protokoll zu 70 Prozent voll ist. " Wo ist die Größe des virtuellen Protokolls angegeben?

Ich möchte das automatische Verkleinern aller Datenbanken deaktivieren, aber bevor ich das tue, muss ich wissen, dass die Protokolldateien nicht schnell außer Kontrolle geraten.

Jede Hilfe wäre sehr dankbar.

Petter Brodin
quelle
1
Lesen Sie dieses rusanu.com/2012/07/27/how-to-shrink-the-sql-server-log und sehen Sie, ob es Aufschluss darüber gibt, was los ist.
Remus Rusanu

Antworten:

6

Eine einzelne Transaktionsprotokolldatei hat sowohl eine physische Größe (die Sie auf der Festplatte sehen) als auch eine Aufteilung innerhalb der physischen Datei in logische Abschnitte, die als virtuelle Protokolldateien (VLFs) bezeichnet werden.

Sowohl das automatische Wachstum als auch das automatische Verkleinern werden für die Protokolldatei der physischen Transaktion ausgeführt.

Das Abschneiden von Transaktionsprotokollen (auch als "Protokolllöschung" bezeichnet) wird in den logischen Abschnitten des Transaktionsprotokolls (VLFs) ausgeführt und hat keinen Einfluss auf die physische Dateigröße. Dieser Teil ist häufig Gegenstand von Verwirrung.

Eine Protokolldatei muss immer größer werden, um eine große Transaktion aufnehmen zu können. Durch Deaktivieren der automatischen Verkleinerung wird die Protokolldatei mit der maximal erforderlichen Größe belassen, anstatt sie physisch zu verkleinern.

Wenn Sie keine großen Transaktionen haben, können Sie die automatische Verkleinerung sicher deaktivieren. Die Protokolldateien wachsen nicht ungebunden, wie dies der Fall wäre, wenn sich die Datenbank in FULLoder befand BULK_LOGGEDund Sie keine Transaktionsprotokollsicherungen durchgeführt haben.

Dieses Verhalten ist für SQL Server 2005+ identisch.

Jon Seigel
quelle
Danke, das war ungefähr das, wonach ich gesucht habe, als ich die Frage gestellt habe. Ich kam zu den gleichen Schlussfolgerungen, nachdem ich Remus 'frühere Antwort gelesen hatte.
Petter Brodin
2

Folgendes habe ich gefunden, nachdem ich die anderen Antworten hier gelesen und selbst recherchiert habe:

F: "Verkleinert Autoshrink tatsächlich die Protokolldatei (en) oder nur die Datenbank?" A: Soweit ich weiß: Ja, das tut es. Autoshrink wird auf Datenbankebene festgelegt und wirkt sich auf alle Dateien aus (angezeigt, wenn Sie mit der rechten Maustaste auf die Datenbank -> Eigenschaften -> Dateien klicken oder wenn Sie Abfrage 1 ausführen). Autogrow funktioniert jedoch auf Dateiebene.

F: "Wo ist die Größe des virtuellen Protokolls angegeben?" A: Siehe Jon Seigels Antwort und den Link, den Remus gepostet hat. Verwenden Sie Abfrage 2, um die physische und logische Protokollgröße anzuzeigen

Ein Problem besteht darin, dass ein Prüfpunkt nicht ausgelöst wird, wenn in der Datenbank der vollständige Wiederherstellungsmodus aktiviert, auf eine große Größe angewachsen und der Wiederherstellungsmodus auf einfach geändert wurde, da die VLF automatisch gewachsen ist. Sie können versuchen, dieses Problem zu beheben (siehe Remus 'Antwort für mögliche Probleme mit Kopf / Ende der Protokolldateien), indem Sie Abfrage 3 ausführen, wodurch die Protokolldatei auf die Größe reduziert wird, die sie bei ihrer ursprünglichen Erstellung hatte.

Fragen:

1)

SELECT name, physical_name AS current_file_location, DB_NAME(database_id) AS dbname
FROM sys.master_files
WHERE DB_NAME(database_id) = 'mydb'

2)

DECLARE @tmpt TABLE(
    dbname VARCHAR(255),
    logsize DECIMAL,
    logspaceused DECIMAL,
    stat INT
)

INSERT INTO @tmpt
    EXEC ('DBCC SQLPERF(LOGSPACE)')

SELECT * FROM @tmpt WHERE dbname LIKE 'mydb' ORDER BY logspaceused DESC

3)

checkpoint
DBCC SHRINKFILE('logfile_name')
Petter Brodin
quelle
2

Wie Sie in Ihrer Frage erwähnt haben, wird in SQL 2005 und 2008 nach dem Prüfpunkt auch die Transaktionsprotokolldatei abgeschnitten.

Mein Vorschlag wäre, das Wiederherstellungsmodell auf "Voll" zu setzen und einen Job zu erstellen, um eine Sicherung aus der Transaktionsprotokolldatei zu erstellen. Dieser Job kann in Ihrer Datenbank geplant werden und schneidet das Transaktionsprotokoll nach der Sicherung ab. Die Protokolldatei wird automatisch für Sie abgeschnitten. Bitte schauen Sie sich die folgenden Links an:

SQL Server 2005: http://technet.microsoft.com/en-us/library/ms189085(v=sql.90).aspx

SQL Server 2008: http://technet.microsoft.com/en-us/library/ms189085(v=sql.100).aspx

Himmel
quelle
Ja, das ist auf lange Sicht mein Plan, aber jetzt möchte ich nur das automatische Schrumpfen loswerden.
Petter Brodin
Änderungen sind, dass Sie sie in VOLLSTÄNDIGE Wiederherstellung ändern möchten, aber bevor Sie bewerten, ob sie tatsächlich benötigt werden oder nicht. Wenn Sie so nah wie möglich an einer Katastrophe wiederhergestellt werden müssen, tun Sie dies. Wenn die Rückkehr zur letzten vollständigen Sicherung (normalerweise jede Nacht) in Ordnung ist, funktioniert der EINFACHE Wiederherstellungsmodus für Sie einwandfrei.
Cfradenburg