Ottieni MS SQL Server per liberare spazio su disco


9

Una tabella di database gestita male è diventata enorme. 48 + concerti di dischi orfani. Sto cercando di ripulirlo e riportare il mio disco rigido pericolosamente pieno in uno stato normale. Eliminerò circa 400 milioni di record da questa tabella. Questo è in esecuzione mentre scrivo. Ho notato che non vedo alcun calo nel mio spazio sul disco rigido ma sto vedendo il calo di memoria sulle query della tabella di sistema, sto correndo per ottenere le dimensioni della tabella. Il database utilizza "Simple Recovery Model".

Ci sono molte domande simili a questa con risposte che dicono che è necessario ridurre il database. Ma continuano spiegando quanto questo sia spaventoso / spaventoso a causa di dati frammentati ecc.

  1. Dal momento che il database non dovrebbe essere di queste dimensioni. È ancora male per me ridurlo?
  2. Questo è un database di produzione. Se lo restringo, causerà tempi di inattività o bloccherà il database?
  3. In SQL Server Management Studio hai due opzioni per ridurre, database o file. Data la mia situazione quale sarebbe l'opzione migliore?
  4. esiste una regola sulla percentuale di spazio libero che dovrebbe avere un DB?

Anche leggere la descrizione del tag di shrink non mi fa venir voglia di farlo. C'è un altro modo?

Risposte:


14

Eliminerò circa 400 milioni di record da questa tabella.

Si spera che tu lo stia facendo a pezzi - per evitare il log delle transazioni gonfio.

nota che non vedo alcuna caduta nel mio spazio sul disco rigido

Non è necessario, poiché è necessario ridurre esplicitamente il file di database per liberare spazio. Basta eliminare i record, il server SQL non rilascerà lo spazio sul sistema operativo .

  1. Dal momento che il database non dovrebbe essere di queste dimensioni. È ancora male per me ridurlo?

È generalmente una cattiva pratica poiché i database dovrebbero essere presettati correttamente. Se sei sicuro al 100% che il tuo database NON sarà di nuovo di queste dimensioni, è OK per te ridurre il database (nel tuo scenario) .

  1. Questo è un database di produzione. Se lo restringo, causerà tempi di inattività o bloccherà il database?

La riduzione di un database richiede molta IO. È consigliabile ridurre l'utilizzo DBCC SHRINKFILEdurante la finestra di manutenzione o quando l'attività è minima.

  1. In Management Studio hai due opzioni, Database o File. Data la mia situazione quale sarebbe l'opzione migliore?

È necessario utilizzare TSQL per ridurre. (da quando hai chiesto, ridurre FILE è la strada da percorrere invece del database). È possibile utilizzare il database di riduzione in blocchi - script tsql per eseguire la riduzione in blocchi.

Ricorda che quando ti restringi, stai frammentando i tuoi indici.

  1. esiste una regola sulla percentuale di spazio libero che dovrebbe avere un DB?

È possibile fare riferimento a Stima dei requisiti di spazio su disco per i database . Non esiste una regola fissa, devi tenere conto di come dovrebbe crescere il tuo database. Devi anche tener conto della crescita automatica dei tuoi database .

Riferimenti: Perché il registro delle transazioni continua a crescere o esaurire lo spazio?


5

hai buone ragioni per preoccuparti perché il DB si restringe spesso in SQL Server "succhia". Paul Randal, il responsabile del motore di archiviazione in SQL 2005, ha dichiarato, ShrinkDB è scritto molto male. Troverà spazio vuoto prendendo i dati alla fine e li metterà all'inizio e continuerà a farlo fino a quando non avrà spazio libero alla "fine" dei file DB. A questo punto può quindi liberare lo spazio da SQL Server e restituirlo al sistema operativo. Stai invertendo efficacemente i tuoi file di database, quindi di solito vedrai un'enorme frammentazione. Puoi leggere le sue opinioni su questo post sul blog o su questo video di MCM Internals

Come per tutto, è necessario prima testarli nel proprio ambiente. Un modo migliore per farlo è spostare i dati in un filegroup diverso. È possibile eseguire una ricostruzione dell'indice online con l'indice cluster e quindi reindicizzare nel nuovo filegroup. Quindi puoi rilasciare quello vecchio e rilasciare lo spazio e non avere quasi alcuna frammentazione. Nota che questo richiederà circa il 120% di spazio in più mentre ci sta lavorando. Il problema con questo è che hai bisogno anche di ulteriore spazio libero che sembra che potresti non avere. Questa è una funzionalità aziendale.

Se lo spazio libero è di gran lunga un premio, allora potresti dover mordere il proiettile e ridurre lentamente il DB un piccolo pezzo alla volta per evitare processi di lunga durata. Nota che i tuoi dati saranno fortemente frammentati e vorrai reindicizzare di nuovo tutto. Nota che dopo aver reindicizzato tutto, aumenterai un po 'lo spazio utilizzato e tornerai ad avere spazio libero aggiuntivo. Vedi i consigli di Brent qui .

Per quanto riguarda lo spazio libero per te, dipende da quanto puoi permetterti attività di frammentazione e crescita dei file. Con IFI abilitato, la crescita dei file è quasi istantanea ma si ottiene ancora la frammentazione. Una buona regola empirica è preallocare tutto lo spazio di cui pensi di aver bisogno, oppure monitorare la crescita e regolare periodicamente in blocchi se necessario. Questo mantiene bassa la frammentazione fisica.

Anche la crescita dei file di registro è molto più importante. File di registro aggiuntivi possono causare la frammentazione VLF. Questo rende i tuoi ripristini molto più lenti e può influenzare checkpoint / tronchi. Ecco alcuni rischi per le prestazioni che si assumono con un registro frammentato. Fare un DBCC LOGINFO();su ogni database. Cerca di mantenere il numero intorno a 50ish per Kim Tripp, ma se ne vedi centinaia, hai problemi di frammentazione, il che significa che i tuoi file di registro devono crescere per supportare le operazioni. Un buon modo per vedere quale dovrebbe essere il tuo file di registro per Paul Randal è lasciarlo crescere per una settimana e reindicizzare. Questo potrebbe essere un buon punto, forse puoi gettare un po 'più spazio libero lì per ogni evenienza. Assicurarsi che i log non siano frammentati con DBCC LOGINFO (); di nuovo e se lo sono, significa che sono cresciuti molto. Ridurre ed espandere nuovamente il file di registro utilizzandoquesto metodo .


2

Va bene per te ridurlo abbastanza per garantire che il tuo server non si arresti in modo anomalo nel tempo necessario per valutare le tue esigenze di archiviazione e pianificare in modo appropriato i servizi hardware / di hosting (vedi domanda 4). No, non lo bloccherà. Vedi le restrizioni . Riduci il database perché semplifica le cose.

Suggerisco di contrarre l'esperienza per condurre lo studio e redigere il piano.

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.