Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Une ligne de données est considérée comme obsolète si elle a été supprimée par une transaction qui n’est plus active. Une ligne obsolète est éligible au garbage collection. Voici les caractéristiques de la gestion du ramasse-miettes dans In-Memory OLTP :
Non bloquant. La collecte des ordures est répartie dans le temps avec un impact minimal sur la charge de travail.
Coopérative Les transactions utilisateur participent au processus de ramasse-miettes avec le thread principal de ramasse-miettes.
Efficace. Les transactions utilisateur dissocient les lignes obsolètes dans le chemin d’accès (l’index) utilisé. Cela réduit le travail requis lorsque la ligne est finalement supprimée.
Réactif La pression de la mémoire entraîne une collecte des ordures agressive.
Évolutif. Après la validation, les transactions utilisateur font partie du travail du garbage collection. Plus l’activité transactionnelle est active, plus les transactions dissocient les lignes obsolètes.
Le garbage collection est contrôlé par le thread principal de garbage collection. Le thread de garbage collection principal s’exécute toutes les minutes, ou lorsque le nombre de transactions validées dépasse un seuil interne. La tâche du garbage collector consiste à :
Identifiez les transactions qui ont supprimé ou mis à jour un ensemble de lignes de données et qui ont été validées avant la plus ancienne transaction active.
Versions de lignes d’identité créées par ces anciennes transactions.
Regroupez les anciennes lignes en une ou plusieurs unités de 16 lignes chacune. Cela sert à répartir le travail du ramasse-miettes en unités plus petites.
Déplacez ces unités de travail dans la file d’attente du ramasse-miettes, une unité de travail pour chaque planificateur. Pour plus d’informations, reportez-vous aux DMV de collecte de déchets (garbage collector) : sys.dm_xtp_gc_stats (Transact-SQL),, sys.dm_db_xtp_gc_cycle_stats (Transact-SQL) et sys.dm_xtp_gc_queue_stats (Transact-SQL).
Une fois qu’une transaction utilisateur est validée, elle identifie tous les éléments mis en file d’attente associés au planificateur sur lequel il s’est exécuté, puis libère la mémoire. Si la file d’attente de ramasse-miettes sur le planificateur est vide, elle recherche une file d’attente non vide dans le nœud NUMA actuel. S'il y a une faible activité transactionnelle et une sollicitation de la mémoire, le thread principal de collecte des déchets peut collecter les lignes de n'importe quelle file d'attente. S'il n'y a pas d'activité transactionnelle après, par exemple, la suppression d'un grand nombre de lignes, et qu'il n'y a pas de pression sur la mémoire, les lignes supprimées ne seront pas nettoyées par le garbage collector tant que l'activité transactionnelle ne reprend pas ou qu'une pression sur la mémoire n'apparaît.