tempdb and Index Creation

Po utworzeniu lub ponownie utwórz indeks przez ustawienie opcji SORT_IN_TEMPDB ON można kierować SQL Server Database Engine Aby użyć tempdb do przechowywania wyniki pośrednich sortowania, które są używane do tworzenia indeksu.Mimo że ta opcja powoduje zwiększenie ilości miejsca na dysku tymczasowym, który służy do tworzenia indeksu, opcja może zmniejszyć czas wymagany do tworzenia lub ponownie utwórz indeks po tempdb znajduje się na zestaw dysków innym niż baza danych użytkownika.Aby uzyskać więcej informacji na temat tempdb, see tempdb Database.

Fazy indeks budynku

Jak Database Engine kompilacje indeksu, jego przechodzi przez obejmuje następujące fazy:

  • The Database Engine first scans the data pages of the tabela bazowa to retrieve klucz values and builds an index liść row for each data row. Podczas sortowania wewnętrzne bufory wypełnienie z pozycji indeksu typu liść, wpisy są sortowane i zapisywane na dysku jako pośrednich sortowania uruchomienia.The Database Engine then resumes the data strona scan until the sort buffers are again filled. Skanowanie wielu stron danych następuje pisania przebiegu sortowania i sortowanie tego wzorca jest kontynuowane, dopóki nie zostaną przetworzone wszystkie wiersze z tabela bazowa.

    W indeksie klastrowanym wierszy typu liść indeksu są wiersze danych tabela, dlatego działa sortowanie pośrednich zawierać wszystkich wierszy danych.Indeks nieklastrowany wierszy typu liść mogą zawierać nonkey kolumn, ale są zazwyczaj mniejsze niż indeks klastrowany.Jeśli indeks kluczy są duże lub kilka kolumn nonkey uwzględnione w indeksie, wykonywania nieklastrowany sortowania mogą być duże.Aby uzyskać więcej informacji o tym nonkey kolumn zobacz Tworzenie indeksów za pomocą zestawu kolumn.

  • The Database Engine merges the sorted runs of index liść rows into a single, sorted stream. Sortowanie składnik korespondencji seryjnej Database Engine rozpoczyna się od pierwszej strona każdej sortowania, znajduje klucz najniższego na wszystkich stronach i przejścia, które liść wiersza do indeksu utworzyć składnika. Przetwarzanie następnego klucz najniższy, a następnie następny i tak dalej.Po ostatnim wierszu indeksu typu liść jest wyodrębniana z sortowania uruchomić strona, proces przenoszony do następnej strona z tym sortowania uruchomienia.Po przetworzeniu wszystkich stron w sortowania uruchomić fragment, fragment jest zwalniane.Każdy wiersz indeksu typu liść jest przekazywany do indeksu tworzenia składnika, znajduje się strona indeksu liścia w buforze.Każda Strona typu liść jest zapisywany co to jest wypełniane.Jak liść strony są zapisywane, Database Engine tworzy również wyższych poziomów wskaźnika. Każdej strona górnego poziom indeksu są zapisywane podczas jego wypełniania.

Opcja SORT_IN_TEMPDB

SORT_IN_TEMPDB ma wartość OFF, domyślnie uruchamia sortowania są przechowywane w grupa plików docelowych.Podczas pierwszej fazy tworzenia indeksu przemienne Odczyty stron tabela bazowa i zapisuje uruchamia sortowania przenoszenia głowice odczytu/zapisu dysku jednego obszaru dysku do innego.Głowic znajdują się w obszarze danych strona zostaną zeskanowane strona danych.Podczas wypełniania buforów sortowania i bieżące sortowanie uruchamiania ma być zapisywane na dysku, a następnie przenieść z powrotem do obszaru strona danych, skanowanie strona tabela jest wznawiany są one przenoszone do obszaru wolnego miejsca.W drugim etapie przesunięcia głowicy odczytu/zapisu, jest większa.Na które czas proces sortowania jest zazwyczaj przemienny odczyty każdego sortowania uruchomić obszaru.Wykonuje sortowanie i nowe strony indeksu są wbudowane obiekt docelowy grupa plików.Oznacza to, że w tym samym czas Database Engine jest rozmieszczanie odczytów przez uruchomienie sortowania jest okresowo przechodzić do zakresów indeksu zapisać nowe strony indeksu, są one wypełnione.

