Estou executando um banco de dados transacional alto (~ 175 mil transações / minuto em média, quase 9 milhões de registros por hora adicionados e removidos)
Até recentemente, isso não era um problema muito grande, pois estivemos com ~ 7,5 milhões de registros adicionados e removidos, mas com os mais recentes influxos de dados, a limpeza de fantasmas não parece ser capaz de acompanhar a limpeza do espaço não utilizado em tabelas / índices.
Alguns dias atrás, alcançamos 53 GB de 'Espaço Não Utilizado' em 16 tabelas (principalmente 2 delas); portanto, começamos a analisar o processo de limpeza de fantasmas para descobrir que ele é executado uma vez a cada 5 segundos e mais de 10 páginas.
Minha solução atual é que, de manhã cedo, estou executando três threads do seguinte comando:
DECLARE @2hours datetime = dateadd(hour,2,getutcdate())
WHILE getutcdate() < @2hours
BEGIN
DBCC FORCEGHOSTCLEANUP ('DBNAME') WITH NO_INFOMSGS
END
para acompanhar o atraso da noite anterior (quando a maioria de nossas exclusões ocorre)
Gostaria de saber se há alguma maneira de alterar as configurações padrão de 5 segundos e 10 páginas para dizer a cada segundo ou executar mais de 20 páginas, existe alguma maneira de fazer isso ou devo continuar girando vários processos de limpeza para limpar o dados ou se houver outras ações que possam ajudar com isso
A re-indexação é executada nos índices mais afetados pelo menos uma vez por semana (a maioria ocorre em dias alternados)
SQL Server 2012 Enterprise SP3_CU8 (atualizando para CU9 amanhã) no AlwaysOn High Availabilty Cluster também com replicação (distribuição em um servidor separado)
fonte