CHECKPOINT (Transact-SQL)
Scrive su disco tutte le pagine dirty del database corrente. Le pagine dirty sono pagine di dati che sono state immesse nella cache del buffer e modificate, ma che non sono ancora state scritte su disco. I checkpoint consentono di risparmiare tempo durante un successivo recupero, perché definiscono un punto dove è certo che tutte le pagine dirty siano state scritte su disco.
Sintassi
CHECKPOINT [ checkpoint_duration ]
Argomenti
checkpoint_duration
Specifica il numero di secondi disponibili per il completamento del checkpoint. Se si specifica checkpoint_duration, Motore di database di SQL Server cerca di eseguire il checkpoint nell'arco di tempo specificato. Il valore di checkpoint_duration deve essere un'espressione di tipo int e deve essere maggiore di zero. Se si omette questo parametro, Motore di database di SQL Server adegua automaticamente la durata del checkpoint per ridurre al minimo l'impatto sulle prestazioni nelle applicazioni di database.[!NOTA]
In SQL Server 2000 la durata per il processo di checkpoint era basata sull'impostazione RECOVERY INTERVAL di sp_configure.
Osservazioni
Per motivi relativi alle prestazioni, Motore di database apporta modifiche alle pagine del database in memoria e non scrive le pagine su disco dopo ogni modifica. Periodicamente, tuttavia, Motore di database deve eseguire un checkpoint per scrivere queste pagine dirty su disco. Quando le pagine dirty vengono scritte su disco, viene creato un punto valido noto da cui Motore di database può iniziare ad applicare le modifiche contenute nel log durante il recupero successivo a un arresto anomalo del sistema. Per ulteriori informazioni, vedere Relazione tra i checkpoint e la parte attiva del log.
I checkpoint possono venire generati contemporaneamente in qualsiasi numero di database.
Motore di database non può eseguire il recupero in base a un checkpoint interrotto. Se un checkpoint viene interrotto ed è necessario eseguire un recupero, Motore di database deve avviare il recupero dal checkpoint precedente.
Eventi che causano l'esecuzione di checkpoint
Prima di un backup di database Motore di database esegue automaticamente un checkpoint in modo che tutte le modifiche apportate alle pagine del database vengano incluse nel backup. I checkpoint vengono eseguiti automaticamente anche al verificarsi di una delle condizioni seguenti:
La dimensione della parte attiva del log è maggiore della dimensione che il server potrebbe recuperare nell'intervallo di tempo specificato nell'opzione di configurazione del server Intervallodi recupero.
Il log diventa pieno al 70 percento e il database è in modalità di troncamento del log.
Un database è in modalità di troncamento del log quando entrambe queste condizioni sono TRUE: il database utilizza il modello di recupero con registrazione minima e, dopo l'esecuzione dell'ultima istruzione BACKUP DATABASE che faceva riferimento al database, si verifica uno degli eventi seguenti:
È stata eseguita un'operazione con registrazione minima nel database, ad esempio un'operazione di copia bulk con registrazione minima o un'istruzione WRITETEXT con registrazione minima.
È stata eseguita un'istruzione ALTER DATABASE per aggiungere o eliminare un file nel database.
L'interruzione di un server, inoltre, comporta la creazione di un checkpoint in ogni database del server. I metodi di interruzione di SQL Server seguenti comportano l'esecuzione di checkpoint per tutti i database:
Utilizzo di Gestione configurazione SQL Server.
Esecuzione di SQL Server Management Studio.
Esecuzione dell'istruzione SHUTDOWN.
[!NOTA]
L'istruzione SHUTDOWN WITH NOWAIT chiude SQL Server senza eseguire un checkpoint in ogni database. È pertanto possibile che al successivo riavvio il recupero dei database nel server risulti più lento.
Esecuzione del comando net stop mssqlserver in una finestra del prompt dei comandi.
Esecuzione di Servizi nel Pannello di controllo, selezionando mssqlserver e facendo clic su Interrompi.
Impostazione della modalità non in linea per un'istanza in un cluster.
Fattori che incidono sulla durata delle operazioni di checkpoint
In generale il tempo necessario per l'esecuzione di un'operazione di checkpoint aumenta con il numero di pagine dirty che l'operazione deve scrivere. Per ridurre al minimo l'impatto sulle prestazioni in altre applicazioni, in SQL Server viene regolata automaticamente la frequenza delle scritture eseguite da un'operazione di checkpoint. SQL Server utilizza questa strategia per i checkpoint automatici e per ogni istruzione CHECKPOINT per cui non sia stato specificato alcun valore per checkpoint_duration. Se si riduce la frequenza delle scritture, aumenta il tempo necessario per completare l'operazione di checkpoint.
È possibile utilizzare checkpoint_duration per richiedere che l'operazione di checkpoint venga completata entro un periodo di tempo specifico. L'impatto sulle prestazioni derivante dall'utilizzo di checkpoint_duration dipende dal numero di pagine dirty, dall'attività del sistema e dalla durata effettiva specificata. Se, ad esempio, il checkpoint viene normalmente completato in 120 secondi e si imposta checkpoint_duration su 45 secondi, SQL Server deve dedicare al checkpoint più risorse di quante verrebbero assegnate per impostazione predefinita. Se, invece, si imposta checkpoint_duration su 180 secondi, SQL Server assegna meno risorse di quante ne verrebbero assegnate per impostazione predefinita. In generale, un valore di checkpoint_duration basso comporta un aumento delle risorse dedicate al checkpoint, mentre un valore di checkpoint_duration alto comporta una riduzione delle risorse dedicate al checkpoint. SQL Server completa sempre un checkpoint, se possibile, e l'istruzione CHECKPOINT termina immediatamente quando un checkpoint viene completato. In alcuni casi, quindi, un checkpoint può venire completato prima o dopo il periodo di tempo indicato.
Autorizzazioni
Le autorizzazioni per l'istruzione CHECKPOINT vengono assegnate per impostazione predefinita ai membri del ruolo predefinito del server sysadmin e dei ruoli predefiniti del database db_owner e db_backupoperator e non sono trasferibili.