Il backup di un database riduce le dimensioni del registro delle transazioni?


8

Sto cercando di raccogliere alcune conoscenze sui database SQL e ho alcune domande sul file di registro delle transazioni (LDF).

Innanzitutto, quando si crea un database, è necessario definire una dimensione del file iniziale sia per il database che per il file di registro. Da quello che posso vedere, una volta creati i file sul disco, avranno le dimensioni specificate indipendentemente dal fatto che ci siano dati effettivi nel database o se ci sono state transazioni (registri).

La mia comprensione era che il backup di un database:

  1. Tronca il registro delle transazioni e
  2. Riduce le dimensioni

del file LDF sul disco "svuotando" i registri al suo interno.

Ora sembra che non lo capissi correttamente perché il file di registro sembra avere dimensioni fisse. La mia vera domanda va così:

Cosa fanno effettivamente i tronchi di troncamento nel file di registro (LDF)? Questo processo dovrebbe impedire che i dischi si riempiano.

Per favore, correggimi se non capisco correttamente alcuni concetti.

Grazie!

Risposte:


20

Il file di registro delle transazioni (LDF) è costituito da numerosi file di registro virtuali (VLF) all'interno. Pensalo come un armadio con diversi cassetti estraibili. Puoi scegliere un armadio grande o uno piccolo, ma sarà comunque di dimensioni fisse con un numero di cassetti diverso.

Mentre SQL Server funziona, inserisce le transazioni in cassetti (VLF). Inizia da un'estremità del cabinet, riempie il primo cassetto, quindi quando lo spazio si esaurisce in quel cassetto, passa al cassetto successivo.

Quando si esegue il backup del registro delle transazioni, ciò che si sta realmente facendo è:

  • Trovare il primo cassetto che contiene transazioni di cui non è stato ancora eseguito il backup
  • Copia di tali transazioni altrove
  • Se quel cassetto non è più attivamente in uso (perché SQL Server è passato al cassetto successivo), allora lo stai contrassegnando come disponibile per il riutilizzo (pensalo come buttare via tutto il contenuto)

I backup non cambiano le dimensioni del cabinet (file di registro).


Ciao Brent, grazie per avermi chiarito, apprezzalo! Quindi, fondamentalmente, non puoi ridurre le dimensioni del "mobile", puoi solo svuotare i cassetti. Ora ho letto molti post di persone che parlano di come cambiare la dimensione del registro. Ciò si riferirebbe alla riduzione della dimensione dei VLF (contenuto del drawer) e alla reale riduzione della dimensione del file LDF sul disco? Da quello che posso ora capire, non puoi evitare il "gabinetto". Grazie!
Anthony,

@Anthony sì, puoi ridurre le dimensioni del cabinet riducendo le dimensioni del file di registro, ma in genere è una pessima idea (per i motivi di cui hai letto.)
Brent Ozar

Veto l'affermazione secondo cui ridurre un TLog è negativo. L'accesso a Tlog è abbastanza seq. in natura. Non è necessaria alcuna riorganizzazione dei dati durante la riduzione del registro (come per i file di dati. È possibile liberare spazio solo dopo l'ultimo puntatore attivo). Quindi questo non causa alcuna frammentazione.
Heiko Hatzfeld,

1
@HeikoHatzfeld farla tornare indietro è un'operazione di blocco e non sfrutta l'inizializzazione istantanea dei file, quindi è terribilmente lenta. Veto annullato. ;-)
Brent Ozar

Non fa nulla su base regolare, ma solo una volta dopo aver notato che non è stato impostato un piano di backup corretto ... E il fattore di crescita dovrebbe essere di dimensioni costanti e ragionevoli. In quelle condizioni è sopportabile.
Heiko Hatzfeld,

6

Abbinamento e miscelazione

Il backup del registro delle transazioni non equivale al troncamento del file di registro delle transazioni e il troncamento del file di registro delle transazioni non equivale alla riduzione del file di registro delle transazioni. Oh sì, e il backup del file di registro delle transazioni non deve innescare un troncamento. A seconda del carico corrente, il motore di database potrebbe decidere di impostare un checkpoint, ma di attendere un po 'con il troncamento.

spiegando

