Guida sull'architettura di pagina ed extentPages and Extents Architecture Guide

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

La pagine è l'unità di base per l'archiviazione dei dati in SQL Server.The page is the fundamental unit of data storage in SQL Server. Un extent è una raccolta di otto pagine fisicamente contigue.An extent is a collection of eight physically contiguous pages. Gli extent aiutano a gestire le pagine in modo efficace.Extents help efficiently manage pages. Questa guida descrive le strutture dei dati usate per gestire pagine ed extent in tutte le versioni di SQL Server.This guide describes the data structures that are used to manage pages and extents in all versions of SQL Server. La comprensione dell'architettura delle pagine e degli extent è importante per la progettazione e lo sviluppo di database efficienti.Understanding the architecture of pages and extents is important for designing and developing databases that perform efficiently.

Pagine ed extentPages and Extents

L'unità di base per l'archiviazione dei dati in SQL Server è la pagina.The fundamental unit of data storage in SQL Server is the page. Lo spazio su disco allocato in un file di dati (con estensione mdf o ndf) di un database viene suddiviso logicamente in pagine numerate in modo sequenziale da 0 a n.The disk space allocated to a data file (.mdf or .ndf) in a database is logically divided into pages numbered contiguously from 0 to n. Le operazioni di I/O su disco vengono eseguite al livello della pagina.Disk I/O operations are performed at the page level. Questo significa che SQL Server legge o scrive pagine di dati intere.That is, SQL Server reads or writes whole data pages.

Gli extent sono un gruppo di otto pagine fisicamente contigue e vengono utilizzati per gestire in maniera efficiente le pagine.Extents are a collection of eight physically contiguous pages and are used to efficiently manage the pages. Tutte le pagine sono archiviate in extent.All pages are stored in extents.

PaginePages

In SQL Server la dimensione di una pagina è 8 KB.In SQL Server, the page size is 8 KB. I database di SQL Server includono pertanto 128 pagine per megabyte.This means SQL Server databases have 128 pages per megabyte. Ogni pagina inizia con un'intestazione di 96 byte utilizzata per archiviare informazioni di sistema relative alla pagina.Each page begins with a 96-byte header that is used to store system information about the page. Queste informazioni includono il numero della pagina, il tipo di pagina, la quantità di spazio disponibile nella pagina e l'ID dell'unità di allocazione dell'oggetto proprietario della pagina.This information includes the page number, page type, the amount of free space on the page, and the allocation unit ID of the object that owns the page.

Nella tabella seguente vengono elencati i tipi di pagina usati nei file di dati di un database SQL Server.The following table shows the page types used in the data files of a SQL Server database.

Tipo di paginaPage type SommarioContents
DatiData Righe di dati con tutti i dati, ad eccezione di dati text, ntext, image, nvarchar (max), varchar (max), varbinary (max) e xml, quando il testo nella riga è impostato su ON.Data rows with all data, except text, ntext, image, nvarchar(max), varchar(max), varbinary(max), and xml data, when text in row is set to ON.
IndiceIndex Voci di indice.Index entries.
Test/ImageTest/Image Tipi di dati Large Object: (text, ntext, image, nvarchar(max), varchar(max), varbinary(max) e dati xml)Large object data types: (text, ntext, image, nvarchar(max), varchar(max), varbinary(max), and xml data)
Colonne a lunghezza variabile quando la riga di dati supera 8 KB: (varchar, nvarchar, varbinary e sql_variant)Variable length columns when the data row exceeds 8 KB: (varchar, nvarchar, varbinary, and sql_variant)
Mappa di allocazione globale (GAM, Global Allocation Map), Mappa di allocazione globale condivisa (SGAM, Shared Global Allocation Map)Global Allocation Map, Shared Global Allocation Map Informazioni che indicano se gli extent sono allocati.Information about whether extents are allocated.
Spazio libero nella pagina (PFS, Page Free Space)Page Free Space (PFS) Informazioni sull'allocazione delle pagine e sullo spazio disponibile nelle pagine.Information about page allocation and free space available on pages.
Index Allocation MapIndex Allocation Map Informazioni sugli extent utilizzati da una tabella o da un indice per unità di allocazione.Information about extents used by a table or index per allocation unit.
Mappa delle modifiche di copia bulk (BCM, Bulk Changed Map)Bulk Changed Map Informazioni sugli extent modificati da operazioni bulk eseguite dopo l'ultima istruzione BACKUP LOG per unità di allocazione.Information about extents modified by bulk operations since the last BACKUP LOG statement per allocation unit.
Mappa differenziale delle modifiche (DCM, Differential Changed Map)Differential Changed Map Informazioni sugli extent modificati dopo l'esecuzione dell'ultima istruzione BACKUP DATABASE.Information about extents that have changed since the last BACKUP DATABASE statement per allocation unit.
Nota

