Dlaczego musimy odbudowywać i reorganizować indeksy w SQL Server

28

Po przeszukaniu Internetu nie mogłem znaleźć przyczyny

  1. Dlaczego musimy odbudowywać i reorganizować indeksy w SQL Server?

  2. co dzieje się wewnętrznie, gdy odbudowujemy i reorganizujemy?

Artykuł na stronie mówi:

Indeks powinien zostać odbudowany, gdy fragmentacja indeksu jest większa niż 40%. Indeks powinien zostać zreorganizowany, gdy fragmentacja indeksu wynosi między 10% a 40%. Proces przebudowy indeksu zużywa więcej procesora i blokuje zasoby bazy danych. Wersja rozwojowa SQL Server i wersja Enterprise ma opcję ONLINE, którą można włączyć po przebudowaniu indeksu. Opcja ONLINE sprawi, że indeks będzie dostępny podczas przebudowy.

Nie mogłem tego zrozumieć, choć mówi, że WHENaby to zrobić, ale chciałbym wiedzieć, WHYczy musimy odbudować i zreorganizować indeksy?

Mourya
źródło
1
To jest pytanie o dlaczego, a oto pytanie o to, kiedy .
Nick Chammas

Odpowiedzi:

29

Podczas wykonywania operacji wstawiania aktualizacji i usuwania indeksy zostaną pofragmentowane zarówno wewnętrznie, jak i zewnętrznie.

Fragmentacja wewnętrzna polega na tym, że masz wysoki procent wolnego miejsca na stronach indeksu, co oznacza, że ​​SQL Server musi czytać więcej stron podczas skanowania indeksu.

Fragmentacja zewnętrzna występuje wtedy, gdy strony indeksu nie są już uporządkowane, więc SQL Server musi wykonać więcej pracy, szczególnie w zakresie operacji wejścia / wyjścia, aby odczytać indeks.

Jeśli indeksy staną się zbyt rozdrobnione, w najlepszym razie zapytania będą mniej wydajne, ale w najgorszym przypadku SQL Server po prostu przestanie używać indeksów razem, co oznacza, że ​​praktycznie wszystkie zapytania będą musiały wykonać skanowanie tabeli lub skanowanie indeksu klastrowego. To bardzo zaszkodzi twojej wydajności!

Podczas reorganizacji indeksu program SQL Server korzysta z istniejących stron indeksu i po prostu przetasowuje dane w tym wieku. Zmniejszy to fragmentację wewnętrzną, a także może usunąć niewielką fragmentację zewnętrzną. Jest to operacja lżejsza niż przebudowa i jest zawsze dostępna online.

Podczas odbudowywania indeksu SQL Server faktycznie korzysta z danych indeksu i korzysta z nowego zestawu stron indeksu. To oczywiście złagodzi zarówno fragmentację wewnętrzną, jak i zewnętrzną, ale jest to operacja o większej wadze i domyślnie powoduje, że indeks przechodzi w tryb offline, chociaż może być wykonywany jako operacja online, w zależności od wersji i ustawień SQL Server.

Jednak nie należy oczekiwać fragmentacji 0 po przebudowie. O ile nie użyjesz podpowiedzi do zapytania MAXDOP, SQL Server zrównolegla operację przebudowy i im więcej procesorów będzie zaangażowanych, tym bardziej prawdopodobne jest rozdrobnienie, ponieważ każdy procesor lub rdzeń odbuduje swoją sekcję lub fragment indeksu indywidualnie, bez względu na wzajemnie. Jest to kompromis między najlepszymi poziomami fragmentacji a czasem potrzebnym na odbudowanie indeksu. Aby uzyskać fragmentację prawie 0, użyj MAXDOP 1 i posortuj wyniki w TempDB.

Pete Carter
źródło
Świetny...! Po prostu wyjaśnia ...!
DineshDB
0

W celu usunięcia fragmentacji, która powoduje problemy takie jak spowolnienie na poziomie bazy danych / długotrwałe zapytania itp.

Aby uzyskać szczegółowe informacje na temat fragmentacji i sposobu przebudowywania i reorganizacji indeksów (lub reorganizacji stron indeksów), skorzystaj z poniższego linku: https://www.idera.com/productssolutions/sqlserver/sqldefragmanager/what-is-fragmentation

Shiwangini Shishulkar
źródło
1
Informacje te stały się (częściowo) nieaktualne po obejrzeniu Dlaczego fragmentacja indeksu nie ma znaczenia
John aka hot2use