Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Una fila de datos se considera obsoleta si se eliminó mediante una transacción que ya no está activa. Una fila obsoleta es apta para la recolección de basura. A continuación se muestran las características de la recolección de basura en In-Memory OLTP.
Sin bloqueo. La recolección de basura se distribuye a lo largo del tiempo con un impacto mínimo en la carga de trabajo.
Cooperativa. Las transacciones de usuario participan en la recolección de basura junto con el subproceso principal de recolección de basura.
Eficaz. Las transacciones de usuario desvinculan filas obsoletas en la ruta de acceso (el índice) que se usa. Esto reduce el trabajo necesario cuando finalmente se quita la fila.
Responsivo. La presión de memoria conduce a una recolección agresiva de basura.
Escalable. Después de confirmar, las transacciones de usuario forman parte del trabajo de recolección de elementos no utilizados. Cuanto más actividad de transacción, más las transacciones desvinculen las filas obsoletas.
La recolección de basura se controla mediante el hilo principal de recolección de basura. El subproceso principal de recolección de elementos no utilizados se ejecuta cada minuto o cuando el número de transacciones confirmadas supera un umbral interno. La tarea del recolector de basura es:
Identifique las transacciones que han eliminado o actualizado un conjunto de filas y se han confirmado antes de la transacción activa más antigua.
Versiones de fila de identidad creadas por estas transacciones antiguas.
Agrupa las filas antiguas en una o más unidades de 16 filas cada una. Esto se hace para distribuir el trabajo del recolector de basura en unidades más pequeñas.
Mueva estas unidades de trabajo a la cola de recolección de basura, una para cada planificador. Consulte las DMV del recolector de basura para obtener los detalles: sys.dm_xtp_gc_stats (Transact-SQL), sys.dm_db_xtp_gc_cycle_stats (Transact-SQL) y sys.dm_xtp_gc_queue_stats (Transact-SQL).
Después de que se confirme una transacción de usuario, identifica todos los elementos en cola asociados con el programador en el que se ejecutó y, a continuación, libera la memoria. Si la cola de recolección de basura del programador está vacía, busca una cola que no esté vacía en el nodo NUMA actual. Si hay poca actividad transaccional y hay presión de memoria, el subproceso principal de recolección de elementos no utilizados puede acceder a las filas de recolección de elementos no utilizados de cualquier cola. Si no hay ninguna actividad transaccional después (por ejemplo) de eliminar un gran número de filas y no hay ninguna presión de memoria, las filas eliminadas no se recopilarán como elementos no utilizados hasta que se reanude la actividad transaccional o haya presión de memoria.