I file di log non includono pagine, ma solo una serie di record di log.Log files do not contain pages; they contain a series of log records.

Le righe di dati vengono inserite in sequenza nella pagina iniziando immediatamente dopo l'intestazione.Data rows are put on the page serially, starting immediately after the header. Una tabella dell'offset delle righe inizia alla fine della pagina. Ogni tabella dell'offset delle righe include una voce per ogni riga della paginaA row offset table starts at the end of the page, and each row offset table contains one entry for each row on the page. e in ogni voce viene registrata la distanza del primo byte della riga dall'inizio della pagina.Each entry records how far the first byte of the row is from the start of the page. Le voci della tabella dell'offset delle righe sono in sequenza inversa rispetto a quella delle righe della pagina.The entries in the row offset table are in reverse sequence from the sequence of the rows on the page.

page_architecture

Supporto per righe di grandi dimensioniLarge Row Support

Le righe non possono estendersi su più pagine. È tuttavia possibile che parti di una riga vengano spostate all'esterno della pagina della riga in modo che questa possa di fatto essere di grandi dimensioni.Rows cannot span pages, however portions of the row may be moved off the row's page so that the row can actually be very large. La quantità massima di dati e overhead contenuti in una singola riga di una pagina è 8.060 byte (8 KB).The maximum amount of data and overhead that is contained in a single row on a page is 8,060 bytes (8 KB). Questa limitazione non include tuttavia i dati archiviati nel tipo di pagina Text/Image.However, this does not include the data stored in the Text/Image page type. Questa restrizione è assoluta per tabelle contenenti colonne di tipo varchar, nvarchar, varbinary o sql_variant.This restriction is relaxed for tables that contain varchar, nvarchar, varbinary, or sql_variant columns. Quando la dimensione totale delle righe di tutte le colonne a lunghezza fissa e variabile di una tabella supera il limite di 8.060 byte, SQL Server sposta dinamicamente una o più colonne a lunghezza variabile all'interno di pagine nell'unità di allocazione ROW_OVERFLOW_DATA, iniziando dalla colonna con la larghezza maggiore.When the total row size of all fixed and variable columns in a table exceeds the 8,060 byte limitation, SQL Server dynamically moves one or more variable length columns to pages in the ROW_OVERFLOW_DATA allocation unit, starting with the column with the largest width. Questa operazione viene eseguita ogni volta che un aggiornamento o un inserimento aumenta la dimensione totale della riga fino a superare il limite di 8.060 byte.This is done whenever an insert or update operation increases the total size of the row beyond the 8060 byte limit. Quando una colonna viene spostata in una pagina nell'unità di allocazione ROW_OVERFLOW_DATA, viene mantenuto un puntatore di 24 byte sulla pagina originale nell'unità di allocazione IN_ROW_DATA.When a column is moved to a page in the ROW_OVERFLOW_DATA allocation unit, a 24-byte pointer on the original page in the IN_ROW_DATA allocation unit is maintained. Se un'operazione successiva riduce la dimensione della riga, SQL Server sposta nuovamente le colonne nella pagina di dati originale in maniera dinamica.If a subsequent operation reduces the row size, SQL Server dynamically moves the columns back to the original data page.

