Eksportuj (0) Drukuj
Rozwiń wszystko
Ten artykuł był przetłumaczony komputerowo. Oryginalny tekst zobaczysz, umieszczając wskaźnik myszy nad zdaniami w artykule. Więcej informacji.
Tłumaczenie
Oryginał

Reorganizowanie i indeksów

W tym temacie opisano sposób reorganizować lub odbudować indeks pofragmentowany w SQL Server 2012za pomocą SQL Server Management Studiolub Transact-SQL. Aparat baz danych programu SQL ServerAutomatycznie zachowuje indeksy, gdy insert, update lub operacje usuwania są wykonane z danych źródłowych. W czasie tych zmian może spowodować informacje w indeksie, aby stać się rozproszone w bazie danych (rozdrobnione). Fragmentacja występuje gdy indeksy stron, w których logicznej kolejności, na podstawie wartości klucza, nie odpowiadają fizycznej kolejności wewnątrz pliku danych. Mocno rozdrobnione indeksy można obniżyć wydajność kwerendy i spowodować, że aplikacja odpowiedzieć powoli.

Indeksie rozdrobnienia można zaradzić reorganizacji lub przebudowy indeksu. Dla indeksów podzielonym na partycje zbudowany na partycji systemu, można użyć jednej z tych metod na pełny indeks lub jednej partycji indeksu. Przebudowywanie indeksu spadnie i odtwarza indeks. To usuwa fragmentacji, ta ilość miejsca na dysku kompaktowanie stronach opartych na ustawienie współczynnika wypełnienia określony lub istniejących, a zmienia kolejność wierszy indeks stron ciągłych. Jeżeli jest określona wartość ALL, wszystkie indeksy tabeli są spadły i odbudowana w ramach pojedynczej transakcji. Reorganizowanie indeks używa minimalny system zasobów. Liść indeksów klastrowanych i nieklastrowany na tabele i widoki defragmentacji fizycznie kolejności stron na poziomie liścia odpowiadają logicznym, od lewej do prawej kolejności węzłów liściowych. Również reorganizacji kompaktuje stron indeksowych. Kompaktowanie opiera się na istniejącą wartość współczynnika wypełnienia.

W tym temacie

Wykrywanie rozdrobnienia

Pierwszym krokiem przy podejmowaniu decyzji, metodę defragmentacji jest analizowanie indeks tak, aby określić stopień fragmentacji. Za pomocą funkcji systemu sys.dm_db_index_physical_stats, można wykryć fragmentacji określonego indeksu, wszystkie indeksy tabeli lub widoku indeksowanego, wszystkie indeksy w bazie danych lub wszystkie indeksy we wszystkich bazach danych. Dla indeksów podzielonym na partycje sys.dm_db_index_physical_stats udostępnia także informacje fragmentacji dla każdej partycji.

Zestaw wyników zwróconych przez sys.dm_db_index_physical_stats funkcji zawiera następujące kolumny.

Kolumny

Opis

avg_fragmentation_in_percent

Procent fragmentacji logiczne (poza kolejność stron w indeksie).

fragment_count

Liczba odłamków (liści fizycznie kolejnych stron) w indeksie.

avg_fragment_size_in_pages

Średnia liczba stron w jeden fragment do indeksu.

Po stopnia rozdrobnienia jest znana, skorzystaj z poniższej tabeli, aby określić najlepszą metodę poprawiania fragmentacji.

avg_fragmentation_in_percent wartości

Sprostowania

>5% i < = 30%

REORGANIZACJA INDEKSU ALTER

> 30%

ZMIENIA PRZEBUDUJ INDEKS Z (ONLINE = ON) *

* Przebudowywanie indeksu mogą być wykonywane online lub offline. Reorganizowanie indeks zawsze jest wykonywane online. Do osiągnięcia dostępności podobne do opcji reorganizacja, należy przebudować indeksów online.

