Garbage Collection per OLTP in memoriaIn-Memory OLTP Garbage Collection

Una riga di dati viene considerata non aggiornata se è stata eliminata da una transazione non più attiva.A data row is considered stale if it was deleted by a transaction that is no longer active. Una riga obsoleta è qualificata per il processo di Garbage Collection.A stale row is eligible for garbage collection. Di seguito sono riportate le caratteristiche del processo di Garbage Collection in OLTP in memoriaIn-Memory OLTP:The following are characteristics of garbage collection in OLTP in memoriaIn-Memory OLTP:

  • Non bloccante.Non-blocking. Il processo di Garbage Collection viene distribuito nel tempo con un impatto minimo sul carico di lavoro.Garbage collection is distributed over time with minimal impact on the workload.

  • Cooperativo.Cooperative. Le transazioni utente partecipano al processo di Garbage Collection con un thread principale di Garbage Collection.User transactions participate in garbage collection with main garbage-collection thread.

  • Efficiente.Efficient. Con le transazioni utente vengono scollegate le righe non aggiornate nel percorso di accesso (indice) utilizzato.User transactions delink stale rows in the access path (the index) being used. In questo modo viene ridotto il lavoro richiesto per la rimozione finale della riga.This reduces the work required when the row is finally removed.

  • Reattivo.Responsive. Il numero di richieste di memoria genera operazioni di Garbage Collection aggressive.Memory pressure leads to aggressive garbage collection.

  • Scalabile.Scalable. Dopo il commit, tramite le transazioni utente viene eseguita parte del lavoro di Garbage Collection.After commit, user transactions do part of the work of garbage collection. Più sono le attività transazionali, più sono numerose le transazioni tramite cui vengono scollegate le righe non aggiornate.The more transaction activity, the more the transactions delink stale rows.

    Il processo di Garbage Collection è controllato dal thread principale di Garbage Collection.Garbage collection is controlled by the main garbage collection thread. Il thread principale di Garbage Collection viene eseguito ogni minuto o quando il numero di transazioni completate supera una soglia interna.The main garbage collection thread runs every minute, or when the number of committed transactions exceeds an internal threshold. L'attività di Garbage Collector è costituita dalle azioni seguenti:The task of the garbage collector is to:

  • Identificare le transazioni tramite cui è stato eliminato o aggiornato un set di righe e viene eseguito il commit prima della transazione attiva meno recente.Identify transactions that have deleted or updated a set of rows and have committed before the oldest active transaction.

  • Identificare le versioni di riga create dalle transazioni precedenti.Identity row versions created by these old transactions.

  • Raggruppare le righe precedenti in una o più unità di 16 righe ciascuna.Group old rows into one or more units of 16 rows each. Questa attività permette di distribuire il lavoro di Garbage Collector in unità più piccole.This is done to distribute the work of the garbage collector into smaller units.

  • Spostare nella coda di Garbage Collection le unità di lavoro per ciascuna utilità di pianificazione.Move these work units into the garbage collection queue, one for each scheduler. Per informazioni dettagliate, vedere le viste a gestione dinamica (DMV) del Garbage Collector: sys.dm_xtp_gc_stats (Transact-SQL), sys.dm_db_xtp_gc_cycle_stats (Transact-SQL) e sys.dm_xtp_gc_queue_stats (Transact-SQL).Refer to the garbage collector DMVs for the details: sys.dm_xtp_gc_stats (Transact-SQL), sys.dm_db_xtp_gc_cycle_stats (Transact-SQL), and sys.dm_xtp_gc_queue_stats (Transact-SQL).

    Dopo il commit di una transazione utente, vengono identificati tutti gli elementi nella coda associati all'utilità di pianificazione in cui è stata eseguita e quindi rilasciata la memoria.After a user transaction commits, it identifies all queued items associated with the scheduler it ran on and then releases the memory. Se la coda di Garbage Collection nell'utilità di pianificazione è vuota, viene cercata una coda non vuota nel nodo NUMA corrente.If the garbage collection queue on the scheduler is empty, it searches for any non-empty queue in the current NUMA node. Se l'attività transazionale è scarsa e sono presenti richieste di memoria, tramite il thread principale di Garbage Collection è possibile accedere alle righe di Garbage Collection da qualsiasi coda.If there is low transactional activity and there is memory pressure, the main garbage-collection thread can access garbage collect rows from any queue. Se non esiste alcuna attività transazionale dopo, ad esempio, l'eliminazione di un numero elevato di righe e non vi sono richieste di memoria, le righe eliminate non verranno sottoposte a Garbage Collection fino a quando l'attività transazionale non viene ripresa o non vi sono richieste di memoria.If there is no transactional activity after (for example) deleting a large number of rows and there is no memory pressure, the deleted rows will not be garbage collected until the transactional activity resumes or there is memory pressure.

Vedere ancheSee Also

Gestione della memoria per OLTP in memoriaManaging Memory for In-Memory OLTP