Confronto dell'archiviazione delle tabelle basate su disco con quella delle tabelle con ottimizzazione per la memoriaComparing Disk-Based Table Storage to Memory-Optimized Table Storage

CategorieCategories Tabella basata su discoDisk-based Table Tabella durevole con ottimizzazione per la memoriaDurable Memory-Optimized Table
DDLDDL Le informazioni sui metadati vengono archiviate in tabelle di sistema nel filegroup primario del database e sono accessibili tramite le viste del catalogo.Metadata information is stored in system tables in the primary filegroup of the database and is accessible through catalog views. Le informazioni sui metadati vengono archiviate in tabelle di sistema nel filegroup primario del database e sono accessibili tramite le viste del catalogo.Metadata information is stored in system tables in the primary filegroup of the database and is accessible through catalog views.
StrutturaStructure Le righe vengono archiviate in pagine da 8 KB.Rows are stored in 8K pages. Una pagina contiene solo righe della stessa tabella.A page stores only rows from the same table. Le righe vengono archiviate come singole righe.Rows are stored as individual rows. Non è presente alcuna struttura della pagina.There is no page structure. Due righe consecutive in un file di dati possono appartenere a tabelle con ottimizzazione per la memoria diverse.Two consecutive rows in a data file can belong to different memory-optimized tables.
IndiciIndexes Gli indici vengono archiviati in una struttura della pagina simile alle righe di dati.Indexes are stored in a page structure similar to data rows. Solo la definizione dell'indice è persistente (non le righe di indice).Only the index definition is persisted (not index rows). Gli indici vengono gestiti in memoria e generati di nuovo quando la tabella con ottimizzazione per la memoria viene caricata in memoria come parte del riavvio di un database.Indexes are maintained in-memory and are regenerated when the memory-optimized table is loaded into memory as part of restarting a database. Poiché le righe di indice non sono persistenti, non viene effettuata alcuna registrazione per le modifiche dell'indice.Since index rows are not persisted, no logging is done for index changes.
Operazione DMLDML operation Il primo passaggio consiste nell'individuare la pagina, quindi nel caricarla nel pool di buffer.The first step is to find the page and then load it into buffer-pool.

InsertInsert
SQL ServerSQL Server la riga viene inserita nella pagina prendendo in considerazione l'ordinamento delle righe in caso di indice cluster. inserts the row on the page accounting for row ordering in case of clustered index.

DeleteDelete
SQL ServerSQL Server viene individuata la riga da eliminare nella pagina e viene contrassegnata come eliminata. locates the row to be deleted on the page and marks it deleted.

UpdateUpdate
SQL ServerSQL Server viene individuata la riga nella pagina. locates the row on the page. L'aggiornamento viene eseguito sul posto per le colonne non chiave.The update is done in-place for non-key columns. L'aggiornamento delle colonne chiave viene eseguito tramite un'operazione di eliminazione e inserimento.Key-column update is done by a delete and insert operation.

Una volta completata l'operazione DML, le pagine modificate vengono scaricate su disco come parte dei criteri del pool di buffer, del checkpoint o del commit della transazione per le operazioni con registrazione minima.After the DML operation completes, the affected pages are flushed to disk as part of buffer pool policy, checkpoint or transaction commit for minimally-logged operations. Sia le operazioni di lettura sia quelle di scrittura nelle pagine comportano attività di I/O non necessaria.Both read/write operations on pages leads to unnecessary I/O.
Per le tabelle con ottimizzazione per la memoria, poiché i dati risiedono in memoria, le operazioni DML vengono eseguite direttamente in memoria.For memory-optimized tables, since the data resides in memory, the DML operations are done directly in memory. È disponibile un thread in background che legge i record del log per le tabelle con ottimizzazione per la memoria e li salva in modo persistente nei file di dati e differenziali.There is a background thread that reads the log records for memory-optimized tables and persist them into data and delta files. Un aggiornamento genera una nuova versione di riga,An update generates a new row version. tuttavia viene registrato come un'eliminazione seguita da un inserimento.But an update is logged as a delete followed by an insert.
Frammentazione dei datiData Fragmentation La manipolazione dei dati ne comporta la frammentazione che produce pagine riempite parzialmente e pagine logicamente consecutive che non sono contigue su disco.Data manipulation fragments data leading to partially filled pages and logically consecutive pages that are not contiguous on disk. Ciò comporta una riduzione delle prestazioni di accesso ai dati e ne richiede la deframmentazione.This degrades data access performance and requires you to defragment data. I dati con ottimizzazione per la memoria non vengono archiviati in pagine, pertanto non vengono frammentati.Memory-optimized data is not stored in pages so there is no data fragmentation. Poiché tuttavia le righe vengono aggiornate ed eliminate, i file di dati e differenziali devono essere compressi.However, as rows are updated and deleted, the data and delta files need to be compacted. Questa operazione viene eseguita da un thread MERGE in background in base ai criteri di unione.This is done by a background MERGE thread based on a merge policy.

Vedere ancheSee Also

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