Durabilità per tabelle con ottimizzazione per la memoriaDurability for Memory-Optimized Tables

In questo argomento si applica a: SìSQL ServernonDatabase SQL di AzurenonAzure SQL Data Warehouse non Parallel Data WarehouseTHIS TOPIC APPLIES TO: yesSQL ServernoAzure SQL DatabasenoAzure SQL Data Warehouse noParallel Data Warehouse

OLTP in memoriaIn-Memory OLTP fornisce durabilità completa per le tabelle ottimizzate per la memoria. provides full durability for memory-optimized tables. Quando viene eseguito il commit di una transazione che ha modificato una tabella ottimizzata per la memoria, SQL ServerSQL Server, come avviene per le tabelle basate su disco, garantisce che le modifiche vengano rese permanenti, ovvero che saranno mantenute in seguito a un riavvio del database, a condizione che lo spazio di archiviazione sottostante sia disponibile.When a transaction that changed a memory-optimized table commits, SQL ServerSQL Server (as it does for disk-based tables), guarantees that the changes are permanent (will survive a database restart), provided the underlying storage is available. I componenti chiave della durabilità sono due: registrazione delle transazioni e salvataggio in modo permanente delle modifiche ai dati nell'archiviazione su disco.There are two key components of durability: transaction logging and persisting data changes to on-disk storage.

Per informazioni dettagliate su qualsiasi limitazione di dimensioni per le tabelle durevoli, vedere Stimare i requisiti di memoria delle tabelle con ottimizzazione per la memoria.For details on any size limitations for durable tables see Estimate Memory Requirements for Memory-Optimized Tables.

Log delle transazioniTransaction Log

Tutte le modifiche apportate alle tabelle basate su disco o alle tabelle ottimizzate per la memoria durevoli vengono acquisite in uno o più record di log delle transazioni.All changes made to disk-based tables or durable memory-optimized tables are captured in one or more transaction log records. In corrispondenza del commit di una transazione, tramite SQL ServerSQL Server vengono scritti sul disco i record di log associati alla transazione prima di comunicare all'applicazione o alla sessione utente che è stato eseguito il commit della transazione.When a transaction commits, SQL ServerSQL Server writes the log records associated with the transaction to disk before communicating to the application or user session that the transaction has committed. In questo modo viene garantita la durabilità delle modifiche apportate dalla transazione.This guarantees that changes made by the transaction are durable. Il log delle transazioni per le tabelle ottimizzate per la memoria è completamente integrato con lo stesso flusso del log utilizzato dalle tabelle basate su disco.The transaction log for memory-optimized tables is fully integrated with the same log stream used by disk-based tables. Grazie a questa integrazione è possibile far continuare le operazioni di backup, recupero e ripristino del log delle transazioni esistente senza la necessità di altri passaggi aggiuntivi.This integration allows existing transaction log backup, recover, and restore operations to continue to work without requiring any additional steps. Tuttavia, poiché tramite OLTP in memoriaIn-Memory OLTP è possibile aumentare notevolmente la velocità effettiva delle transazioni del carico di lavoro, le operazioni di I/O sui logo possono diventare un collo di bottiglia per le prestazioni.However, since OLTP in memoriaIn-Memory OLTP can increase transaction throughput of your workload significantly, log IO may become a performance bottleneck. Per sostenere questa maggiore velocità effettiva, verificare che il sottosistema delle operazioni di I/O sui log sia in grado di gestire l'aumento del carico.To sustain this increased throughput, ensure the log IO subsystem can handle the increased load.

File di dati e differenzialiData and Delta Files

I dati nelle tabelle ottimizzate per la memoria vengono archiviati come righe di dati in formato libero in una struttura di dati di heap in memoria e collegati tramite uno o più indici in memoria.The data in memory-optimized tables is stored as free-form data rows in an in-memory heap data structure, and are linked through one or more indexes in memory. Non esistono strutture per le righe di dati, quali quelle utilizzate per le tabelle basate su disco.There are no page structures for data rows, such as those used for disk-based tables. Per la persistenza a lungo termine e per consentire il troncamento del log delle transazioni, le operazioni sulle tabelle ottimizzate per la memoria sono persistenti in un set di file di dati e differenziali.For long term persistence and to allow truncation of the transction log, operations on memory-optimized tables are persisted in a set of data and delta files. Questi file vengono generati in base al log delle transazioni, tramite un processo in background asincrono.These files are generated based on the transaction log, using an asynchronous background process. I file di dati e differenziali si trovano in uno o più contenitori, che utilizzano lo stesso meccanismo utilizzato per i dati FILESTREAM.The data and delta files are located in one or more containers (using the same mechanism used for FILESTREAM data). Questi contenitori fanno parte di un filegroup ottimizzato per la memoria.These containers are part of a memory-optimized filegroup.