ExtentsExtents

L'extent è l'unità di base in cui viene gestito lo spazio.Extents are the basic unit in which space is managed. Un extent è costituito da otto pagine fisicamente contigue, ovvero da 64 KB.An extent is eight physically contiguous pages, or 64 KB. I database di SQL Server includono pertanto 16 extent per megabyte.This means SQL Server databases have 16 extents per megabyte.

Per allocare lo spazio con la massima efficienza, in SQL Server non vengono allocati interi extent in tabelle che includono quantità di dati ridotte.To make its space allocation efficient, SQL Server does not allocate whole extents to tables with small amounts of data. SQL Server include due tipi di extent:SQL Server has two types of extents:

  • Gli extent uniformi sono di proprietà di un unico oggetto, pertanto le otto pagine dell'extent possono essere utilizzate solo da tale oggetto.Uniform extents are owned by a single object; all eight pages in the extent can only be used by the owning object.
  • Gli extent misti possono essere condivisi al massimo da otto oggetti.Mixed extents are shared by up to eight objects. Ognuna delle otto pagine dell'extent può essere di proprietà di un oggetto differente.Each of the eight pages in the extent can be owned by a different object.

In una nuova tabella o nuovo indice vengono generalmente allocate pagine da extent misti.A new table or index is generally allocated pages from mixed extents. Se la tabella o l'indice aumenta di dimensioni fino a includere otto pagine, per le allocazioni successive a esso dirette vengono utilizzati extent uniformi.When the table or index grows to the point that it has eight pages, it then switches to use uniform extents for subsequent allocations. Se si crea un indice per una tabella esistente che contiene un numero di righe sufficiente per generare otto pagine nell'indice, tutte le allocazioni per l'indice appartengono a extent uniformi.If you create an index on an existing table that has enough rows to generate eight pages in the index, all allocations to the index are in uniform extents.

Extents

Gestione delle allocazioni di extent e dello spazio liberoManaging Extent Allocations and Free Space

Le strutture di dati di SQL Server che consentono di gestire le allocazioni degli extent e di tenere traccia dello spazio su disco sono organizzate in modo relativamente semplice.The SQL Server data structures that manage extent allocations and track free space have a relatively simple structure. Tali strutture offrono i vantaggi seguenti:This has the following benefits:

  • Le informazioni relative allo spazio libero sono compresse al massimo e occupano pertanto un numero ridotto di pagine.The free space information is densely packed, so relatively few pages contain this information.
    Questa caratteristica comporta un aumento della velocità a causa della riduzione della quantità di letture su disco necessarie per recuperare le informazioni sull'allocazione.This increases speed by reducing the amount of disk reads that are required to retrieve allocation information. In questo modo, aumenta inoltre la probabilità che le pagine di allocazione vengano mantenute nella memoria e non richiedano ulteriori letture.This also increases the chance that the allocation pages will remain in memory and not require more reads.

  • La maggior parte delle informazioni relative all'allocazione non è concatenata.Most of the allocation information is not chained together. Questo aspetto semplifica la gestione delle informazioni sull'allocazione.This simplifies the maintenance of the allocation information.
    Ogni allocazione o deallocazione di pagina può essere eseguita in modo rapido.Each page allocation or deallocation can be performed quickly. Questa caratteristica riduce la contesa tra attività simultanee di allocazione o deallocazione di pagine.This decreases the contention between concurrent tasks having to allocate or deallocate pages.

Gestione delle allocazioni di extentManaging Extent Allocations

