Relazione tra i checkpoint e la parte attiva del log
I checkpoint scaricano le pagine di dati dirty dalla cache buffer del database corrente al disco riducendo al minimo la parte attiva del log da elaborare durante un recupero con registrazione completa del database, durante il quale vengono eseguiti i tipi seguenti di azioni:
Rollforward dei record di log relativi alle modifiche non scaricate su disco prima dell'interruzione del sistema.
Rollback di tutte le modifiche associate a transazioni incomplete, ad esempio transazioni per cui non esiste un record di log COMMIT o ROLLBACK.
Funzionamento dei checkpoint
Un checkpoint esegue i processi seguenti nel database:
Scrive nel file di log un record che indica l'inizio del checkpoint.
Archivia le informazioni registrate per il checkpoint in una catena di record di log relativi al checkpoint.
Una delle informazioni registrate nel checkpoint è il numero di sequenza del file di log (LSN) del primo record che deve essere presente per poter eseguire correttamente il rollback a livello di database. Questo numero LSN è denominato LSN minimo del recupero (MinLSN). Il numero MinLSN è il valore minimo tra:
Numero LSN dell'inizio del checkpoint.
Numero LSN dell'inizio della transazione attiva meno recente.
Numero LSN dell'inizio della transazione di replica meno recente non ancora recapitata al database di distribuzione.
I record del checkpoint contengono inoltre un elenco di tutte le transazioni attive che hanno modificato il database.
Se il database utilizza il modello di recupero con registrazione minima, contrassegna per il riutilizzo lo spazio che precede il numero MinLSN.
Scrive sul disco tutte le pagine di log e di dati dirty.
Scrive nel file di log un record che indica la fine del checkpoint.
Scrive il numero LSN corrispondente all'inizio della catena nella pagina di avvio del database.
Attività che causano un checkpoint
I checkpoint vengono eseguiti nelle situazioni seguenti:
Viene eseguita esplicitamente un'istruzione CHECKPOINT. Viene eseguito un checkpoint nel database corrente per la connessione.
Nel database viene eseguita un'operazione con registrazione minima, ad esempio viene eseguita un'operazione di copia bulk in un database che utilizza il modello di recupero con registrazione minima delle operazioni bulk.
Vengono aggiunti o rimossi file di database utilizzando l'istruzione ALTER DATABASE.
Un'istanza di SQL Serverviene interrotta da un'istruzione SHUTDOWN o dall'interruzione del servizio SQL Server (MSSQLSERVER). Entrambe le azioni causano un checkpoint in ogni database dell'istanza di SQL Server.
Un'istanza di SQL Server genera periodicamente checkpoint automatici in ogni database per ridurre il tempo necessario all'istanza per il recupero del database.
Viene eseguito un backup del database.
Viene eseguita un'attività che richiede la chiusura di un database. Ad esempio, AUTO_CLOSE è impostata su ON e la connessione al database dell'ultimo utente viene chiusa, oppure viene eseguita una modifica a un'opzione di database che richiede un riavvio del database.
Checkpoint automatici
Motore di database di SQL Server genera checkpoint automatici. L'intervallo fra i checkpoint automatici dipende dalla quantità di spazio di log utilizzata e dal tempo trascorso dall'ultimo checkpoint. Questo intervallo di tempo è estremamente variabile e se al database vengono apportate poche modifiche può essere molto lungo. I checkpoint automatici possono anche essere eseguiti di frequente, se si modificano grandi quantità di dati.
Utilizzare l'opzione di configurazione del server intervallo di recupero per calcolare l'intervallo tra i checkpoint automatici per tutti i database in un'istanza del server che specifica il periodo di tempo massimo che può essere utilizzato dal Motore di database per recuperare un database durante un riavvio del sistema. Il Motore di database stima il numero di record di log che è possibile elaborare nell'intervallo specificato dall'opzione recovery interval durante un'operazione di recupero.
L'intervallo fra i checkpoint automatici dipende anche dal modello di recupero:
Se il database utilizza il modello di recupero con registrazione completa o con registrazione minima delle operazioni bulk, viene generato un checkpoint automatico ogni volta che il numero di record di log raggiunge il valore che il Motore di database stima sia possibile elaborare nel periodo di tempo specificato dall'opzione recovery interval.
Se il database utilizza il modello di recupero con registrazione minima, viene generato un checkpoint automatico ogni volta che il numero di record di log raggiunge il minore tra i valori seguenti:
Il log viene riempito al 70%.
Il numero di record di log raggiunge il valore che il Motore di database stima sia possibile elaborare nel periodo di tempo specificato dall'opzione recovery interval.
Per informazioni sull'impostazione dell'intervallo di recupero, vedere Procedura: Impostazione dell'intervallo di recupero (SQL Server Management Studio).
I checkpoint automatici troncano la parte non utilizzata del log delle transazioni se il database utilizza il modello di recupero con registrazione minima, ma non se il database utilizza il modello di recupero con registrazione completa o con registrazione minima delle operazioni bulk. Per ulteriori informazioni, vedere Troncamento del log delle transazioni.
L'istruzione CHECKPOINT implementa ora l'argomento opzionale checkpoint_duration, che specifica il tempo richiesto, in secondi, per il completamento del checkpoint. Per ulteriori informazioni, vedere CHECKPOINT (Transact-SQL).
Log attivo
La parte del file di log compresa tra il numero MinLSN e l'ultimo record di log scritto viene definita parte attiva del log, o log attivo ed è necessaria per eseguire il recupero con registrazione completa del database. Non è possibile troncare nessuna parte del log attivo. Tutti i record del log devono essere troncati dalle parti del log che precedono il numero MinLSN.
Nella figura seguente viene illustrata una versione semplificata della parte finale di un log delle transazioni con due transazioni attive. I record di checkpoint sono stati compattati in un unico record.
LSN 148 è l'ultimo record del log delle transazioni. Quando è stato elaborato il checkpoint registrato in corrispondenza del numero LSN 147, era stato eseguito il commit di Tran 1 e Tran 2 era l'unica transazione attiva. Pertanto, il primo record di log di Tran 2 è il meno recente di una transazione attiva al momento dell'ultimo checkpoint e, di conseguenza, il numero MinLSN corrisponde a LSN 142, ovvero al record di inizio della transazione Tran 2.
Transazioni con esecuzione prolungata
Il log attivo deve includere tutte le parti di tutte le transazioni di cui non è stato eseguito il commit. Se un'applicazione avvia una transazione e non ne esegue il commit o il rollback, il Motore di database non fa aumentare il numero MinLSN. Ciò può causare due tipi di problemi:
Se il sistema viene arrestato dopo che la transazione ha eseguito numerose modifiche di cui non è stato eseguito il commit, la fase di recupero del riavvio successivo può richiedere tempi notevolmente più lunghi rispetto al valore specificato dall'opzione recovery interval.
È possibile che il log raggiunga dimensioni considerevoli in quanto non può essere troncato dopo il numero MinLSN. Ciò si verifica anche se il database utilizza il modello di recupero con registrazione minima, in base al quale il log delle transazioni viene in genere troncato in corrispondenza di ogni checkpoint automatico.
Transazioni di replica
L'agente di lettura log esegue il monitoraggio del log delle transazioni di tutti i database configurati per la replica transazionale e copia le transazioni contrassegnate per la replica dal log delle transazioni al database di distribuzione. Il log attivo deve contenere tutte le transazioni contrassegnate per la replica, ma non ancora recapitate al database di distribuzione. Se tali transazioni non vengono replicate tempestivamente, potrebbero impedire il troncamento del log. Per ulteriori informazioni, vedere Funzionamento della replica transazionale.
Vedere anche