Jeśli opcja SORT_IN_TEMPDB jest ustawiona na ON i tempdb znajduje się na oddzielny zestaw dysków z obiekt docelowy grupa plików, podczas pierwszej fazy odczytów ze stron danych odbywa się na innym dysku zapisywanie do obszaru roboczego sortowania w tempdb.Oznacza to, że odczyty dysku kluczy danych zazwyczaj nadal więcej pojedynczo na dysku i zapisze dane do tempdb dysku są także zazwyczaj szeregowe, tak jak zapis do budowania ostatecznego indeksu.Nawet wtedy, gdy za pomocą bazy danych i uzyskiwania dostępu do dysku oddzielnych adresów innych użytkowników ogólnej strukturze odczyty i zapisy są bardziej efektywne, gdy określono SORT_IN_TEMPDB niż w przypadku gdy nie jest.

Opcja SORT_IN_TEMPDB może zwiększyć contiguity z zakresów indeksu, zwłaszcza wtedy, gdy operacja CREATE INDEX nie jest przetwarzane równolegle.Sortowanie działa obszar zakresy są zwalniane na podstawie nieco losowa 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ą one być nabytych przez żądania dotyczące zakresów do przechowywania struktury indeksu, ponieważ jest ona wbudowana.Może to losowe lokalizacje zakresy indeksu stopniu.Jeśli zakresy sortowania są przechowywane osobno w tempdb, kolejność, w którym są zwalniane nie ma wpływu na lokalizację zakresy indeksu.Ponadto, kiedy działa pośrednich sortowania są przechowywane w tempdb zamiast obiekt docelowy grupa plików, jest dostępny w większej ilości miejsca na obiekt docelowy grupa plików.Zwiększa to szansę na przeprowadzenie zakresy indeksu będzie ciągłe.

Opcja SORT_IN_TEMPDB dotyczy tylko bieżącej instrukcja.Nie rekordów metadane indeksu został i nie była sortowana w tempdb.Na przykład, jeśli tworzony jest indeks nieklastrowany za pomocą opcji SORT_IN_TEMPDB i w późniejszym czasie utworzyć indeks klastrowany bez określenia opcji, Database Engine opcję nie jest używany, gdy odtwarza go indeks nieklastrowany.

Uwaga

Jeśli operacja sortowania nie jest wymagany lub sortowania mogą być wykonywane w pamięci, opcja SORT_IN_TEMPDB jest ignorowana.

Wymagania dotyczące wolnego miejsca dysku

Gdy użytkownik zestaw SORT_IN_TEMPDB opcję włączone, musisz mieć wystarczająco wolnego miejsca na dysku w tempdb do przechowywania pośrednich sortowania jest uruchamiana, a za mało miejsca na dysku w grupa plików, w obiekt obiekt docelowy do przechowywania nowego indeksu.Instrukcja CREATE INDEX kończy się niepowodzeniem, jeśli jest za mało wolnego miejsca i ma powodu, niektóre bazy danych nie autogrow, aby uzyskać więcej miejsca, takie jak nie miejsca na dysku lub jest autogrow zestaw wyłączany.

