Scrittura di pagineWriting Pages

QUESTO ARGOMENTO SI APPLICA A: sìSQL Server (a partire dalla versione 2008)sìDatabase SQL di AzuresìAzure SQL Data Warehouse sìParallel Data Warehouse THIS TOPIC APPLIES TO: yesSQL Server (starting with 2008)yesAzure SQL DatabaseyesAzure SQL Data Warehouse yesParallel Data Warehouse

L'I/O di un'istanza di Motore di databaseDatabase Engine include scritture logiche e fisiche.The I/O from an instance of the Motore di databaseDatabase Engine includes logical and physical writes. La scrittura logica viene eseguita quando vengono modificati i dati di una pagina nella cache del buffer.A logical write occurs when data is modified in a page in the buffer cache. La scrittura fisica viene eseguita quando la pagina viene scritta dalla cache del buffer nel disco.A physical write occurs when the page is written from the buffer cache to disk.

Quando una pagina viene modificata nella cache del buffer, non viene immediatamente riscritta nel disco, ma viene contrassegnata come dirty.When a page is modified in the buffer cache, it is not immediately written back to disk; instead, the page is marked as dirty. Questo significa che possono essere eseguite più scritture logiche di una pagina prima che la pagina stessa venga scritta fisicamente nel disco.This means that a page can have more than one logical write made before it is physically written to disk. Per ogni scrittura logica, viene inserito un record del log delle transazioni nella cache del log, per registrare la modifica.For each logical write, a transaction log record is inserted in the log cache that records the modification. I record di log devono essere scritti sul disco prima che la pagina dirty associata venga rimossa dalla cache buffer e scritta sul disco.The log records must be written to disk before the associated dirty page is removed from the buffer cache and written to disk. SQL Server usa una tecnica nota come registrazione write-ahead che impedisce la scrittura di una pagina dirty prima che il record del log associato venga scritto nel disco.SQL Server uses a technique known as write-ahead logging that prevents writing a dirty page before the associated log record is written to disk. Questa procedura è fondamentale per garantire il corretto funzionamento della gestione del recupero.This is essential to the correct working of the recovery manager. Per altre informazioni, vedere Log delle transazioni write-ahead.For more information, see Write-Ahead Transaction Log.

Nella figura seguente viene illustrato il processo di scrittura di una pagina di dati modificata.The following illustration shows the process for writing a modified data page.

Writing_Pages

Dopo la scrittura di una pagina tramite Gestione buffer, viene eseguita la ricerca di pagine dirty adiacenti che possano essere incluse in un'unica operazione di scrittura sequenziale.When the buffer manager writes a page, it searches for adjacent dirty pages that can be included in a single gather-write operation. Le pagine adiacenti hanno ID di pagina consecutivi e appartengono allo stesso file, ma non è necessario che siano contigue in memoria.Adjacent pages have consecutive page IDs and are from the same file; the pages do not have to be contiguous in memory. La ricerca continua in avanti e indietro fino a quando non si verifica uno degli eventi seguenti:The search continues both forward and backward until one of the following events occurs:

  • Viene individuata una pagina pulita.A clean page is found.
  • Vengono individuate 32 pagine.32 pages have been found.
  • Viene trovata una pagina dirty il cui numero di sequenza del file di log (LSN) non è ancora stato scaricato nel log.A dirty page is found whose log sequence number (LSN) has not yet been flushed in the log.
  • Viene trovata una pagina per la quale non è possibile impostare immediatamente un latch.A page is found that cannot be immediately latched.

In questo modo, è possibile scrivere l'intero set di pagine nel disco con un'unica operazione di scrittura sequenziale.In this way, the entire set of pages can be written to disk with a single gather-write operation.

