web-dev-qa-db-fra.com

Pourquoi mon fichier journal est-il si massif? 22gb. J'exécute des sauvegardes de journaux

Je n'arrive pas à comprendre la réponse. J'ai vu plusieurs réponses comme celle-ci: Pourquoi le journal des transactions continue-t-il de croître ou de manquer d'espace?

et tout le monde parle de l'exécution de sauvegardes sur votre fichier journal afin qu'il diminue. Je fais ça, mais ça ne rétrécit rien! Je ne crois pas non plus que j'exécute de transactions super longues.

Serveur: SQL Server 2008

Mode de récupération: Full

J'ai un plan de maintenance pour stocker 5 jours de sauvegardes. La tâche 1 sauvegarde les bases de données avec le type de sauvegarde Full, la tâche 2 sauvegarde les journaux de transactions. Verify backup integrity est vérifié sur les deux tâches.

Mon DB normal .ldf le fichier fait 22 Go. Lorsque j'exécute la tâche ci-dessus, le .bak le fichier fait 435 Mo, mais le .trn. le fichier fait 22 Go, comme le ldf. Et après avoir exécuté avec succès le .ldf ne rétrécit pas du tout, malgré tout ce que j'ai lu me disant que ça devrait?

Que se passe-t-il ici et pourquoi le fichier journal ne rétrécit-il jamais?

J'ai également essayé d'exécuter cette commande comme mentionné dans une autre réponse:

select name, log_reuse_wait_desc from sys.databases

Et ça dit LOG_BACKUP pour la base de données avec l'énorme fichier journal.

Sur la base d'une réponse ci-dessous, je suis confus alloué avec l'espace utilisé. Voici mes statistiques pour:

enter image description here

Pour des raisons que je n'ai aucune idée pourquoi, la taille initiale a été fixée à 22 Go ...

7
SventoryMang

Vous confondez l'espace alloué avec l'espace utilisé. Après avoir exécuté la sauvegarde, utilisez cette requête pour voir la différence entre l'espace alloué et l'espace utilisé.

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

Vous pouvez utiliser l'interface graphique pour réduire le fichier journal en modifiant la "taille initiale"

enter image description here

Si vous rencontrez des problèmes pour réduire le journal, même lorsqu'il semble presque vide, voir mon message ici

8
James Jenkins

Prendre cette sauvegarde ne fera que sauvegarder les données et effacer le journal. La taille réelle du journal devra être réduite via une commande DBCC si vous avez vraiment besoin de réduire le journal. Selon la fréquence à laquelle vous sauvegardez votre fichier journal, il augmentera probablement à nouveau.

Essayez de l'exécuter pour voir combien d'espace réel sur votre journal est occupé.

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; 

Si vous disposez réellement de beaucoup d'espace libre, vous pouvez exécuter DBCC SHRINKFILE afin de réduire votre fichier journal à la taille que vous pensez qu'il devrait être.

Modifier: Vous pouvez également vérifier DBCC LOGINFO;, vous pouvez alors voir tous les éléments utilisés par votre fichier journal des transactions car ils auront un statut de deux.

[~ # ~] cependant [~ # ~] quelle que soit l'activité qui a provoqué la croissance de votre fichier journal, il est probable que cela continue de se produire. D'après les sons de pense que vous ne faites qu'une seule sauvegarde de journal par jour.

Ce que vous devez faire, c'est effectuer plusieurs sauvegardes de journaux tout au long de la journée entre vos sauvegardes complètes de la base de données. Je recommanderais probablement de commencer par toutes les heures et d'ajuster pour voir finalement ce qui vous convient le mieux. Vous pouvez soit continuer à le faire via des plans de maintenance si cela vous convient. Sinon, vous pouvez utiliser les scripts Ola Hallengren pour configurer un plan de maintenance. Il existe de nombreuses options différentes et, pour la plupart, elles sont toutes très bonnes tant que vous effectuez des sauvegardes fréquentes.

6
Zane