Plany wykonania SQL Server są bramą dla optymalizatora zapytań i wykonywania zapytań dla specjalistów baz danych. Ujawniają przetwarzanie zapytań i zaangażowane fazy, takie jak tabele, indeksy, statystyki, typy złączeń, liczba wierszy, których dotyczy problem, przetwarzanie zapytań, sortowanie danych i pobieranie danych.
W poprzednim artykule Plan wykonania programu SQL Server — co to jest i jak pomaga w przypadku problemów z wydajnością? zbadaliśmy przepływ pracy wykonywania zapytań wysokiego poziomu, różne typy planów wykonania (graficzny, XML i tekstowy) wraz z rzeczywistymi i szacunkowymi planami wykonania.
Teraz przyjrzymy się rzeczom, które musisz wiedzieć, oceniając plany wykonania SQL Server i jak najlepiej interpretować informacje.
Czytanie graficznego planu wykonania SQL Server
Generalnie czytamy plany wykonania od prawej do lewej. Rozpoczynasz od operatora planu wykonania w prawym górnym rogu i przesuwasz się w lewo. Pomaga śledzić logiczny przepływ danych w zapytaniu.
Załóżmy, że wykonujesz następujące zapytanie w przykładowej bazie danych [AdventureWorks2019] i wyświetlasz rzeczywisty plan wykonania.
SELECT TOP (10) [SalesOrderID]
[SalesOrderDetailID]
[CarrierTrackingNumber]
[OrderQty]
[ProductID]
[SpecialOfferID]
[ModifiedDate]
FROM [AdventureWorks2019].[Sales].[SalesOrderDetail] where [UnitPrice]>1000
Zapytanie pobiera dane z tabeli [Sales].[SalesOrderDetail] dla zamówień o cenie jednostkowej większej niż 1000.
Jeśli przeczytamy plan wykonania od prawej do lewej, zauważymy, co następuje:
- Pierwszy operator to Clustered Index Scan, który odczytuje dane z tabeli [Sales].[SalesOrderDetail]. Gdy najedziesz wskaźnikiem myszy na strzałkę łączącą Clustered Index Scan i Top operator, zwraca ona szacowaną i rzeczywistą liczbę wierszy oraz szacowany rozmiar danych.
- Przekazuje dane z operatora Clustered Index Scan do operatora Top, przekazuje 10 wierszy do operatora SELECT.
Wewnętrznie SQL Server wykonuje plan od lewej do prawej. W przypadku zainteresowania fizycznymi zleceniami operatora należy zapoznać się z planem wykonania od lewej do prawej. Każdy operator żąda danych od następnego operatora. Na przykład w powyższym scenariuszu operator Top żąda danych z klastrowego skanowania indeksu. Skanowanie indeksu klastrowego zwraca wiersze z tabeli [Sales].[SalesOrderDetail], która jest zgodna z Gdzie warunek klauzuli.
W przypadku, gdy wiele gałęzi łączy się w planie wykonania, należy postępować zgodnie z podejściem od prawej do lewej, od góry do dołu.
Koszty operatora
Każdy operator w planie wykonania programu SQL Server jest powiązany z kosztem. Koszt operatora jest powiązany z innymi kosztami w planie wykonania. Zwykle musimy skoncentrować się na kosztownym operatorze i dostroić zapytanie do niego.
W przypadku skomplikowanego planu wykonania, identyfikacja kosztownego operatora może być wyzwaniem. W takim przypadku możesz użyć SET SHOWPLAN_ALL ON, i dostarczy informacje w formacie tabelarycznym.
Możesz także użyć [Tekst Stmt], aby rozbić plan wykonania na każdym poziomie operatora i instrukcji.
SQL Server Management Studio (SSMS) zapewnia również elastyczność wyszukiwania operatora na podstawie kryteriów wyszukiwania. Aby to zrobić, kliknij prawym przyciskiem myszy plan wykonania i wybierz Znajdź węzeł. Otworzy się okno z różnymi warunkami wyszukiwania. Określ swoje wymagania, a wskaże on konkretny węzeł, jak pokazano poniżej.
Możesz też użyć usługi Azure Data Studio i przejść do opcji Uruchom bieżące zapytanie z rzeczywistym planem pod paletą poleceń. Daje to rzeczywisty plan wykonania w kompaktowej formie, wraz z najlepszymi operacjami, aby szybko zidentyfikować kosztownych operatorów.
Analiza planu pokazu
Możesz zidentyfikować niedokładne oszacowanie kardynalności, aby zbadać problematyczne plany wykonania. Dzięki temu uzyskasz krótką informację o znalezieniu konkretnego operatora i zalecenia w zakładce Analiza ShowPlan. Możesz posortować wynik w kolumnach różnicy, rzeczywistej i szacunkowej, aby znaleźć problem i zalecenia dla konkretnego operatora w planie wykonania. Jest to dostępne w SSMS 17.4.
Aby to zrobić, kliknij prawym przyciskiem myszy plan wykonania, a następnie kliknij Przeanalizuj rzeczywisty plan wykonania.
Następnie kliknij hiperłącze w sekcji Znajdowanie szczegółów . Wyjaśni to możliwe scenariusze niedokładności oszacowania i obejścia w celu poprawy tych oszacowań. To dobry punkt wyjścia do rozwiązywania problemów z szacowaniem kardynalności.
Porównaj plan pokazowy
Załóżmy, że zidentyfikowałeś problem w planie wykonania i wdrożyłeś rozwiązanie, które go naprawi. Ale jak porównasz poprzedni plan wykonania (jak wyglądał przed wdrożeniem rozwiązania) z obecnym planem wykonania? Plan pokazu porównań SSMS funkcja zapewnia elastyczność w porównaniu dwóch planów wykonania. Podkreśla podobieństwa i różnice między tymi planami.
Zwykle administratorzy baz danych otrzymują informację od programistów, że dane zapytanie działa poprawnie w środowisku produkcyjnym, ale zajmuje dużo czasu w środowisku QA z tymi samymi parametrami. Innym przypadkiem użycia jest migracja do nowszej wersji SQL Server. Załóżmy, że po migracji napotkasz problemy z zapytaniem, które działa dobrze w niższej wersji SQL. Możesz użyć tego narzędzia do porównania planów wykonania różnych wersji SQL i poziomów poprawek.
Zapisz plan wykonania w SQLPlan rozbudowa. Następnie możesz kliknąć prawym przyciskiem myszy inny plan wykonania i wybrać Porównaj plan pokazowy .
Plany wykonania na żywo w SSMS
Możesz włączyć plan wykonania na żywo aktywnego zapytania. Dzięki temu uzyskasz statystyki w czasie rzeczywistym dotyczące przepływu danych do różnych operatorów. W statystykach wykonania w czasie wykonywania można śledzić upływ czasu i liczbę wierszy. Jest to doskonała funkcja do rozwiązywania problemów i debugowania problemów z wydajnością. Możesz użyć statystyk zapytań na żywo z SQL Server 2016 i nowszych.
Uwaga:Powinieneś używać najnowszej wersji programu SSMS. Zapoznaj się z dokumentami firmy Microsoft, aby pobrać najnowszą wersję programu SSMS.
- Aktualna najnowsza wersja:SSMS 18.7.1
W przypadku statystyk zapytań na żywo włącz opcję Dołącz statystyki zapytań na żywo za pomocą paska narzędzi SSMS.
Możesz także wyświetlić plan wykonania na żywo w Monitorze aktywności . W Monitorze aktywności wybierz żądany proces, kliknij go prawym przyciskiem myszy, aby wyświetlić menu i wybierz Pokaż plan wykonania na żywo.
Daje to oszacowania zapytań na żywo wraz z przepływem danych i procentami realizacji poszczególnych operatorów. Zwykle czekamy na zakończenie wykonywania zapytania i przeglądamy rzeczywisty plan wykonania. Załóżmy jednak, że uzyskanie wyników w zapytaniu zajmuje więcej niż 30 minut. W takim przypadku możesz użyć statystyk zapytań na żywo, aby śledzić poszczególne operatory, przepływ danych i wskazać, który operator potrzebuje czasu na wykonanie zapytania. Na przykład, jak pokazano poniżej, zapytanie działa przez 12 minut 48 sekund i szacuje się, że zostało wykonane w 20%. Na poziomie operatora skanowanie indeksu i buforowanie liczenia wierszy są ukończone w 41%. Kropkowane linie pokazują ruch danych.
Sprawdzanie wykorzystania planu wykonania programu SQL Server
Plany wykonania SQL Server są niezwykle przydatne w rozwiązywaniu problemów i optymalizacji wolnych zapytań. Każdy specjalista ds. baz danych musi wiedzieć, jak analizować i rozumieć informacje po udostępnieniu planu wykonania. Jak omówiono wcześniej, w SSMS i Azure Data Studio dostępne są różne narzędzia, które ułatwiają przeglądanie i rozwiązywanie problemów z wydajnością — szczególnie funkcja Porównaj plany jest przydatna, gdy zaczynasz wprowadzać zmiany i oceniać wydajność.