In SQL Server vengono utilizzati due tipi di mappe per la registrazione delle allocazioni degli extent:SQL Server uses two types of allocation maps to record the allocation of extents:

  • Mappa di allocazione globale (GAM, Global Allocation Map)Global Allocation Map (GAM)
    Nelle pagine GAM vengono registrati gli extent allocati.GAM pages record what extents have been allocated. In ogni pagina GAM possono essere registrati riferimenti a 64.000 extent, ovvero a circa 4 GB di dati.Each GAM covers 64,000 extents, or almost 4 GB of data. La pagina GAM include un bit per ogni extent dell'intervallo che la riguarda.The GAM has one bit for each extent in the interval it covers. Se il bit è 1, l'extent è disponibile, mentre se è 0, l'extent è allocato.If the bit is 1, the extent is free; if the bit is 0, the extent is allocated.

  • Mappa di allocazione globale condivisa (SGAM, Shared Global Allocation Map)Shared Global Allocation Map (SGAM)
    Nelle pagine SGAM vengono registrate informazioni sugli extent misti con almeno una pagina inutilizzata.SGAM pages record which extents are currently being used as mixed extents and also have at least one unused page. In ogni pagina SGAM possono essere registrati riferimenti a 64.000 extent, ovvero a circa 4 GB di dati.Each SGAM covers 64,000 extents, or almost 4 GB of data. La pagina SGAM include un bit per ogni extent dell'intervallo che la riguarda.The SGAM has one bit for each extent in the interval it covers. Se il bit è 1, l'extent viene utilizzato come extent misto e include una pagina disponibile.If the bit is 1, the extent is being used as a mixed extent and has a free page. Se il bit è 0, l'extent non viene utilizzato come extent misto o rappresenta un extent misto di cui sono in uso tutte le pagine.If the bit is 0, the extent is not used as a mixed extent, or it is a mixed extent and all its pages are being used.

Nelle pagine GAM e SGAM per ogni extent sono impostati gli schemi di bit indicati di seguito, in base all'utilizzo corrente dell'extent.Each extent has the following bit patterns set in the GAM and SGAM, based on its current use.

Utilizzo corrente dell'extentCurrent use of extent Impostazione del bit nella pagina GAMGAM bit setting Impostazione del bit nella pagina SGAMSGAM bit setting
Disponibile, non utilizzatoFree, not being used 11 00
Extent uniforme oppure extent misto senza spazio liberoUniform extent, or full mixed extent 00 00
Extent misto con pagine disponibiliMixed extent with free pages 00 11

Ciò consente di utilizzare semplici algoritmi di gestione degli extent.This causes simple extent management algorithms. Per allocare un extent uniforme, il motore di database cerca un bit 1 nella pagina GAM e lo imposta su 0.To allocate a uniform extent, the Database Engine searches the GAM for a 1 bit and sets it to 0. Per cercare un extent misto con pagine libere, il motore di database cerca un bit 1 nella pagina SGAM.To find a mixed extent with free pages, the Database Engine searches the SGAM for a 1 bit. Per allocare un extent misto, il motore di database cerca un bit 1 nella pagina GAM, lo imposta su 0 e quindi imposta su 1 anche il bit corrispondente nella pagina SGAM.To allocate a mixed extent, the Database Engine searches the GAM for a 1 bit, sets it to 0, and then also sets the corresponding bit in the SGAM to 1. Per deallocare un extent, il motore di database verifica che il bit GAM sia impostato su 1 e il bit SGAM su 0.To deallocate an extent, the Database Engine makes sure that the GAM bit is set to 1 and the SGAM bit is set to 0. Gli algoritmi effettivamente usati internamente dal motore di database sono più sofisticati rispetto a quanto descritto in questo argomento, poiché il motore di database distribuisce dati in un database in modo uniforme.The algorithms that are actually used internally by the Database Engine are more sophisticated than what is described in this topic, because the Database Engine distributes data evenly in a database. Anche gli algoritmi reali, tuttavia, risultano semplificati, in quanto non devono gestire catene di informazioni sull'allocazione degli extent.However, even the real algorithms are simplified by not having to manage chains of extent allocation information.

