Secondo Microsoft SQL Master, Brent Ozar, ha preso alcune terribili decisioni di ottimizzazione delle prestazioni del database nel corso della sua carriera. Fortunatamente per noi, possiamo trarre vantaggio dai suoi errori e non dobbiamo capire tutto da soli. Ha condiviso gratuitamente la sua sudata saggezza durante la serie di webcast dei giorni di formazione del database di Quest.
In una delle sue sessioni, abbiamo appreso "Perché la deframmentazione degli indici non aiuta". In effetti, potrebbe peggiorare le prestazioni del tuo database e Brent ci ha spiegato il motivo. Lungo la strada, ha sottolineato l'importanza di sapere cosa stai misurando quando si tratta di ottimizzare le prestazioni di SQL Server.
Frammentazione interna vs. esterna
Brent ci ha fornito un breve tutorial sul modo in cui SQL Server archivia i dati in "pagine" da 8 KB. In un indice nuovo o ricostruito, le pagine sono tutte piene e memorizzate in ordine. Ma, man mano che vengono aggiunti più dati, le pagine si dividono:non tutte le pagine sono piene e si verificano fuori ordine. Questa è la differenza fondamentale tra frammentazione interna ed esterna:
- Frammentazione esterna:si riferisce a pagine fuori servizio
- Frammentazione interna:si riferisce allo spazio vuoto su una pagina
Mettere a fuoco meno divisioni sulla pagina
Molti professionisti del database si concentrano sulle divisioni di pagina come misura della frammentazione del database, tuttavia, Brent ha spiegato che questo numero non ha significato perché le divisioni di pagina si verificano sia quando si aggiunge una nuova riga a una tabella vuota che quando si aggiunge una nuova pagina. Quindi, dopotutto non è utile.
Come la frammentazione esterna può peggiorare le cose
In questa sessione, Brent ha affermato che la frammentazione esterna non è una misura utile delle prestazioni del database poiché l'ordine delle pagine non ha un grande impatto sulla velocità delle attività di manutenzione, sull'esecuzione di query nella RAM o sulla lettura dei dati dal disco. Pertanto, i professionisti dei database che cercano di correggere la frammentazione esterna riorganizzando e ricostruendo gli indici stanno effettivamente peggiorando le prestazioni gonfiando i backup e consumando più tempo per la manutenzione.
Anche i professionisti del database che cercano di ridurre la frammentazione esterna lasciando spazio nelle pagine impostando un fattore di riempimento stanno causando un problema peggiore di quello che stanno cercando di risolvere. Ciò è in gran parte dovuto al fatto che non devi quasi mai inserire dati in un punto a metà dell'indice. Quindi, cercare di mantenere le pagine in ordine inserendo meno dati su ogni singola pagina sta effettivamente causando una frammentazione interna.
Monitoraggio del tempo di attesa
Cosa dovresti fare invece? Il Brent consiglia di impostare il fattore di riempimento sul valore predefinito del 100% (o almeno dell'80% o superiore) e quindi di ricostruire gli indici per comprimerli nuovamente. Quindi, concentrati sul monitoraggio del numero di ottimizzazione delle prestazioni corretto:il tempo di attesa. Uno dei modi migliori per visualizzare vari aspetti del tempo di attesa nelle istanze del database consiste nell'utilizzare uno strumento di monitoraggio delle prestazioni per individuare esattamente dove i processi si stanno impantanando.
Per ulteriori approfondimenti di Brent sulla frammentazione dell'indice, sulle statistiche sui tempi di attesa e su cosa dovresti fare per la manutenzione dell'indice, ascolta il webcast on-demand.
Puoi anche accedere a consigli più esperti sulle prestazioni del database tramite i Giorni di formazione sul database di Quest.