Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Baza danych SQL w usłudze Microsoft Fabric
Poniższe kroki umożliwiają oszacowanie ilości miejsca wymaganego do przechowywania danych w indeksie klastrowanym:
- Oblicz miejsce używane do przechowywania danych na poziomie liści indeksu klastrowanego.
- Oblicz miejsce używane do przechowywania informacji o indeksie klastrowanym.
- Łączna liczba obliczonych wartości.
Krok 1. Obliczanie miejsca używanego do przechowywania danych na poziomie liścia
Określ liczbę wierszy znajdujących się w tabeli:
- Num_Rows = liczba wierszy w tabeli
Określ liczbę kolumn o stałej długości i zmiennej długości oraz oblicz miejsce wymagane dla ich magazynu:
Oblicz przestrzeń zajmowaną przez każdą z tych grup kolumn w wierszu danych. Rozmiar kolumny zależy od typu danych i specyfikacji długości.
- Num_Cols = całkowita liczba kolumn (o stałej długości i zmiennej długości)
- Fixed_Data_Size = całkowity rozmiar bajtów wszystkich kolumn o stałej długości
- Num_Variable_Cols = liczba kolumn o zmiennej długości
- Max_Var_Size = maksymalny rozmiar bajtów wszystkich kolumn o zmiennej długości
Jeśli indeks klastrowany jest nieunikalny, należy uwzględnić kolumnę uniqueifier:
Unikatyfikator to kolumna o zmiennej długości, która może być pusta (null). Jest to wartość inna niż null, mająca 4 bajty, w wierszach, które mają nieunikalne wartości klucza. Ta wartość jest częścią klucza indeksu i jest wymagana, aby upewnić się, że każdy wiersz ma unikatową wartość klucza.
- Num_Cols = Num_ColsNum_Cols + 1
- Num_Variable_Cols = Num_Variable_ColsNum_Variable_Cols + 1
- Max_Var_Size = Max_Var_Size + 4
Te modyfikacje zakładają, że wszystkie wartości są nieunikalne.
Część wiersza, znana jako zerowa mapa bitowa, jest zarezerwowana do zarządzania zerowalnością kolumn. Oblicz jego rozmiar:
- Null_Bitmap = 2 + ((Num_Cols + 7) / 8)
Należy użyć tylko części całkowitej poprzedniego wyrażenia; odrzuć resztę.
Oblicz rozmiar danych o zmiennej długości:
Jeśli w tabeli znajdują się kolumny o zmiennej długości, określ, ile miejsca jest używane do przechowywania kolumn w wierszu:
- Rozmiar_Danych_Zmiennych = 2 + (Liczba_Kolumn_Zmiennych x 2) + Maks_Rozmiar_Zmiennej
Bajty dodane do Max_Var_Size służą do śledzenia każdej kolumny zmiennych. W tej formule przyjęto założenie, że wszystkie kolumny o zmiennej długości są pełne o 100%. Jeśli przewidujesz, że zostanie użyty mniejszy procent miejsca do magazynowania w kolumnie o zmiennej długości, możesz dostosować wartość Max_Var_Size o ten procent, aby uzyskać dokładniejsze oszacowanie ogólnego rozmiaru tabeli.
Można połączyć varchar, nvarchar, varbinary lub kolumny sql_variant, które powodują, że łączna zdefiniowana szerokość tabeli przekroczy 8060 bajtów. Długość każdej z tych kolumn musi nadal mieścić się w granicach 8000 bajtów dla kolumny varchar, varbinarylub sql_variant, oraz 4000 bajtów dla kolumny nvarchar. Jednak ich połączone szerokości mogą przekraczać limit 8060 bajtów w tabeli.
Jeśli nie ma kolumn o zmiennej długości, ustaw wartość Variable_Data_Size na 0.
Oblicz całkowity rozmiar wiersza:
- = Row_Size + Fixed_Data_Size + Variable_Data_SizeNull_Bitmap + 4
Wartość 4 to nadmiarowy nagłówek związany z wierszem danych.
Oblicz liczbę wierszy na stronę (8096 wolnych bajtów na stronę):
- Rows_Per_Page = 8096 / (Row_Size + 2)
Ponieważ wiersze nie obejmują stron, liczba wierszy na stronę powinna być zaokrąglona w dół do najbliższego całego wiersza. Wartość 2 w formule odnosi się do pozycji wiersza w tablicy gniazd na stronie.
Oblicz liczbę zarezerwowanych wolnych wierszy na stronę, na podstawie współczynnika wypełnienia określonego w:
- Free_Rows_Per_Page = 8096 x ((100 - Fill_Factor) / 100) / (Row_Size + 2)
Współczynnik wypełnienia używany w obliczeniach jest wartością całkowitą zamiast wartością procentową. Ponieważ wiersze nie obejmują stron, liczba wierszy na stronę powinna być zaokrąglona w dół do najbliższego całego wiersza. Wraz ze wzrostem współczynnika wypełnienia coraz więcej danych jest przechowywanych na każdej stronie i jest mniej stron. Wartość 2 w formule odnosi się do pozycji wiersza w tablicy gniazd na stronie.
Oblicz liczbę stron wymaganych do przechowywania wszystkich wierszy:
- Liczba_Stroniczek = Liczba_Wierszy / (Wiersze_Na_Strone - Wolne_Wiersze_Na_Strone)
Liczba szacowanych stron powinna być zaokrąglona do najbliższej całej strony.
Oblicz ilość miejsca wymaganego do przechowywania danych na poziomie liścia (8192 całkowita liczba bajtów na stronę):
- Zużycie_miejsca_arkuszy = 8192 x Liczba_Stronic_Arkuszy
Krok 2. Obliczanie miejsca używanego do przechowywania informacji o indeksie
Poniższe kroki umożliwiają oszacowanie ilości miejsca wymaganego do przechowywania wyższych poziomów indeksu:
Określ liczbę kolumn o stałej długości i zmiennej długości w kluczu indeksu i oblicz miejsce wymagane dla ich magazynu:
Kolumny klucza indeksu mogą zawierać kolumny o stałej długości i zmiennej długości. Aby oszacować rozmiar wiersza indeksu na poziomie wnętrza, oblicz przestrzeń zajmowaną przez każdą z tych grup kolumn w wierszu indeksu. Rozmiar kolumny zależy od typu danych i specyfikacji długości.
- Num_Key_Cols = całkowita liczba kolumn klucza (o stałej długości i zmiennej długości)
- Fixed_Key_Size = łączny rozmiar bajtów wszystkich kolumn kluczy o stałej długości
- Num_Variable_Key_Cols = liczba kolumn kluczy o zmiennej długości
- Max_Var_Key_Size = maksymalny rozmiar bajtów wszystkich kolumn kluczy o zmiennej długości
Uwzględnij unikalizator potrzebny, jeśli indeks jest nieunikalny.
Unikatyfikator to kolumna o zmiennej długości, która może być pusta (null). Jest różna od null i ma rozmiar 4 bajtów w wierszach, które mają nieunikatowe wartości klucza indeksowego. Ta wartość jest częścią klucza indeksu i jest wymagana, aby upewnić się, że każdy wiersz ma unikatową wartość klucza.
- = Num_Key_ColsNum_Key_Cols + 1
- Num_Variable_Key_Cols = Num_Variable_Key_ColsNum_Variable_Key_Cols + 1
- = Max_Var_Key_SizeMax_Var_Key_Size + 4
Te modyfikacje zakładają, że wszystkie wartości są nieunikalne.
Oblicz rozmiar mapy bitowej o wartości null:
Jeśli w kluczu indeksu znajdują się kolumny dopuszczane do wartości null, część wiersza indeksu jest zarezerwowana dla mapy bitowej o wartości null. Oblicz jego rozmiar:
- Index_Null_Bitmap = 2 + ((liczba kolumn w wierszu indeksu + 7) / 8)
Należy użyć tylko części całkowitej poprzedniego wyrażenia. Odrzuć resztę.
Jeśli nie ma kolumn klucza mogącego przyjmować wartość null, ustaw wartość Index_Null_Bitmap na 0.
Oblicz rozmiar danych o zmiennej długości:
Jeśli w indeksie znajdują się kolumny o zmiennej długości, określ, ile miejsca jest używane do przechowywania kolumn w wierszu indeksu:
- Variable_Key_Size = 2 + (Num_Variable_Key_Cols x 2) + Max_Var_Key_Size
Bajty dodane do Max_Var_Key_Size służą do śledzenia każdej kolumny o zmiennej długości. W tej formule przyjęto założenie, że wszystkie kolumny o zmiennej długości są pełne o 100%. Jeśli przewidujesz, że zostanie użyty mniejszy procent miejsca do magazynowania w kolumnie o zmiennej długości, możesz dostosować wartość Max_Var_Key_Size o ten procent, aby uzyskać dokładniejsze oszacowanie ogólnego rozmiaru tabeli.
Jeśli nie ma kolumn o zmiennej długości, ustaw wartość Variable_Key_Size na 0.
Oblicz rozmiar wiersza indeksu:
- Index_Row_Size = Fixed_Key_Size + Variable_Key_Size + Index_Null_Bitmap + 1 (dla nadmiaru nagłówka wiersza indeksu) + 6 (dla wskaźnika identyfikatora ID strony podrzędnej)
Oblicz liczbę wierszy indeksu na stronę (8096 wolnych bajtów na stronę):
- Index_Rows_Per_Page = 8096 / (Index_Row_Size + 2)
Ponieważ wiersze indeksu nie obejmują stron, liczba wierszy indeksu na stronę powinna zostać zaokrąglona w dół do najbliższego całego wiersza. Oznaczenie
2w formule jest przeznaczone dla wpisu wiersza w tablicy slotów strony.Oblicz liczbę poziomów w indeksie:
- Poziomy_Nie_Liściowe = 1 + logarytm (Index_Rows_Per_Page) (Num_Leaf_Pages / Index_Rows_Per_Page)
Zaokrągl tę wartość do najbliższej liczby całkowitej. Ta wartość nie obejmuje poziomu liści indeksu klastrowanego.
Oblicz liczbę stron nie-liści w indeksie:
Num_Index_Pages = ∑Level (Num_Leaf_Pages / (poziom Index_Rows_Per_Page^))
where 1 <= Level <= Poziomy_nie_liści
Zaokrąglij każdą sumę do najbliższej liczby całkowitej. W prostym przykładzie rozważ indeks, w którym Num_Leaf_Pages = 1000 i Index_Rows_Per_Page = 25. Pierwszy poziom indeksu powyżej poziomu liścia przechowuje 1000 wierszy indeksów, które odpowiadają jednemu wierszowi indeksu na stronę liścia, a 25 wierszy indeksów mieści się na stronie. Oznacza to, że do przechowywania tych 1000 wierszy indeksu są wymagane 40 stron. Następny poziom indeksu musi przechowywać 40 wierszy. Oznacza to, że wymaga dwóch stron. Końcowy poziom indeksu musi przechowywać dwa wiersze. Oznacza to, że wymaga jednej strony. To daje 43 niekońcowe strony indeksów. Gdy te liczby są używane w poprzednich formułach, wynik jest następujący:
Poziomy_nie_liści = 1 + log(25) (1000 / 25) = 3
Num_Index_Pages = 1000/(25^3)+ 1000/(25^2) + 1000/(25^1) = 1 + 2 + 40 = 43, czyli liczba stron opisanych w przykładzie.
Oblicz rozmiar indeksu (8192 całkowita liczba bajtów na stronę):
- Index_Space_Used = 8192 x Num_Index_Pages
Krok 3. Łączna liczba obliczonych wartości
Suma wartości uzyskanych z poprzednich dwóch kroków:
- Rozmiar indeksu klastrowanego (bajty) = Leaf_Space_Used + Index_Space_used
To obliczenie nie uwzględnia następujących warunków:
Partycjonowanie: obciążenie związane z partycjonowaniem jest minimalne, ale złożone do obliczenia. Uwzględnienie nie jest ważne.
Strony alokacji: istnieje co najmniej jedna strona IAM używana do śledzenia stron przydzielonych do sterty. Obciążenie przestrzeni jest minimalne i nie ma algorytmu deterministycznego obliczania dokładnie liczby stron IAM.
Wartości dużych obiektów (LOB): Algorytm określający dokładnie, ile miejsca będzie używane do przechowywania typów danych LOB varchar(max), varbinary(max), nvarchar(max), text, ntext, xml i image wartości jest złożony. Wystarczy dodać średni rozmiar oczekiwanych wartości LOB, pomnożyć przez Num_Rows i dodać go do łącznego rozmiaru indeksu klastrowanego.
Kompresja: nie można wstępnie obliczyć rozmiaru skompresowanego indeksu.
Kolumny rozrzedłe: aby uzyskać informacje o wymaganiach dotyczących miejsca w rozrzednych kolumnach, zobacz Używanie kolumn rozrzednych.