it-swarm.com.de

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

Ich kann die Antwort nicht herausfinden. Ich habe mehrere Antworten wie diese gesehen: Warum wächst das Transaktionsprotokoll weiter oder hat nicht mehr genügend Speicherplatz?

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 integrity wird bei beiden Aufgaben überprüft.

Meine DB ist normal .ldf Datei ist 22 GB. Wenn ich die obige Aufgabe ausführe, wird das .bak Datei ist 435mb, aber die .trn. Datei ist 22 GB groß, genau wie die ldf. Und nach erfolgreichem Ausführen des .ldf schrumpft überhaupt nicht, trotz allem, was ich gelesen habe und mir sagt, 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_BACKUP für die Datenbank mit der riesigen Protokolldatei.

Aufgrund der folgenden Antwort verwechsle ich den zugewiesenen Speicherplatz. Dies sind meine Statistiken für:

(enter image description here

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

7
SventoryMang

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.

(enter image description here

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

8
James Jenkins

Durch diese Sicherung werden nur die Daten gesichert und das Protokoll gelöscht. Die tatsächliche Größe des Protokolls muss über einen Befehl DBCC 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 Sie tatsächlich viel freien Speicherplatz zur Verfügung haben, können Sie DBCC SHRINKFILE Befehl, um Ihre Protokolldatei auf die Größe zu bringen, die Sie für richtig halten.

Bearbeiten: Möglicherweise möchten Sie auch DBCC LOGINFO; dann können Sie alle Elemente sehen, die von Ihrer Transaktionsprotokolldatei verwendet werden, da sie den Status zwei haben.

[~ # ~] jedoch [~ # ~] Welche Aktivität auch immer dazu geführt hat, dass Ihre Protokolldatei überhaupt gewachsen ist, wird wahrscheinlich weiterhin auftreten. Nach den Geräuschen der Gedanken erstellen Sie 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. Andernfalls können Sie Ola Hallengrens Skripte verwenden, um einen Wartungsplan zu erstellen. Es gibt viele verschiedene Optionen, und zum größten Teil sind sie alle ziemlich gut, solange Sie häufige Backups erstellen.

6
Zane