Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Uma linha de dados será considerada obsoleta se tiver sido excluída por uma transação que não está mais ativa. Uma linha obsoleta é qualificada para a coleta de lixo. Veja a seguir as características da coleta de lixo no In-Memory OLTP:
Não bloqueante. A coleta de lixo é distribuída ao longo do tempo com impacto mínimo na carga de trabalho.
Cooperativa. As transações de usuário participam da coleta de lixo com o thread principal de coleta de lixo.
Eficiente. As transações de usuário desvinculam linhas obsoletas no caminho de acesso (o índice) que está sendo usado. Isso reduz o trabalho necessário quando a linha é finalmente removida.
Responsivo A pressão de memória resulta em uma coleta de lixo mais agressiva.
Escalonável. Após a confirmação, as transações de usuário ajudam no trabalho de coleta de lixo. Quanto mais atividade de transação, mais as transações desvinculam linhas obsoletas.
A coleta de lixo é controlada pelo fluxo principal de coleta de lixo. O thread de coleta de lixo principal é executado a cada minuto ou quando o número de transações confirmadas excede um limite interno. A tarefa do coletor de lixo é:
Identifique transações que excluíram ou atualizaram um conjunto de linhas e que foram confirmadas antes da transação ativa mais antiga.
Versões de linha de identidade criadas por essas transações antigas.
Agrupe linhas antigas em uma ou mais unidades de 16 linhas cada. Isso é feito para distribuir o trabalho do coletor de lixo em unidades menores.
Mova essas unidades de trabalho para a fila de coleta de lixo, uma para cada agendador. Consulte os DMVs do coletor de lixo para detalhes: 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).
Depois que uma transação de usuário é confirmada, ela identifica todos os itens na fila associados ao agendador em que ele foi executado e libera a memória. Se a fila de coleta de lixo no agendador estiver vazia, ela procurará qualquer fila não vazia no nó NUMA atual. Se houver baixa atividade transacional e houver pressão de memória, o thread principal da coleta de lixo poderá acessar linhas de coleta de lixo de qualquer fila. Se não houver nenhuma atividade transacional após (por exemplo) excluir um grande número de linhas e não houver pressão de memória, as linhas excluídas não serão recolhidas pelo coletor de lixo até que a atividade transacional recomece ou haja pressão de memória.