Ho diverse tabelle con un numero di righe tra 5M e 1,5G
Ogni tabella ha il suo campo BLOB, la cui dimensione varia da 100 byte a 30 MByte e che è memorizzata come "tipi di valore elevato fuori riga" = ON
Le tabelle sono memorizzate in diversi filegroup con 3-4 file ciascuno su disco diverso @ LUN diversi @ SAN molto veloce
Ogni giorno queste tabelle crescono per 5-100 Gb di dimensioni e con file da 600k - 1,5M
Dopo un certo periodo di tempo , che varia da 2 settimane a 6 mesi, alcune delle righe vengono eliminate o spostate nel database di archiviazione, quindi - non ci sono righe nei worktable che hanno più di 6 mesi.
Configurazione corrente del server:
- Il motore del server SQL è 2008 R2 SP1 Enterprise a 24 core, a 64 GB di RAM
- SQL Server funziona con flag di avvio aggiuntivi:
-T 3640; (Elimina l'invio di messaggi DONE_IN_PROC al client per ogni istruzione nella procedura memorizzata. È simile all'impostazione della sessione di SET NOCOUNT ON, ma quando impostato come flag di traccia, ogni sessione client viene gestita in questo modo)
-T 1118; (Cambia le allocazioni in tempDB da 1pg alla volta (per le prime 8 pagine) in una misura.)
-T 2301; (Abilita ottimizzazioni avanzate specifiche per le query di supporto decisionale. Questa opzione si applica all'elaborazione del supporto decisionale di grandi set di dati)
-T 1117; (Cresce tutti i file di dati contemporaneamente, altrimenti va a turno.)
-E; (Aumenta il numero di estensioni allocate per ciascun file in un filegroup. Questa opzione può essere utile per le applicazioni di data warehouse con un numero limitato di utenti che eseguono scansioni di indici o dati)
-T 834; (Fa in modo che SQL Server utilizzi le allocazioni di grandi pagine di Windows per la memoria allocata per il pool buffer, http://msdn2.microsoft.com/en-us/library/aa366720.aspx , http://support.microsoft. com / kb / 920093 )
- SQL Server utilizza estensioni di pagina di grandi dimensioni
- SQL Server utilizza l' opzione di inizializzazione rapida dei file
- AUTOSHRINK è OFF per tutti i database
Il problema è che a partire da un certo momento del tempo di attività del server (da un paio di giorni a mesi) il GHOST CLEANUP
processo si rifiuta di elaborare operazioni di pulizia forzata e semplicemente di fare il suo solito lavoro - ripulisce diverse pagine in diversi secondi ( which is seen thru Extended Events
), il che non è adatto , perché non è in grado di ripulire tutte le righe eliminate
Il problema persiste dai tempi di SQL Server 2005 RTM Enterprise
Come sono stato tentato di risolvere il problema:
- Ho cercato di forzare le operazioni SCAN su indici cluster delle tabelle
- Ho cercato di forzare le operazioni SCAN, che coinvolgono tutto il contenuto della colonna BLOB sugli indici cluster delle tabelle
- sistema sp_clean_db_free_space e sp_clean_db_file_free_space
- dbcc cleanpage manualmente (@dbid, @fileid, @page) per tutti i file e le pagine nel DB
- ricostruzioni e riorganizzazione di indici cluster
- ricreando database
DBCC FORCEGHOSTCLEANUP
Quando eseguo la query:
select * from sys.dm_db_index_physical_stats(db_id(), object_id('ProblemTable'), 1, 0, 'detailed')
Vedo milioni e decine di milioni di record fantasma, ma solo per il tipo di unità di allocazione di LOB_DATA
Le uniche cose che aiutano:
- arrestare il server con il comando SHUTDOWN o riavviare l'intero host: aiuta, dopo il riavvio, il processo GHOST CLEANUP dura alcune ore e pulisce effettivamente tutti i record fantasma
- DBCC SHRINKFILE con l'opzione EMPTYFILE - lo spostamento di tutti i dati da un file all'altro o i file appena creati pulisce solo i record fantasma in questo file - il problema è che odio davvero le operazioni di riduzione. E questo richiede 3-4 giorni per UN file
la domanda : esiste un modo programmatico (preferibile) o di manutenzione per forzare GHOST CLEANUP senza tempi di inattività del server, perché i tempi di inattività del server sono troppo costosi, anche inaccettabili, da migliaia a decine di migliaia di dollari l'ora
Sono stati rilevati problemi allo stesso modo che i miei sono qui:
- http://support.microsoft.com/kb/932115
- http://www.sqlservercentral.com/Forums/Topic496244-149-1.aspx
E lo stesso è qui: