Plan wykonania programu SQL Server jest przydatny do badania problemów z wydajnością zapytań. Specjaliści od baz danych często otrzymują zgłoszenia problemów lub skargi użytkowników, że zapytania działają wolno. Wyniki zapytań, które zajmowały dwie lub trzy minuty, nagle wymagają więcej niż 30 minut. Rozwiązywanie problemów może wymagać zbadania obszarów, takich jak zasoby serwera (procesor, pamięć), statystyki, wydajność dysku, blokowanie, zakleszczenia i indeksy. W tym artykule skupimy się na roli planu wykonania SQL Server w rozwiązywaniu problemów z wydajnością.
Co się stanie po przesłaniu T-SQL w SQL Server?
Przyjrzyjmy się, co się dzieje po przesłaniu zapytania przy użyciu języka Transact-SQL lub T-SQL w programie SQL Server. Dla użytkowników oczywiście nie ma to żadnego znaczenia. Użytkownicy oczekują szybkiego uzyskania dokładnych wyników, niezależnie od tego, czy przeszukują bazę danych, czy przeszukują sieć.
Przepływ pracy na wysokim poziomie zapytania SQL
- Użytkownik uwierzytelnia się w SQL Server w aplikacji klienckiej i przesyła zapytanie.
- SQL Server analizuje zapytanie i sprawdza, czy nie ma błędów składniowych.
- Drzewo analizy jest dalej przetwarzane w Algebrizerze, który rozwiązuje wszystkie obiekty, tabele i kolumny w zapytaniu. Wykonuje również kontrolę typów danych kolumn. W przypadku jakichkolwiek problemów zwraca błąd. Algebrizer generuje drzewo procesu zapytania i skrót zapytania. Jeśli plan wykonania już istnieje, SQL Server używa tego zbuforowanego planu i wykonuje zapytanie.
- Jeśli nie istnieje żaden plan lub plan jest przestarzały, Optymalizator zapytań przeprowadza pełną optymalizację opartą na kosztach za pomocą statystyk, drzewa procesów zapytań i ograniczeń. Na podstawie tych danych wejściowych przygotowuje zoptymalizowany pod względem kosztów plan wykonania SQL Server.
- Na koniec silnik zapytań SQL Server wykonuje zapytanie zgodnie z planem wykonania i zwraca wyniki.
Przegląd planu wykonania SQL Server
Plan wykonania programu SQL Server pomaga specjalistom ds. baz danych rozwiązywać problemy z wydajnością zapytań i pisać wydajne zapytania. Gdy wykonanie zapytania zajmuje dużo czasu, plan wykonania SQL Server może pomóc w zidentyfikowaniu punktu, w którym zapytanie zajmuje najwięcej zasobów i czasu.
Do wygenerowania planu wykonania możesz użyć dowolnego z poniższych:
- SQL Server Management Studio
- Azure Data Studio
- Profil serwera SQL
- Wydarzenia rozszerzone
- Dynamiczne widoki zarządzania
- Oprogramowanie do monitorowania baz danych innych firm
Plany wykonania generowane przez #1 do #5 są podobne. Oprogramowanie do monitorowania baz danych innej firmy (nr 6) zapewnia dodatkowe funkcje, które wykorzystują kodowanie kolorami do identyfikacji kosztownych operatorów.
SQL Server zapewnia szacunkowe i rzeczywiste plany wykonania, podobne do tych, których doświadczasz, gdy musisz naprawić samochód. Mechanik sprawdza Twój pojazd, a następnie otrzymujesz oszacowanie pracy w oparciu o Twoje wymagania, stan pojazdu oraz przybliżony czas i materiały, które według mechanika zajmie naprawa. Oczywiście rzeczywisty koszt i czas mogą się różnić, tak jak ma to miejsce w przypadku szacunkowych i rzeczywistych planów wykonania SQL Server.
Szacowane plany wykonania
Bez wykonywania zapytania można uzyskać szacunkowy (logiczny) plan wykonania programu SQL Server na podstawie statystyk programu SQL Server. W SQL Server Management Studio (SSMS) wykonaj następujące kroki:
- Zaznacz zapytanie (jeśli chcesz mieć plan wykonania dla konkretnego zapytania).
- Kliknij przycisk Wyświetl szacunkowy plan wykonania (skrót klawiaturowy Ctrl + L), jak pokazano poniżej.
Czasami SQL Server nie jest w stanie stworzyć szacunkowego planu; na przykład, jeśli parametr jest używany bez określenia jego wartości w zapytaniu lub jeśli tabela tymczasowa nie jest zadeklarowana.
Rzeczywisty plan wykonania
Po przesłaniu zapytania do programu SQL Server można uzyskać rzeczywisty plan wykonania reprezentujący kroki, które program SQL Server wykonał w celu wykonania zapytania. Podobnie jak w scenariuszu naprawy pojazdu, jest to rzeczywisty rachunek, który otrzymujesz.
Aby uzyskać rzeczywisty plan wykonania, wykonaj poniższe kroki w SSMS przed uruchomieniem zapytania.
- Zaznacz zapytanie.
- Kliknij Wyświetl rzeczywisty plan wykonania przycisk (skrót klawiaturowy Ctrl + M ), jak pokazano powyżej.
Formaty planu wykonania SQL Server
Domyślnie opisane powyżej procedury SSMS generują plan wykonania programu SQL Server w formacie graficznym. Masz jednak możliwość przeglądania planów wykonania w trzech różnych formatach:
- Grafika
- XML
- Tekst
Przyjrzyjmy się każdemu z tych formatów.
1. Graficzny plan wykonania
Plan graficzny przedstawia wszystkie komponenty, w tym przepływ danych, jak pokazano poniżej.
Operatorzy
Operatorzy są wyświetlani jako ikony. Każdy operator jest wyznaczony do wykonania określonego zadania. Na przykład optymalizator zapytań w SQL Server może wykonać skanowanie tabeli, skanowanie indeksu i wyszukiwanie. Tak wygląda operator wyszukiwania indeksu klastrowego, który pobiera dane z indeksu w tabeli [AdventureWorks2019].[HumanResources]:
Koszt procentowy
Plan graficzny pokazuje również koszt procentowy — tutaj 99% dla wyszukiwania indeksu klastrowego — związany z operatorem. Koszt ten jest liczony w stosunku do innych operatorów użytych do wykonania zapytania.
Strzałki przepływu danych
Strzałki łączą operatory, a ich szerokość odzwierciedla liczbę rzędów danych przechodzących od jednego operatora do drugiego.
Załóżmy na przykład, że zapytanie generuje tylko jeden wiersz danych wyjściowych, ale jego ukończenie zajmuje dużo czasu. Przesuwając kursor myszy na strzałkę przepływu danych w planie wykonania, okazuje się, że liczba odczytanych wierszy jest liczona w milionach. To oznacza ogromną nierównowagę w wykorzystaniu zasobów i ujawnia obszar wymagający optymalizacji.
Podpowiedzi
Jak pokazano poniżej, po najechaniu myszą na operatora pojawiają się podpowiedzi z większą liczbą statystyk dotyczących przepływu danych.
Okno właściwości
Okno Właściwości wyświetla szczegółowe informacje o operatorach i ich składnikach. To jest nadzbiór podpowiedzi.
2. Plan wykonania SQL Server w formacie XML
Plan wykonania XML ma określony, ustrukturyzowany format. Chociaż format XML jest mniej intuicyjny wizualnie, zawiera wszystkie szczegóły w formacie XML i nie wymaga dodatkowych czynności, aby wyświetlić właściwości i podpowiedzi. Możesz łatwo przekonwertować format XML na format graficzny i odwrotnie.
Aby przekonwertować graficzny plan wykonania na format XML, kliknij go prawym przyciskiem myszy i wybierz Pokaż XML planu wykonania , jak pokazano poniżej.
Rezultatem jest następujący ustrukturyzowany plan wykonania w formacie XML.
Następujące polecenia również generują plan wykonania w formacie XML:
- W przypadku szacunkowego planu:WŁĄCZ SHOWPLAN_XML
- W przypadku rzeczywistego abonamentu:USTAW STATISTICS_XML NA
3. Plan wykonania SQL Server w formacie tekstowym
Plan wykonania możesz wygenerować na kilka sposobów:
- USTAW SHOWPLAN_TEXT NA
To polecenie generuje szacowany plan wykonania, bez szczegółowe informacje na temat realizacji zapytania. Jest przeznaczony do aplikacji takich jak narzędzie sqlcmd.
- USTAW SHOWPLAN_ALL ON
To polecenie generuje szacowany plan wykonania, z szczegółowe informacje o wszystkich operatorach i operacjach w formacie tabelarycznym.
- USTAW PROFIL STATYSTYK
To polecenie generuje rzeczywisty plan wykonania po wykonaniu zapytania w formacie tabelarycznym.
Dlaczego szacunkowe i rzeczywiste plany wykonania SQL Server są różne?
Szacunkowe i rzeczywiste plany wykonania są zasadniczo podobne, chociaż niektóre okoliczności mogą powodować ich różnice.
Nieaktualne statystyki
Głównym powodem różnic między szacowanymi a rzeczywistymi planami wykonania są nieaktualne statystyki.
Optymalizator zapytań używa statystyk do tworzenia ekonomicznego i zoptymalizowanego planu wykonywania zapytań. Jeśli statystyki nie są aktualizowane lub próbkowanie danych nie jest odpowiednie, optymalizator zapytań wykona pełną optymalizację i zbuduje plan wykonania na podstawie starych informacji. Możesz także uzyskać nieefektywny plan wykonania, który może prowadzić do problemów z wydajnością zapytań.
Czasami pojawiają się nieaktualne statystyki, gdy dane często się zmieniają, a statystyki nie są aktualizowane zgodnie z konserwacją indeksu.
Serialowy lub równoległy plan wykonania SQL Server
W czasie kompilacji optymalizator kwerendy tworzy plan wykonania i tworzy plan szeregowy lub równoległy w zależności od kosztu kwerendy i progu kosztu równoległości. Chociaż plan wykonania może być taki sam dla trybu szeregowego i równoległego, SQL Server decyduje między nimi na podstawie zasobów i aktywności serwera.
Nieprawidłowe szacunki
Jak wspomniano wcześniej, Algebrizer wiąże nazwy obiektów przed wykonaniem zapytania SQL. Załóżmy, że określisz, że tabela o nazwie test zostanie utworzona w czasie wykonywania, a następnie spróbujesz wygenerować szacunkowy plan wykonania. Ponieważ ta tabela nie istnieje, otrzymasz komunikat o błędzie, jak pokazano poniżej.
Korzystanie z planu wykonania
Podsumowując, możesz wygenerować plan wykonania programu SQL Server w formacie graficznym, XML i tekstowym i wykorzystać go do rozwiązania problemów z wydajnością bazy danych.
Plany wykonania zapytań to podstawowe kroki w identyfikacji przepływu pracy zapytań, operatorów i komponentów, dzięki czemu możesz dostroić swoje zapytania w celu uzyskania ewentualnych ulepszeń. Więcej informacji na temat korzystania z planów wykonania znajdziesz w naszym poście: Jak czytać i analizować plany wykonania.