Il file di registro delle transazioni è il punto in cui il motore di database memorizza le modifiche apportate ai dati in un database, indipendentemente dal fatto che il database si trovi nel modello di recupero SEMPLICE o nel modello di recupero COMPLETO. (Importante)

Ora il file di registro delle transazioni del database non è solo un contenitore di archiviazione continua, ma una raccolta di file di registro virtuali (VLF) che vengono creati in un ordine sequenziale all'interno del file di registro delle transazioni (TLog). La dimensione dei VLF varia a seconda della versione di SQL Server attualmente in uso e anche della dimensione iniziale selezionata durante la creazione del file TLog e anche della dimensione selezionata (se presente) per l'impostazione di crescita automatica del File TLog.

Riferimenti:
- Importante modifica dell'algoritmo di creazione VLF in SQL Server 2014 (SQLSkills.com)
- Numeri di sequenza VLF iniziali e dimensioni del file di registro predefinito (SQLSkills.com)
- All'interno del motore di archiviazione: ulteriori informazioni sulla natura circolare del registro (SQLSkills. com)
... e forse nell'ordine inverso

Quando i dati vengono modificati nel database, il Motore di database scriverà queste modifiche nel TLog del database corrispondente per mantenere la coerenza transazionale. Questo è anche noto come ACID: atomicità, coerenza, isolamento, durata . Le effettive transazioni di queste modifiche sono memorizzate nei VLF del TLog (file). Quando un VLF è pieno, le transazioni più recenti verranno archiviate nel prossimo VLF disponibile in ordine sequenziale.

eccezioni

Tuttavia, se viene raggiunta la fine del file TLog, le modifiche verranno archiviate nel primo VLF all'inizio del file TLog. (spiegato in Inside the Storage Engine: ulteriori informazioni sulla natura circolare del registro )

Quando nessun VLF disponibile è libero di memorizzare nuove transazioni e se è configurata l'impostazione di crescita automatica, il Motore di database aumenterà il file TLog in base all'importo definito e creerà VLF aggiuntivi in ​​base alla dimensione definita nelle impostazioni di crescita automatica e alla formula spiegato in Importante modifica dell'algoritmo di creazione VLF in SQL Server 2014 . Ulteriori transazioni possono quindi essere archiviate nel VLF successivo all'interno del file TLog.

Backup del file TLog

Quando si attiva un backup del file TLog, tutto ciò che si sta facendo è dire al motore di database di farlo

  • dai un'occhiata al file TLog
  • determinare quando si è verificato l'ultimo backup del log delle transazioni (LSN: Log Sequence Number; per ulteriori ricerche)
  • imposta un Checkpoint nel file TLog ( Database Checkpoint (SQL Server) )
  • archiviare una copia di backup del file TLog su disco / nastro tenendo traccia del precedente LSN e dell'ultimo LSN sottoposto a commit appena prima del completamento del backup
  • trasferire tutte le modifiche al "database"
  • contrassegnare i VLF come riutilizzabili

Finora non è stato rilasciato spazio all'interno del file TLog per il motore del database da riutilizzare ...

Troncamento automatico del file TLog

... ma se il Motore di database ha alcuni cicli da risparmiare e non è sottoposto a forti pressioni, a volte darà un'occhiata al file TLog, noterà il Checkpoint e rilascerà i VLF per il riutilizzo. Lo spazio all'interno del file TLog è ancora utilizzato dai VLF (stessa dimensione, stessa posizione) ma sono liberi di essere riutilizzati.

Questo è documentato nel Troncamento del registro delle transazioni :

Tranne quando ritardato per qualche motivo, il troncamento del registro si verifica automaticamente come segue: - Sotto il modello di recupero semplice, dopo un checkpoint.

  • Sotto il modello di recupero completo o il modello di recupero registrato in blocco, dopo un backup del registro, se si è verificato un checkpoint dal backup precedente. Per ulteriori informazioni, consultare "Troncamento del registro nei modelli di recupero completo e con registrazione di massa" più avanti in questo argomento.

Ci sono alcuni casi in cui ciò non accade:

Sebbene automatico, il troncamento del registro può essere ritardato da una varietà di fattori. Per informazioni su ciò che può ritardare il troncamento del registro, vedere Fattori che possono ritardare il troncamento del registro .

