Warum ist meine Protokolldatei so umfangreich? 22 GB. Ich führe Protokollsicherungen durch

7

Ich kann die Antwort nicht herausfinden. Ich habe mehrere Antworten wie diese gesehen: Warum wächst das Transaktionsprotokoll weiter oder der Speicherplatz geht zur Neige?

und alle reden davon, Backups in Ihrer Protokolldatei auszuführen, damit diese kleiner wird. Ich mache das, aber es schrumpft nichts! Ich glaube auch nicht, dass ich super lange Transaktionen durchführe.

Server: SQL Server 2008

Wiederherstellungsmodus: Full

Ich habe einen Wartungsplan, um Backups im Wert von 5 Tagen zu speichern. Aufgabe 1 sichert die Datenbanken mit dem Sicherungstyp Full, Aufgabe 2 sichert Transaktionsprotokolle. Verify backup integritywird bei beiden Aufgaben überprüft.

Die normale .ldfDatei meiner Datenbank ist 22 GB. Wenn ich die obige Aufgabe .bakausführe, ist die .trn.Datei 435 MB groß, aber die Datei ist 22 GB groß, genau wie die PDF-Datei. Und nach erfolgreichem Ausführen .ldfschrumpft das überhaupt nicht, trotz allem, was ich gelesen habe, dass es sollte?

Was ist hier los und warum wird die Protokolldatei nie kleiner?

Ich habe auch versucht, diesen Befehl auszuführen, wie in einer anderen Antwort erwähnt:

select name, log_reuse_wait_desc from sys.databases

Und es heißt LOG_BACKUPfür die Datenbank mit der riesigen Protokolldatei.

Aufgrund einer Antwort unten verwechsle ich den zugewiesenen Platz. Dies sind meine Statistiken für:

Geben Sie hier die Bildbeschreibung ein

Aus Gründen, aus denen ich keine Ahnung habe, warum, wurde die anfängliche Größe auf 22 GB festgelegt ...

SventoryMang
quelle
Transaktionsprotokolle werden nicht automatisch verkleinert. Haben Sie versucht, es zu verkleinern?
Tony Hinkle
1
Ich habe die Aufgabe "Datenbank verkleinern" gefunden. Fügte es meinem Wartungsplan hinzu und führte es erneut aus, schrumpfte es trotzdem nicht.
SventoryMang
5
everyone talks about running back ups on your log file so it shrinks down- Nein, das sagt niemand, und Protokollsicherungen werden eine Datei niemals verkleinern. Sie sagen, dass das häufige Ausführen von Backups dazu beitragen sollte, das Wachstum zu verhindern, da der Speicherplatz im Inneren nach dem Sichern wiederverwendet werden kann. Manchmal wird der Protokollspeicher schneller verwendet, als Ihre Sicherungen ausgeführt werden. Wenn dies häufig vorkommt, ist es sinnlos, nur zu schrumpfen, um wieder zu wachsen. Lassen Sie sie einfach groß. Wenn dies auf ein bekanntes, abnormales Ereignis zurückzuführen ist und Sie etwas eingerichtet haben, um zu verhindern, dass es erneut auftritt, ist dies ungefähr das einzige Mal, dass ich ein Schrumpfen befürworte.
Aaron Bertrand
2
Beachten Sie, dass jeder, der Ihnen hilft, davon ausgeht, dass Sie einen berechtigten Grund haben, den vollständigen Wiederherstellungsmodus zu wünschen. Wenn Ihr Wiederherstellungspunktziel mindestens 1 Tag beträgt, sollten Sie in den einfachen Wiederherstellungsmodus wechseln und Transaktionsprotokollsicherungen vollständig weglassen (und dann Ihre Protokollsicherungen einmal verkleinern ).
Brian
1
Ich brauche das volle.
SventoryMang

Antworten:

8

Sie verwechseln zugewiesenen Speicherplatz mit verwendetem Speicherplatz. Verwenden Sie nach dem Ausführen der Sicherung diese Abfrage, um den Unterschied zwischen zugewiesenem und verwendetem Speicherplatz festzustellen.

select file_id
, type_desc
, name
, substring([physical_name],1,3) AS [Drive]
, physical_name
, state_desc
, size / 128 as 'AllocatedSizeMB'
, FILEPROPERTY([name],'SpaceUsed') /128 AS 'SpaceUsedMB'  --Addapted from https://sqlperformance.com/2014/12/io-subsystem/proactive-sql-server-health-checks-1
, (1- (FILEPROPERTY([name],'SpaceUsed') / CAST (size AS MONEY))) *100 AS 'PercentFree'
, growth / 128 as 'GrowthSettingMB'

 from sys.database_files
 order by type_desc Desc, name

Sie können die GUI verwenden, um die Protokolldatei zu verkleinern, indem Sie die 'Anfangsgröße' ändern.

Geben Sie hier die Bildbeschreibung ein

Wenn Sie Probleme haben, das Protokoll zu verkleinern, auch wenn es größtenteils leer aussieht, lesen Sie meinen Beitrag hier

