如果數據列已由不再使用中的交易刪除,則會將其視為過時。 過時的數據列符合垃圾收集的資格。 以下是 In-Memory OLTP 中垃圾收集的特性:
非封鎖。 垃圾收集會隨著時間分散,對工作負載的影響最小。
合作社。 使用者交易會與主要垃圾收集執行緒一起參與垃圾收集。
有效。 使用者交易會取消連結存取路徑中過時的數據列(索引)。 這可減少數據列最終移除時所需的工作。
回應。 記憶體壓力會導致加速的垃圾回收。
可伸縮。 提交之後,使用者交易會執行部分垃圾收集的工作。 交易活動越多,交易就越會解除過時數據列的連結。
垃圾收集是由主要垃圾收集執行緒所控制。 主要垃圾收集線程會每分鐘執行一次,或當認可的交易數目超過內部閾值時。 垃圾收集器的工作是:
識別已刪除或更新一組資料列,並在最舊仍然活躍的交易之前提交的交易。
這些舊交易所建立的身分識別列版本。
將舊數據列分組為一或多個單位,每個單位為16個數據列。 這樣做是為了將垃圾收集器的工作分散成較小的單位。
將這些工作單位移至垃圾收集佇列,每個排程器分配一個。 如需詳細資訊,請參閱垃圾收集行程 DMV:sys.dm_xtp_gc_stats(Transact-SQL)、sys.dm_db_xtp_gc_cycle_stats(Transact-SQL)和sys.dm_xtp_gc_queue_stats(Transact-SQL)。
在使用者交易認可之後,它會識別與其執行之排程器相關聯的所有佇列專案,然後釋放記憶體。 如果排程器上的垃圾收集佇列是空的,它會搜尋目前 NUMA 節點中的任何非空白佇列。 如果交易活動較低且記憶體不足,主要垃圾收集線程可以從任何佇列存取垃圾收集數據列。 如果在 (例如) 刪除大量數據列之後沒有交易式活動,而且沒有記憶體壓力,則在交易活動繼續或記憶體壓力之前,刪除的數據列將不會進行垃圾收集。