tempdb i tworzenie indeksu

Podczas tworzenia lub odbudować indeks przez ustawienie opcji SORT_IN_TEMPDB ON można kierować Aparat baz danych programu SQL Server do używania tempdb do przechowywania wyniki pośrednich sortowania, które służą do tworzenia indeksu.Chociaż opcja ta zwiększa ilość miejsca na dysku tymczasowym, który jest używany do tworzenia indeksu, opcja może zmniejszyć czas wymagany do tworzenia lub odbudować indeks po tempdb na zestaw dysków innym niż baza danych użytkownika.Więcej informacji o tempdb, zobacz bazy danych tempdb.

Fazy budowania indeksu

Jako Aparat baz danych kompilacje na indeks wykonuje następujących faz:

  • Aparat baz danych Najpierw skanuje strony danych tabela bazowa do pobierania wartości klucz i tworzy wiersz liść indeksu dla każdego wiersza danych.Gdy została wypełniona bufory wewnętrzne sortowania z liść pozycje indeksu, zapisy są sortowane i zapisywane na dysku jako pośredniego sortowania, uruchom. Aparat baz danych Do czasu buforów sortowania są ponownie wznawia działanie skanowanie strona danych.Skanowanie wielu stron danych następuje sortowanie i uruchom sortowania pisania tego wzorca nadal, dopóki nie zostaną przetworzone wszystkie wiersze tabela bazowa.

    W indeks klastrowany, są wiersze typu liść indeksu wierszy danych w tabela; Dlatego uruchamia sortowania pośrednich zawierają wszystkie wiersze danych.Indeks nieklastrowany wierszy typu liść może zawierać kolumnami, ale są zwykle mniejsze niż indeks klastrowany.Jeśli kluczy indeksu są duże lub istnieje kilka kolumnami indeksu, uruchom nieklastrowany sortowania mogą być duże.Aby uzyskać więcej informacji o tym kolumnami, zobacz Tworzenie indeksów z uwzględnionych kolumn.

  • Aparat baz danych Scala sortowane uruchamia indeks liść wierszy do pojedynczego, sortowane strumienia.Sortowanie składnik korespondencji seryjnej Aparat baz danych rozpoczyna się od pierwszej strona każdej sortowania uruchomić, znajduje się najniższy klucz na stronach i przebiegów które liść wiersza do indeksu utworzyć składnika.Następny klucz najniższa jest przetwarzany, a następnie dalej itd.Podczas ostatniego liść indeks wiersza jest wyodrębniana z strona sortowania, uruchamianie, proces jest przenoszony do następnej strony z tym sortowania Uruchom.Podczas przetwarzania strony sortowania Uruchom fragment fragment jest zwalniane.W każdej liść wiersz indeksu jest przekazywany do indeksu utworzyć składnika, znajduje się w liść strona indeksu w buforze.Każdy liść strona jest zapisywany jako jest wypełnione.Jak liść strony są zapisywane, Aparat baz danych również tworzy wyższych poziomów indeksu.Każdej strona indeksu górnego poziom są zapisywane podczas jego wypełniania.

Opcja SORT_IN_TEMPDB

Gdy jest SORT_IN_TEMPDB zestaw do OFF, domyślny, sortowanie, uruchamia są przechowywane w grupie plików docelowych.Podczas pierwszej fazy tworzenia indeksu przemienne Odczyty stron tabela bazowa i zapisy uruchomień sortowania przenoszenie głowice odczytu i zapisu dysku z jednego obszaru dysku.Dane strona zostaną zeskanowane głowic znajdują się w obszarze strona danych.Zostaną one przeniesione obszar wolnego miejsca podczas wypełnienia buforów sortowania i bieżące sortowanie Uruchom ma zapisywane na dysk i następnie przenieść z powrotem do obszaru strona danych jak skanowanie strona tabela jest wznawiany.Przemieszczanie głowicy odczytu i zapisu jest większa w drugim etapie.W tym czas proces sortowania jest zazwyczaj przemienne odczytów z każdego sortowania uruchomić obszaru.Uruchamia sortowania i nowych stron indeksowych są wbudowane obiekt docelowy grupa plików.Oznacza to, że w tym samym czas Aparat baz danych jest rozprzestrzenienia odczytów całej uruchamia sortowania ma okresowo przeskoczyć do zakresów indeksu zapisać nowe strony indeksu, jak są one wypełnione.

