Prestazioni delle tabelle temporali con controllo delle versioni di sistema e ottimizzate per la memoria

Si applica a: SQL Server 2016 (13.x) e versioni successive Database SQL di Azure Istanza gestita di SQL di Azure

Questo articolo presenta alcune considerazioni sulle prestazioni specifiche quando si usano le tabelle temporali ottimizzate per la memoria con controllo delle versioni di sistema.

Quando si aggiunge il controllo elle versioni di sistema a una tabella non temporale è prevedibile un impatto sulle prestazioni nelle operazioni di aggiornamento ed eliminazione perché la tabella di cronologia viene aggiornata automaticamente.

Considerazioni sulle prestazioni

Tutti gli aggiornamenti e le eliminazioni vengono registrati in una tabella di cronologia interna ottimizzata per la memoria. Si potrebbe verificare un consumo di memoria imprevisto se il carico di lavoro utilizza queste due operazioni in modo massiccio. Pertanto, si consiglia quanto segue:

  • Non eseguire eliminazioni massicce dalla tabella corrente con un unico passaggio. Si consiglia di eliminare manualmente i dati in più batch con uno scaricamento dei dati invocato manualmente tra l'uno e l'altro, con sp_xtp_flush_temporal_history oppure mentre SYSTEM_VERSIONING = OFF.

  • Non eseguire aggiornamenti massicci della tabella in una sola volta perché questo potrebbe comportare un consumo di memoria due volte superiore rispetto alla memoria necessaria per aggiornare una tabella non temporale ottimizzata per la memoria. Il consumo di memoria raddoppiato è temporaneo perché l'attività di scaricamento dati è regolarmente all'opera per mantenere il consumo di memoria della tabella di staging interna entro i limiti previsti per lo stato stabile. Il limite è il 10 percento del consumo di memoria della tabella temporale corrente. È consigliabile eseguire gli aggiornamenti massicci in più batch o mentre SYSTEM_VERSIONING = OFF, ad esempio usando gli aggiornamenti per impostare i valori predefiniti per le colonne aggiunte.

Il periodo di attivazione dell'attività di scaricamento dei dati non è configurabile, ma è possibile eseguire manualmente sp_xtp_flush_temporal_history quando necessario.

Si consiglia di usare columnstore cluster come opzione di archiviazione per la tabella di cronologia basata su disco, soprattutto se si prevede di eseguire query di analisi sui dati cronologici che utilizzano funzioni di aggregazione o windowing. In tal caso, un indice columnstore di cluster è una scelta ottimale per la tabella di cronologia. Gli indici columnstore di cluster offrono una buona compressione dei dati e si comportano in modo semplice da inserire, in linea con la modalità di generazione dei dati di cronologia.