Wartości te przewidują orientacyjna określania punktu, jaką należy możesz przełączać się pomiędzy ALTER REORGANIZOWAĆ INDEKSU i zmieniać ODBUDOWANIE INDEKSU. Jednakże rzeczywiste wartości mogą się różnić od przypadku. Jest ważne, że można eksperymentować ustalenie progu najlepszych dla środowiska. Bardzo niski poziom rozdrobnienia (mniej niż 5 procent) nie powinna być skierowana przez jedną z tych poleceń, ponieważ korzyści z usunięcie takich mały stopień fragmentacji prawie zawsze znacznie przewyższa koszty reorganizacji lub przebudowy indeksu.

Uwaga Uwaga:

Ogólnie fragmentacji na małych indeksy często nie jest sterowane. Strony małych indeksy są przechowywane na mieszanych zakresów. Mieszane zakresy są udostępniane przez maksymalnie osiem obiektów, dzięki czemu fragmentacja w małych indeksu nie może być zmniejszona po reorganizacji lub przebudowy indeksu.

Limity i ograniczenia

  • Indeksy z więcej niż 128 zakresy są przebudowywane dwa etapy: fizyczne i logiczne. W fazie logiczne istniejących jednostek alokacji używane przez indeks są oznaczone dla dezalokacji, wiersze danych są kopiowane i sortowane i przenoszone do nowych jednostek alokacji utworzone w magazynie odbudowany indeksu. W fazie fizyczne jednostek alokacji oznaczone wcześniej dla dezalokacji są fizycznie spadły w skrócie transakcje, które wystąpią w tle i nie wymaga wiele blokad.

  • Opcje indeksu nie można określić, kiedy reorganizacji indeks.

Zabezpieczenia

Uprawnienia

Wymaga ALTER uprawnienia w tabeli lub widoku. Użytkownik musi być członkiem sysadmin roli serwera stałych lub db_ddladmin i db_owner stałe role bazy danych.

Ikona strzałki używana z łączem Powrót na górę strony [Top]

Do sprawdzenia fragmentacji indeks

  1. W Eksploratorze obiektów rozszerzyć bazę danych zawierającą tabelę, w której chcesz sprawdzić indeksie rozdrobnienia.

  2. Rozwiń tabel folderu.

  3. Rozwiń tabelę, w której chcesz sprawdzić indeksie rozdrobnienia.

  4. Rozwiń indeksów folderu.

  5. Kliknij prawym przyciskiem myszy indeksu, który chcesz sprawdzić rozdrobnienia i wybierz właściwości.

  6. Zgodnie z Wybierz stronę, wybierz opcję fragmentacji.

    Następujące informacje są dostępne na fragmentacji stronę:

    Strona stopnia ukończenia

    Wskazuje średnią pełnię stron indeksowych, jako procent. 100% oznacza, że strony indeksowe są pełne. 50% oznacza, że, średnio, każdej strony indeksu jest połowie pełna.

    Całkowita fragmentacja

    Procent fragmentacji logicznych. Wskazuje liczbę stron do indeksu, które nie są przechowywane w kolejności.

    Rozmiar wiersza średnia

    Średni rozmiar wiersza poziomu typu liść.

    Głębokość

    Liczba poziomów w indeksie, w tym na poziomie liścia.

    Przekazane rekordów

    Liczba rekordów w sterty, które mają terminowe wskaźniki do innej lokalizacji danych. (Stan ten występuje podczas aktualizacji, gdy nie ma miejsca do przechowywania nowy wiersz w jego oryginalnej lokalizacji.)

    Duch wierszy

    Liczba wierszy, które są oznaczone jako usunięte, ale nie zostały jeszcze usunięte. Te wiersze zostaną usunięte przez wątku oczyszczania, gdy serwer nie jest zajęty. Ta wartość nie obejmuje wierszy, przechowywanych ze względu na transakcję izolacji zaległych migawki.

    Typ indeksu

    Typ indeksu. Możliwe wartości to grupowany indeksu, indeks nieklastrowany, i Podstawowego XML. Tabele może też być przechowywana jako stosu (bez indeksów), ale następnie tę stronę właściwości indeksu nie można otworzyć.

    Wiersze na poziomie liścia

    Liczba wierszy poziomu typu liść.

    Maksymalny rozmiar wiersza

    Rozmiar maksymalny wiersza na poziomie liścia.

    Rozmiar minimalny wiersza

    Rozmiar minimalny wiersza na poziomie liścia.

    Strony

    Całkowita liczba stron danych.

    Identyfikator partycji

    Identyfikator partycji drzewie b zawierające indeks.

    Wersja Duch wierszy

    Liczba rekordów Duch, przechowywanych ze względu na transakcję izolacji zaległych migawki.

