Estoy ejecutando una base de datos transaccional alta (~ 175k transacciones / minuto en promedio, casi 9 millones de registros por hora añadidos y eliminados)
Hasta hace poco, esto no ha sido un gran problema, ya que hemos estado en ~ 7.5 millones de registros agregados y eliminados, pero con la última afluencia de datos, la limpieza fantasma no parece ser capaz de mantenerse al día con la limpieza del espacio no utilizado en tablas / índices.
Hace unos días llegamos a 53 GB de 'Espacio no utilizado' en 16 tablas (en su mayoría 2 de ellas), por lo que, como resultado, comenzamos a investigar el proceso de limpieza fantasma para encontrar que se ejecuta una vez cada 5 segundos y se ejecuta en más de 10 páginas.
Mi solución actual es que temprano en la mañana estoy ejecutando tres hilos del siguiente comando:
DECLARE @2hours datetime = dateadd(hour,2,getutcdate())
WHILE getutcdate() < @2hours
BEGIN
DBCC FORCEGHOSTCLEANUP ('DBNAME') WITH NO_INFOMSGS
END
para ponerse al día con el retraso de la noche anterior (cuando se realizan la mayoría de nuestras eliminaciones)
Me pregunto si hay alguna forma de cambiar la configuración predeterminada de 5 segundos y 10 páginas para decir cada segundo o ejecutar más de 20 páginas, ¿hay alguna forma de hacerlo o debo continuar simplemente girando múltiples procesos de limpieza para borrar el datos, o si hay otras acciones que pueden ayudar con esto
La reindexación se ejecuta en la mayoría de los índices afectados al menos una vez por semana (la mayoría son días alternos)
SQL Server 2012 Enterprise SP3_CU8 (actualización a CU9 mañana) en el clúster de alta disponibilidad AlwaysOn también con replicación (distribución en un servidor separado)
fuente