Prima della scrittura, viene aggiunta alla pagina la forma di protezione specificata nel database.Just before a page is written, the form of page protection specified in the database is added to the page. Se viene aggiunta la protezione della pagina incompleta, è necessario impostare un latch in modo esclusivo per l'I/O.If torn page protection is added, the page must be latched EX(clusively) for the I/O. Ciò è dovuto al fatto che la protezione della pagina incompleta modifica la pagina, rendendola inadatta per la lettura da parte di qualsiasi altro thread.This is because the torn page protection modifies the page, making it unsuitable for any other thread to read. Se viene aggiunta la protezione della pagina checksum o se il database non utilizza la protezione della pagina, la pagina viene associata a un latch UP (relativo alla data) per l'I/O.If checksum page protection is added, or the database uses no page protection, the page is latched with an UP(date) latch for the I/O. Questo latch impedisce a chiunque altro di modificare la pagina durante la scrittura, ma consente tuttavia ai lettori di utilizzarla.This latch prevents anyone else from modifying the page during the write, but still allows readers to use it. Per altre informazioni sulle opzioni di protezione della pagina per quanto riguarda l'I/O su disco, vedere Gestione del buffer.For more information about disk I/O page protection options, see Buffer Management.

Una pagina dirty può venire scritta nel disco in tre modi:A dirty page is written to disk in one of three ways:

  • Scrittura LazywriterLazy writing
    Lazywriter è un processo di sistema che mantiene disponibili i buffer liberi rimuovendo dalla cache buffer le pagine utilizzate con meno frequenza.The lazy writer is a system process that keeps free buffers available by removing infrequently used pages from the buffer cache. Le pagine dirty vengono scritte per prime nel disco.Dirty pages are first written to disk.

  • Eager WriterEager writing
    Tramite il processo Eager Writer vengono scritte le pagine dirty associate a operazioni non registrate, ad esempio inserimento bulk e selezione.The eager write process writes dirty data pages associated with nonlogged operations such as bulk insert and select into. Questo processo consente la creazione e la scrittura di nuove pagine in parallelo.This process allows creating and writing new pages to take place in parallel. Questo significa che l'operazione che ha eseguito la chiamata non deve attendere il completamento dell'intera operazione prima della scrittura delle pagine nel disco.That is, the calling operation does not have to wait until the entire operation finishes before writing the pages to disk.

  • CheckpointCheckpoint
    Tramite il processo di gestione dei checkpoint viene eseguita periodicamente l'analisi della cache buffer alla ricerca di buffer con pagine di un database specifico e tutte le pagine dirty vengono scritte nel disco.The checkpoint process periodically scans the buffer cache for buffers with pages from a specified database and writes all dirty pages to disk. I checkpoint consentono di risparmiare tempo durante un successivo recupero, grazie alla creazione di un punto in cui è certo che tutte le pagine dirty siano state scritte sul disco.Checkpoints save time during a later recovery by creating a point at which all dirty pages are guaranteed to have been written to disk. L'utente può richiedere un'operazione di checkpoint utilizzando il comando CHECKPOINT oppure in Motore di databaseDatabase Engine possono venire generati checkpoint automatici in base alla quantità di spazio del log utilizzato e al tempo trascorso dall'ultimo checkpoint.The user may request a checkpoint operation by using the CHECKPOINT command, or the Motore di databaseDatabase Engine may generate automatic checkpoints based on the amount of log space used and time elapsed since the last checkpoint. Viene inoltre generato un checkpoint quando si verificano determinate attività,In addition, a checkpoint is generated when certain activities occur. ad esempio quando un file di dati o di log viene aggiunto o rimosso da un database oppure quando viene arrestata l'istanza di SQL Server.For example, when a data or log file is added or removed from a database, or when the instance of SQL Server is stopped. Per altre informazioni, vedere Relazione tra i checkpoint e la parte attiva del log.For more information, see Checkpoints and the Active Portion of the Log.

I processi di scrittura Lazywriter, Eager Writer e di gestione dei checkpoint non attendono il completamento dell'operazione di I/O.The lazy writing, eager writing, and checkpoint processes do not wait for the I/O operation to complete. Questi processi utilizzano sempre l'I/O asincrono, o sovrapposto, e continuano a eseguire altre operazioni, verificando solo successivamente se l'operazione di I/O è stata eseguita correttamente.They always use asynchronous (or overlapped) I/O and continue with other work, checking for I/O success later. In questo modo, in SQL Server viene ottimizzato l'utilizzo della CPU e delle risorse di I/O per le attività appropriate.This allows SQL Server to maximize both CPU and I/O resources for the appropriate tasks.

Vedere ancheSee Also

Guida sull'architettura di pagina ed extent Pages and Extents Architecture Guide
Lettura di pagine Reading Pages