Przegląd indeksu serwera SQL
Mówiąc o dostrajaniu wydajności i ulepszaniu zapytań SQL Server, pierwszą rzeczą, którą należy wziąć pod uwagę, jest indeks SQL Server. Służy do przyspieszenia odczytu danych z tabel bazowych, zapewniając szybki dostęp do żądanych wierszy. Dzięki temu nie będzie musiał skanować wszystkich rekordów tabeli.
Indeks SQL Server zapewnia takie możliwości szybkiego wyszukiwania dzięki strukturze indeksu B-Tree. Ta struktura umożliwia szybkie poruszanie się po wierszach tabeli na podstawie klucza indeksu i jednoczesne pobieranie żądanych rekordów. Nie będzie musiał czytać całej tabeli.
Typy indeksów SQL Server
Wśród głównych typów zwracamy uwagę na indeksy klastrowe i nieklastrowe.
Indeks klastrowy sortuje rzeczywiste dane na stronach danych według wartości klucza indeksu klastrowego. Przechowuje dane na poziomie „liścia” indeksu, zapewniając możliwość utworzenia tylko jednego indeksu klastrowego na każdej tabeli. Indeks klastrowy jest tworzony automatycznie, gdy w tabeli sterty pojawia się ograniczenie klucza podstawowego.
Indeks nieklastrowy zawiera wartość klucza indeksu i wskaźnik do pozostałych kolumn wierszy w tabeli głównej. Jest to poziom „liścia” indeksu, z możliwością utworzenia do 999 nieklastrowanych indeksów w każdej tabeli.
Jeśli Twoja tabela nie ma utworzonego indeksu klastrowego, nazywa się ją „Tabelą sterty”. Taka tabela nie ma kryteriów określających kolejność danych wewnątrz stron oraz sortowanie i łączenie stron.
Kiedy indeks klastrowy jest tworzony na tej tabeli, nazywamy posortowaną tabelę tabelą klastrową.
Istnieją również inne typy indeksów dostarczane przez SQL Server:
- Indeks Unique wymusza unikalność wartości kolumn;
- Indeks pokrywający zawiera wszystkie kolumny żądane przez zapytanie;
- Złożony indeks zawiera wiele kolumn w kluczu indeksu;
- Inne szczególne typy indeksów to indeksy XML, Spatial i Columnstore.
Zaletą indeksu SQL Server jest to, że zwiększa wydajność zapytań. Jednak działa, jeśli tylko indeks jest poprawny. Jeśli go źle zaprojektujesz, wpłynie to negatywnie na wydajność zapytań i zużyje zasoby SQL Server do przechowywania i utrzymywania bezużytecznych indeksów.
Wybór najlepszego indeksu, który rozwiązuje wszystkie problemy, nie jest łatwym zadaniem. Dodanie nowego indeksu może przyspieszyć proces pobierania danych, ale spowalnia procesy modyfikacji danych. Wszelkie zmiany dokonane w tabeli bazowej są odzwierciedlane bezpośrednio we wszystkich powiązanych indeksach, aby zachować spójność danych.
Dlatego należy zbadać i przetestować wpływ nowego indeksu przed utworzeniem go w środowisku produkcyjnym. Konieczne jest również monitorowanie jego wpływu i użytkowania po wdrożeniu go w środowisku produkcyjnym.
Czynniki, które należy wziąć pod uwagę przy projektowaniu nowego indeksu SQL Server
Pierwszym czynnikiem jest typ obciążenia bazy danych . Załóżmy, że mamy do czynienia z obciążeniem OLTP z dużą liczbą operacji zapisu. Wymaga jak najmniejszej liczby indeksów. Innym przypadkiem jest obciążenie OLAP z wieloma operacjami odczytu – będzie wymagało jak największej liczby indeksów, aby przyspieszyć pobieranie danych.
Musisz także spojrzeć na rozmiar stołu . SQL Server Engine woli skanować bezpośrednio tabelę bazową, zamiast marnować czas i zasoby na wybór najlepszego indeksu do pobierania danych z tej małej tabeli.
Po podjęciu decyzji o utworzeniu indeksu w tej tabeli musisz zidentyfikować typ indeksu do obsługi zapytania . Tam określasz kolumny dodane do klucza indeksu. Podstawami są typ danych kolumny i pozycja w predykatach zapytania i warunkach złączenia.
Czynniki te powinny gwarantować najlepszą wydajność wyszukiwania danych we właściwej kolejności oraz utrzymywać indeks tak krótki i prosty, jak to tylko możliwe.
Innym czynnikiem, który należy wziąć pod uwagę przy projektowaniu nowego indeksu, jest przechowywanie indeksów . Zaleca się tworzenie indeksów nieklastrowanych na osobnej grupie plików i na dysku. W ten sposób izolujesz operacje We/Wy wykonywane na stronach danych indeksu od plików danych bazy danych.
Rozważ ustawienie indeksu FILLFACTOR , który określa procent miejsca na każdej stronie na poziomie liścia wypełnionej danymi (wartość różni się od domyślnej wartości 0 lub 100 procent). Celem jest pozostawienie miejsca na każdej stronie danych indeksu dla nowo wstawionych lub zaktualizowanych rekordów. Minimalizuje również występowanie dzielenia stron, które może prowadzić do problemu fragmentacji indeksu.
Zarządzanie indeksami
Rola administratora bazy danych w zwiększaniu wydajności zapytań z indeksami SQL Server nie ogranicza się do tworzenia indeksu. Należy proaktywnie monitorować wykorzystanie indeksu, aby określić jego jakość. Poza tym musimy regularnie utrzymywać indeks, aby rozwiązać problemy z fragmentacją.
SQL Server Management Studio, ze swoją rozbudowaną funkcjonalnością raportowania, dostarcza administratorom baz danych najbardziej przydatne dane statystyczne. Jednym z tych wbudowanych raportów jest Statystyka wykorzystania indeksu :
Raport Statystyki wykorzystania indeksów opisuje sposób wykorzystania indeksów bazy danych w postaci:
- Szuka :ile razy indeks jest używany przez silnik SQL w celu znalezienia określonego wiersza.
- Skanowanie :ile razy strony liści indeksu są skanowane przez silnik SQL.
- Wyszukiwania :ile razy indeks nieklastrowy był używany jako indeks klastrowy do pobierania pozostałych kolumn niewymienionych w indeksie nieklastrowym.
- Aktualizacje :ile razy dane indeksu były modyfikowane.
Zauważ, że głównym celem tworzenia indeksu jest wykonanie operacji wyszukiwania indeksu, jak pokazano poniżej:
Poprzedni raport znacznie pomaga w określeniu, czy SQL Server wykorzystuje te indeksy do przyspieszenia procesu pobierania danych, czy nie. Jeśli okaże się, że jakiś konkretny indeks nie działa tak, jak powinien, usuń go i zastąp lepszym.
Drugi raport dostarczony przez SSMS to Indeks statystyk fizycznych . Zwraca informacje statystyczne dotyczące procentu fragmentacji indeksu na każdą partycję indeksu, z liczbą stron na każdej partycji indeksu.
Zaleca również, jak rozwiązać problemy z fragmentacją indeksu przez odbudowanie lub reorganizację tego indeksu, zgodnie z procentem fragmentacji, jak pokazano poniżej:
Aby zastosować zalecenia zawarte w raporcie, można uruchomić komendę defragmentacji indeksu dla każdego indeksu. Możesz też utworzyć plan konserwacji za pomocą programu SSMS, aby utrzymać indeks w najlepszy sposób.
dbForge Index Manager
dbForge Index Manager to dodatek do SSMS, służący do wykrywania i naprawiania problemów z fragmentacją indeksów SQL Server.
Jest to również scentralizowane narzędzie, dające możliwość wykrywania procentowej fragmentacji indeksu w bazach danych. Możesz rozwiązać te problemy, wykonując odbudowę indeksu. Innym sposobem jest reorganizacja operacji w oparciu o stopień fragmentacji tego indeksu. Wśród innych opcji jest generowanie skryptów T-SQL do wykonywania poleceń związanych z indeksem, eksportowanie wyników analizy indeksu do późniejszego wykorzystania oraz używanie interfejsu wiersza poleceń do automatyzacji zadań związanych z utrzymaniem indeksu.
dbForge Index Manager jest dostępny na stronie pobierania Devart. Możesz zainstalować go na swoim komputerze za pomocą prostego kreatora instalacji. Po udanej instalacji ten dodatek jest gotowy do użycia.
Aby użyć go w ramach SSMS, kliknij bazę danych prawym przyciskiem myszy i wybierz Zarządzaj fragmentacją indeksu z listy Menedżera indeksów:
W oknie Menedżera indeksów możesz filtrować nazwę bazy danych, która Cię interesuje.
Kliknij Przeanalizuj ponownie aby przeprowadzić kontrolę fragmentacji indeksu dla wybranej bazy danych. Automatycznie pokazuje statystyki fragmentacji indeksów dla wszystkich indeksów utworzonych w ramach wybranej bazy danych podczas tego procesu.
Narzędzie Index Manager zaleca również działania mające na celu naprawienie problemów z fragmentacją indeksu, w oparciu o procent fragmentacji:
Sprawdzenie indeksów w sekcji Wymagane działania w poprzednim oknie umożliwia wyeksportowanie listy działań jako raportu CSV. Umożliwia wykonanie sugerowanej naprawy poprzez reorganizację lub przebudowanie problematycznych indeksów bezpośrednio z tej strony lub wygenerowanie skryptu, aby zrobić to później:
Poprawka fragmentacji indeksu w naszym scenariuszu będzie następująca:
Jeśli uruchomisz poprzedni skrypt lub klikniesz Napraw opcję, a następnie Przeanalizuj ponownie w wyniku widać, że problem fragmentacji został naprawiony bezpośrednio:
W ten sposób korzystamy z dbForge Index Manager do analizowania i identyfikowania problemów z fragmentacją indeksu, a następnie zgłaszania lub naprawiania ich bezpośrednio z tego samego miejsca.
Przydatne narzędzie
dbForge Index Manager wprowadza inteligentne ustalanie indeksów i fragmentację indeksów bezpośrednio do SSMS. Narzędzie pozwala na szybkie zbieranie statystyk fragmentacji indeksów oraz wykrywanie baz danych wymagających konserwacji. Możesz natychmiast przebudować i zreorganizować indeksy SQL Server w trybie wizualnym lub wygenerować skrypty SQL do wykorzystania w przyszłości. dbForge Index Manager dla SQL Server znacznie zwiększy Twoją wydajność bez większego wysiłku.