Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Si applica a: SQL Server 2016 (13.x) e versioni
successive di Istanza gestita di SQL di Azure
Le tabelle temporali con controllo delle versioni gestito dal sistema per tabelle ottimizzate per la memoria forniscono una soluzione conveniente per gli scenari in cui sono necessari audit dei dati e analisi puntuali nel tempo sui dati raccolti con carichi di lavoro OLTP in memoria.
Nota
Le tabelle temporali ottimizzate per la memoria sono disponibili solo in SQL Server e in Istanza gestita di SQL di Azure. Le tabelle ottimizzate per la memoria e le tabelle temporali sono disponibili in modo indipendente nel database SQL di Azure.
Panoramica
Le tabelle temporali con controllo delle versioni di sistema mantengono in automatico una cronologia completa delle modifiche ai dati ed espongono comode estensioni di Transact-SQL per l'analisi temporizzata. In uno scenario tipico, la cronologia dei dati viene mantenuta per un lungo periodo di tempo (diversi mesi, anche anni), anche se non viene sottoposta spesso a query.
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. Tuttavia, l'uso di tabelle ottimizzate per la memoria negli scenari temporali è difficile perché generalmente una quantità enorme di dati cronologici supera il limite della RAM disponibile. 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.
Le tabelle temporali con controllo delle versioni gestito dal sistema per le tabelle ottimizzate per la memoria offrono un elevato throughput delle transazioni e una concorrenza senza blocchi. Consentono di archiviare grandi quantità di dati di cronologia utilizzando tabelle in memoria per archiviare i dati correnti (tabelle temporali) e le tabelle basate su disco per i dati cronologici. L'effetto sulle operazioni DML è ridotto grazie all'uso di una tabella di staging ottimizzata per la memoria, interna e generata automaticamente che archivia la cronologia recente e abilita i DML per l'esecuzione da codice compilato in nativo.
Nel diagramma seguente viene illustrata questa architettura.
Dettagli sull'implementazione
Quando si crea una tabella ottimizzata per la memoria con controllo delle versioni di sistema, occorre tenere presenti le considerazioni seguenti. Per le opzioni di sintassi e per un esempio, vedere CREATE TABLE.
Solo le tabelle durevoli ottimizzate per la memoria possono avere il controllo delle versioni gestito dal sistema (
DURABILITY = SCHEMA_AND_DATA).La tabella di cronologia per una tabella ottimizzata per la memoria con controllo delle versioni di sistema deve essere basata su disco, sia che venga creata dall'utente finale sia dal sistema.
Le query che interessano solo la tabella in-memory corrente possono essere usate in moduli T-SQL compilati in nativo. Le query temporali che usano la clausola
FOR SYSTEM TIMEnon sono supportate nei moduli compilati in nativo. È supportato invece l'uso della clausolaFOR SYSTEM TIMEinsieme a tabelle ottimizzate per la memoria in query ad hoc e in moduli non nativi.Con
SYSTEM_VERSIONING = ONviene creata automaticamente una tabella di staging interna ottimizzata per la memoria per accettare le modifiche più recenti alle versioni di sistema in seguito alle operazioni di aggiornamento ed eliminazione nella tabella ottimizzata per la memoria corrente.I dati della tabella di staging interna ottimizzata per la memoria vengono spostati regolarmente nella tabella di cronologia basata su disco da un’attività di scaricamento asincrono dei dati. Questo meccanismo di svuotamento dei dati mantiene i buffer di memoria interni al di sotto del 10% del consumo di memoria dei rispettivi oggetti padre. È possibile monitorare il consumo totale della memoria della tabella temporale ottimizzata per la memoria con controllo delle versioni di sistema eseguendo la query sys.dm_db_xtp_memory_consumers, e riepilogando i dati per la tabella di staging interna ottimizzata per la memoria e la tabella temporale corrente.
È possibile eseguire manualmente uno svuotamento dei dati eseguendo sp_xtp_flush_temporal_history.
Con
SYSTEM_VERSIONING = OFF, o quando lo schema di una tabella con versione di sistema viene modificato aggiungendo, eliminando o alterando colonne, l'intero contenuto del buffer di staging interno viene spostato nella tabella della cronologia su disco.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.
Le operazioni
ALTER TABLEche modificano internamente lo schema della tabella devono eseguire uno scaricamento di dati, che potrebbe prolungare la durata dell'operazione.
Tabella di staging interna ottimizzata per la memoria
Il sistema crea una tabella di staging interna ottimizzata per la memoria per ottimizzare le operazioni DML.
Il nome della tabella viene generato nel seguente formato:
Memory_Optimized_History_Table_<object_id>dove<object_id>è l'identificatore della tabella temporale corrente.La tabella consente di replicare lo schema della tabella temporale corrente e una colonna di tipo bigint. Questa colonna aggiuntiva garantisce l'unicità delle righe trasferite nel buffer interno della cronologia.
La colonna extra presenta il seguente formato nome:
Change_ID[<suffix>]dove<suffix>viene aggiunto facoltativamente nel caso in cui la tabella includa già una colonnaChange_ID.La dimensione massima della riga per una tabella ottimizzata per la memoria con controllo delle versioni gestito dal sistema è ridotta di 8 byte a causa della colonna aggiuntiva bigint nella tabella di staging. La nuova dimensione massima è ora di 8.052 byte.
La tabella di staging interna ottimizzata per la memoria non è visualizzata in Esplora oggetti di SQL Server Management Studio.
I metadati relativi a questa tabella e la connessione con la tabella temporale corrente sono disponibili in sys.internal_tables.
Attività di scaricamento di dati
Lo svuotamento dei dati è un'attività eseguita regolarmente che verifica se una qualsiasi tabella ottimizzata per la memoria soddisfa una condizione basata sulle dimensioni della memoria per lo spostamento dei dati. Lo spostamento dei dati inizia quando il consumo di memoria della tabella di staging interna raggiunge l'otto percento del consumo di memoria della tabella temporale corrente.
L'attività di scaricamento di dati viene attivata su base periodica con una pianificazione che varia in base al carico di lavoro esistente. Con un carico di lavoro elevato l'attività viene eseguita con frequenza pari a 5 secondi. Con un carico di lavoro leggero la frequenza aumenta a ogni minuto. Un thread viene generato per ogni tabella di staging interna ottimizzata per la memoria che necessita di pulizia.
Lo scaricamento dei dati consente di eliminare tutti i record dal buffer in-memory interno precedenti alla transazione corrente meno recente al fine di spostare questi record sulla tabella di cronologia basata su disco.
È possibile eseguire uno scaricamento dei dati eseguendo sp_xtp_flush_temporal_history e specificando lo schema e il nome della tabella:
EXEC sys.sp_xtp_flush_temporal_history <schema_name>, <object_name>;
Lo stesso processo di spostamento dei dati viene richiamato quando il sistema esegue l'attività di scarico dei dati nella sua pianificazione interna.
Contenuto correlato
- Tabelle temporali
- Introduzione alle tabelle temporali con controllo delle versioni gestito dal sistema
- Scenari di utilizzo delle tabelle temporali
- Verifiche della coerenza di sistema della tabella temporale
- Partizioni con tabelle temporali
- Considerazioni e limitazioni delle tabelle temporali
- Sicurezza di una tabella temporale
- Gestire la conservazione dei dati storici nelle tabelle temporali con versione temporale gestita dal sistema
- Funzioni e viste per i metadati delle tabelle temporali