Jeśli ustawiono na opcję SORT_IN_TEMPDB i tempdb na oddzielny zestaw dysków z obiekt docelowy grupa plików, podczas pierwszej fazy Odczyty stron danych występują na innym dysku z zapisy do obszaru roboczego sortowania w tempdb.Oznacza to, że odczytów dysku kluczy danych zazwyczaj nadal więcej szeregowo dysku i zapisuje do tempdb dysku są także ogólnie szeregowe, jak zapisy do budowania ostatecznego indeksu.Nawet jeśli za pomocą bazy danych i uzyskiwania dostępu do dysku oddzielnych adresów innych użytkowników ogólnej struktury odczyty i zapisy są bardziej wydajne, podczas gdy nie określono niż SORT_IN_TEMPDB.

Opcja SORT_IN_TEMPDB może zwiększyć contiguity indeks zakresów, zwłaszcza, jeśli operacja tworzenia INDEKSU nie jest przetwarzana równolegle.Sortowanie pracy obszaru zakresy są zwalniane na nieco wyrywkowo w odniesieniu do ich lokalizacji w bazie danych.Jeśli obszary pracy sortowania są zawarte w obiekt docelowy grupa plików, jak zakresy pracy sortowania są zwalniane, mogą być nabyte przez żądania dotyczące zakresów do przechowywania struktury indeksu jest wbudowane.To losowe lokalizacje zakresów indeksu stopniu.Jeśli zakresy sortowania są przetrzymywane oddzielnie w tempdb, sekwencji, w którym są zwalniane nie wpływa na położenie indeksu zakresów.Ponadto podczas uruchamia sortowania pośrednie są przechowywane w tempdb zamiast obiekt docelowy grupa plików, dostępne jest więcej miejsca na obiekt docelowy grupa plików.Zwiększa szanse zakresów indeks będzie ciągła.

Opcja SORT_IN_TEMPDB dotyczy tylko bieżącej instrukcja.Nie rekordy metadane indeks był lub nie są sortowane w tempdb.Na przykład jeśli tworzysz indeks nieklastrowany za pomocą opcji SORT_IN_TEMPDB i w późniejszym czas utworzyć indeks klastrowany bez określenia opcji, Aparat baz danych nie jest używana opcja podczas jej odtwarza indeks nieklastrowany.

Ostrzeżenie

Operacja sortowania nie jest wymagana lub sortowania mogą być wykonywane w pamięci, opcja SORT_IN_TEMPDB jest ignorowana.

Wymagania dotyczące miejsca na dysku

Kiedy można zestaw na możliwość SORT_IN_TEMPDB musi mieć wystarczającej ilości wolnego miejsca w tempdb do przechowywania pośrednie sortowania uruchamia i wystarczającej ilości wolnego miejsca w grupie plików docelowych do przechowywania nowy indeks.Instrukcja CREATE INDEX nie powiedzie się, jeśli jest za mało wolnego miejsca i jakiegoś powodu baz danych nie autogrow nabyć więcej miejsca, takie jak nie miejsca na dysku lub autogrow zestaw wyłączone.

