W tym artykule przedstawiono znaczenie indeksów w bazie danych SQL. Zawiera również krótki przegląd indeksów klastrowanych i nieklastrowanych. Ponadto artykuł omawia przyczyny uszkodzenia indeksu SQL Server, czynniki identyfikujące każdy uszkodzony indeks oraz metody jego naprawy.
Indeksy w SQL Server pomagają przyspieszyć proces pobierania wierszy z tabeli lub widoku. Jednak właściwy wybór indeksów ma kluczowe znaczenie dla poprawy wydajności zapytań. SQL Server obsługuje indeksy klastrowe i nieklastrowe. Uszkodzenie dowolnego z tych indeksów może spowodować opóźnienie w pobieraniu wierszy. Ponadto podczas pobierania niektórych wierszy możesz uzyskać różne lub usunięte wartości. Ponadto najdłużej działające zapytania mogą być błędne z powodu uszkodzonych indeksów w tabelach.
Niezależnie od sytuacji, musisz naprawić uszkodzenie indeksów w odpowiednim czasie, aby zapobiec wpływowi przepływu pracy bazy danych SQL Server.
Zanim omówimy metody rozwiązywania problemów z uszkodzeniem indeksu, przejrzyjmy pokrótce indeksy klastrowane i nieklastrowane.
Przegląd indeksów klastrowych i nieklastrowych
Zastosowanie ograniczenia klucza podstawowego do kolumny w tabeli powoduje utworzenie indeksu klastrowego w kolumnie. Indeks klastrowy fizycznie sortuje dane i przechowuje dane w tabeli na podstawie zdefiniowanego klucza indeksu. Ponieważ możemy sortować dane tylko w jednej kolejności, nie jest możliwe posiadanie więcej niż jednego indeksu klastrowego.
Jednak indeks nieklastrowy sortuje i przechowuje dane oddzielnie od wierszy w tabeli. Zasadniczo jest to kopia kolumn danych tabeli, która ma łącza do powiązanej tabeli. W przeciwieństwie do indeksów klastrowych, możesz mieć jeden lub więcej indeksów nieklastrowych.
Co powoduje uszkodzenie indeksu SQL Server?
Indeksy mogą z czasem ulegać znacznej fragmentacji (z powodu operacji zbiorczego wstawiania, aktualizowania lub usuwania) i wymagają okresowej konserwacji. Indeksy pofragmentowane mogą powodować niską wydajność zapytań i mogą ulec uszkodzeniu. Ponadto czynniki takie jak aktualizacja wersji SQL Server, błąd w programie SQL, nagłe zamknięcie systemu itp. mogą prowadzić do uszkodzenia indeksu SQL Server. W szczególności uruchomienie „złożonej instrukcji UPDATE ze wskazówką NOLOCK” w tabeli może spowodować uszkodzenie indeksu nieklastrowanego.
Zanim omówimy metody naprawy uszkodzonych indeksów SQL Server, sprawdźmy, jak zidentyfikować uszkodzone indeksy.
Jak zidentyfikować korupcję w indeksie SQL Server?
Możesz określić, czy indeks jest uszkodzony, korzystając z następujących metod:
- Pobierz wiersze z różnymi lub usuniętymi wartościami, a następnie uruchom polecenie „ROWID”, aby zidentyfikować brakujące wpisy. Możesz także prześledzić brakujące wpisy, sprawdzając dziennik błędów SQL.
- Uruchomienie DBCC CHECKDB zgłosi następujący komunikat o błędzie, jeśli masz uszkodzony indeks nieklastrowany.
Msg 2511, poziom 16, stan 1, wiersz 31
Błąd tabeli:identyfikator obiektu 613577224, identyfikator indeksu 2, identyfikator partycji 72057594041401344,
identyfikator jednostki alloc 72057594047037440 (wpisz dane w wierszu).
Klucze niesprawne na stronie (1:264), gniazda 2 i 3.
- Jeśli masz indeks klastrowy, może pojawić się następujący komunikat o błędzie:
Serwer:Msg 1902, poziom 16, stan 3, wiersz 1
Nie można utworzyć więcej niż jednego indeksu klastrowego w tabeli „Nazwa tabeli”. Usuń istniejący indeks klastrowy „Nazwa indeksu klastrowego” przed utworzeniem kolejnego.
Jak naprawić uszkodzenie indeksu programu SQL Server?
Postępuj zgodnie z tymi bezpłatnymi metodami, których możesz użyć, aby naprawić uszkodzenie indeksu SQL Server:
Metoda 1 – Przywróć z kopii zapasowej
Niezależnie od tego, czy podejrzewasz uszkodzenie indeksu klastrowego, czy nieklastrowego, użyj kopii zapasowej, aby przywrócić dane, których dotyczy problem, zanim doszło do uszkodzenia.
Jednak przywracanie z kopii zapasowej nie zadziała, jeśli w kopii zapasowej brakuje najnowszych aktualizacji. Może to nawet doprowadzić do utraty danych. W takim przypadku wypróbuj następną metodę.
Metoda 2 – Usuń i odtwórz uszkodzony indeks
Uwaga: Działa to tylko w przypadku indeksów nieklastrowanych.
Usuń cały lub konkretny indeks pokazujący uszkodzenie, wykonując następujące czynności:
- Połącz się z instancją serwera w SQL Server Management Studio (SSMS) .
- W „Eksploratorze obiektów” rozwiń bazę danych zawierającą tabelę z uszkodzonym indeksem.
- Kliknij tabelę prawym przyciskiem myszy i wybierz „Tabela skryptów jako” opcję, najedź na „UPUŚĆ I UTWÓRZ do” i kliknij Nowy edytor zapytań
Jeśli nie uda Ci się odtworzyć uszkodzonych indeksów, możesz spróbować naprawić indeksy.
Metoda 3 – Napraw bazę danych SQL
W ostateczności uruchom polecenie DBCC CHECKDB z „REPAIR_ALLOW_DATA_LOSS” dla bazy danych, która ma uszkodzony (klastrowany lub nieklastrowany) indeks w tabeli. Ale może to spowodować utratę danych. Jako alternatywne rozwiązanie, spróbuj użyć narzędzia do naprawy SQL, takiego jak Stellar Repair for MS SQL. Narzędzie pomaga naprawiać pliki bazy danych (.mdf i .ndf) oraz przywraca indeksy, widoki, procedury składowane i wszystkie inne składniki. Możesz importować przywrócone indeksy i inne obiekty bazy danych bezpośrednio do działającej lub nowej bazy danych.
Pobierz wersję demonstracyjną oprogramowania do naprawy bazy danych SQL, aby wyświetlić podgląd indeksów do odzyskania przed zapisaniem naprawionego pliku.
Wniosek
Jeśli podejrzewasz uszkodzenie indeksu, użyj czynników opisanych w artykule, aby określić, czy indeks jest uszkodzony, czy nie. Zapoznaj się również z możliwymi przyczynami uszkodzenia indeksu SQL Server i metodami naprawy uszkodzeń. Metody te obejmują przywracanie bazy danych z kopii zapasowej, usuwanie i ponowne tworzenie indeksów oraz naprawę bazy danych i przywrócenie wszystkich jej komponentów. Możesz również rozważyć użycie narzędzia do naprawy SQL, aby naprawić uszkodzone indeksy SQL w klastrach i nieklastrowane oraz odzyskać niedostępne obiekty bazy danych.