Ghost Cleanup Process


O processo de Ghost Cleanup é um processo em segundo plano que exclui registros de páginas que foram marcadas para exclusão. O artigo a seguir oferece uma visão geral desse processo.

Ghost Records

Os registros que foram excluídos de um nível folha de uma página de índice não são removidos fisicamente da página – ao invés disso, o registro é marcado como “a ser excluído”, ou fantasma. Isso significa que a linha continua na página, mas um bit é alterado no cabeçalho da linha para indicar que a linha é realmente um deletada. Isso melhora o desempenho durante uma operação de exclusão.

Ghost Record Cleanup Task

Registros que foram marcados para exclusão, ou fantasmas, são removidos pelo Background Ghost Cleanup Process. Esse processo em segundo plano será executado somente depois que a transação de exclusão for confirmada e removerá fisicamente registros fantasmas das páginas. O Ghost Cleanup process é executado automaticamente em um intervalo (a cada 5 segundos para o SQL Server 2012 e a cada 10 segundos para o SQL Server 2008/2008R2). Ele verifica se alguma página foi marcada com Ghost Records e se encontrar alguma, ele excluirá os registros marcados para exclusão, ou fantasmas, que tocam no máximo 10 páginas em cada execução.

Quando houverem Ghost Records, o banco de dados será marcado como tendo registros fantasmas, e o Ghost Cleanup Process examinará apenas esses bancos de dados. Ele também marcará o banco de dados como “não tendo nenhum registro fantasma”, assim que não houver mais nenhum registro fantasma e ignorará esse banco de dados na próxima execução.

A consulta abaixo pode identificar quantos Ghost Records existem em um banco de dados.

SELECT sum(ghost_record_count) total_ghost_records, db_name(database_id) 
FROM sys.dm_db_index_physical_stats (NULL, NULL, NULL, NULL, 'SAMPLED')
group by database_id
order by total_ghost_records desc

Desabilitando o Ghost Cleanup Task

Em sistemas de alta carga e com muitas exclusões, o Ghost Cleanup Process pode gerar um problema de desempenho impedindo a manutenção de páginas no pool de buffers e a geração de I/O. Assim sendo, é possível desabilitar esse processo com o uso da Trace Flag 661. Entretando iso não é recomendado por trazer problemas de performance neste caso.

Desabilitar o Ghost Cleanup Process pode fazer seu banco de dados crescer desnecessariamente e ocasionar problemas de desempenho. Como o Ghost Cleanup Process remove registros marcados como fantasmas, desabilitar o processo deixará esses registros na página, impedindo que o SQL Server reutilize esse espaço. Isso força o SQL Server a adicionar dados a novas páginas, gerando arquivos de banco de dados maiores e podendo ocasionar também Page Splits.

Com o Ghost Cleanup Process desabilitado, o processo de remoção de registros fantasmas deve ser executado manualmente. Uma opção é executar um rebuild de índice, que moverá os dados nas páginas. Outra opção é executar manualmente sp_clean_db_free_space (para limpar todos os arquivos de dados do banco de dados) ou sp_clean_db_file_free_space (para limpar um único arquivo de dados do banco de dados), que excluirá registros fantasmas.


Deixe um comentário