È necessaria una soluzione alternativa a SQL Server Frozen Ghost Cleanup


15

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 CLEANUPprocesso 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:

E lo stesso è qui:

Risposte:


12

Infine, MS ha riconosciuto il problema come un bug: http://support.microsoft.com/kb/2622823

In breve: è stato risolto

  • SQL Server 2008 SP3 CU4
  • SQL Server 2008 R2 CU10
  • SQL Server 2008 R2 SP1 CU4

In Sql Server 2012 SP1 non riscontro il problema da oltre un anno di runtime.


3

Questo è il tipo di domanda che dovrebbe andare ai CSS in modo che possano risolvere il problema con te. Probabilmente hai la garanzia del software e un contratto di supporto. Se non lo fai qualche centinaio di dollari non dovrebbe essere un grosso problema se riavviare l'istanza ti costa migliaia di dollari l'ora.

Hai provato a consentire la chiusura del database e la sua messa online? Ciò causerà l'esecuzione del ripristino di emergenza e potrebbe dare il via alla pulizia dei fantasmi.

Stai scrivendo al tavolo frequentemente? Per frequente intendo sempre?

Quanto a MSKB 932115 stai vedendo che i record fantasma sono lasciati solo in tutti i file o sta ripulendo il primo file nel gruppo di file?

Perché l'uso di -T1117 e l'inizial del file istantaneo?


1. Sicuramente andrò al supporto MS. 2. Se chiudo il DB, si alza di circa 10-30 minuti facendo rotolare avanti e indietro, il che è inaccettabile. 3. Il GC È in esecuzione, ma non elabora le voci LOB fuori riga eliminate. 4. Scrivere su tabelle con prestazioni costanti a seconda dell'ora del giorno da 20 a 600 scritture al secondo e in ogni momento. 5. Il primo file di DB non è in uso - non ha tabelle di grandi dimensioni e utilizzato solo come memoria di sistema, quindi - semplicemente non ci sono record fantasma.
Oleg Dok,

con -T1117 Voglio solo distribuire tutto il carico tra più file, invece quando è rimasto solo un file dal filegroup, dove esiste ancora spazio libero - inizia a rallentare sui LATCH di PFS, l'inizial file istant minimizza il tempo di crescita dei file, perché un incremento è impostato su 10-50 Gb per turno. Non posso semplicemente impostare i file più grandi che posso, perché è completamente imprevedibile: quali file otterranno i loro dati oggi e in quale volume. È più semplice chiedere agli amministratori SAN di aggiungere più spazio, piuttosto che prevedere a chi dovrei aggiungere lo spazio.
Oleg Dok,
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.