Nell'
articolo precedente, si sono elencate alcune procedure da evitare per diminuire i rischi di errore durante l'amministrazione di un database. Una di queste riguarda lo
shrink della base di dati, che può provocare un notevole calo nelle prestazioni dell'applicazione.
L'operazione di
shrink può essere effettuata in SQL con il comando
DBCC SHRINKDATABASE, che consente di compattare i dati e i file di log di un database specifico, oppure con il comando
DBCC SHRINKFILE, che permette di ridurre la dimensione di un file di dati o di log riferiti al database correntemente preso in considerazione, oppure di svuotare un file trasferendo i dati verso un altro gruppo di file. In entrambi i casi, il server SQL sposta le pagine verso l'inizio del file liberando lo spazio in fondo a quest'ultimo per prepararlo al compattamento.
Molti amministratori di database hanno l'abitudine di eseguire periodicamente questa operazione pensando di riuscire, così, a ridurre la dimensione della propria base di dati e a aumentare la velocità dell'applicazione; purtroppo, come è anche possibile vedere andando ad analizzare l'output di uno
script SQL che esegue lo
shrink, il risultato che si ottiene è un file con un
indice di frammentazione altissimo. Non solo: la compattazione genera una serie di operazioni di I/O, che occupano buona parte della CPU installata sulla macchina e danno luogo a file di log di dimensioni elevate. Quest'ultimo aspetto è dovuto al fatto che durante lo
shrink, il processo aggiunge al file di log numerose righe di informazioni per ogni singola operazione o record spostato.
La scelta di eseguire ripetutamente lo
shrinking del database porta ad accrescere sempre più lo spazio su disco occupato dai log virtuali, che hanno una forte ripercussione sul tempo di start-up dell'applicazione come anche un allungamento dei tempi per il restore e l'esecuzione delle normali istruzioni sulla base di dati.
Per un approfondimento maggiore sul tema della frammentazione dei dati è possibile leggere l'
articolo di
Tibor Karaszi, in cui si affrontano nel dettaglio tutte le conseguenze derivanti da un utilizzo troppo assiduo dell'operazione di
shrink.