web-dev-qa-db-fra.com

Le journal de transaction diminuera-t-il automatiquement dans SQL Server?

Lorsque la base de données SQL Server en mode simple, vous n'avez pas à vous soucier du journal des transactions BAKCUPS. Mais en mode simple, le journal des transactions semble grandir comme en mode complet. Est-ce que tronque est automatiquement tronqué à un moment donné? Ou dois-je tronquer/le réduire manuellement?

10
jrara

Il va tronquer automatiquement mais c'est très différent de se contracter. La troncature récupère l'espace de journal pour la réutilisation, la rétrécissement réduit physiquement réduit physiquement la taille du fichier pour replacer l'espace au système d'exploitation. Si votre journal a grandi à sa taille actuelle, il est probable qu'il augmentera à nouveau si vous le rétrécissez.

Je suggérerais d'obtenir une poignée sur quelle utilisation typique et maximale du journal est destinée à votre système. La requête ci-dessous (pas la mienne, stimulée des scripts DMV Glen Berrys) pourrait être exécuté manuellement ou vous pouvez capturer la sortie à une table via un travail d'agent. Si vous le connectez à une table pendant une semaine ou si vous obtiendrez une photo d'une utilisation typique et plus important encore, lorsqu'un processus provoque la croissance du journal au-delà de ce que vous attendez.

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);

troncature du journal de transaction décrit à la fois le moment et pourquoi la troncature du journal se produit.

Si les enregistrements de journal n'ont jamais été supprimés du journal des transactions, cela remplirait éventuellement tout l'espace disque disponible pour les fichiers journaux physiques. La troncature du journal libère automatiquement l'espace dans le journal logique pour la réutilisation par le journal des transactions.

Facteurs pouvant retarder la troncature du journal est une référence utile pour comprendre pourquoi votre journal peut ne pas tronquer et devenir donc plus grand que prévu.

19
Mark Storey-Smith

Non et non

  • il ne sera pas rétrécir ou tronqué (dans le sens du LDF physique, il fera logiquement)
  • il doit être la taille qu'il s'agit de ne pas la réduire

Si vous y rétrécissez, il augmentera à nouveau et vous aurez un fichier fragmenté

4
gbn

Comme mentionné précédemment, non, cela ne se rétrécira pas automatiquement. Il va nettoyer des ordures toutefois.

La raison en est que, dans le modèle de récupération complète, vous indiquez à SQL que vous souhaitez effectuer des sauvegardes TLog pour le point de récupération de temps, il conserve donc une enregistrement de toutes les transactions apportées à une base de données.

Puisque vous le direz, vous voulez que vous souhaitiez la récupération de temps, vous devez faire des sauvegardes complètes et des sauvegardes TLog. Lorsque vous complétez vos sauvegardes TLog, il affleurera le contenu du journal (en plus de l'extrémité de la queue) et de recommencer.

Cela peut aider si vous pensez à ces fichiers comme conteneurs.

Ma suggestion est que si les tlogs sont devenus grands et ingérables, coupez une sauvegarde complète. Passer à la [~ # ~ #] simple [~ # ~] Récupérer le modèle et RÉTRÉCIR Le fichier TLOG. Retournez au modèle de récupération complète et effectuez la maintenance de la fragmentation *. Comme d'autres personnes ont affiché ce n'est pas la meilleure des pratiques et conduira à des niveaux élevés de fragmentation.

Planifier et commencer un régime de sauvegarde après cela.


* Index Reconstruire/réorganiser les opérations et la défragmentation de niveau de disque . Ce n'est pas une partie de la maintenance du journal: vous maintenez vos journaux T en les soutenant. Ce sont des conteneurs qui poussent quand ils se rapprochent de la capacité. Reconstruire/réorganiser peut vous aider à récupérer de la gestion des journaux incorrects menant à une grande consommation d'entraînement.

0
Ryan