Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Jak czytać i analizować plany wykonania SQL Server

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ść.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak utworzyć listę rozdzielaną przecinkami za pomocą zapytania SQL?

  2. Używanie zmiennej w instrukcji SQL LIKE

  3. Znajdź zależności w SQL Server:sql_expression_dependencies

  4. Linux - PHP 7.0 i MSSQL (Microsoft SQL)

  5. Funkcje zdefiniowane przez użytkownika programu SQL Server