Peppacci

Il blog di Giuseppe Traficante
posts - 31, comments - 15, trackbacks - 1

Defrag DB exchange 2003

Uno dei maggiori problemi che si hanno lavorando sui DB di Microsoft Exchange Server è l'allocazione di spazio sul disco. I DB di exchange crescono all'aumentare del volume delle singole Mailbox e fin qui niente di strano, il problema lo abbiamo se facciamo un pò di pulizia sulle cassette postali magari con qualche policy di Exchange o addirittura concellando quelle Mailbox che non hanno più ragione di esistere, noteremo che il DB non diminuusce di dimensioni come ci aspettavamo, anzi rimane esattamente lo stesso. Questo accade perché il database di Exchange è costituito da pagine che aumentano all'aumentare della richiesta di spazio ma non diminuiscono se vengono cancellati i dati sul db, vengono semplicemente liberate che teoricamente vengono rese disponibili al database per archiviarci i nuovi dati.

Per eliminare definitivamente queste pagine bisogna eseguire un defrag off-line del database tramite l'utility ESEUTIL

http://technet.microsoft.com/en-gb/library/aa998249.aspx

Nello specifico "eseutil /d db.edb", questa sintassi implica che nella posizione dove lanciamo l'eseutil ci sia anche il file db.stm, contrariamente la sintassi diventa la seguente "eseutil /d db.edb /s x:\db.stm". Ricordate che questa operazione si fa a db smontato, quindi mailbox non disponibili.

Quando si esegue un defrag bisogna ricordarsi che l'utility eseutil genera dei file temporanei sia per il file db.edb che per il file db.stm, quindi per questi file bisogna avere spazio libero sul disco per tale operazione. La quantità di spazio libero a detta di Microsoft deve essere del 110% della somma dei file da deframmentare ma non è proprio così, lo spazio libero che ci serve deve essere la somma dei nuovi DB che si andranno a ricreare più un 10% per stare tranquilli.

ma quanto sarà questo spazio?

Per capire di quanto il db verrà ridimensionato quindi di quanto spazio libero su disco ho bisogno devo usare sempre l'utility ESEUTIL  con la seguente sintassi "eseutil /ms db.edb /s x:\db.stm". Questa operazione va fatta sempre a db smontato ed impiega un pò di tempo dovuto da diversi fattori: dimensione e stato dei db, performance del computer, comunque risulta essere inferiore al tempo che impiegherebbe a fare il defrag completo.

L'output di questa procedura sembra abbastanza complesso ma a noi interessa la parte iniziale e quella finale.

Sulla parte iniziale dobbiamo andare ad osservare questi dati: 

Il volere evidenziato è relativo al database di streaming db.stm ed indica il numero di pagine libere per quel db. Nello spececifico sono 72102, questo valore se moltiblicato per 4000 che è la dimensione in byte di ogni singola pagina ci da come risultato 288 mb. circa di pagine libere. Il db.stm in questione è un file di circa 16,9 gb che se gli sottraiamo 288 mb. di pagine libere avremo un db deframmentato di 16,6 gb circa, di conseguenza questo sarà anche la dimensione massima del file temporaneo in fase di deframmentazione per il db.stm.

Questa è invece la parte finale dell'output:

 

In questo caso abbiamo il numero delle pagine libere per il db.edb pari a 575377 che moltiplicate per 4000 ci da un totale di 2,3 gb. circa di pagine libere che sottratti ai 14,8 gb. del db.edb ci darà un db deframmentato di 12,5 gb.

Dopo il risultato dell'output dato da "eseutil /ms" siamo in grado di dire quanto guadagneremmo ad eseguire un defrag off-line dei db e di quanto spazio libero su disco ho bisogno per eseguire tale operazione. Se sul disco dove sono presenti i db da deframmentare non ho spazio ha sufficienza per allocare i db temporanei del defrag posso usare le opzioni di eseutil per indirizzare i db temporanei su altri volumi, di seguito la sintassi completa:

"eseutil /d x:\db.edb /s y:\db.stm /t v:\temp.edb /f z:\temp.stm"

 

Prima di eseguire un defrag off-line di un db vanno fatte delle riflessioni, considerazioni. E' nella natura di un db di exchange allocare e liberare delle pagine, quindi fin quando ho delle pagine libere le dimensioni del db non cambieranno, naturalmente un valore spropositato delle stesse potrebbe giustificare un defrag off-line. I tempi di esecuzione del defrag non sono rapidissimi, anzi, mediamente si deframmentano circa 10 gb. ora per un db, e se i temp db li abbiamo allocati su ulteriori volumi o unità di rete va considerato anche il tempo che impiegano questi file a fare il move sulla posizione corretta, di conseguenza per un db di 100 gb. potrebbero volerci 10 ore tempo, tempo da considerare per il disservizio erogato.

 

Come ultimo consiglio, dopo aver effettuato il defrag del vostro db, eseguite subito un backup in quanto avendo ricostruito anche gli indici del db un eventuale backup incrementale che avevate memorizzato non è più utile per un ripristino dati.

 

Saluti.     

Print | posted on Sunday, April 26, 2009 4:35 AM | Filed Under [ Exchange Server ]

Feedback

Gravatar

# re: Defrag DB exchange 2003

Ottima e utile guida...
Grazie mille...
Daniel
5/16/2009 11:59 PM | Daniel

Post Comment

Title  
Name  
Email
Url
Comment   
Please add 6 and 2 and type the answer here:

Powered by:
Powered By Subtext Powered By ASP.NET