I dati vengono scritti in tali file in un modo strettamente sequenziale riducendo la latenza del disco per la rotazione dei supporti.Data is written to these files in a strictly sequential fashion, which minimizes disk latency for spinning media. È possibile utilizzare più contenitori in dischi diversi per distribuire l'attività di I/O.You can use multiple containers on different disks to distribute the I/O activity. I file di dati e differenziali in più contenitori su dischi diversi migliorano le prestazioni di recupero/ripristino del database quando i dati vengono letti dai file di dati e differenziali su disco in memoria.Data and delta files in multiple containers on different disks will increase database restore/recovery performance when data is read from the data and delta files on disk, into memory.

Le transazioni utente non accedono direttamente ai file di dati e differenziali.User transactions do not directly access data and delta files. Tutte le letture e scritture di dati usano strutture di dati in memoria.All data reads and writes use in-memory data structures.

File di datiThe Data File

Un file di dati contiene righe di una o più tabelle ottimizzate per la memoria inserite da più transazioni come parte di operazioni INSERT o UPDATE.A data file contains rows from one or more memory-optimized tables that were inserted by multiple transactions as part of INSERT or UPDATE operations. Ad esempio, una riga può provenire dalla tabella ottimizzata per la memoria T1 e la riga successiva può provenire dalla tabella ottimizzata per la memoria T2.For example, one row can be from memory-optimized table T1 and the next row can be from memory-optimized table T2. Le righe vengono accodate al file di dati nell'ordine delle transazioni nel log delle transazioni, in modo da rendere sequenziale l'accesso ai dati.The rows are appended to the data file in the order of transactions in the transaction log, making data access sequential. Ciò consente una velocità effettiva delle operazioni di I/O decisamente maggiore rispetto alle operazioni di I/O casuali.This enables an order of magnitude better I/O throughput compared to random I/O.

Quando il file di dati è pieno, le righe inserite dalle nuove transazioni vengono archiviate in un altro file di dati.Once the data file is full, the rows inserted by new transactions are stored in another data file. Nel corso del tempo, le righe delle tabelle durevoli ottimizzate per la memoria vengono archiviate in uno o più file di dati, ciascuno dei quali contiene le righe da un intervallo di transazioni disgiunto, ma contiguo.Over time, the rows from durable memory-optimized tables are stored in one of more data files and each data file containing rows from a disjoint but contiguous range of transactions. Ad esempio un file di dati con un timestamp di commit della transazione nell'intervallo (100, 200) include tutte le righe inserite dalle transazioni con un timestamp di commit maggiore di 100 e minore di o uguale a 200.For example a data file with transaction commit timestamp in the range of (100, 200) has all the rows inserted by transactions that have commit timestamp greater than 100 and less than or equal to 200. Il timestamp di commit è un contatore a incremento progressivo costante assegnato a una transazione quando è pronta per il commit.The commit timestamp is a monotonically increasing number assigned to a transaction when it is ready to commit. Ogni transazione ha un timestamp di commit univoco.Each transaction has a unique commit timestamp.

Quando una riga viene eliminata o aggiornata, non viene rimossa o modificata sul posto nel file di dati, ma le righe eliminate vengono rilevate in un altro tipo di file: il file differenziale.When a row is deleted or updated, the row is not removed or changed in-place in the data file but the deleted rows are tracked in another type of file: the delta file. Le operazioni di aggiornamento sono elaborate come una tupla di operazioni di eliminazione e inserimento per ogni riga.Update operations are processed as a tuple of delete and insert operations for each row. Ciò consente di eliminare le operazioni di I/O casuali nel file di dati.This eliminates random IO on the data file.

