W Microsoft SQL Server jak mogę uzyskać plan wykonania zapytania dla zapytania / procedury składowanej?
338
W Microsoft SQL Server jak mogę uzyskać plan wykonania zapytania dla zapytania / procedury składowanej?
Odpowiedzi:
Istnieje wiele metod uzyskania planu wykonania, z których jeden będzie zależał od okoliczności. Zwykle można użyć programu SQL Server Management Studio, aby uzyskać plan, jednak jeśli z jakiegoś powodu nie można uruchomić zapytania w programie SQL Server Management Studio, pomocne może być uzyskanie planu za pomocą programu SQL Server Profiler lub inspekcji pamięć podręczna planu.
Metoda 1 - Korzystanie z SQL Server Management Studio
SQL Server zawiera kilka ciekawych funkcji, które bardzo ułatwiają uchwycenie planu wykonania, po prostu upewnij się, że element menu „Uwzględnij rzeczywisty plan wykonania” (znajdujący się w menu „Zapytanie”) jest zaznaczony i uruchom zapytanie w normalny sposób .
Jeśli próbujesz uzyskać plan wykonania instrukcji w procedurze przechowywanej, powinieneś wykonać procedurę przechowywaną w następujący sposób:
Po zakończeniu zapytania w okienku wyników powinna pojawić się dodatkowa karta zatytułowana „Plan wykonania”. Jeśli uruchomiłeś wiele wyciągów, w tej zakładce możesz zobaczyć wiele planów.
Stąd możesz sprawdzić plan wykonania w SQL Server Management Studio lub kliknąć plan prawym przyciskiem myszy i wybrać „Zapisz plan wykonania jako ...”, aby zapisać plan w pliku w formacie XML.
Metoda 2 - Korzystanie z opcji SHOWPLAN
Ta metoda jest bardzo podobna do metody 1 (w rzeczywistości to właśnie robi SQL Server Management Studio wewnętrznie), jednak podałem ją dla kompletności lub jeśli nie masz dostępnego SQL Server Management Studio.
Przed uruchomieniem zapytania uruchom jedną z następujących instrukcji. Instrukcja musi być jedyną instrukcją w partii, tzn. Nie można wykonać innej instrukcji w tym samym czasie:
Są to opcje połączenia, dlatego wystarczy raz uruchomić to połączenie. Od tego momentu wszystkim uruchomionym instrukcjom będzie towarzyszył dodatkowy zestaw wyników zawierający plan wykonania w żądanym formacie - po prostu uruchom zapytanie w normalny sposób, aby zobaczyć plan.
Po zakończeniu możesz wyłączyć tę opcję za pomocą następującego oświadczenia:
Porównanie formatów planu wykonania
Jeśli nie masz silnych preferencji, zalecam skorzystanie z tej
STATISTICS XML
opcji. Ta opcja jest równoważna opcji „Uwzględnij rzeczywisty plan wykonania” w SQL Server Management Studio i zapewnia najwięcej informacji w najwygodniejszym formacie.SHOWPLAN_TEXT
- Wyświetla podstawowy tekstowy szacunkowy plan wykonania, bez wykonywania zapytaniaSHOWPLAN_ALL
- Wyświetla szacunkowy plan wykonania oparty na tekście z szacunkami kosztów, bez wykonywania zapytaniaSHOWPLAN_XML
- Wyświetla oparty na XML plan wykonania z oszacowaniami kosztów, bez wykonywania zapytania. Jest to równoważne opcji „Wyświetl przewidywany plan wykonania ...” w SQL Server Management Studio.STATISTICS PROFILE
- Wykonuje zapytanie i wyświetla tekstowy plan wykonania.STATISTICS XML
- Wykonuje zapytanie i wyświetla rzeczywisty plan wykonania oparty na XML. Jest to równoważne opcji „Uwzględnij rzeczywisty plan wykonania” w SQL Server Management Studio.Metoda 3 - Korzystanie z SQL Server Profiler
Jeśli nie możesz uruchomić zapytania bezpośrednio (lub zapytanie nie uruchamia się powoli, gdy wykonujesz je bezpośrednio - pamiętaj, że chcemy, aby plan zapytania działał źle), możesz przechwycić plan przy użyciu śledzenia SQL Server Profiler. Chodzi o to, aby uruchomić zapytanie podczas działania śledzenia przechwytującego jedno ze zdarzeń „Showplan”.
Należy pamiętać, że w zależności od obciążenia można użyć tej metody w środowisku produkcyjnym, ale oczywiście należy zachować ostrożność. Mechanizmy profilowania programu SQL Server zostały zaprojektowane w celu zminimalizowania wpływu na bazę danych, ale nie oznacza to, że nie będzie żadnego wpływu na wydajność. Możesz również mieć problemy z filtrowaniem i identyfikacją odpowiedniego planu w swoim śladzie, jeśli Twoja baza danych jest intensywnie używana. Powinieneś oczywiście sprawdzić u swojego DBA, czy są zadowoleni z tego, że robisz to w ich cennej bazie danych!
Otrzymany plan jest równoważny opcji „Dołącz rzeczywisty plan wykonania” w SQL Server Management Studio.
Metoda 4 - Sprawdzanie pamięci podręcznej zapytania
Jeśli nie możesz uruchomić zapytania bezpośrednio, a także nie możesz przechwycić śladu profilera, nadal możesz uzyskać szacunkowy plan, sprawdzając pamięć podręczną planu zapytań SQL.
Sprawdzamy cache planu przez zapytań SQL Server DMVs . Poniżej znajduje się podstawowe zapytanie, które wyświetli wszystkie buforowane plany zapytań (jako xml) wraz z ich tekstem SQL. W większości baz danych będziesz również musiał dodać dodatkowe klauzule filtrujące, aby odfiltrować wyniki do interesujących Cię planów.
Wykonaj tę kwerendę i kliknij XML planu, aby otworzyć plan w nowym oknie - kliknij prawym przyciskiem myszy i wybierz „Zapisz plan wykonania jako ...”, aby zapisać plan do pliku w formacie XML.
Uwagi:
Ponieważ w grę wchodzi tak wiele czynników (od tabeli i schematu indeksu, aż po przechowywane dane i statystyki tabeli), zawsze powinieneś próbować uzyskać plan wykonania z bazy danych, którą jesteś zainteresowany (zwykle ten, który ma wydajność problem).
Nie można uchwycić planu wykonania dla zaszyfrowanych procedur przechowywanych.
„rzeczywiste” i „szacunkowe” plany wykonania
Rzeczywisty plan wykonania jest taki, w którym SQL Server rzeczywiście uruchamia kwerendę, podczas gdy szacuje się plan wykonania SQL Server działa, co to będzie zrobić bez wykonywania zapytania. Chociaż logicznie równoważny, rzeczywisty plan wykonania jest o wiele bardziej przydatny, ponieważ zawiera dodatkowe szczegóły i statystyki dotyczące tego, co faktycznie wydarzyło się podczas wykonywania zapytania. Jest to niezbędne przy diagnozowaniu problemów, w których szacunki serwerów SQL są wyłączone (na przykład gdy statystyki są nieaktualne).
Jak interpretować plan wykonania zapytania?
Jest to temat wystarczająco godny samodzielnej (bezpłatnej) książki .
Zobacz też:
źródło
SET STATISTICS XML ON
mrówkę na początku zapytania iSET STATISTICS XML OFF|ON
otaczające obszary, których nie chcesz pokazywać w danych wyjściowych planu: Uznałem to za przydatne, gdy zapytanie zawiera iterację (GDY), której nie potrzebujesz / potrzebujesz aby zobaczyć w planie wykonania (w przeciwnym razie byłoby zbyt ciężkie i długie, aby SQL Server mógł je wyświetlić).Oprócz wyczerpującej odpowiedzi, która została już opublikowana, czasem przydatne jest programowe uzyskanie dostępu do planu wykonania w celu wyodrębnienia informacji. Przykładowy kod tego jest poniżej.
Przykładowa
StartCapture
definicjaPrzykładowa
StopCapture
definicjaźródło
źródło
Oprócz metod opisanych w poprzednich odpowiedziach możesz także użyć bezpłatnej przeglądarki planu wykonania i narzędzia do optymalizacji zapytań Plan ApexSQL (do którego ostatnio wpadłem).
Możesz zainstalować i zintegrować ApexSQL Plan z SQL Server Management Studio, dzięki czemu plany wykonania mogą być przeglądane bezpośrednio z SSMS.
Wyświetlanie szacunkowych planów wykonania w planie ApexSQL
Wyświetlanie rzeczywistych planów wykonania w planie ApexSQL
Aby wyświetlić rzeczywisty plan wykonania zapytania, przejdź do drugiego kroku wspomnianego wcześniej, ale teraz, gdy zostanie wyświetlony plan szacunkowy, kliknij przycisk „Rzeczywisty” na głównym pasku wstążki w planie ApexSQL.
Po kliknięciu przycisku „Rzeczywiste” zostanie wyświetlony Rzeczywisty plan wykonania wraz ze szczegółowym podglądem parametrów kosztu wraz z innymi danymi planu wykonania.
Więcej informacji na temat przeglądania planów wykonania można znaleźć, klikając ten link .
źródło
Moim ulubionym narzędziem do uzyskiwania i dogłębnej analizy planów wykonania zapytań jest SQL Sentry Plan Explorer . Jest o wiele bardziej przyjazny dla użytkownika, wygodny i kompleksowy do szczegółowej analizy i wizualizacji planów wykonania niż SSMS.
Oto przykładowy zrzut ekranu, aby dowiedzieć się, jakie funkcje oferuje narzędzie:
To tylko jeden z widoków dostępnych w narzędziu. Zwróć uwagę na zestaw zakładek u dołu okna aplikacji, który pozwala uzyskać różne typy reprezentacji planu wykonania oraz przydatne dodatkowe informacje.
Ponadto nie zauważyłem żadnych ograniczeń jego darmowej wersji, które uniemożliwiają codzienne korzystanie z niej lub zmuszają do zakupu wersji Pro. Jeśli więc wolisz pozostać przy wersji bezpłatnej, nic nie zabrania ci tego.
AKTUALIZACJA: (Dzięki Martinowi Smithowi ) Plan Explorer jest teraz bezpłatny! Widzieć informacje znaleźć na stronie http://www.sqlsentry.com/products/plan-explorer/sql-server-query-view .
źródło
Speaking of third-party tools
kiedy nikt nie wspomniał o narzędziach stron trzecich.Plany zapytań można uzyskać z sesji zdarzeń rozszerzonych za pośrednictwem
query_post_execution_showplan
zdarzenia. Oto przykładowa sesja XEvent:Po utworzeniu sesji (w SSMS) przejdź do Eksploratora obiektów i zagłęb się w Zarządzanie | Rozszerzone wydarzenia | Sesje Kliknij sesję „GetExecutionPlan” prawym przyciskiem myszy i uruchom ją. Kliknij ponownie prawym przyciskiem myszy i wybierz „Oglądaj dane na żywo”.
Następnie otwórz nowe okno zapytania i uruchom jedno lub więcej zapytań. Oto jeden dla AdventureWorks:
Po chwili powinieneś zobaczyć wyniki w zakładce „GetExecutionPlan: Live Data”. Kliknij jedno ze zdarzeń query_post_execution_showplan w siatce, a następnie kliknij kartę „Plan zapytań” pod siatką. Powinno to wyglądać podobnie do tego:
EDYCJA : Kod XEvent i zrzut ekranu zostały wygenerowane z SQL / SSMS 2012 w / SP2. Jeśli używasz SQL 2008 / R2, to może być w stanie dostosować skrypt aby go uruchomić. Ale ta wersja nie ma GUI, więc musisz wyodrębnić XML showplan, zapisać go jako plik * .sqlplan i otworzyć w SSMS. To kłopotliwe. XEvent nie istniał w SQL 2005 lub wcześniejszym. Tak więc, jeśli nie korzystasz z SQL 2012 lub nowszej, zdecydowanie sugeruję jedną z innych odpowiedzi opublikowanych tutaj.
źródło
Począwszy od SQL Server 2016+, wprowadzono funkcję Query Store do monitorowania wydajności. Zapewnia wgląd w wybór i wydajność planu zapytań. Nie jest to całkowita zamiana zdarzeń śledzenia lub zdarzeń rozszerzonych, ale ponieważ ewoluuje od wersji do wersji, możemy uzyskać w pełni funkcjonalny magazyn zapytań w przyszłych wersjach programu SQL Server. Główny przepływ w magazynie zapytań
Włączanie Query Store : Query Store działa na poziomie bazy danych na serwerze.
tempdb
bazy danych.Zbieraj informacje w magazynie zapytań : Zbieramy wszystkie dostępne informacje z trzech sklepów za pomocą Query Store DMV (widoki zarządzania danymi).
Magazyn planów zapytań: utrwalanie informacji o planie wykonania i jest odpowiedzialny za przechwytywanie wszystkich informacji związanych z kompilacją zapytań.
Magazyn statystyk wykonawczych: Przechowywanie informacji o statystykach wykonania i jest to prawdopodobnie najczęściej aktualizowany sklep. Te statystyki reprezentują dane wykonania zapytania.
Query Wait Stats Store: Utrwalanie i przechwytywanie informacji o statystykach oczekiwania.
UWAGA: Query Wait Stats Store jest dostępny tylko w SQL Server 2017+
źródło
Podobnie jak w SQL Server Management Studio (już wyjaśnione), jest to również możliwe z Datagrip, jak wyjaśniono tutaj .
źródło
Oto jedna ważna rzecz, którą należy wiedzieć, oprócz wszystkiego, co powiedziano wcześniej.
Plany zapytań są często zbyt skomplikowane, aby mogły być reprezentowane przez wbudowany typ kolumny XML, który ma ograniczenie do 127 poziomów zagnieżdżonych elementów. Jest to jeden z powodów, dla których sys.dm_exec_query_plan może zwrócić
NULL
lub nawet zgłosić błąd we wcześniejszych wersjach MS SQL, więc ogólnie bezpieczniej jest używać zamiast tego sys.dm_exec_text_query_plan . Ta ostatnia ma również przydatną funkcję bonusową polegającą na wyborze planu dla konkretnego zestawienia, a nie całej partii. Oto, w jaki sposób używasz go do przeglądania planów dla aktualnie uruchomionych instrukcji:Kolumna tekstowa w tabeli wynikowej nie jest jednak bardzo przydatna w porównaniu z kolumną XML. Aby móc kliknąć wynik, który zostanie otwarty w osobnej zakładce jako diagram, bez konieczności zapisywania jego zawartości do pliku, możesz skorzystać z małej sztuczki (pamiętaj, że nie możesz po prostu użyć
CAST(... AS XML)
), chociaż będzie to działać tylko dla jeden rząd:źródło
Możesz to również zrobić za pomocą programu PowerShell, używając SET STATISTICS XML ON, aby uzyskać aktualny plan. Napisałem to tak, aby łączyło plany z wieloma oświadczeniami w jeden plan;
źródło
Szacowany plan wykonania
Szacowany plan wykonania jest generowany przez Optymalizator bez uruchamiania zapytania SQL.
Aby uzyskać szacunkowy plan wykonania, musisz włączyć
SHOWPLAN_ALL
ustawienie przed wykonaniem zapytania.ZESTAW SHOWPLAN_ALL WŁĄCZONY
Teraz podczas wykonywania następującego zapytania SQL:
SQL Server wygeneruje następujący szacowany plan wykonania:
Po uruchomieniu zapytania jesteśmy zainteresowani uzyskaniem szacunkowego planu wykonania, należy go wyłączyć,
SHOWPLAN_ALL
ponieważ w przeciwnym razie bieżąca sesja bazy danych wygeneruje tylko szacowany plan wykonania zamiast wykonywania dostarczonych zapytań SQL.Szacowany plan programu SQL Server Management Studio
W aplikacji SQL Server Management Studio można łatwo uzyskać szacunkowy plan wykonania dowolnego zapytania SQL, naciskając
CTRL+L
skrót klawiszowy.Rzeczywisty plan wykonania
Rzeczywisty plan wykonania SQL jest generowany przez Optymalizator podczas uruchamiania zapytania SQL. Jeśli statystyki tabeli bazy danych są dokładne, rzeczywisty plan nie powinien znacząco różnić się od szacowanego.
Aby uzyskać rzeczywisty plan wykonania na serwerze SQL, musisz włączyć
STATISTICS IO, TIME, PROFILE
ustawienia, zgodnie z ilustracją następującego polecenia SQL:Teraz, podczas uruchamiania poprzedniego zapytania, SQL Server wygeneruje następujący plan wykonania:
Po uruchomieniu zapytania jesteśmy zainteresowani uzyskaniem rzeczywistego planu wykonania, musisz wyłączyć takie
STATISTICS IO, TIME, PROFILE ON
ustawienia:Aktualny plan programu SQL Server Management Studio
W aplikacji SQL Server Management Studio można łatwo uzyskać szacunkowy plan wykonania dowolnego zapytania SQL, naciskając
CTRL+M
skrót klawiszowy.źródło
Wyjaśnienie planu wykonania może być bardzo szczegółowe i zajmuje sporo czasu na czytanie, ale podsumowując, jeśli użyjesz „wyjaśnij” przed zapytaniem, powinno ono dostarczyć wielu informacji, w tym, które części zostały wykonane jako pierwsze i tak dalej. jeśli chcesz przeczytać więcej szczegółów na ten temat, skompilowałem mały blog na ten temat, który również wskazuje właściwe referencje. https://medium.com/swlh/jetbrains-datagrip-explain-plan-ac406772c470
źródło