none
DataWarehouse Consiglio su indici frammentati dopo delete e insert grandi quantità di dati RRS feed

  • Domanda

  • Ciao a tutti,

    chiedo un consiglio relativamente a questo tema. Abbiamo un DB Azure SQL che ogni notte recupera,  previa cancellazione, migliaia di dati da diverse fonti dati e subito dopo vengono eseguite una serie di Stored Procedure di ETL per elaborare e presentare dati agli utenti attraverso programmi di reportistica. Il problema è che malgrado venga eseguita ogni giorno una deframmentazione e aggiornamento delle statistiche, il giorno successivo gli indici delle varie tabelle sono nuovamente deframmentati sopra il 50% mettendo a rischio la performance delle procedure ETL (che significa nel nostro caso un aumento del tempo di esecuzione). E' possibile in qualche modo evitare o ridurre questo problema ?

    Grazie

    Michele


    Michele

    giovedì 17 marzo 2022 08:43

Risposte

  • Ciao,

    il tema frammentazione è ampio ma parlando del solo caso indici non clustered il modo più immediato per prevenirlo è agire sul fillfactor: quando crei l'indice e anche quando ne fai la rebuild imposta un valore prudenziale, p.es 60, e poi osserva come procede la frammentazione.

    Inevitabilmente dopo una serie di cicli DELETE/INSERT si ripresenterà la frammentazione e quindi dovrai ridurla con reorg quando bassa e rebuild quando alta; come ben illustrato in documentazione il prezzo del fillfactor basso è una minore densità di records per pagina e quindi un maggiore I/O. Questo costo aggiuntivo è però meno impattante del costo di I/O dovuto alla frammentazione.

    Un ridisegno del processo ETL e/o del data model potrebbe portare ad evitare i cicli DELETE/INSERT e a prevenire la frammentazione.

    Giorgio

    domenica 20 marzo 2022 06:23