Dimensioni: ogni file di dati viene ridimensionato approssimativamente a 128 MB per i computer con memoria superiore a 16 GB e a 16 MB per i computer con memoria minore o uguale a 16 GB.Size: Each data file is sized approximately to 128MB for computers with memory greater than 16GB, and 16MB for computers with less than or equal to 16GB. In SQL Server 2016SQL Server 2016 SQL Server può usare la modalità di checkpoint di grandi dimensioni se ritiene che il sottosistema di archiviazione sia sufficientemente veloce.In SQL Server 2016SQL Server 2016 SQL Server can use large checkpoint mode if it deems the storage subsystem is fast enough. In modalità di checkpoint di grandi dimensioni, i file di dati vengono ridimensionati a 1GB.In large checkpoint mode, data files are sized at 1GB. In questo modo è possibile migliorare l'efficienza del sottosistema di archiviazione per i carichi di lavoro con velocità effettiva elevata.This allows for greater efficiency in the storage subsystem for high-throughput workloads.

File differenzialeThe Delta File

Ogni file di dati è associato a un file differenziale con lo stesso intervallo di transazione che tiene traccia delle righe eliminate inserite dalle transazioni nell'intervallo di transazione.Each data file is paired with a delta file that has the same transaction range and tracks the deleted rows inserted by transactions in the transaction range. Questo file di dati e differenziale è spesso indicato come coppia di file di checkpoint (CFP, Checkpoint File Pair) e corrisponde all'unità di allocazione e deallocazione, oltre che all'unità per le operazioni di unione.This data and delta file is referred to as a Checkpoint File Pair (CFP) and it is the unit of allocation and deallocation as well as the unit for Merge operations. Ad esempio, in un file differenziale che corrisponde all'intervallo di transazione (100, 200) verranno archiviate le righe eliminate inserite dalle transazioni nell'intervallo (100, 200).For example, a delta file corresponding to transaction range (100, 200) will store deleted rows that were inserted by transactions in the range (100, 200). Come per i file di dati, l'accesso al file differenziale avviene in ordine sequenziale.Like data files, the delta file is accessed sequentially.

Quando una riga viene eliminata, la riga non viene rimossa dal file di dati ma viene aggiunto un riferimento alla riga nel file differenziale associato all'intervallo di transazione in cui è stata inserita la riga di dati.When a row is deleted, the row is not removed from the data file but a reference to the row is appended to the delta file associated with the transaction range where this data row was inserted. Poiché la riga da eliminare esiste già nel file di dati, nel file differenziale sono archiviate solo le informazioni di riferimento {inserting_tx_id, row_id, deleting_tx_id } seguendo l'ordine del log delle transazioni delle operazioni originali di eliminazione o aggiornamento.Since the row to be deleted already exists in the data file, the delta file only stores the reference information {inserting_tx_id, row_id, deleting_tx_id } and it follows the transactional log order of the originating delete or update operations.

Dimensioni: ogni file differenziale viene ridimensionato approssimativamente a 16 MB per i computer con memoria superiore a 16 GB e a 1 MB per i computer con memoria minore o uguale a 16 GB.Size: Each delta file is sized approximately to 16MB for computers with memory greater than 16GB, and 1MB for computers with less than or equal to 16GB. All'avvio di SQL Server 2016SQL Server 2016 SQL Server può usare la modalità di checkpoint di grandi dimensioni se ritiene che il sottosistema di archiviazione sia sufficientemente veloce.Starting SQL Server 2016SQL Server 2016 SQL Server can use large checkpoint mode if it deems the storage subsystem is fast enough. In modalità di checkpoint di grandi dimensioni, i file differenziali vengono ridimensionati a 128MB.In large checkpoint mode, delta files are sized at 128MB.

Popolamento dei file di dati e differenzialiPopulating Data and Delta Files

