Udostępnij za pośrednictwem


Trwa szacowanie rozmiaru indeks klastrowany

Aby oszacować ilość miejsca, które są wymagane do przechowywania danych w indeksie klastrowanym służą następujące czynności:

  1. Oblicz ilość miejsca używanego do przechowywania danych na poziomie poziom liścia indeks klastrowany.

  2. Oblicz ilość miejsca używanego do przechowywania informacji indeks klastrowany indeksu.

  3. Suma obliczonych wartości.

Krok 1.Oblicz ilość miejsca używanego do magazynu danych w poziomie poziom liścia

  1. Określ liczbę wierszy, które będą znajdować się w tabela:

    Num_Rows = Liczba wierszy w tabela

  2. Określ liczbę kolumn o stałej długości i o zmiennej długości i obliczyć miejsca wymaganego do ich przechowywania.

    Obliczyć miejsca zajmuje każdej z tych grup kolumny w obrębie wiersza danych.Rozmiar kolumna zależy od specyfikacji typ i długość danych.Aby uzyskać więcej informacji zobaczTypy danych (aparat bazy danych).

    Num_Cols = Całkowita liczba kolumn (o stałej długości i o zmiennej długości)

    Fixed_Data_Size = bajtach całkowity rozmiar wszystkich kolumn o stałej długości

    Num_Variable_Cols = Liczba kolumn o zmiennej długości

    Max_Var_Size = rozmiar w bajtach maksymalny wszystkich kolumn o zmiennej długości

  3. Jeżeli indeks klastrowany to nieunikatowy, element nadający unikatowość kolumna:

    The element nadający unikatowość jest kolumna dopuszczającej, o zmiennej długości.Będzie on nonnull i rozmiar w wiersze, które mają nieunikatowy wartości klucz 4 bajtów.Ta wartość jest częścią klucz indeksu i wymagane jest, aby upewnić się, że każdy wiersz ma wartość klucz unikatowego.

    Num_Cols = Num_Cols + 1

    Num_Variable_Cols = Num_Variable_Cols + 1

    Max_Var_Size = Max_Var_Size + 4

    Te modyfikacje przyjęto założenie, że wszystkie wartości będą nieunikatowy.

  4. Część wiersza, znane jako null mapa bitowa jest zarezerwowany do zarządzania opcje dopuszczania wartości null kolumna.Obliczanie rozmiaru:

    Null_Bitmap = 2 + ((Num_Cols + 7) / 8)

    Należy używać tylko część całkowita liczby poprzedniego wyrażenie; odrzucić wszystkie pozostałe.

  5. Obliczanie rozmiaru danych o zmiennej długości:

    Jeśli istnieją o zmiennej długości kolumny w tabela, należy określić, ile miejsca jest używany do przechowywania w kolumnach w wierszu:

Variable_Data_Size* = 2 + (Num_Variable_Cols x 2) + *Max_Var_Size

Bajty dodawane do ***Max\_Var\_Size*** służą do śledzenia poszczególnych zmiennych kolumn.Ta formuła opiera się na założeniu, że wszystkie kolumny o zmiennej długości są 100 procent.Jeśli przewidujesz, że zostanie użyta wartość procentową mniejszą miejsca do magazynowania o zmiennej długości kolumna, można dopasować ***Max\_Var\_Size*** wartości przez procent w ten sposób, aby dawała dokładniejsze oszacowanie całkowitego rozmiaru tabela.

<div class="alert">


> [!NOTE]
> <P>Można łączyć varchar, nvarchar, varbinary, lub sql_variant kolumny, które powodują szerokość tabela zdefiniowaną całkowita przekracza 8,060 bajtów. Długość każdej z tych kolumn nadal muszą mieścić się w granicach 8000 bajtów dla varchar, varbinary, lub sql_variant kolumna i 4 000 bajtów nvarchar kolumna. Jednak ich szerokości Scalonej może przekroczyć limit 8,060 bajt w tabela.Aby uzyskać więcej informacji zobacz<A href="ms186981(v=sql.100).md">Row-Overflow Data Exceeding 8 KB</A>.</P>


</div>