Jeśli jest SORT_IN_TEMPDB zestaw do, dostępnego wolnego miejsca w grupie plików docelowych musi wynosić w przybliżeniu rozmiar ostatecznym indeksie.W pierwszej fazie uruchamia sortowania są wbudowane i wymagają o tym samym ilość miejsca w ostatecznym indeksie.W drugiej fazie sortowania każdego uruchomienia fragment jest zwalniane po przetworzeniu.Oznacza to, że sortowanie Uruchom zakresów są zwalniane na o tej samej stawki, jaką zakresy są nabywane do przechowywania stron indeksowych końcowego; Dlatego ogólne wymagania dotyczące miejsca na znacznie nie przekracza rozmiar ostatecznym indeksie.Jeden boczne wpływu na to, że jeśli ilość wolnego miejsca jest bardzo zbliżone do rozmiaru ostatecznym indeksie Aparat baz danych Ogólnie ponowne użycie sortowania bardzo szybko uruchomić zakresów, po ich są zwalniane.Ponieważ sortowania Uruchom zakresy są zwalniane w sposób losowy nieco, zmniejsza to ciągłości zakresów indeksu w tym scenariuszu.Jeśli jest SORT_IN_TEMPDB zestaw do, ciągłości zakresów indeksu jest poprawiona, jeśli dostępne zakresy indeks może być przydzielona z ciągłym puli zamiast z zakresów sortowania świeżo deallocated uruchomić grupy plików docelowych jest dostateczna ilość wolnego miejsca.

Po utworzeniu indeks nieklastrowany muszą być dostępne jako wolne miejsce:

  • Jeśli jest SORT_IN_TEMPDB zestaw on, musi być wystarczająca ilość wolnego miejsca w tempdb Magazyn uruchamia sortowania i wystarczająca ilość wolnego miejsca w grupa plików docelowych do przechowywania struktury ostatecznym indeksie.Uruchamia sortowania zawierać wiersze typu liść indeksu.

  • Jeśli jest SORT_IN_TEMPDB zestaw do, wolne miejsce w grupie plików docelowych musi być wystarczająco duża, aby przechowywać struktury ostatecznym indeksie.Ciągłość indeksu rozszerza maja poprawiona, jeśli dostępne jest więcej wolnego miejsca.

Podczas tworzenia indeks klastrowany w tabela, która nie ma zbudowania indeksów nie klastrowanych, muszą być dostępne jako wolne miejsce:

  • Jeśli jest SORT_IN_TEMPDB zestaw on, musi być wystarczająca ilość wolnego miejsca w tempdb do przechowywania sortowania jest uruchamiana.Obejmują one wiersze danych tabela.Musi być wystarczająca ilość wolnego miejsca w obiekt docelowy grupa plików do przechowywania struktury ostatecznym indeksie.Zawiera wiersze danych tabela i indeks B-drzewo.Należy dopasować oszacowania dla czynniki takie jak duży rozmiar klucz lub współczynnik wypełnienia o niskiej wartości.

  • Jeśli jest SORT_IN_TEMPDB zestaw do, wolne miejsce w grupie plików docelowych musi być wystarczająco duża, aby przechowywać końcowego tabela.Obejmuje to struktury indeksu.Mogą być ulepszane ciągłości zakresów tabela i indeks, jeśli dostępne jest więcej wolnego miejsca.

Podczas tworzenia indeks klastrowany dla tabela, która ma zbudowania indeksów nie klastrowanych, musisz mieć dostępny jako wolne miejsce:

  • Jeśli jest SORT_IN_TEMPDB zestaw on, musi być wystarczająca ilość wolnego miejsca w tempdb do przechowywania kolekcja uruchamia sortowania indeksu największy, zazwyczaj indeks klastrowany i dostateczna ilość wolnego miejsca w grupie plików docelowych do przechowywania końcowego struktur wszystkie indeksy.Zawiera indeks klastrowany, zawierający wiersze danych tabela.

  • Jeśli jest SORT_IN_TEMPDB zestaw do, wolne miejsce w grupie plików docelowych musi być wystarczająco duża, aby przechowywać końcowego tabela.Obejmuje to struktur wszystkie indeksy.Mogą być ulepszane ciągłości zakresów tabela i indeks, jeśli dostępne jest więcej wolnego miejsca.