I file di dati e differenziali vengono popolati in base ai record del log delle transazioni generati dalle transazioni di cui è stato eseguito il commit nelle tabelle ottimizzate per la memoria e aggiungono le informazioni relative alle righe inserite o eliminate nei file di dati e differenziali appropriati.Data and delta file are populated based on the transaction log records generated by committed transactions on memory-optimized tables and appends information about the inserted and deleted rows into appropriate data and delta files. A differenza delle tabelle basate su disco in cui le pagine di dati e indice vengono scaricate con I/O casuale al completamento del checkpoint, la persistenza della tabella ottimizzata per la memoria è un'operazione in background continua.Unlike disk-based tables where data/index pages are flushed with random I/O when checkpoint is done, the persistence of memory-optimized table is continuous background operation. Si accede a più file differenziali poiché una transazione può eliminare o aggiornare qualsiasi riga inserita da una transazione precedente.Multiple delta files are accessed because a transaction can delete or update any row that was inserted by any previous transaction. Le informazioni di eliminazione vengono sempre aggiunte alla fine del file differenziale.Deletion information is always appended at the end of the delta file. Ad esempio, una transazione con un timestamp del commit pari a 600 inserisce una nuova riga ed elimina le righe inserite dalle transazioni con un timestamp del commit pari a 150, 250 e 450, come illustrato nell'immagine seguente.For example, a transaction with a commit timestamp of 600 inserts one new row and deletes rows inserted by transactions with a commit timestamp of 150, 250 and 450 as shown in the picture below. Tutte e quattro le operazioni di I/O dei file (tre per le righe eliminate e una per le righe appena inserite) sono operazioni solo di accodamento ai corrispondenti file di dati e differenziali.All 4 file I/O operations (three for deleted rows and 1 for the newly inserted rows), are append-only operations to the corresponding delta and data files.

Lettura dei record di log per le tabelle ottimizzate per la memoria.Read log records for memory-optimized tables.

Accesso ai file di dati e differenzialiAccessing Data and Delta Files

L'accesso alle coppie di file di dati e differenziali viene effettuato nei casi seguenti.Data and delta file pairs are accessed when the following occurs.

Thread di lavoro del checkpoint offlineOffline checkpoint worker(s)
Il thread accoda inserimenti ed eliminazioni effettuati nelle righe di dati ottimizzati per la memoria alle coppie di file di dati e differenziali corrispondenti.This thread appends inserts and deletes to memory-optimized data rows, to the corresponding data and delta file pairs. In SQL Server 2014SQL Server 2014 esiste un solo thread di lavoro del checkpoint offline; all'avvio di SQL Server 2016SQL Server 2016 esistono più thread di lavoro del checkpoint.In SQL Server 2014SQL Server 2014 there is one offline checkpoint worker; starting SQL Server 2016SQL Server 2016 there are multiple checkpoint workers.

Operazione MergeMerge operation
L'operazione unisce una o più coppie di file di dati e differenziali e crea una nuova coppia.The operation merges one or more data and delta file pairs and creates a new data and delta file pair.

Durante il recupero a seguito dell'arresto anomalo del sistemaDuring crash recovery
Quando SQL ServerSQL Server viene riavviato o il database viene riportato online, i dati ottimizzati per la memoria vengono popolati utilizzando le coppie di file di dati e differenziali.When SQL ServerSQL Server is restarted or the database is brought back online, the memory-optimized data is populated using the data and delta file pairs. Il file differenziale svolge la funzione di filtro per le righe eliminate durante la lettura delle righe dal file di dati corrispondente.The delta file acts as a filter for the deleted rows when reading the rows from the corresponding data file. Poiché ogni coppia di file di dati e differenziale è indipendente, questi file vengono caricati in parallelo per ridurre il tempo necessario per popolare i dati in memoria.Because each data and delta file pair is independent, these files are loaded in parallel to reduce the time taken to populate data into memory. Una volta che i dati sono stati caricati in memoria, il motore di OLTP in memoria applica i record del log delle transazioni attivi non ancora coperti dai file di checkpoint in modo da completare i dati ottimizzati per la memoria.Once the data has been loaded into memory, the In-Memory OLTP engine applies the active transaction log records not yet covered by the checkpoint files so that the memory-optimized data is complete.

Durante l'operazione di ripristinoDuring restore operation
I file di checkpoint di OLTP in memoria vengono creati dal backup del database, quindi vengono applicati uno o più backup del log delle transazioni.The In-Memory OLTP checkpoint files are created from the database backup, and then one or more transaction log backups are applied. Analogamente al recupero a seguito dell'arresto anomalo del sistema, il motore di OLTP in memoria carica i dati in memoria in parallelo, per ridurre al minimo l'impatto sul tempo di recupero.As with crash recovery, the In-Memory OLTP engine loads data into memory in parallel, to minimize the impact on recovery time.