Ikona strzałki używana z łączem Powrót na górę strony [Top]

Do sprawdzenia fragmentacji indeks

  1. W Object Explorer, połączyć się z wystąpieniem Aparat baz danych.

  2. Na pasku Standard (Standardowy) kliknij przycisk New Query (Nowe zapytanie).

  3. Skopiuj poniższy przykład i wklej go do okna zapytania, a następnie kliknij przycisk Execute (Wykonaj).

    USE AdventureWorks2012;
    GO
    -- Find the average fragmentation percentage of all indexes
    -- in the HumanResources.Employee table. 
    SELECT a.index_id, name, avg_fragmentation_in_percent
    FROM sys.dm_db_index_physical_stats (DB_ID(N'AdventureWorks2012'), OBJECT_ID(N'HumanResources.Employee'), NULL, NULL, NULL) AS a
        JOIN sys.indexes AS b ON a.object_id = b.object_id AND a.index_id = b.index_id; 
    GO
    

    Powyższe oświadczenie może zwrócić wynik ustawić podobne do następujących.

    index_id    name                                                  avg_fragmentation_in_percent
    ----------- ----------------------------------------------------- ----------------------------
    1           PK_Employee_BusinessEntityID                          0
    2           IX_Employee_OrganizationalNode                        0
    3           IX_Employee_OrganizationalLevel_OrganizationalNode    0
    5           AK_Employee_LoginID                                   66.6666666666667
    6           AK_Employee_NationalIDNumber                          50
    7           AK_Employee_rowguid                                   0
    
    (6 row(s) affected)
    

Aby uzyskać więcej informacji, zobacz sys.dm_db_index_physical_stats (języka Transact-SQL).

Ikona strzałki używana z łączem Powrót na górę strony [Top]

Reorganizowanie lub odbudować indeks

  1. W Eksploratorze obiektów rozszerzyć bazę danych, zawierającą tabelę, w której chcesz zreorganizować indeks.

  2. Rozwiń tabel folderu.

  3. Rozwiń tabelę, w której chcesz zreorganizować indeks.

  4. Rozwiń indeksów folderu.

  5. Kliknij prawym przyciskiem myszy indeksu chcesz zreorganizować i wybierz reorganizować.

  6. W Reorganizować indeksy okno dialogowe, sprawdź, czy poprawne indeks jest w indeksy, aby zostały zreorganizowane siatki i kliknij przycisk OK.

  7. Wybierz Compact dużego obiektu kolumny danych pole wyboru, aby określić, że wszystkie strony, które zawierają dane wielkiego obiektu (LO) są też skompaktować.

  8. Kliknij przycisk OK.

Do reorganizowania wszystkich indeksów w tabeli

  1. W Eksploratorze obiektów rozszerzyć bazę danych zawierającą tabelę, w której chcesz reorganizować indeksy.

  2. Rozwiń tabel folderu.

  3. Rozwiń tabelę, w której chcesz reorganizować indeksy.

  4. Kliknij prawym przyciskiem myszy indeksów folderu i wybierz Reorganizowania wszystkich.

  5. W Reorganizować indeksy okno dialogowe, sprawdź, czy poprawne indeksy są w indeksy, aby zostały zreorganizowane. Aby usunąć indeks z indeksy, aby zostały zreorganizowane siatkę, wybierz indeks, a następnie naciśnij klawisz Delete.

  6. Wybierz Compact dużego obiektu kolumny danych pole wyboru, aby określić, że wszystkie strony, które zawierają dane wielkiego obiektu (LO) są też skompaktować.

  7. Kliknij przycisk OK.