Jeśli brak kolumn o zmiennej długości, zestaw ***Variable\_Data\_Size*** to 0.
  1. Obliczanie rozmiaru wiersza sumy:

    Row_Size = Fixed_Data_Size + Variable_Data_Size + Null_Bitmap + 4

    Wartość 4 jest wiersz nagłówka obciążenie związane z wierszy danych.

  2. Oblicza liczbę wierszy na strona (8096 wolnych bajtów strona):

    Rows_Per_Page = 8096 / (Row_Size + 2)

    Ponieważ wierszy nie span strona s, liczba wierszy na strona powinny być zaokrąglana niedziałający do najbliższej cały wiersz.Jest wartością 2 w formule w wierszu zapisu w tablicy gniazdo strona.

  3. Obliczanie liczby zastrzeżonych wolnych wierszy na strona, na podstawie współczynnik wypełnienia określone:

    Free_Rows_Per_Page = 8096 x ((100 - Fill_Factor) / 100) / (Row_Size + 2)

    Współczynnik wypełnienia, używana do obliczania jest wartością całkowitą zamiast wartości procentowej.Ponieważ wierszy nie span strona s, liczba wierszy na strona powinny być zaokrąglana niedziałający do najbliższej cały wiersz.Współczynnik wypełnienia porządek w rosnącej więcej danych będą przechowywane na każdym strona i będzie mniej strona s.Jest wartością 2 w formule w wierszu zapisu w tablicy gniazdo strona.

  4. Obliczanie liczby stron wymaganych do przechowywania wszystkich wierszy:

    Num_Leaf_Pages = Num_Rows / (Rows_Per_Page - Free_Rows_Per_Page)

    Liczba stron szacowane powinny zaokrąglana w górę do najbliższej całą strona.

  5. Oblicz ilość miejsca, które są wymagane do przechowywania danych na poziomie poziom liścia (8192 całkowita liczba bajtów na strona):

Leaf_space_used* = 8192 x *Num_Leaf_Pages

Krok 2.Oblicz ilość miejsca używanego do magazynu informacji indeksu

Poniższe kroki umożliwiają oszacować ilość miejsca jest wymagana do przechowywania wyższe poziomy indeksu:

  1. Określ liczbę kolumn o stałej długości i o zmiennej długości w indeksie klucz i obliczyć miejsca wymaganego do ich przechowywania:

    Kolumny klucz indeksu można dołączyć kolumny o stałej długości i o zmiennej długości.Aby oszacować rozmiar wierszy wewnętrznego poziom indeksu, należy obliczyć miejsca zajmuje każdej z tych grup kolumn w wierszu indeksu.Rozmiar kolumna zależy od specyfikacji typ i długość danych.Aby uzyskać więcej informacji zobaczTypy danych (aparat bazy danych).

    Num_Key_Cols = Całkowita liczba kolumn klucz (o stałej długości i o zmiennej długości)

    Fixed_Key_Size = bajt całkowity rozmiar wszystkich kolumn klucz o stałej długości

    Num_Variable_Key_Cols = Liczba kolumn klucz o zmiennej długości

    Max_Var_Key_Size = rozmiar w bajtach maksymalny wszystkich kolumn klucz o zmiennej długości

  2. Konto dla każdej element nadający unikatowość wymagana, gdy indeks jest nieunikatowy:

    The element nadający unikatowość jest kolumna dopuszczającej, o zmiennej długości.Będzie on nonnull i rozmiar w wierszach, których indeks nieunikatowy wartości klucz 4 bajtów.Ta wartość jest częścią klucz indeksu i wymagane jest, aby upewnić się, że każdy wiersz ma wartość klucz unikatowego.

    Num_Key_Cols = Num_Key_Cols + 1

    Num_Variable_Key_Cols = Num_Variable_Key_Cols + 1

    Max_Var_Key_Size = Max_Var_Key_Size + 4

    Te modyfikacje przyjęto założenie, że wszystkie wartości będą nieunikatowy.

  3. Obliczyć rozmiar mapy bitowej wartości null:

    W przypadku pustych kolumn w kluczu indeksu, część wiersza indeksu jest zarezerwowany dla mapy bitowej wartości null.Obliczanie rozmiaru:

    Index_Null_Bitmap = 2 + ((number of columns in the index row + 7) / 8)

    Należy używać tylko część całkowita liczby poprzedniego wyrażenie.Odrzucić wszystkie pozostałe.

    Jeśli nie ma żadnych pustych kolumn klucz zestaw Index_Null_Bitmap to 0.

  4. Obliczanie rozmiaru danych o zmiennej długości:

    W przypadku kolumn o zmiennej długości w indeksie, należy określić, ile miejsca jest używany do przechowywania kolumny w wierszu indeksu:

Variable_Key_Size* = 2 + (Num_Variable_Key_Cols x 2) + *Max_Var_Key_Size