Unione dei file di dati e differenzialiMerging Data and Delta Files

I dati per le tabelle con ottimizzazione per la memoria vengono archiviati in uno o più coppie di file di dati e differenziali, anche dette coppie di file di checkpoint o CFP.The data for memory optimized tables is stored in one or more data and delta file pairs (also called a checkpoint file pair, or CFP). I file di dati archiviano le righe inserite e i file differenziali fanno riferimento alle righe eliminate.Data files store inserted rows and delta files reference deleted rows. Durante l'esecuzione di un carico di lavoro OLTP, mentre le righe vengono aggiornate, inserite ed eliminate dalle operazioni DML, vengono create nuove coppie di file di checkpoint per rendere persistenti le nuove righe e il riferimento alle righe eliminate viene aggiunto ai file differenziali.During the execution of an OLTP workload, as the DML operations update, insert, and delete rows, new CFPs are created to persist the new rows, and the reference to the deleted rows is appended to delta files.

Nel tempo, con le operazioni DML, il numero di file di dati e differenziali aumenta, aumentando l'utilizzo dello spazio su disco e il tempo di recupero.Over time, with DML operations, the number of data and delta files grow causing, causing increased disk space usage and increased recovery time..

Per evitare queste inefficienze, i file di dati e differenziali chiusi meno recenti vengono uniti in base ai criteri di unione illustrati di seguito, in modo da comprimere la matrice di archiviazione per rappresentare lo stesso set di dati, con un numero ridotto di file.To help prevent these inefficiencies, the older closed data and delta files are merged, based on a merge policy described below, so the storage array is compacted to represent the same set of data, with a reduced number of files.

L'operazione di unione utilizza come input una o più coppie di file di checkpoint chiuse adiacenti, che sono coppie di file di dati e differenziali, denominate origine dell'unione, in base a criteri di unione definiti internamente e produce una coppia di file di checkpoint risultante, denominata destinazione dell'unione.The merge operation takes as input one or more adjacent closed checkpoint file pairs (CFPs), which are pairs of data and delta files, (called merge source) based on an internally defined merge policy, and produces one resultant CFP, called the merge target. Le voci di ogni file differenziale delle coppie di file di checkpoint di origine vengono utilizzate per filtrare le righe dal file di dati corrispondente per rimuovere le righe di dati non necessari.The entries in each delta file of the source CFPs are used to filter rows from the corresponding data file to remove the data rows that are not needed. Le righe rimanenti nelle coppie di file di checkpoint di origine vengono consolidate in una coppia di file di checkpoint di destinazione.The remaining rows in the source CFPs are consolidated into one target CFP. Al completamento dell'unione, la coppia di file di checkpoint di destinazione risultante dall'unione sostituisce quelle di origine (origini dell'unione).After the merge is complete, the resultant merge-target CFP replaces the source CFPs (merge sources). Le coppie di file di checkpoint di origine dell'unione attraversano una fase di transizione prima di essere rimosse dall'archiviazione.The merge-source CFPs go through a transition phase before they are removed from storage.

Nell'esempio seguente il filegroup della tabella ottimizzata per la memoria dispone di quattro coppie di file di dati e differenziali in corrispondenza del timestamp 500, che contengono i dati delle transazioni precedenti.In the example below, the memory-optimized table file group has four data and delta file pairs at timestamp 500 containing data from previous transactions. Ad esempio, le righe del primo file di dati corrispondono alle transazioni con timestamp maggiore di 100 e minore di o uguale a 200; in alternativa sono rappresentate come (100, 200].For example, the rows in the first data file correspond to transactions with timestamp greater than 100 and less than or equal to 200; alternatively represented as (100, 200]. La percentuale di completamento del secondo e terzo file di dati è inferiore al 50% dopo aver considerato le righe contrassegnate come eliminate.The second and third data files are shown to be less than 50 percent full after accounting for the rows marked as deleted. L'operazione di unione combina le due coppie di file di checkpoint e crea una nuova coppia di file di checkpoint contenente le transazioni con timestamp maggiore di 200 e minore o uguale a 400, ovvero l'intervallo combinato di queste due coppie di file di checkpoint.The merge operation combines these two CFPs and creates a new CFP containing transactions with timestamp greater than 200 and less than or equal to 400, which is the combined range of these two CFPs. È presente un'altra coppia di file di checkpoint con intervallo (500, 600] e il file differenziale non vuoto per l'intervallo della transazione (200, 400] indica che l'operazione di unione può essere eseguita contemporaneamente all'attività transazionale, inclusa l'eliminazione di più righe dalle coppie di file di checkpoint di origine.You see another CFP with range (500, 600] and non-empty delta file for transaction range (200, 400] shows that merge operation can be done concurrently with transactional activity including deleting more rows from the source CFPs.