Rilevamento dello spazio liberoTracking Free Space

Le pagine PFS (Page Free Space, Spazio libero nella pagina) consentono di rilevare lo stato di allocazione di ogni pagina, se una singola pagina sia stata allocata e la quantità di spazio libero in ogni pagina.Page Free Space (PFS) pages record the allocation status of each page, whether an individual page has been allocated, and the amount of free space on each page. PFS include un bit per ogni pagina, indicando se la pagina è allocata e, in tal caso, se si tratta di una pagina vuota, in uso dall'1% al 50%, dal 51% all'80%, dall'81% al 95% o dal 96% al 100%.The PFS has one byte for each page, recording whether the page is allocated, and if so, whether it is empty, 1 to 50 percent full, 51 to 80 percent full, 81 to 95 percent full, or 96 to 100 percent full.

Dopo che un extent è stato allocato a un oggetto, il motore di database usa le pagine PFS per registrare le pagine dell'extent allocate e quelle disponibili.After an extent has been allocated to an object, the Database Engine uses the PFS pages to record which pages in the extent are allocated or free. Queste informazioni vengono usate quando il motore di database deve allocare una nuova pagina.This information is used when the Database Engine has to allocate a new page. La quantità di spazio libero in una pagina viene mantenuta solo per le pagine heap e text/image.The amount of free space in a page is only maintained for heap and Text/Image pages. Questo spazio viene usato quando il motore di database deve trovare una pagina con spazio libero disponibile per includere una nuova riga inserita.It is used when the Database Engine has to find a page with free space available to hold a newly inserted row. Per gli indici non è necessario tenere traccia dello spazio libero nella pagina, in quanto il punto di inserimento di una nuova riga viene impostato dai valori delle chiavi di indice.Indexes do not require that the page free space be tracked, because the point at which to insert a new row is set by the index key values.

La prima pagina dopo la pagina dell'intestazione di un file di dati (con il numero di pagina 1) è una pagina PFS.A PFS page is the first page after the file header page in a data file (page number 1). Questa pagina è seguita da una pagina GAM (con il numero di pagina 2) e quindi da una pagina SGAM (pagina 3).This is followed by a GAM page (page number 2), and then an SGAM page (page 3). È presente una pagina PFS circa 8.000 pagine dopo la prima.There is a PFS page approximately 8,000 pages in size after the first PFS page. È presente un'altra pagina GAM 64.000 extent dopo la prima pagina GAM a pagina 2 e un'altra pagina SGAM 64.000 extent dopo la prima pagina SGAM a pagina 3.There is another GAM page 64,000 extents after the first GAM page on page 2, and another SGAM page 64,000 extents after the first SGAM page on page 3. Nella figura seguente viene illustrata la sequenza di pagine usata da il motore di database per allocare e gestire gli extent.The following illustration shows the sequence of pages used by the Database Engine to allocate and manage extents.

manage_extents

Gestione dello spazio utilizzato dagli oggettiManaging Space Used by Objects

Una pagina della mappa di allocazione degli indici (IAM) esegue il mapping degli extent in una parte da 4 gigabyte (GB) di un file di database utilizzato da un'unità di allocazione.An Index Allocation Map (IAM) page maps the extents in a 4-gigabyte (GB) part of a database file used by an allocation unit. Le unità di allocazione possono essere di tre tipi:An allocation unit is one of three types:

  • IN_ROW_DATAIN_ROW_DATA
    Contiene una partizione di un heap o di un indice.Holds a partition of a heap or index.

  • LOB_DATALOB_DATA
    Contiene tipi di dati Large Object (LOB), ad esempio xml, varbinary (max) e varchar (max).Holds large object (LOB) data types, such as xml, varbinary(max), and varchar(max).

  • ROW_OVERFLOW_DATAROW_OVERFLOW_DATA
    Contiene dati a lunghezza variabile archiviati in colonne varchar, nvarchar, varbinary o sql_variant che superano il limite della lunghezza di riga di 8.060 byte.Holds variable length data stored in varchar, nvarchar, varbinary, or sql_variant columns that exceed the 8,060 byte row size limit.