Visualizzazione del troncamento del registro

Il troncamento del registro può essere osservato quando si esegue una query sulla dimensione TLog utilizzando le istruzioni SQL o il report Spazio database nell'interfaccia utente di SSMS. È possibile osservare che lo spazio utilizzato all'interno del file TLog potrebbe essere solo l'1% della dimensione del file TLog disponibile.

Ridurre o non ridurre

La raccomandazione generale non è quella di ridurre il file TLog, perché è cresciuto per un certo motivo e probabilmente tornerà alle dimensioni di una volta. Ma questa è una storia per un altro post. Ci sono alcuni buoni motivi, uno dei quali è quando si ricrea la dimensione dei VLF all'interno del file TLog.

Rispondere alle tue domande

In linea proprio sotto i tuoi presupposti e domande

La mia comprensione era che il backup di un database:

  • Tronca il registro delle transazioni e

Questa è un'ipotesi sbagliata. Il backup del database (FULL, DIFFERENTIAL) non fa nulla con i file TLog. Un backup COMPLETO creerà uno stato coerente del database insieme alle transazioni impegnate dal file TLog. Un backup DIFF creerà uno stato coerente di tutti i precedenti backup TLog dall'ultimo backup COMPLETO del database.

Tuttavia, un backup TLOG creerà un backup delle transazioni impegnate dal file TLog, impostando un checkpoint e possibilmente (quando non sotto carico pesante) rilasciando i VLF per il riutilizzo.

  • Riduce le dimensioni

No, quando si considerano i backup FULL e DIFF. No, se si considerano i backup TLOG, ma si libereranno i VLF all'interno del file TLog, se il motore di database ha del tempo libero.

Cosa fanno effettivamente i tronchi di troncamento nel file di registro (LDF)? Questo processo dovrebbe impedire che i dischi si riempiano.

Il troncamento dei registri consente di riutilizzare i VLF. È tutto.

Questo processo può avere il vantaggio di impedire la crescita del file TLog se sono state impostate le impostazioni di crescita automatica.

Se non sono state impostate impostazioni di crescita automatica , poiché il processo di progettazione dei requisiti ha determinato che il file TLog avrebbe una dimensione fissa, il caso peggiore è che TLog si riempia perché non si verifica alcun backup TLog e quindi non vengono liberati VLF. Il TLog non può crescere e i VLF non vengono liberati per consentire la scrittura di ulteriori transazioni nel file TLog (o VLF internamente).


4

Mentre Brent Ozar ti ha già dato spiegazioni sull'aspetto del file di registro delle transazioni, mi concentrerò su alcune tue domande

La mia comprensione era che il backup di un database:

  • Tronca il registro delle transazioni e
  • Riduce le dimensioni

Il backup completo non fa nulla per i registri delle transazioni in qualsiasi modello di recupero. Nel modello di recupero completo quando si esegue il backup del registro delle transazioni, tronca il registro. Si prega di notare se una transazione a lungo termine è ancora lì che detiene i VLF o secondo la spiegazione di Brent ha ancora bisogno dei cassetti che altre transazioni non possono riutilizzare il cassetto o in termini tecnici non verrebbero troncati in modo da poter essere riutilizzati.

Inoltre, non riduce il registro delle transazioni. Per ridurre i registri devi usare il dbcc shrinkfilecomando

Cosa fanno effettivamente i tronchi di troncamento nel file di registro (LDF)? Questo processo dovrebbe impedire che i dischi si riempiano.

Rende riutilizzabile il file di registro in modo che altre transazioni possano usarlo o, per analogia di Brent, qualcun altro può usare i cassetti per conservare le cose.

Dopo aver esaminato la risposta, ti consiglio vivamente di leggere il registro delle transazioni su SQLSKILLS.com


Grazie Shanky, apprezzo molto le tue spiegazioni! Pertanto, quando i backup troncano i registri, in realtà non riducono le dimensioni del file LDF, ma solo "fanno spazio" per l'elaborazione di altre transazioni all'interno di quel file di registro. Sono corretto nel presumere questo? Grazie!
Anthony,

Hai assolutamente ragione.
Shanky,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.