Jak mogę określić, kiedy należy zdefragmentować moją bazę danych SQLServer?

9

Jaka jest najlepsza praktyka pomiaru fragmentacji / wycofywania bazy danych SQLServer i określania, kiedy należy defragmentować tabelę bazy danych SQLServer?

Najbardziej interesuje mnie nauczenie się, jakie są przydatne wskaźniki i jaki poziom obniżenia wydajności powinien uruchomić defragmentację.

Jeff Leonard
źródło

Odpowiedzi:

22

Jestem pewien, że będzie kilka interesujących odpowiedzi na to pytanie, ponieważ istnieje wiele nieporozumień dotyczących tego, na jakie wskaźniki należy spojrzeć. Napisałem DBCC INDEXDEFRAG, SHOWCONTIG i zaprojektowałem ich zamienniki na rok 2005, a także napisałem treść Books Online, więc dam ci mój pogląd i wyjaśnię liczby w Books Online i kreatorze planu konserwacji na rok 2005, który wybrałem.

Dwie najlepsze miary do analizy fragmentacji indeksu to: 1) średnia fragmentacja (2005) w procentach / (2000) fragmentacja logicznego skanowania 2) (2005) średnia gęstość stron / (2000) średnia liczba bajtów wolnych na stronę

Dotyczy to zarówno indeksów klastrowych, jak i nieklastrowanych.

1 mierzy stopień logicznej fragmentacji. Dzieje się tak, gdy logiczna kolejność stron na poziomie liścia indeksu nie jest zgodna z kolejnością fizyczną. Uniemożliwia to silnikowi pamięci masowej skuteczną readahead podczas skanowania zasięgu. Więc # 1 wpływa na wydajność skanowania zasięgu, a nie na wydajność wyszukiwania pojedynczego.

2 mierzy ilość zmarnowanego miejsca na każdej stronie na poziomie liścia indeksu. Zmarnowane miejsce oznacza, że ​​używasz większej liczby stron do przechowywania rekordów, co oznacza więcej miejsca na dysku do przechowywania indeksu, więcej operacji we / wy do odczytu indeksu i więcej pamięci do przechowywania stron w pamięci w puli buforów.

Progi? Moja ogólna zasada jest fragmentacja mniejsza niż 10%, nie rób nic. 10-30%, zrób ALTER INDEX ... REORGANIZE (2005) / DBCC INDEXDEFRAG (2000). Ponad 30% zrób ALTER INDEX ... REBUILD (2005) / DBCC DBREINDEX (2000). Są to pełne uogólnienia, a progi dla Ciebie będą się różnić.

Aby znaleźć progi, wykonaj śledzenie wydajności obciążenia względem poziomów fragmentacji i zdecyduj, kiedy spadek wydajności jest zbyt duży. W tym momencie będziesz musiał zająć się fragmentacją. Istnieje równowaga między życiem z fragmentacją a podjęciem trafienia zasobów w jej usunięcie.

Nie dotknąłem tutaj kompromisów między dwiema metodami usuwania fragmentacji, takimi jak FILLFACTOR / PADINDEX, aby spróbować złagodzić fragmentację i mniej defragmentować, zmiany schematów / schematów dostępu w celu złagodzenia fragmentacji lub różne rodzaje planów konserwacji .

Aha, przy okazji, zawsze nie zawracam sobie głowy fragmentacją indeksów zawierających mniej niż 1000 stron. Wynika to z faktu, że indeks jest prawdopodobnie głównie rezydentem pamięci (i ponieważ ludzie pytali o numer, a ja musiałem go wymyślić).

Możesz przeczytać więcej na ten temat w moim artykule TechNet Magazine na temat konserwacji bazy danych pod adresem http://technet.microsoft.com/en-us/magazine/cc671165.aspx , w oficjalnym dokumencie na temat defragmentacji indeksu z 2000 r., Który pomogłem napisać na http://technet.microsoft.com/en-us/library/cc966523.aspx oraz na moim blogu w kategorii Fragmentacja pod adresem http://www.sqlskills.com/BLOGS/PAUL/category/Fragmentation.aspx .

Myślę, że trochę przesadziłem, ale to jeden z moich skrótów. Mam nadzieję że to pomoże :-)

Paul Randal
źródło