Ogni partizione di un heap o di un indice contiene almeno un'unità di allocazione IN_ROW_DATA.Each partition of a heap or index contains at least an IN_ROW_DATA allocation unit. Può inoltre contenere un'unità di allocazione LOB_DATA o ROW_OVERFLOW_DATA, a seconda dello schema dell'heap o dell'indice.It may also contain a LOB_DATA or ROW_OVERFLOW_DATA allocation unit, depending on the heap or index schema. Per altre informazioni sulle unità di allocazione, vedere Organizzazione di tabelle e indici.For more information about allocation units, see Table and Index Organization.

Una pagina IAM include informazioni relative a un intervallo di 4 GB di un file, che corrisponde a quello di una pagina GAM o SGAM.An IAM page covers a 4-GB range in a file and is the same coverage as a GAM or SGAM page. Se l'unità di allocazione contiene extent derivati da più file o più intervalli di 4 GB di un file, saranno presenti più pagine IAM concatenate in una catena IAM.If the allocation unit contains extents from more than one file, or more than one 4-GB range of a file, there will be multiple IAM pages linked in an IAM chain. A ogni unità di allocazione corrisponde pertanto almeno una pagina IAM per ogni file in cui sono inclusi extent per l'unità di allocazione.Therefore, each allocation unit has at least one IAM page for each file on which it has extents. Le pagine IAM per un file possono inoltre essere più di una se il numero di extent del file allocati all'unità di allocazione è maggiore del numero di extent che una pagina IAM è in grado di registrare.There may also be more than one IAM page on a file, if the range of the extents on the file allocated to the allocation unit exceeds the range that a single IAM page can record.

iam_pages

Le pagine IAM vengono allocate per ogni unità di allocazione in base alle necessità e vengono posizionate in modo casuale nel file.IAM pages are allocated as required for each allocation unit and are located randomly in the file. La vista di sistema sys.system_internals_allocation_units punta alla prima pagina IAM relativa a un'unità di allocazione.The system view, sys.system_internals_allocation_units, points to the first IAM page for an allocation unit. e tutte le pagine IAM di tale unità di allocazione sono concatenate.All the IAM pages for that allocation unit are linked in a chain.

Importante

La vista di sistema sys.system_internals_allocation_units è solo per uso interno ed è soggetta a modifiche.The sys.system_internals_allocation_units system view is for internal use only and is subject to change. Non è garantita la compatibilità.Compatibility is not guaranteed.

iam_chain

Pagine IAM collegate in catena per unità di allocazione Ogni pagina IAM include un'intestazione che indica l'extent iniziale dell'intervallo di extent sul quale viene eseguito il mapping dalla pagina IAM.IAM pages linked in a chain per allocation unit An IAM page has a header that indicates the starting extent of the range of extents mapped by the IAM page. La pagina IAM include inoltre una mappa di bit di grandi dimensioni in cui ogni bit rappresenta un extent.The IAM page also has a large bitmap in which each bit represents one extent. Il primo bit della mappa rappresenta il primo extent dell'intervallo, il secondo bit rappresenta il secondo extent e così via.The first bit in the map represents the first extent in the range, the second bit represents the second extent, and so on. Se un bit è 0, significa che l'extent che rappresenta non è allocato all'unità di allocazione proprietaria della pagina IAM.If a bit is 0, the extent it represents is not allocated to the allocation unit owning the IAM. Se il bit è 1, significa che l'extent che rappresenta è allocato all'unità di allocazione proprietaria della pagina IAM.If the bit is 1, the extent it represents is allocated to the allocation unit owning the IAM page.