James Jenkins
quelle
Wow, die anfängliche Größe wurde auf 21 GB eingestellt. Ich konnte mir unmöglich vorstellen warum. Ist es möglich, dass eine Protokolldatei "voll" ist, wenn sie die maximale Größe erreicht? Da ich die Verkleinerungsaufgabe zu meinem Wartungsplan hinzugefügt habe, sollte sie vermutlich nie die maximale Größe erreichen können, wenn ich häufig Backups ausführe und verkleinere?
SventoryMang
Tatsächlich versuche ich, es auf 500 MB zu ändern und auf OK zu klicken, und es wird wieder auf 21 GB zurückgesetzt.
SventoryMang
@SventoryMang Lesen Sie den Link in der letzten Zeile meiner Antwort.
James Jenkins
6
Bitte fügen Sie Ihrem Wartungsplan keinen Schrumpf hinzu. Wenn Ihre Protokolldatei eine bestimmte Größe erreicht, wird diese Größe unter den gleichen Umständen erneut erreicht. Das Schrumpfen führt somit zu Leistungskosten (für das Schrumpfen und das Nachwachsen), bietet jedoch keinen langfristigen Nutzen. Ein einmaliges manuelles Verkleinern nach Erhöhen der Sicherungshäufigkeit von Protokolldateien ist in Ordnung, das Verkleinern von Protokolldateien als Wartungsaufgabe jedoch nicht.
Brian
6

Durch diese Sicherung werden nur die Daten gesichert und das Protokoll gelöscht. Die tatsächliche Größe des Protokolls muss über einen DBCCBefehl verkleinert werden, wenn Sie das Protokoll wirklich verkleinern müssen. Abhängig davon, wie oft Sie Ihre Protokolldatei sichern, wird sie wahrscheinlich wieder wachsen.

Führen Sie dies aus, um festzustellen, wie viel Speicherplatz in Ihrem Protokoll tatsächlich belegt ist.

SELECT 
    [TYPE] = A.TYPE_DESC
    ,[FILE_Name] = A.name
    ,[FILEGROUP_NAME] = fg.name
    ,[File_Location] = A.PHYSICAL_NAME
    ,[FILESIZE_MB] = CONVERT(DECIMAL(10,2),A.SIZE/128.0)
    ,[USEDSPACE_MB] = CONVERT(DECIMAL(10,2),A.SIZE/128.0 - ((SIZE/128.0) - CAST(FILEPROPERTY(A.NAME, 'SPACEUSED') AS INT)/128.0))
    ,[FREESPACE_MB] = CONVERT(DECIMAL(10,2),A.SIZE/128.0 - CAST(FILEPROPERTY(A.NAME, 'SPACEUSED') AS INT)/128.0)
    ,[FREESPACE_%] = CONVERT(DECIMAL(10,2),((A.SIZE/128.0 - CAST(FILEPROPERTY(A.NAME, 'SPACEUSED') AS INT)/128.0)/(A.SIZE/128.0))*100)
    ,[AutoGrow] = 'By ' + CASE is_percent_growth WHEN 0 THEN CAST(growth/128 AS VARCHAR(10)) + ' MB -' 
        WHEN 1 THEN CAST(growth AS VARCHAR(10)) + '% -' ELSE '' END 
        + CASE max_size WHEN 0 THEN 'DISABLED' WHEN -1 THEN ' Unrestricted' 
            ELSE ' Restricted to ' + CAST(max_size/(128*1024) AS VARCHAR(10)) + ' GB' END 
        + CASE is_percent_growth WHEN 1 THEN ' [autogrowth by percent, BAD setting!]' ELSE '' END
FROM sys.database_files A LEFT JOIN sys.filegroups fg ON A.data_space_id = fg.data_space_id 
order by A.TYPE desc, A.NAME; 

Wenn tatsächlich viel freier Speicherplatz verfügbar ist, können Sie den DBCC SHRINKFILEBefehl ausführen, um Ihre Protokolldatei auf die Größe zu bringen, die Sie für erforderlich halten.

Bearbeiten: Möglicherweise möchten Sie auch überprüfen, ob DBCC LOGINFO;alle von Ihrer Transaktionsprotokolldatei verwendeten Elemente angezeigt werden, da sie den Status zwei haben.

Es ist jedoch wahrscheinlich, dass die Aktivität, die dazu geführt hat, dass Ihre Protokolldatei überhaupt wächst, weiterhin auftritt. Nach den Geräuschen von denkt, Sie erstellen nur eine Protokollsicherung pro Tag.

Sie sollten den ganzen Tag über mehrere Protokollsicherungen zwischen Ihren vollständigen Datenbanksicherungen durchführen. Ich würde wahrscheinlich empfehlen, mit stündlich zu beginnen und sich anzupassen, um letztendlich zu sehen, was für Sie am besten funktioniert. Sie können dies entweder über Wartungspläne fortsetzen, wenn dies für Sie angenehm ist. Andere weisen könnten Sie Ola Hallengren des Skripts einen Wartungsplan einzurichten. Es gibt viele verschiedene Optionen, und zum größten Teil sind sie alle ziemlich gut, solange Sie häufige Backups erstellen.

Zane
quelle
+1 für CASE is_percent_growth WHEN 1 THEN '[Autogrowth in Prozent, BAD-Einstellung!]
James Jenkins