Przykład miejsca na dysku indeksu
Dotyczy:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Za każdym razem, gdy indeks zostanie utworzony, skompilowany lub porzucony, miejsce na dysku zarówno dla starych (źródłowych), jak i nowych (docelowych) struktur jest wymagane w odpowiednich plikach i grupach plików. Stara struktura nie zostanie zwolniona do momentu zatwierdzenia transakcji tworzenia indeksu. Może być również potrzebne dodatkowe tymczasowe miejsce na dysku na potrzeby operacji sortowania. Aby uzyskać więcej informacji, zobacz Wymagania dotyczące miejsca na dysku dla operacji DDL indeksu.
W tym przykładzie określono wymagania dotyczące miejsca na dysku w celu utworzenia indeksu klastrowanego.
Załóżmy, że przed utworzeniem indeksu klastrowanego spełnione są następujące warunki:
Istniejąca tabela (sterta) zawiera 1 milion wierszy. Każdy wiersz ma długość 200 bajtów.
Indeks nieklastrowany A zawiera 1 milion wierszy. Każdy wiersz ma długość 50 bajtów.
Indeks nieklastrowany B zawiera 1 milion wierszy. Każdy wiersz ma długość 80 bajtów.
Opcja tworzenia pamięci indeksu jest ustawiona na 2 MB.
Wartość współczynnika wypełnienia 80 jest używana dla wszystkich istniejących i nowych indeksów. Oznacza to, że strony są pełne o 80 procent.
Notatka
W wyniku utworzenia indeksu klastrowanego należy ponownie skompilować dwa indeksy nieklastrowane, aby zastąpić wskaźnik wiersza nowym klastrowanym kluczem indeksu.
Obliczenia miejsca na dysku dla operacji indeksowania w trybie offline
W poniższych krokach obliczane są zarówno tymczasowe miejsce na dysku, które ma być używane podczas operacji indeksowania, jak i stałe miejsce na dysku do przechowywania nowych indeksów. Wyświetlane obliczenia są przybliżone; wyniki są zaokrąglane w górę i uwzględniają tylko wielkość poziomu liści indeksu. Tylda (~) służy do wskazywania przybliżonych obliczeń.
Określ rozmiar struktur źródłowych.
Sterta: 1 milion * 200 bajtów ~ 200 MB
Indeks nieklastrowany A: 1 milion * 50 bajtów / 80% ~ 63 MB
Indeks nieklastrowany B: 1 milion * 80 bajtów / 80% ~ 100 MB
Całkowity rozmiar istniejących struktur: 363 MB
Określanie rozmiaru struktur indeksu docelowego. Załóżmy, że nowy klucz klastrowany z unikatorem ma długość 24 bajtów. Wskaźnik wiersza (8 bajtów długi) w obu indeksach nieklastrowanych zostanie zastąpiony przez ten klucz klastrowany.
Indeks klastrowany: 1 milion * 200 bajtów / 80% ~ 250 MB
Indeks nieklastrowany A: 1 milion * (50 - 8 + 24) bajtów / 80% ~ 83 MB
Indeks nieklastrowany B: 1 milion * (80 - 8 + 24) bajtów / 80% ~ 120 MB
Całkowity rozmiar nowych struktur: 453 MB
Łączna ilość miejsca na dysku wymagana do obsługi struktur źródłowych i docelowych na czas trwania operacji indeksu wynosi 816 MB (363 + 453). Miejsce przydzielone obecnie na struktury źródłowe zostanie zwolnione po zatwierdzeniu operacji indeksowania.
Określ dodatkowe tymczasowe miejsce na dysku na potrzeby sortowania.
Wymagania dotyczące miejsca są wyświetlane podczas sortowania w tempdb (z ustawieniem SORT_IN_TEMPDB włączonym) oraz podczas sortowania w miejscu docelowym (z ustawieniem SORT_IN_TEMPDB wyłączone).
Gdy SORT_IN_TEMPDB jest ustawiona na WARTOŚĆ WŁĄCZONE, bazy danych tempdb musi mieć wystarczającą ilość miejsca na dysku do przechowywania największego indeksu (1 mln * 200 bajtów ~ 200 MB). Współczynnik wypełnienia nie jest brany pod uwagę w operacji sortowania.
Dodatkowe miejsce na dysku (w lokalizacji tempdb) równe Skonfiguruj opcję konfiguracji serwera pamięci utwórz indeks wartość = 2 MB.
Całkowity rozmiar tymczasowego miejsca na dysku z SORT_IN_TEMPDB ustawionym na ON wynosi około 202 MB.
Gdy SORT_IN_TEMPDB jest ustawiona na WYŁĄCZONE (ustawienie domyślne), do sortowania jest używane 250 MB miejsca na dysku, które zostało już uwzględnione dla nowego indeksu w kroku 2.
Dodatkowe miejsce na dysku (w lokalizacji docelowej) równe wartości opcji konfiguracji serwera Konfiguruj pamięć tworzenia indeksu, gdzie wartość = 2 MB.
Całkowity rozmiar dyskowej przestrzeni tymczasowej z SORT_IN_TEMPDB ustawionym na wyłączony = 2 MB.
Aby utworzyć indeksy klastrowane i nieklastrowane, należy użyć bazy danych tempdb, łącznie potrzeba 1018 MB (816 + 202). Chociaż użycie tempdb zwiększa ilość tymczasowego miejsca na dysku używanego do utworzenia indeksu, może skrócić czas wymagany do utworzenia indeksu, gdy tempdb znajduje się na innym zestawie dysków niż baza danych użytkownika. Aby uzyskać więcej informacji na temat używania tempdb, zobacz SORT_IN_TEMPDB Opcja dla indeksów.
Bez użycia tempdb, potrzebne byłoby łącznie 818 MB (816+ 2), aby utworzyć indeksy klastrowane i nieklastrowane.
Obliczenia miejsca na dysku dla operacji indeksu klastrowanego w trybie online
Podczas tworzenia, usuwania lub przebudowywania indeksu klastrowanego w trybie online wymagane jest dodatkowe miejsce na dysku do zbudowania i utrzymania tymczasowego indeksu mapowania. Ten tymczasowy indeks mapowania zawiera jeden rekord dla każdego wiersza w tabeli, a jego zawartość to związek starych i nowych kolumn zakładek.
Aby obliczyć miejsce na dysku potrzebne dla operacji indeksu klastrowanego w trybie online, wykonaj kroki wyświetlane dla operacji indeksu offline i dodaj te wyniki do wyników poniższego kroku.
Określ miejsce dla indeksu mapowania tymczasowego.
W tym przykładzie stara zakładka to identyfikator wiersza (RID) sterty (8 bajtów), a nowa zakładka to klucz klastrowy (24 bajty, w tym unikatowy identyfikator). Nie ma nakładających się kolumn między starymi i nowymi zakładkami.
Rozmiar indeksu mapowania tymczasowego = 1 milion * (8 bajtów + 24 bajty) / 80% ~ 40 MB.
To miejsce na dysku należy dodać do wymaganego miejsca na dysku w lokalizacji docelowej, jeśli SORT_IN_TEMPDB jest ustawiona na wartość WYŁ., lub bazy danych tempdb, jeśli SORT_IN_TEMPDB jest ustawiona na wartość WŁĄCZONE.
Aby uzyskać więcej informacji na temat tymczasowego indeksu mapowania, zobacz Wymagania dotyczące miejsca na dysku dla operacji DDL związanych z indeksem.
Podsumowanie miejsca na dysku
Poniższa tabela zawiera podsumowanie wyników obliczeń dotyczących miejsca na dysku.
Operacja indeksowania | Wymagania dotyczące miejsca na dysku dla lokalizacji następujących struktur |
---|---|
Operacja offline indeksu z SORT_IN_TEMPDB ustawionym na WŁĄCZONE | Łączna ilość miejsca podczas operacji: 1018 MB -Istniejąca tabela i indeksy: 363 MB* - bazy danych tempdb: 202 MB* -Nowe indeksy: 453 MB Łączna ilość miejsca wymagana po operacji: 453 MB |
Operacja indeksowania w trybie offline z SORT_IN_TEMPDB = WYŁĄCZONE | Łączna ilość miejsca podczas operacji: 816 MB -Istniejąca tabela i indeksy: 363 MB* -Nowe indeksy: 453 MB Łączna ilość miejsca wymagana po operacji: 453 MB |
Operacja indeksu online z SORT_IN_TEMPDB = ON. | Łączna ilość miejsca podczas operacji: 1058 MB -Istniejąca tabela i indeksy: 363 MB* - tempdb (obejmuje indeks mapowania): 242 MB* -Nowe indeksy: 453 MB Łączna ilość miejsca wymagana po operacji: 453 MB |
Operacja indeksu online z ustawieniem "SORT_IN_TEMPDB" = WYŁĄCZONE | Łączna ilość miejsca podczas operacji: 856 MB -Istniejąca tabela i indeksy: 363 MB* -Tymczasowy indeks mapowania: 40 MB* -Nowe indeksy: 453 MB Łączna ilość miejsca wymagana po operacji: 453 MB |
*Miejsce to jest zwalniane po zatwierdzeniu operacji indeksu.
W tym przykładzie nie jest uwzględniane żadne dodatkowe tymczasowe miejsce na dysku wymagane w tempdb dla rekordów wersji utworzonych przez współbieżne operacje aktualizacji i usuwania użytkowników.
Powiązana zawartość
wymagania dotyczące miejsca na dysku dla operacji DDL indeksu
miejsce na dysku dziennika transakcji dla operacji indeksowania