Il tempo richiesto per la ricostruzione dell'indice dipende dal livello di frammentazione?
La ricostruzione di un indice frammentato all'80% richiede circa 2 minuti se la ricostruzione dello stesso indice frammentato al 40% richiede 1 minuto?
Sto chiedendo il RUNTIME (ad esempio in secondi) che potrebbe essere necessario per eseguire l'azione richiesta, non su quale azione è richiesta in quale particolare situazione. Sono a conoscenza delle migliori pratiche di base quando è necessario eseguire il reorg dell'indice o gli aggiornamenti di ricostruzione / statistica.
Questa domanda NON pone su REORG e la differenza tra REORG e REBUILD.
Sullo sfondo: a causa della configurazione di diversi lavori di manutenzione degli indici (ogni notte, lavoro più pesante durante i fine settimana ...) Mi chiedevo se un lavoro di manutenzione dell'indice OFFLINE "leggero intenso" giornaliero dovrebbe essere eseguito meglio su indici frammentati medio-bassi per mantenere il tempi di inattività piccoli - o non importa nemmeno e la ricostruzione su un indice frammentato dell'80% potrebbe richiedere lo stesso tempo di inattività della stessa operazione sullo stesso indice frammentato al 40%.
Ho seguito i suggerimenti e ho cercato di scoprire cosa stesse succedendo. La mia configurazione sperimentale: su un server di prova che non fa NIENTE e non viene utilizzato da nessuno o altro, ho creato una tabella con un indice cluster su una colonna chiave primaria dell'identificatore univoco con alcune colonne aggiuntive e diversi tipi di dati [2 numeri, 9 datetime e 2 varchar (1000)] e righe semplicemente aggiunte. Per il test presentato ho aggiunto circa 305.000 righe.
Quindi ho usato un comando di aggiornamento e ho aggiornato casualmente un intervallo di filtri di righe su un valore intero e ho modificato una delle colonne VarChar con un valore stringa variabile per creare la frammentazione. Dopo di che ho controllato il avg_fragmentation_in_percent
livello attuale in sys.dm_db_index_physical_stats
. Ogni volta che ho creato una "nuova" frammentazione per il mio benchmark, ho aggiunto questo valore incluso il physical_page_count
valore alle mie registrazioni di cui è composto il diagramma seguente.
Poi ho corso: Alter index ... Rebuild with (online=on);
e l' ho afferrato CPU time
usando STATISTICS TIME ON
nelle mie registrazioni.
Le mie aspettative: mi aspettavo di vedere almeno l'indicazione di una sorta di curva lineare che mostra una dipendenza tra livello di frammentazione e tempo della CPU.
Questo non è il caso. Non sono sicuro che questa procedura sia davvero appropriata per un buon risultato. Forse il numero di righe / pagine è troppo basso?
Tuttavia, i risultati indicano che la risposta alla mia domanda originale sarebbe sicuramente NO . Sembra che il tempo richiesto per la CPU sia necessario a SQL Server per ricostruire l'indice non dipende né dal livello di frammentazione né dal conteggio delle pagine dell'indice sottostante.
Il primo grafico mostra il tempo della CPU richiesto per RICOSTRUIRE l'indice rispetto al livello di frammentazione precedente. Come puoi vedere, la linea media è una costante relativa e non è affatto osservabile una relazione tra frammentazione e tempo richiesto della cpu.
Per rispettare la possibile influenza del numero variabile di pagine nell'indice dopo i miei aggiornamenti che potrebbero richiedere più o meno tempo per la ricostruzione, ho calcolato LIVELLO DI FRAGMENTAZIONE * CONTEGGIO PAGINE e ho usato questo valore nel secondo grafico che mostra la relazione del tempo cpu richiesto vs. frammentazione e conteggio delle pagine.
Come puoi vedere, anche questo non indica che il tempo richiesto per la ricostruzione è influenzato dalla frammentazione anche se il numero di pagine varia.
Dopo aver fatto queste affermazioni suppongo che la mia procedura debba essere sbagliata perché il tempo della CPU richiesto per ricostruire un indice enorme e altamente frammentato potrebbe essere influenzato solo dal numero di righe - e non credo davvero in questa teoria.
Quindi, dato che voglio davvero e sicuramente scoprirlo ora, ulteriori commenti e raccomandazioni sono i benvenuti .