Jeśli jest SORT_IN_TEMPDB zestaw do OFF, dostępne wolne miejsce na dysku w grupa plików, w obiekt obiekt docelowy musi wynosić w przybliżeniu rozmiar końcowy indeksu.Podczas pierwszej fazy uruchamia sortowania są wbudowane i wymagają o tej samej ilości miejsca na jako indeks końcowy.W drugiej fazie każdy sortowania uruchomić fragment jest zwalniane po został przetworzony.Oznacza to, że zakresy sortowania uruchamiane są zwalniane na informacje o tej samej szybkości, jaką zakresy są nabywane do przechowywania stron Indeks końcowy; dlatego ogólną wymagania dotyczące miejsca na dysku nie przekraczają znacznie rozmiar końcowy indeksu.Efektem ubocznym jednego z tym jest, jeśli ilość wolnego miejsca jest bardzo zbliżony do rozmiaru Indeks końcowy Database Engine zwykle będzie ponownie użyć do sortowania, bardzo szybko działa zakresy te są zwalniane. Ponieważ sortowanie uruchomić zakresy są zwalniane w sposób losowy nieco, zmniejsza to ciągłości zakresy indeksu w tej sytuacji.Jeśli jest SORT_IN_TEMPDB zestaw do OFF, ciągłości zakresy indeksu zwiększona Jeśli wystarczająca ilość wolnego miejsca jest dostępna w grupa plików docelowych, której zakresy indeks może być przydzielona z puli sąsiadujących zamiast z zakresów świeżo deallocated sortowania uruchomić.

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

  • Jeśli SORT_IN_TEMPDB jest ustawiony na włączone, musi być wystarczająca ilość wolnego miejsca w tempdb przechowywanie uruchamia sortowania i ilość wolnego miejsca w grupa plików, w obiekt obiekt docelowy do przechowywania struktury końcowe indeksu.Uruchamia sortowania zawiera wiersze typu liść indeksu.

  • Jeśli jest SORT_IN_TEMPDB zestaw do OFF, ilość wolnego miejsca w grupa plików, w obiekt obiekt docelowy musi być wystarczająco duży, aby przechowywać struktury końcowe indeksu.Ciągłość indeks rozszerza może zostać podniesiona, gdy dostępnych jest więcej wolnego miejsca.

Po utworzeniu indeks klastrowany dla tabela, która nie ma ponownego zbudowania indeksów nie klastrowanych, musi 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.grupa plików, w obiekt obiekt docelowy do przechowywania struktury Indeks końcowy musi być wystarczająca ilość wolnego miejsca.Dotyczy to wierszy danych w tabela i indeksem B-drzewo.Być może trzeba dopasować szacowania dla czynników, takich jak duży rozmiar klucz lub współczynnik wypełnienia o niskiej wartości.

  • Jeśli jest SORT_IN_TEMPDB zestaw do OFF, ilość wolnego miejsca w grupa plików, w obiekt obiekt docelowy musi być wystarczająco duży, aby przechowywać końcowe tabela.Dotyczy to także struktury indeksu.Ciągłość zakresy tabela i indeks może zostać podniesiona, gdy dostępnych jest więcej wolnego miejsca.

Podczas tworzenia indeks klastrowany w tabela ma ponownego zbudowania indeksów nie klastrowanych, musi być dostępne jako wolne miejsce:

  • Jeśli SORT_IN_TEMPDB jest ustawiony na włączone, musi być wystarczająca ilość wolnego miejsca w tempdb do przechowywania kolekcja sortowania jest uruchamiana największą indeksu, zazwyczaj indeks klastrowany i wystarczająca ilość wolnego miejsca w grupa plików, w obiekt obiekt docelowy do przechowywania struktury końcowe wszystkie indeksy.Dotyczy to również klastrowanego indeksu, który zawiera wiersze danych tabela.

  • Jeśli jest SORT_IN_TEMPDB zestaw do OFF, ilość wolnego miejsca w grupa plików, w obiekt obiekt docelowy musi być wystarczająco duży, aby przechowywać końcowe tabela.Dotyczy to także struktur wszystkie indeksy.Ciągłość zakresy tabela i indeks może zostać podniesiona, gdy dostępnych jest więcej wolnego miejsca.