Diagramma che mostra il filegroup della tabella con ottimizzazione per la memoriaDiagram shows memory optimized table file group

Un thread in background valuta tutte le coppie di file di checkpoint chiuse utilizzando un criterio di unione, quindi avvia una o più richieste di unione per le coppie di file di checkpoint qualificate.A background thread evaluates all closed CFPs using a merge policy and then initiates one or more merge requests for the qualifying CFPs. Queste richieste di unione vengono elaborate dal thread del checkpoint offline.These merge requests are processed by the offline checkpoint thread. La valutazione dei criteri di unione viene eseguita periodicamente, anche quando un checkpoint viene chiuso.The evaluation of merge policy is done periodically and also when a checkpoint is closed.

SQL ServerSQL Server Criteri di unione Merge Policy

SQL ServerSQL Server implementa i criteri di unione seguenti: implements the following merge policy:

  • Un'unione è pianificata se 2 o più coppie di file di checkpoint consecutive possono essere consolidate, dopo aver tenuto conto delle righe eliminate, in modo che le righe risultanti rientrino in una coppia di file di checkpoint di dimensioni di destinazione.A merge is scheduled if 2 or more consecutive CFPs can be consolidated, after accounting for deleted rows, such that the resultant rows can fit into 1 CFP of target size. Le dimensioni di destinazione dei file di dati e differenziali corrispondono alle dimensioni originali, come descritto in precedenza.The target size of data and delta files corresponds to the original sizing, as described above.

  • Un singola coppia di file di checkpoint può essere unita automaticamente se il file di dati è due volte più grande delle dimensioni di destinazione ed è maggiore della metà delle righe eliminate.A single CFP can be self-merged if the data file exceeds double the target size and more than half of the rows are deleted. Le dimensioni di un file di dati possono essere maggiori delle dimensioni di destinazione se, ad esempio, tramite una singola transazione o più transazioni simultanee viene inserita o aggiornata una grande quantità di dati, forzando la crescita del file di dati oltre le relative dimensioni di destinazione poiché tramite una transazione non è possibile estendere più coppie di file di checkpoint.A data file can grow larger than the target size if, for example, a single transaction or multiple concurrent transactions inserts or updates a large amount of data, forcing the data file to grow beyond its target size, because a transaction cannot span multiple CFPs.

    Di seguito sono riportati alcuni esempi che illustrano le coppie di file di checkpoint che vengono unite in base ai criteri di unione:Here are some examples that show the CFPs that will be merged under the merge policy:

File di origine di coppie di file di checkpoint adiacenti (percentuale di completamento)Adjacent CFPs Source Files (% full) Selezione del tipo di unioneMerge Selection
CFP0 (30%), CFP1 (50%), CFP2 (50%), CFP3 (90%)CFP0 (30%), CFP1 (50%), CFP2 (50%), CFP3 (90%) (CFP0, CFP1)(CFP0, CFP1)

La coppia CFP2 non viene scelta in quanto il file di dati risultante sarà maggiore del 100% delle dimensioni ideali.CFP2 is not chosen as it will make resultant data file greater than 100% of the ideal size.
CFP0 (30%), CFP1 (20%), CFP2 (50%), CFP3 (10%)CFP0 (30%), CFP1 (20%), CFP2 (50%), CFP3 (10%) (CFP0, CFP1, CFP2).(CFP0, CFP1, CFP2). I file vengono scelti a partire da sinistra.Files are chosen starting from left.

