SQL Tips & Tricks, rebuild degli indici

Il rebuild degli indici in SQL Server è una fondamentale operazione per mantenere costanti (o migliorare) le performance di lettura e scrittura del database. Durante il normale utilizzo (inserimenti, modifiche e cancellazioni) gli indici del database vengono continuamente aggiornati e dopo alcuni giorni si “frammentano”, proprio come accade a file sul disco fisso. Questa “frammentazione” impedisce una lettura continua dell’indice, richiede maggiore I/O e quindi degrada le performance.

Di particolare importanza è l’eventuale indice cluster delle tabelle. SQL Server infatti archivia tutte le colonne del record nelle pagine dell’indice cluster, indice che ha la particolarità di essere ordinato. Una chiave cluster complessa oppure continui inserimenti “nel mezzo” anziché al fondo della tabella, frammentano velocemente l’indice compromettendo le prestazioni.

È quindi importante pianificare con regolarità l’operazione di rebuild. Si può usare ad esempio il SQL Agent in un orario in cui il database è scarico del lavoro degli utenti, magari la notte oppure di Domenica.

L’operazione di rebuild può essere lenta, blocca la tabella interessata e nel caso di indici cluster, richiede spazio disco pari alla dimensione dell’intera tabella. Questo spazio è consumato nel file di log delle transazioni. Attenzione quindi ai database molto grandi: su Dynamics NAV, ad esempio, se lanciamo il rebuild di una Value Entry da 100GB, il file di log crescerà almeno di altri 100GB!

Il rebuild di tutte le tabelle può essere effettuato con questo script:

Si noti come nella selezione degli oggetti siano incluse anche le viste, per ottimizzare le chiavi cluster di eventuali viste indicizzate.

Se abbiamo un sistema di log shipping, per alimentare un backup oppure un server di standby, le dimensioni del file di log, al termine del rebuild, possono rappresentare un problema.

Ecco perché abbiamo realizzato uno script migliorato che effettua un rebuild rotativo con un limite di GB per ogni esecuzione. In questo modo si può “diluire” l’impatto del rebuild nei giorni della settimana, evitando di mettere in crisi la linea sulla quale avviene il log shipping.

 

Chiama subito per maggiori informazioni +39 0113473770
oppure lasciaci i tuoi recapiti e sarai contattato il prima possibile:



 

Lascia un commento