Se nel motore di database di SQL Server è necessario inserire una nuova riga ma lo spazio libero nella pagina non è sufficiente, vengono usate le pagine IAM e PFS per trovare una pagina per l'allocazione o, nel caso di un heap o di una pagina di tipo text/image, una pagina in cui sia disponibile spazio sufficiente per la riga da inserire.When the SQL Server Database Engine has to insert a new row and no space is available in the current page, it uses the IAM and PFS pages to find a page to allocate, or, for a heap or a Text/Image page, a page with sufficient space to hold the row. Il motore di database usa le pagine IAM per trovare gli extent allocati all'unità di allocazione.The Database Engine uses the IAM pages to find the extents allocated to the allocation unit. Per ogni extent, il motore di database cerca le pagine PFS per verificare se esiste una pagina da usare.For each extent, the Database Engine searches the PFS pages to see if there is a page that can be used. Poiché ogni pagina IAM e PFS include i dati di un numero di pagine elevato, il numero di pagine IAM e PFS di un database è ridotto.Each IAM and PFS page covers lots of data pages, so there are few IAM and PFS pages in a database. Ciò significa che le pagine IAM e PFS in genere risiedono nella memoria del pool di buffer di SQL Server e che pertanto è possibile eseguire rapidamente ricerche al loro interno.This means that the IAM and PFS pages are generally in memory in the SQL Server buffer pool, so they can be searched quickly. Per gli indici, il punto di inserimento di una nuova riga viene impostato dalla chiave dell'indice.For indexes, the insertion point of a new row is set by the index key. In questo caso, il processo di ricerca illustrato in precedenza non viene eseguito.In this case, the search process previously described does not occur.

In motore di database viene allocato un nuovo extent a un'unità di allocazione solo se non viene trovata rapidamente una pagina di un extent esistente in cui sia disponibile spazio sufficiente per la riga da inserire.The Database Engine allocates a new extent to an allocation unit only when it cannot quickly find a page in an existing extent with sufficient space to hold the row being inserted. Nel motore di database, gli extent da allocare vengono selezionati tra quelli disponibili nel filegroup usando un algoritmo di allocazione proporzionale.The Database Engine allocates extents from those available in the filegroup using a proportional allocation algorithm. Se un filegroup include due file, in uno dei quali lo spazio libero è doppio rispetto all'altro, verranno allocate due pagine del file che include la quantità di spazio libero maggiore per ogni pagina allocata dell'altro file.If a filegroup has two files and one has two times the free space as the other, two pages will be allocated from the file with the available space for every one page allocated from the other file. Ciò significa che la percentuale di spazio utilizzato deve essere analoga in tutti i file di un filegroup.This means that every file in a filegroup should have a similar percentage of space used.

Rilevamento degli extent modificatiTracking Modified Extents

