Tabelle temporali con controllo delle versioni di sistema con tabelle con ottimizzazione per la memoriaSystem-Versioned Temporal Tables with Memory-Optimized Tables

QUESTO ARGOMENTO SI APPLICA A: sìSQL Server (a partire dalla versione 2016)sìDatabase SQL di AzurenoAzure SQL Data Warehouse noParallel Data Warehouse THIS TOPIC APPLIES TO: yesSQL Server (starting with 2016)yesAzure SQL DatabasenoAzure SQL Data Warehouse noParallel Data Warehouse

Le tabelle temporali con controllo delle versioni di sistema per tabelle con ottimizzazione per la memoria sono progettate per offrire una soluzione economica per scenari in cui sono necessari controllo dei dati e analisi temporizzate su dati raccolti con carichi di lavoro OLTP in memoria.System-versioned temporal tables for Memory-Optimized Tables are designed to provide cost-effective solution for scenarios where data audit and point in time analysis are required on top of data collected with In-Memory OLTP workloads. Queste tabelle garantiscono elevata velocità effettiva transazionale, concorrenza senza blocco e, allo stesso tempo, possibilità di archiviare grandi quantità di dati cronologici che possono essere facilmente sottoposti a query.They provide high transactional throughput, lock-free concurrency and at the same time, ability to store large amount of history data that can be easily queried.

PanoramicaOverview

Le tabelle temporali con controllo delle versioni di sistema mantengono in automatico una cronologia completa delle modifiche ai dati ed espongono pratiche estensioni di Transact-SQL per l'analisi temporizzata.System-versioned temporal tables automatically keep a full history of data changes and expose convenient Transact-SQL extensions for point in time analysis. In uno scenario tipico, la cronologia dei dati viene mantenuta per un periodo di tempo molto lungo (più mesi, anche anni), anche se non viene sottoposta spesso a query.In a typical scenario, data history is retained for a very long period of time (multiple months, even years), even though it is not regularly queried.

L'analisi temporizzata di controllo dei dati può essere richiesta in ambienti diversi, in particolare nei sistemi OLTP che elaborano grandi numeri di richieste e negli ambienti in cui viene usata la tecnologia OLTP in memoria.Data audit and time-based analysis can be demanded in different environments, especially in OLTP systems that process extremely large numbers of requests and where In-Memory OLTP technology is used. Tuttavia, l'uso di tabelle con ottimizzazione per la memoria negli scenari temporali è difficile perché generalmente una quantità enorme di dati cronologici supera il limite della memoria RAM disponibile.However, using memory-optimized tables in temporal scenarios is challenging because a huge amount of generated historical data commonly exceeds the limit of available RAM memory. Allo stesso tempo, non è consigliabile usare la RAM per archiviare dati cronologici di sola lettura a cui si accede con minor frequenza man mano che diventano obsoleti.At the same time using RAM to store read-only historical data that is accessed less frequently as it becomes older is not an optimal solution.

Le tabelle temporali con controllo delle versioni di sistema per le tabelle con ottimizzazione per la memoria garantiscono elevata velocità effettiva transazionale, concorrenza senza blocco e, allo stesso tempo, possibilità di archiviare grandi quantità di dati cronologici tramite le tabelle con ottimizzazione per la memoria per l'archiviazione dei dati correnti (la tabella temporale) e le tabelle basate su disco per i dati cronologici.System-versioned temporal tables for memory-optimzed tables provide high transactional throughput, lock-free concurrency and at the same time, ability to store large amount of history data by using in-memory tables for storing current data (the temporal table) and disk-based tables for historical data. L'impatto sulle operazioni DML è ridotto al minimo tramite l'uso di una tabella di gestione temporanea ottimizzata per la memoria, interna e generata automaticamente che archivia la cronologia recente e abilita i DML per l'esecuzione da codice compilato in modo nativo.The impact on DML operations is minimalized through the use of an internal, auto-generated memory-optimized staging table that stores recent history and enables DMLs to be executed from natively compiled code.

La figura seguente illustra questa architettura.Architettura in memoria temporaleThe following diagram illustrates this architecture.Temporal In-Memory Architecture

Dettagli di implementazioneImplementation Details

