Share via


In-Memory OLTP Geheugenbeheer

Van toepassing op:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

Een gegevensrij wordt als verouderd beschouwd als deze is verwijderd door een transactie die niet meer actief is. Een verouderde rij komt in aanmerking voor vuil-opruiming. Hier volgen de kenmerken van garbage collection in In-Memory OLTP:

  • Niet blokkerend. Garbagecollection wordt in de loop van de tijd gedistribueerd met minimale gevolgen voor de werkbelasting.

  • Coöperatie. Gebruikerstransacties nemen deel aan garbagecollection met hoofdthread garbagecollection.

  • Efficiënt. Gebruikerstransacties ontkoppelen verlopen rijen in het gebruikte toegangspad (de index). Dit vermindert het werk dat nodig is wanneer de rij eindelijk wordt verwijderd.

  • Responsief. Geheugendruk leidt tot agressieve garbagecollection.

  • Schaalbaar. Na het doorvoeren van een commit, maken gebruikerstransacties deel uit van het werk aan vuilopruiming. Hoe meer transactieactiviteit, hoe meer de transacties verouderde rijen verwijderen.

Garbagecollection wordt beheerd door de belangrijkste garbagecollectionthread. De belangrijkste thread voor garbagecollection wordt elke minuut uitgevoerd of wanneer het aantal vastgelegde transacties een interne drempelwaarde overschrijdt. De taak van de garbagecollector is om:

  • Identificeer transacties die een set rijen hebben verwijderd of bijgewerkt en die vóór de oudste actieve transactie zijn doorgevoerd.

  • Rijversies van identiteit die door deze oude transacties zijn gecreëerd.

  • Groepeer oude rijen in een of meer eenheden van elk 16 rijen. Dit wordt gedaan om het werk van de garbagecollector in kleinere eenheden te verdelen.

  • Verplaats deze werkeenheden naar de garbage-collectionwachtrij, één voor elke scheduler. Raadpleeg de DMV's van de garbagecollection voor de details: sys.dm_xtp_gc_stats (Transact-SQL), sys.dm_db_xtp_gc_cycle_stats (Transact-SQL), en sys.dm_xtp_gc_queue_stats (Transact-SQL).

Nadat een gebruikerstransactie is doorgevoerd, worden alle items in de wachtrij geïdentificeerd die zijn gekoppeld aan de scheduler waarop deze is uitgevoerd en wordt het geheugen vervolgens vrijgegeven. Als de garbage-collection-wachtrij op de scheduler leeg is, zoekt het systeem naar een niet-lege wachtrij in het huidige NUMA-knooppunt. Als er sprake is van een lage transactionele activiteit en er geheugendruk is, heeft de hoofdthread garbagecollection toegang tot garbagecollectionrijen uit elke wachtrij. Als er geen transactionele activiteit is na het verwijderen van een groot aantal rijen en er geen geheugendruk is, zullen de verwijderde rijen niet worden opgeruimd totdat de transactionele activiteit wordt hervat of er wel geheugendruk is.

Zie ook

Geheugen beheren voor In-Memory OLTP