Bajty dodawane do ***Max\_Var\_Key\_Size*** służą do śledzenia poszczególnych kolumn o zmiennej długości.Ta formuła opiera się na założeniu, że wszystkie kolumny o zmiennej długości są 100 procent.Jeśli przewidujesz, że zostanie użyta wartość procentową mniejszą miejsca do magazynowania o zmiennej długości kolumna, można dopasować ***Max\_Var\_Key\_Size*** wartości przez procent w ten sposób, aby dawała dokładniejsze oszacowanie całkowitego rozmiaru tabela.

Jeśli brak kolumn o zmiennej długości, ustawianie ***Variable\_Key\_Size*** to 0.
  1. Obliczanie rozmiaru Indeks wiersza:

    Index_Row_Size = Fixed_Key_Size + Variable_Key_Size + Index_Null_Bitmap 1 (dla wiersza nagłówka obciążenie związane z wierszem indeks) + 6 (w przypadku wskaźnika identyfikator strona podrzędność)

  2. Obliczanie liczby wierszy indeksu na każdej stronie (8096 wolnego miejsca na każdej stronie):

    Index_Rows_Per_Page = 8096 / (Index_Row_Size + 2)

    Ponieważ indeksu wierszy nie obejmują strona s, numer indeksu wierszy na strona powinny być zaokrąglana niedziałający do najbliższej cały wiersz.2 W formule jest zapis w wierszu w tablicy gniazda strona.

  3. Obliczanie liczby poziomów w indeksie:

    Inne niż leaf_Levels = 1 + log Index_Rows_Per_Page (Num_Leaf_Pages / Index_Rows_Per_Page)

    Zaokrąglanie tę wartość do najbliższej liczby całkowitej.Wartość ta nie obejmuje poziomu poziom liścia indeks klastrowany.

  4. Obliczanie liczby stron typu nie liść w indeksie:

Num_Index_Pages =∑Poziom (Num_Leaf_Pages / (Index_Rows_Per_PageBilansuj))

w przypadku, gdy 1 \<= Poziom \<= ***Inne niż leaf\_Levels***

Zaokrąglanie każdego summand w górę do najbliższej liczby całkowitej.Jako przykład proste, należy wziąć pod uwagę indeksu w przypadku gdy ***Num\_Leaf\_Pages*** = 1000 and ***Index\_Rows\_Per\_Page*** = 25.Pierwszego poziomu indeksu powyżej poziom liścia są przechowywane 1000 indeksu wiersze, które jest jeden wiersz indeksu strona typu poziom liścia, a 25 wierszy indeksu można zmieścić na jednej stronie.Oznacza to, że 40 stron są wymagane do przechowywania tych wierszy, indeks 1000.Następny poziom indeks musi przechowywać 40 wierszy.Oznacza to, że wymaga on 2 strony.Końcowe poziom indeks musi przechowywać 2 wiersze.Oznacza to, że wymaga on 1 strona.Dzięki temu 43 stron typu nie liść indeksu.Jeśli liczby te są używane w poprzedniej formuły, wynik jest następujący:

***Inne niż leaf\_Levels*** = 1 + log25 (1000 / 25) = $ 3

***Num\_Index\_Pages*** = 1000/(253)+ 1000 /(252) + 1000 /(251) = 1 + 2 + 40 = 43, czyli numer strony w przykładzie.
  1. Obliczyć rozmiar indeksu (8192 całkowita liczba bajtów na każdej stronie):

Index_Space_Used* = 8192 x *Num_Index_Pages

Krok 3.Suma obliczonych wartości

Suma wartości uzyskane z dwa poprzednie kroki:

indeks klastrowany rozmiar (w bajtach) = Leaf_Space_Used + Index_Space_used

To obliczenie nie bierze pod uwagę następujące czynności:

  • partycjonowanie

    Miejsce na dodatkowe obciążenie z partycjonowanie jest minimalny, ale skomplikowane obliczenia.Nie jest ważne, aby dołączyć.

  • Podział stron

    Istnieje co najmniej jedną strona IAM używane do śledzenia przydzielonych do sterty, stron, ale jest minimalne obciążenie miejsca i nie ma żadnych algorytm deterministically obliczyć dokładnie zostanie użyta liczba stron IAM.

  • Wartości dużych obiektów (LOB)

    Algorytm do określenia dokładnie miejsca, w jaki sposób mają być używane do przechowywania typów dane LOB varchar(max), varbinary(max), nvarchar(max), text, ntext, xml, a image wartości jest złożona. Wystarczy po prostu dodać średni rozmiar wartości LOB, które są oczekiwane, należy pomnożyć przez Num_Rowsi dodać, że do całkowitego klastrowanych rozmiar indeksu.

  • Kompresja

    Nie można pre-calculate rozmiar skompresowanego indeksu.