I fattori seguenti sulle tabelle temporali con controllo delle versioni di sistema con tabelle con ottimizzazione per la memoria sono considerazioni che è necessario tenere presente durante la creazione di una tabella con controllo delle versioni di sistema con ottimizzazione per la memoria.The following facts about system-versioned temporal tables with memory optimized tables are considerations of which you need to be aware when creating a system-versioned memory-optimized table. Per le opzioni di sintassi e un esempio, vedere CREATE TABLE (Transact-SQL).For syntax options and for an example, see CREATE TABLE (Transact-SQL).

  • Solo le tabelle con ottimizzazione per la memoria resistenti possono essere tabelle con controllo delle versioni di sistema (DURABILITY = SCHEMA_AND_DATA).Only durable memory-optimized tables can be system-versioned (DURABILITY = SCHEMA_AND_DATA).

  • La tabella di cronologia per la tabella con controllo delle versioni di sistema con ottimizzazione per la memoria deve essere basata su disco, che sia stata creata dall'utente finale o dal sistema.History table for memory-optimized system-versioned table must be disk-based, regardless if it was created by the end user or the system.

  • Le query che interessano solo la tabella corrente in memoria possono essere usate in moduli T-SQL compilati in modo nativo.Queries that affect only the current table (in-memory) can be used in natively compiled T-SQL modules. Le query temporali che usano la clausola FOR SYSTEM TIME non sono supportate nei moduli compilati in modo nativo.Temporal queries using the FOR SYSTEM TIME clause are not supported in natively compiled modules. È supportato invece l'uso della clausola FOR SYSTEM TIME insieme a tabelle con ottimizzazione per la memoria in query ad hoc e in moduli non nativi.Use of the FOR SYSTEM TIME clause with memory-optimized tables in ad hoc queries and non-native modules is supported.

  • Con SYSTEM_VERSIONING = ONviene creata automaticamente una tabella di gestione temporanea interna con ottimizzazione per la memoria per accettare le modifiche più recenti alle versioni di sistema risultate dall'aggiornamento e di eliminazione nella tabella corrente con ottimizzazione per la memoria.When SYSTEM_VERSIONING = ON, an internal memory-optimized staging table is automatically created to accept the most recent system-versioned changes that are results of update and delete operations on memory-optimized current table.

  • I dati della tabella di gestione temporanea interna con ottimizzazione per la memoria vengono spostati regolarmente nella tabella di cronologia basata su disco dall'attività di scaricamento asincrono dei dati.Data from the internal memory-optimized staging table is regularly moved to the disk-based history table by the asynchronous data flush task. Questo meccanismo di scaricamento dei dati ha l'obiettivo di mantenere i buffer interni alla memoria inferiori al 10% dell'uso della memoria da parte dei relativi oggetti padre.This data flush mechanism has a goal to keep the internal memory buffers at less than 10% of the memory consumption of their parent objects. È possibile monitorare il consumo totale della memoria della tabella temporale con controllo delle versioni di sistema con ottimizzazione per la memoria eseguendo la query sys.dm_db_xtp_memory_consumers (Transact-SQL) e riepilogando i dati per la tabella di gestione temporanea interna con ottimizzazione per la memoria e la tabella temporale corrente.You can track the total memory consumption of memory-optimized system-versioned temporal table by querying sys.dm_db_xtp_memory_consumers (Transact-SQL) and summarizing the data for the internal memory-optimized staging table and the current temporal table.

  • È possibile applicare uno scaricamento dati chiamando sp_xtp_flush_temporal_history.You can enforce a data flush by invoking sp_xtp_flush_temporal_history.

  • Con SYSTEM_VERSIONING = OFF o quando viene modificato lo schema della tabella con controllo delle versioni del sistema aggiungendo, eliminando o modificando le colonne, tutti i contenuti del buffer interno di gestione temporanea vengono spostati nella tabella di cronologia basata su disco.When SYSTEM_VERSIONING = OFF or when schema of system-versioned table is modified by adding, dropping or altering columns, the entire contents of the internal staging buffer is moved into the disk-based history table.

  • L'esecuzione di query sui dati cronologici è efficace nel livello di isolamento dello SNAPSHOT e restituisce sempre un'unione tra il buffer di gestione in memoria e la tabella basata su disco senza duplicati.Querying of historical data is effectively under SNAPSHOT isolation level and always returns a union between in-memory staging buffer and disk based table without duplicates.

  • Le operazioniALTER TABLE che modificano internamente lo schema della tabella devono eseguire uno scaricamento di dati, che potrebbe prolungare la durata dell'operazione.ALTER TABLE operations that change the table schema internally must perform a data flush, which may prolong the duration of the operation.

Tabella interna di gestione temporanea con ottimizzazione per la memoriaThe Internal Memory-Optimized Staging Table