Aby odbudować indeks

  1. W Eksploratorze obiektów rozszerzyć bazę danych, zawierającą tabelę, w której chcesz zreorganizować indeks.

  2. Rozwiń tabel folderu.

  3. Rozwiń tabelę, w której chcesz zreorganizować indeks.

  4. Rozwiń indeksów folderu.

  5. Kliknij prawym przyciskiem myszy indeksu chcesz zreorganizować i wybierz reorganizować.

  6. W Odbudować indeksów okno dialogowe, sprawdź, czy poprawne indeks jest w Indeksy wymagają przebudowania siatki i kliknij przycisk OK.

  7. Wybierz Compact dużego obiektu kolumny danych pole wyboru, aby określić, że wszystkie strony, które zawierają dane wielkiego obiektu (LO) są też skompaktować.

  8. Kliknij przycisk OK.

Ikona strzałki używana z łączem Powrót na górę strony [Top]

Do reorganizowania zdefragmentowanej indeksu

  1. W Object Explorer, połączyć się z wystąpieniem Aparat baz danych.

  2. Na pasku Standard (Standardowy) kliknij przycisk New Query (Nowe zapytanie).

  3. Skopiuj poniższy przykład i wklej go do okna zapytania, a następnie kliknij przycisk Execute (Wykonaj).

    USE AdventureWorks2012; 
    GO
    -- Reorganize the IX_Employee_OrganizationalLevel_OrganizationalNode index on the HumanResources.Employee table. 
    
    ALTER INDEX IX_Employee_OrganizationalLevel_OrganizationalNode ON HumanResources.Employee
    REORGANIZE ; 
    GO
    

Do reorganizowania wszystkich indeksów w tabeli

  1. W Object Explorer, połączyć się z wystąpieniem Aparat baz danych.

  2. Na pasku Standard (Standardowy) kliknij przycisk New Query (Nowe zapytanie).

  3. Skopiuj poniższy przykład i wklej go do okna zapytania, a następnie kliknij przycisk Execute (Wykonaj).

    USE AdventureWorks2012; 
    GO
    -- Reorganize all indexes on the HumanResources.Employee table.
    ALTER INDEX ALL ON HumanResources.Employee
    REORGANIZE ; 
    GO
    

Aby odbudować indeks zdefragmentowanej

  1. W Object Explorer, połączyć się z wystąpieniem Aparat baz danych.

  2. Na pasku Standard (Standardowy) kliknij przycisk New Query (Nowe zapytanie).

  3. Skopiuj poniższy przykład i wklej go do okna zapytania, a następnie kliknij przycisk Execute (Wykonaj). Przykład odtwarza pojedynczy indeks na Employeetabeli.

    USE AdventureWorks2012;
    GO
    ALTER INDEX PK_Employee_BusinessEntityID ON HumanResources.Employee
    REBUILD;
    GO
    
    
    

Aby odbudować wszystkie indeksy tabeli

  1. W Object Explorer, połączyć się z wystąpieniem Aparat baz danych.

  2. Na pasku Standard (Standardowy) kliknij przycisk New Query (Nowe zapytanie).

  3. Skopiuj i wklej następujący przykład do kwerendy przykład określa kluczowe ALL. Odtwarza wszystkie indeksy skojarzone z tabeli. Podano trzy opcje.

    USE AdventureWorks2012;
    GO
    ALTER INDEX ALL ON Production.Product
    REBUILD WITH (FILLFACTOR = 80, SORT_IN_TEMPDB = ON,
                  STATISTICS_NORECOMPUTE = ON);
    GO
    
    
    

Aby uzyskać więcej informacji, zobacz Zmiana INDEKSU (języka Transact-SQL).

Ikona strzałki używana z łączem Powrót na górę strony [Top]

Zawartość społeczności

Pokaż:
© 2014 Microsoft