Troncamento del log delle transazioni

Se dal log delle transazioni non vengono mai eliminati record, è possibile che le dimensioni del log logico aumentino fino a occupare tutto lo spazio disponibile nei dischi che contengono i file di log fisici. Il troncamento del log libera automaticamente spazio nel log logico per consentirne il riutilizzo da parte del log delle transazioni.

A meno che non venga posticipato per qualche motivo, il troncamento del log viene effettuato automaticamente nei seguenti casi:

  • Nel modello di recupero con registrazione minima, dopo un checkpoint.

  • Nel modello di recupero con registrazione completa o modello di recupero con registrazione minima delle operazioni bulk, dopo un backup del log se dal backup precedente si è verificato un checkpoint. Per ulteriori informazioni, vedere "Troncamento del log con modelli di recupero con registrazione minima delle operazioni bulk" di seguito in questo argomento.

Sebbene automatico, il troncamento del log può essere posticipato da diversi fattori. Per informazioni sui fattori che possono ritardare il troncamento, vedere Fattori che possono ritardare il troncamento del log..

Nota importanteImportante

Se si verifica un ritardo elevato nel troncamento del log, lo spazio del log delle transazioni può esaurirsi. Per informazioni sulla gestione di un log delle transazioni pieno, vedere Risoluzione dei problemi relativi a un log delle transazioni pieno (Errore 9002).

Per informazioni relative all'architettura del troncamento del log, vedere "Funzionamento del troncamento del log" più avanti in questo argomento.

Troncamento del log con modelli di recupero con registrazione completa e con registrazione minima delle operazioni bulk

Nel modello di recupero con registrazione completa e in quello con registrazione minima delle operazioni bulk la parte inattiva del log non può essere troncata finché tutti i record non sono stati salvati in un backup del log. Ciò è necessario per mantenere la catena di log, una serie di record di log che hanno una sequenza non interrotta di numeri di sequenza del file di log (LSN). Il log verrà troncata quando si esegue il backup del log delle transazioni, presupponendo le condizioni seguenti:

  • Si è verificato un checkpoint dall'ultimo backup del log. Un checkpoint è necessario ma non sufficiente per troncare il log nel modello di recupero con registrazione completa o in quello con registrazione minima delle operazioni bulk. Dopo un checkpoint, il log resta intatto almeno fino al successivo backup del log delle transazioni.

    Per ulteriori informazioni, vedere Relazione tra i checkpoint e la parte attiva del log.

  • Nessun altro fattore impedisce il troncamento del log.

    In genere, tramite l'esecuzione di backup regolari, lo spazio del log viene costantemente liberato per poter essere nuovamente utilizzato. Tuttavia altri fattori, tra cui una transazione a esecuzione prolungata, possono impedire il troncamento del log. Per ulteriori informazioni, vedere Fattori che possono ritardare il troncamento del log..

  • L'istruzione BACKUP LOG non specifica WITH COPY_ONLY.

Per eseguire il backup del log delle transazioni

Funzionamento del troncamento del log

Nota

Il troncamento non riduce le dimensioni del file di log fisico, La riduzione delle dimensioni fisiche di un file di log richiede la compattazione del file. Per informazioni sulla compattazione del file di log fisico, vedere Compattazione del log delle transazioni.

Il log delle transazioni è un file circolare. Quando viene creato il database, il file di log logico comincia all'inizio del file di log fisico. Vengono aggiunti nuovi record di log alla fine del log logico, che si espandono verso la fine del log fisico. Il log delle transazioni di un database viene mappato su uno o più file fisici. In Motore di database di SQL Server ogni file di log fisico viene diviso internamente in diversi file di log virtuali. Con il troncamento del log si libera spazio nel log logico eliminando file di log virtuali inattivi dall'inizio del log logico. Per informazioni dettagliate sull'architettura del log delle transazioni, vedere Architettura logica del log delle transazioni e Architettura fisica del log delle transazioni.

che rappresentano l'unità di spazio riutilizzabile. Solo i file di log virtuali che contengono esclusivamente record di log inattivi possono essere troncati. La parte attiva del log delle transazioni, ossia il log attivo, non può essere troncata poiché è richiesta per il recupero del database. Il checkpoint più recente definisce il log attivo. Il log può essere troncato fino a tale checkpoint.

Nota

Per informazioni sul funzionamento dei file di log virtuali, vedere Architettura fisica del log delle transazioni.

Quando viene eseguito il checkpoint, la parte inattiva del log delle transazioni viene contrassegnata come riutilizzabile. Successivamente, tale parte inattiva potrà essere liberata mediante il troncamento del log. Il troncamento libera i file di log virtuali inattivi per il riutilizzo. Quando viene scritto un nuovo record in un log virtuale liberato, tale file di log virtuale diventa nuovamente attivo.

Una delle informazioni registrate in un checkpoint è il numero di sequenza del file di log (LSN) del primo record del log che deve essere disponibile per poter eseguire correttamente il rollback a livello di database. Questo numero LSN è denominato LSN minimo del recupero (MinLSN). L'inizio della parte attiva del log è il log virtuale che contiene il numero MinLSN. Quando un log delle transazioni viene troncato, solo i record del log che precedono questo file di log virtuale vengono liberati per il riutilizzo.

Nelle figure seguenti viene illustrato un log delle transazioni prima e dopo il troncamento. Nella prima figura viene illustrato un log delle transazioni che non è mai stato troncato. Attualmente, il log logico utilizza quattro file di log virtuali. Il log logico inizia prima del primo file di log virtuale e termina al log virtuale 4. Il record MinLSN si trova nel log virtuale 3. I log virtuali 1 e 2 contengono solo record di log inattivi. Questi record possono essere troncati. Il log virtuale 5 è ancora inutilizzato e non fa parte del log logico corrente.

Log delle transazioni con quattro log virtuali

Nella seconda figura è illustrata la struttura del log dopo il troncamento. I log virtuali 1 e 2 sono stati liberati per il riutilizzo. Il log logico ora inizia all'inizio del log virtuale 3. Il log virtuale 5 è ancora inutilizzato e non fa parte del log logico corrente.

File di log diviso in quattro file di log virtuali