La interna di gestione temporanea con ottimizzazione per la memoria è un oggetto interno creato dal sistema per ottimizzare le operazioni DML.The internal memory-optimized staging table is an internal object that is created by the system to optimize DML operations.

  • Il nome della tabella viene generato nel formato seguente: Memory_Optimized_History_Table_<object_id> dove <object_id> è l'identificatore della tabella temporale corrente.The table name is generated in the following format: Memory_Optimized_History_Table_<object_id> where <object_id> is identifier of the current temporal table.

  • La tabella consente di replicare lo schema della tabella temporale corrente e una colonna di tipo BIGINT.The table replicates the schema of current temporal table plus one BIGINT column. Questa colonna aggiuntiva garantisce l'univocità delle righe spostate nel buffer interno della cronologia.This additional column guarantees the uniqueness of the rows moved to internal history buffer.

  • La colonna aggiuntiva presenta il formato nome seguente: Change_ID[_< suffisso>], dove _<suffisso> viene aggiunto facoltativamente nel caso in cui la tabella includa già una colonna Change_ID.The additional column has the following name format: Change_ID[_< suffix>], where _<suffix> is optionally added in the case where the table already has a Change_ID column.

  • Le dimensioni massime delle righe per una tabella con controllo delle versioni di sistema con ottimizzazione per la memoria vengono ridotte di 8 byte a causa della colonna BIGINT aggiuntiva della tabella di gestione temporanea.The maximum row size for a system-versioned memory-optimized table is reduced by 8 bytes because of the additional BIGINT column in staging table. La nuova dimensione massima è ora di 8052 byte.The new maximum is now 8052 bytes.

  • La tabella di gestione temporanea interna con ottimizzazione per la memoria non è rappresentata in Esplora oggetti di SQL Server Management Studio.The internal memory-optimized staging table is not represented in Object Explorer of SQL Server Management Studio.

  • I metadati relativi a questa tabella nonché la connessione con la tabella temporale corrente sono disponibili in sys.internal_tables (Transact-SQL).Metadata about this table as well as its connection with current temporal table can be found in sys.internal_tables (Transact-SQL).

Attività di scaricamento di datiThe Data Flush Task

Lo scaricamento dei dati è un'attività attivata in modo regolare che controlla se tutte le tabelle con ottimizzazione per la memoria soddisfano una condizione basato sulle dimensioni della memoria per lo spostamento dei dati.The data flush is a regularly activated task that checks whether any memory-optimized table meets a memory size-based condition for data movement. Lo spostamento dei dati inizia quando il consumo di memoria della tabella di gestione temporanea interna raggiunge l'8% del consumo di memoria di una tabella temporale corrente.Data movement starts when memory consumption of internal staging table reaches 8% of memory consumption of current temporal table.

L'attività di scaricamento di dati viene attivata su base periodica con una pianificazione che varia in base al carico di lavoro esistente.The data flush task is activated regularly with a schedule that varies based on the existing workload. Con un carico di lavoro pesante, ad esempio con intervalli di 5 secondi, e con un carico di lavoro leggero, con intervalli di 1 minuto.With a heavy workload, as frequent as every 5 seconds, and with a light workload, as infrequent as every 1 minute. Un thread viene generato per ogni tabella interna di gestione temporanea con ottimizzazione per la memoria che necessita di pulizia.One thread is spawned for each internal memory-optimized staging table that needs cleanup.

Lo scaricamento dei dati consente di eliminare tutti i record dal buffer in memoria interno precedenti alla transazione corrente meno recente al fine di spostare questi record sulla tabella di cronologia basata su disco.Data flush deletes all records from in-memory internal buffer that are older than the oldest currently running transaction to move these records to the disk-based history table.

È possibile applicare uno scaricamento dati chiamando sp_xtp_flush_temporal_history e specificando il nome dello schema e della tabella:You can enforce a data flush by invoking sp_xtp_flush_temporal_history and specifying the schema and table name:
sys.sp_xtp_flush_temporal_history @schema_name, @object_name.sys.sp_xtp_flush_temporal_history @schema_name, @object_name. Con questo comando eseguito dall'utente viene richiamato lo stesso processo di spostamento dei dati richiamato per questa attività dal sistema su pianificazione interna.With this user-executed command, the same data movement process is invoked as when data flush task is invoked by the system on internal schedule.

Questo articolo è stato utile?Did this Article Help You? Commenti e suggerimentiWe’re Listening

Quali informazioni si stanno cercando? La ricerca ha restituito i risultati desiderati?What information are you looking for, and did you find it? Microsoft incoraggia gli utenti a inviare i propri commenti per migliorare i contenutiWe’re listening to your feedback to improve the content. Inviare eventuali commenti all'indirizzo sqlfeedback@microsoft.comPlease submit your comments to sqlfeedback@microsoft.com

Vedere ancheSee Also

Tabelle temporali Temporal Tables
Introduzione alle tabelle temporali con controllo delle versioni di sistema Getting Started with System-Versioned Temporal Tables
Scenari di utilizzo delle tabelle temporali Temporal Table Usage Scenarios
Verifiche di coerenza del sistema della tabella temporale Temporal Table System Consistency Checks
Partizionamento con le tabelle temporali Partitioning with Temporal Tables
Considerazioni e limitazioni delle tabelle temporali Temporal Table Considerations and Limitations
Sicurezza di una tabella temporale Temporal Table Security
Gestire la conservazione dei dati cronologici nelle tabelle temporali con controllo delle versioni di sistema Manage Retention of Historical Data in System-Versioned Temporal Tables
Funzioni e viste per i metadati delle tabelle temporali Temporal Table Metadata Views and Functions