Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Aplica-se a:SQL Server
Banco de Dados SQL do Azure
Instância Gerenciada SQL do Azure
Uma linha de dados é considerada obsoleta se foi eliminada por uma transação que já não está ativa. Uma fila obsoleta é elegível para recolha de lixo. As seguintes são as características da recolha de lixo em In-Memory OLTP:
Não bloqueante. A recolha de lixo é distribuída ao longo do tempo com impacto mínimo na carga de trabalho.
Cooperativo. As transações dos utilizadores participam na recolha de lixo juntamente com a linha de execução principal de recolha de lixo.
Eficiente. As transações do utilizador desligam linhas obsoletas no caminho de acesso (o índice) que está a ser utilizado. Isto reduz o trabalho necessário quando a linha é finalmente removida.
Adaptável. A pressão de memória leva a uma recolha agressiva de lixo.
Escalável. Após o commit, as transações do utilizador fazem parte do trabalho de recolha de lixo. Quanto maior a atividade das transações, mais as transações desligam as linhas obsoletas.
A recolha de lixo é controlada pelo thread principal de recolha de lixo. A thread principal de recolha de lixo é executada a cada minuto, ou quando o número de transações comprometidas ultrapassa um limiar interno. A tarefa do coletor de lixo é:
Identifique transações que tenham apagado ou atualizado um conjunto de linhas e que tenham sido confirmadas antes da transação ativa mais antiga.
Versões da linha de identidade criadas por estas transações antigas.
Agrupe as linhas antigas em uma ou mais unidades de 16 filas cada. Isto é feito para distribuir o trabalho do coletor de lixo em unidades mais pequenas.
Move estas unidades de trabalho para a fila de recolha de lixo, uma para cada schedulador. Consulte os DMVs do coletor de lixo para mais 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).
Após o commit de uma transação do usuário, identifica todos os itens em fila associados ao agendador em que foi executado e depois liberta a memória. Se a fila de recolha de lixo no escalonador estiver vazia, procura qualquer fila não vazia no nó NUMA atual. Se houver baixa atividade transacional e pressão de memória, a thread principal de recolha de lixo pode aceder às linhas de recolha de lixo a partir de qualquer fila. Se não houver atividade transacional após (por exemplo) eliminar um grande número de linhas e não houver pressão de memória, as linhas eliminadas não serão recolhidas de lixo até que a atividade transacional retome ou haja pressão de memória.