Sto eseguendo un database transazionale elevato (~ 175k transazioni / minuti in media, quasi 9 milioni di record all'ora aggiunti e rimossi)
Fino a poco tempo fa questo non è stato un grosso problema dato che siamo stati aggiunti e rimossi circa 7.5 milioni di record, ma con gli ultimi flussi di dati la pulizia dei fantasmi non sembra essere in grado di tenere il passo con la pulizia del spazio inutilizzato su tabelle / indici.
Pochi giorni fa abbiamo raggiunto 53 GB di "Spazio inutilizzato" su 16 tavoli (per lo più 2 di essi), quindi di conseguenza ho iniziato a esaminare il processo di pulizia dei fantasmi per trovarne l'esecuzione una volta ogni 5 secondi e oltre 10 pagine.
La mia soluzione attuale è che la mattina presto sto eseguendo tre thread del seguente comando:
DECLARE @2hours datetime = dateadd(hour,2,getutcdate())
WHILE getutcdate() < @2hours
BEGIN
DBCC FORCEGHOSTCLEANUP ('DBNAME') WITH NO_INFOMSGS
END
per recuperare il ritardo dalla notte precedente (quando avviene la maggior parte delle nostre eliminazioni)
Mi chiedo se c'è un modo per modificare le impostazioni predefinite da 5 secondi e 10 pagine da dire ogni secondo o passare oltre 20 pagine, c'è un modo per farlo o devo continuare a girare più processi di pulizia per cancellare il dati, o se ci sono altre azioni che possono aiutare con questo
La reindicizzazione viene eseguita almeno una volta alla settimana sugli indici più colpiti (la maggior parte avviene a giorni alterni)
SQL Server 2012 Enterprise SP3_CU8 (aggiornamento a CU9 domani) su cluster AlwaysOn High Availabilty anche con replica (distribuzione su un server separato)