La coppia CFP3 non viene scelta in quanto il file di dati risultante sarà maggiore del 100% delle dimensioni ideali.CTP3 is not chosen as it will make resultant data file greater than 100% of the ideal size.
CFP0 (80%), CFP1 (30%), CFP2 (10%), CFP3 (40%)CFP0 (80%), CFP1 (30%), CFP2 (10%), CFP3 (40%) (CFP1, CFP2, CFP3).(CFP1, CFP2, CFP3). I file vengono scelti a partire da sinistra.Files are chosen starting from left.

CFP0 viene ignorato perché se in combinazione con CFP1, il file di dati risultante sarà maggiore del 100% delle dimensioni ideali.CFP0 is skipped because if combined with CFP1, the resultant data file will be greater than 100% of the ideal size.

Non tutte le coppie di file di checkpoint con spazio disponibile sono qualificate per l'unione.Not all CFPs with available space qualify for merge. Ad esempio, se due coppie di file di checkpoint adiacenti sono piene al 60%, non si qualificano per l'unione e ciascuna coppia di file di checkpoint rimane con il 40% dello spazio di archiviazione inutilizzato.For example, if two adjacent CFPs are 60% full, they will not qualify for merge and each of these CFPs will have 40% storage unused. Nel peggiore dei casi, tutte le coppie di file di checkpoint saranno piene al 50%, con un utilizzo dello spazio di archiviazione solo del 50%.In the worst case, all CFPs will be 50% full, a storage utilization of only 50%. Mentre le righe eliminate possono essere presenti nello spazio di archiviazione perché le coppie di file di checkpoint non si qualificano per l'unione, le righe eliminate possono essere già state rimosse dalla memoria dal processo di Garbage Collection in memoria.While the deleted rows may exist in storage because the CFPs don’t qualify for merge, the deleted rows may have already been removed from memory by in-memory garbage collection. La gestione dello spazio di archiviazione e della memoria è indipendente da Garbage Collection.The management of storage and the memory is independent from garbage collection. Lo spazio di archiviazione utilizzato da coppie di file di checkpoint attive (non tutte le coppie di file di checkpoint vengono aggiornate) può essere fino a due volte maggiore delle dimensioni delle tabelle durevoli in memoria.Storage taken by active CFPs (not all CFPs are being updated) can be up to 2 times larger than the size of durable tables in memory.

Ciclo di vita di una coppia di file di checkpointLife Cycle of a CFP

Le coppie di file di checkpoint attraversano sette stati prima di poter essere deallocate.CPFs transition through several states before they can be deallocated. I checkpoint del database e i backup del log devono essere eseguiti per la transizione dei file attraverso le fasi e infine per pulire i file che non sono più necessari.Database checkpoints and log backups need to happen to transition the files through the phases, and ultimately clean up files that are no longer needed. Per una descrizione di queste fasi, vedere sys.dm_db_xtp_checkpoint_files (Transact-SQL).For a description of these phases, see sys.dm_db_xtp_checkpoint_files (Transact-SQL).

È possibile forzare manualmente il checkpoint seguito dal backup del log per velocizzare l'operazione di garbage collection.You can manually force the checkpoint followed by log backup to expedite the garbage collection. Negli scenari di produzione, i checkpoint e i backup del log automatici eseguiti come parte della strategia di backup effettuano la transazione delle coppie di file di checkpoint attraverso queste fasi senza richiedere alcun intervento manuale.In production scenarios, the automatic checkpoints and log backups taken as part of backup strategy will seamlessly transition CFPs through these phases without requiring any manual intervention. La conseguenza del processo di Garbage Collection è il fatto che i database con tabelle ottimizzate per la memoria possono avere dimensioni di archiviazione maggiori rispetto alle dimensioni in memoria.The impact of the garbage collection process is that databases with memory-optimized tables may have a larger storage size compared to its size in memory. Se i checkpoint e i backup del log non vengono eseguiti, il footprint su disco dei file del checkpoint continua a crescere.If checkpoint and log backups do not happen, the on-disk footprint of checkpoint files continues to grow.

Vedere ancheSee Also

Creazione e gestione dell'archiviazione per gli oggetti con ottimizzazione per la memoriaCreating and Managing Storage for Memory-Optimized Objects