Prendo spunto da quanto ho trovato nei giorni scorsi da un nuovo cliente: lamentava poco spazio su disco ma non capiva come mai lo spazio disponibile era calato molto velocemente durante le notti precedenti.
Ho trovato immediatamente questa impostazione su un database con aveva una dimensione di 300GB: il parametro autogrowth impostato ad un incremento percentuale del 50%.
Ciò indicava quasi sicuramente che il database era cresciuto in pochi secondi da 200GB a 300GB.
Cos'è il parametro autogrowth
Il processo di autogrowth è utilizzato dal motore di SQL Server per espandere la dimensione di ogni file che compone un database quando tutto lo spazio disponibile per i dati è esaurito. Lo spazio aggiuntivo che sarà dedicato al file è governato da parametri che possiamo modificare a livello di ogni file.
Esistono tre diverse impostazioni che possono essere utilizzate per identificare la modalità di crescita del singolo file:
- tramite una dimensione specifica;
- una percentuale della dimensione corrente;
- non crescere affatto.
Inoltre, può essere impostato un parametro che ci consente di definire un limite oltre al quale arrestare il ridimensionamento del file, una dimensione massima per intenderci.
Quando si verifica un evento di Autogrowth, SQL Server richiede al sistema operativo nuovo spazio sullo storage. Il sistema operativo alloca questo nuovo spazio effettuando una serie di operazioni (vedi anche il processo di Instant File Initialization) in una posizione fisica che molto probabilmente non potrà essere contigua allo spazio già occupato dal database. Si intuisce che se effettuiamo frequenti operazioni di Autogrowth, rischiamo di aumentare la frammentazione fisica dei nostri file nonché di mantenere bloccate alcune operazioni effettuate dagli utenti in attesa che il processo abbia fine. Queste impostazioni vanno quindi cambiate sicuramente rispetto ai valori di default (1MB di incremento) impostandole in base alle dimensioni presunte che potrebbe raggiungere il database: personalmente utilizzo valori multipli di 64MB.
File growth percentuale
È possibile impostare l'incremento della dimensione in termini percentuali. Ad esempio, se l'incremento fosse del 10%, il database con una dimensione di 100GB aumenterebbe a 110GB. Nell'esempio da cui sono partito, con un incremento del 50%, il database da 200GB è aumentato a 300GB. Sconsiglio sempre di utilizzare questa impostazione proprio per evitare l'effetto di riempire lo storage in modo incontrollato e non lineare. Applicare un incremento del 10% su un database da 100MB è diverso da applicarlo su uno da 1TB.
L'importanza del monitoraggio dello spazio disco
Le proprietà di autogrowth sono molto importanti dal punto di vista della manutenzione del database. Statisticamente, sono poco gestite e spesso causa di malfunzionamenti importanti quali ad esempio lentezza durante la scrittura in un database e consumo anomalo di spazio disco. Per tenere controllato quest'ultimo evento, è sempre bene dotarsi di strumenti esterni che ci aiutano a monitorare lo spazio disco per riuscire ad anticipare situazioni di potenziale blocco del sistema.
di Cristiano Gasparotto, pubblicato il 26 novembre 2019