Come posso sapere quando è il momento di deframmentare il mio database SQL Server?


9

Qual è la migliore pratica per misurare la frammentazione del database SQLServer / rolloff delle prestazioni e determinare quando deframmentare una tabella del database SQLServer?

Sono molto interessato a sapere quali sono le metriche utili e quale livello di degrado delle prestazioni dovrebbe innescare la deframmentazione.

Risposte:


22

Sono sicuro che ci saranno alcune risposte interessanti a questo, in quanto c'è molto disaccordo su quali metriche guardare. Ho scritto DBCC INDEXDEFRAG, SHOWCONTIG e progettato le loro sostituzioni per il 2005, oltre a aver scritto il contenuto di Books Online, quindi ti darò la mia opinione e spiegherò i numeri in Books Online e la procedura guidata del piano di manutenzione per il 2005, che ho scelto.

Le due migliori metriche da esaminare per la frammentazione dell'indice sono: 1) (2005) frammentazione media in percentuale / (2000) frammentazione scansione logica 2) (2005) densità media di pagina / (2000) byte medi liberi per pagina

Questi si applicano ugualmente agli indici cluster e non cluster.

1 sta misurando quanta frammentazione logica esiste. Questo è quando l'ordine logico delle pagine a livello foglia di un indice non corrisponde all'ordine fisico. Ciò impedisce al motore di archiviazione di eseguire la lettura efficiente durante le scansioni della portata. Pertanto, il n. 1 influisce sulle prestazioni di scansione della gamma, non sulle prestazioni di ricerca singleton.

2 sta misurando la quantità di spazio sprecato presente in ciascuna pagina a livello di foglia di un indice. Lo spazio sprecato significa che stai utilizzando più pagine per archiviare i record, il che significa più spazio su disco per memorizzare l'indice, più IO per leggere l'indice e più memoria per conservare le pagine in memoria nel pool di buffer.

Soglie? La mia regola generale è una frammentazione inferiore al 10%, non fare nulla. 10-30%, esegui un ALTER INDEX ... REORGANIZE (2005) / DBCC INDEXDEFRAG (2000). Oltre il 30%, esegui un ALTER INDEX ... REBUILD (2005) / DBCC DBREINDEX (2000). Queste sono generalizzazioni complete e le soglie per te possono variare.

Per trovare le soglie, esegui un monitoraggio delle prestazioni del carico di lavoro rispetto ai livelli di frammentazione e decidi quando il degrado delle prestazioni è eccessivo. A quel punto dovrai affrontare la frammentazione. C'è un atto di equilibrio tra vivere con la frammentazione e prendere il colpo di risorse per rimuoverlo.

Non ho toccato qui i compromessi tra i due metodi per rimuovere la frammentazione, cose come FILLFACTOR / PADINDEX per cercare di mitigare la frammentazione e fare meno deframmentazione, modifiche ai modelli di schema / accesso per alleviare la frammentazione o diversi tipi di piani di manutenzione .

Oh, a proposito, consiglio sempre di non preoccuparsi della frammentazione negli indici con meno di 1000 pagine. Questo perché probabilmente l'indice è principalmente residente in memoria (e perché la gente ha chiesto un numero e ne ho dovuto inventarne uno).

Puoi leggere di più su questo nel mio articolo di TechNet Magazine sulla manutenzione del database all'indirizzo http://technet.microsoft.com/en-us/magazine/cc671165.aspx , nel white paper basato sul 2000 sulle migliori pratiche di deframmentazione dell'indice in cui ho contribuito a scrivere http://technet.microsoft.com/en-us/library/cc966523.aspx e sul mio blog nella categoria Frammentazione all'indirizzo http://www.sqlskills.com/BLOGS/PAUL/category/Fragmentation.aspx .

Penso che abbia risposto in modo eccessivo a questo, ma è uno dei miei tasti di scelta rapida. Spero che sia di aiuto :-)

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.