Impostazioni di pulizia fantasma


10

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)

Risposte:


4

Mi chiedo se c'è un modo per modificare le impostazioni predefinite da 5 secondi e 10 pagine da dire ogni secondo o scorrere oltre 20 pagine

No non c'è nessuno. Almeno non so al momento :-)

se ci sono altre azioni che possono aiutare con questo

Dal blog di Paul Randal - Un metodo che la gente a volte considera è quello di forzare la pulizia dei fantasmi per pulire tutto eseguendo una scansione di tabelle o indici (mettendo così in coda tutti i record eliminati per l'attività di pulizia dei fantasmi).

select * from [your_problem_table] with (index = Index_that_has_large_Deletes)

C'è una possibilità per te di partizionare la tabella ed eliminare la vecchia partizione invece di fare delle eliminazioni ? Cordiali saluti .. SQL Server 2016 e versioni successive consentono di troncare anche singole partizioni.

Inoltre, è possibile (TEST e implementazione) : disabilitare la pulizia fantasma (trace flag 661) e quindi l' rebuild index WITH ONLINE = ONopzione poiché si sta utilizzando l'edizione Enterprise.

Se si utilizza AlwaysON (con asincrono) con replica, assicurarsi di abilitare il flag di traccia 1448 - consente al lettore di registri di replica di spostarsi in avanti anche se le repliche secondarie asincrone non hanno riconosciuto la ricezione di una modifica.

Assicurati di leggere Elimina pagine divise e fantasmi inoltrati da Paul White per vedere se le tue tabelle hanno trigger o colonne LOB che potrebbero rallentare.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.