SQL Server usa due strutture di dati interne per rilevare gli extent modificati tramite operazioni di copia bulk e di quelli modificati successivamente al backup completo più recente.SQL Server uses two internal data structures to track extents modified by bulk copy operations and extents modified since the last full backup. Queste strutture di dati consentono di accelerare in misura significativa le operazioni di backup differenziale.These data structures greatly speed up differential backups. Esse accelerano inoltre la registrazione delle operazioni di copia bulk con database per i quali viene utilizzato il modello di recupero con registrazione minima delle operazioni bulk.They also speed up the logging of bulk copy operations when a database is using the bulk-logged recovery model. Come le pagine mappa di allocazione globale (GAM, Global Allocation Map) e mappa di allocazione globale condivisa (SGAM, Shared Global Allocation Map), queste strutture sono mappe di bit in cui ogni bit rappresenta un singolo extent.Like the Global Allocation Map (GAM) and Shared Global Allocation Map (SGAM) pages, these structures are bitmaps in which each bit represents a single extent.

  • Mappa differenziale delle modifiche (DCM, Differential Changed Map)Differential Changed Map (DCM)
    Rileva gli extent modificati dopo l'esecuzione dell'ultima istruzione BACKUP DATABASE.This tracks the extents that have changed since the last BACKUP DATABASE statement. Se il bit di un extent è 1, l'extent è stato modificato dopo l'esecuzione dell'ultima istruzione BACKUP DATABASE.If the bit for an extent is 1, the extent has been modified since the last BACKUP DATABASE statement. Se invece è 0, l'extent non è stato modificato.If the bit is 0, the extent has not been modified. Durante il backup differenziale vengono lette solo le pagine DCM per identificare gli extent modificati.Differential backups read just the DCM pages to determine which extents have been modified. In questo modo, il numero di pagine di cui è necessario eseguire l'analisi durante il backup differenziale risulta notevolmente ridotto.This greatly reduces the number of pages that a differential backup must scan. La durata dell'esecuzione di un backup differenziale è proporzionale al numero di extent modificati dopo l'esecuzione dell'ultima istruzione BACKUP DATABASE e non alle dimensioni complessive del database.The length of time that a differential backup runs is proportional to the number of extents modified since the last BACKUP DATABASE statement and not the overall size of the database.

  • Mappa delle modifiche di copia bulk (BCM, Bulk Changed Map)Bulk Changed Map (BCM)
    Rileva gli extent modificati mediante operazioni con registrazione minima delle operazioni bulk dall'esecuzione dell'ultima istruzione BACKUP LOG.This tracks the extents that have been modified by bulk logged operations since the last BACKUP LOG statement. Se il bit di un extent è 1, l'extent è stato modificato mediante un'operazione con registrazione minima delle operazioni bulk dall'esecuzione dell'ultima istruzione BACKUP LOG.If the bit for an extent is 1, the extent has been modified by a bulk logged operation after the last BACKUP LOG statement. Se invece è 0, l'extent non è stato modificato mediante operazioni con registrazione minima delle operazioni bulk.If the bit is 0, the extent has not been modified by bulk logged operations. Sebbene le pagine BCM siano presenti in tutti i database, esse risultano utili solo se il database utilizza il modello di recupero con registrazione minima delle operazioni bulk.Although BCM pages appear in all databases, they are only relevant when the database is using the bulk-logged recovery model. Grazie a tale modello, quando viene eseguita un'istruzione BACKUP LOG il processo di backup esegue l'analisi delle pagine BCM per identificare gli extent che sono stati modificati,In this recovery model, when a BACKUP LOG is performed, the backup process scans the BCMs for extents that have been modified. quindi li include nel backup del log.It then includes those extents in the log backup. In questo modo, se il database viene ripristinato da un backup di database e da una sequenza di backup del log delle transazioni, viene eseguito il recupero delle operazioni con registrazione minima delle operazioni bulk.This lets the bulk logged operations be recovered if the database is restored from a database backup and a sequence of transaction log backups. Le pagine BCM non risultano utili in database che utilizzano il modello di recupero con registrazione minima in quanto non prevede la registrazione delle operazioni con registrazione minima delle operazioni bulk,BCM pages are not relevant in a database that is using the simple recovery model, because no bulk logged operations are logged. né in database che utilizzano il modello di recupero con registrazione completa in quanto, con questo modello, le operazioni con registrazione minima delle operazioni bulk vengono considerate come operazioni con registrazione completa delle operazioni bulk.They are not relevant in a database that is using the full recovery model, because that recovery model treats bulk logged operations as fully logged operations.

L'intervallo tra le pagine DCM e BCM corrisponde all'intervallo tra le pagine GAM e SGAM, ovvero 64.000 extent.The interval between DCM pages and BCM pages is the same as the interval between GAM and SGAM page, 64,000 extents. All'interno di un file fisico le pagine DCM e BCM sono seguite dalle pagine GAM e SGAM:The DCM and BCM pages are located behind the GAM and SGAM pages in a physical file:

special_page_order