Jak uzyskać plan wykonania zapytania?

W Microsoft SQL Server Jak mogę uzyskać plan wykonania zapytania dla zapytania / procedury składowanej?

Author: Alexander Abakumov, 2011-09-09

9 answers

Istnieje wiele metod uzyskania planu egzekucji, który z nich będzie zależał od okoliczności. Zwykle możesz użyć SQL Server Management Studio, aby uzyskać plan, jednak jeśli z jakiegoś powodu nie możesz uruchomić zapytania w SQL Server Management Studio, pomocne może okazać się uzyskanie planu za pomocą SQL Server Profiler lub sprawdzając pamięć podręczną planu.

Metoda 1-Korzystanie z SQL Server Management Studio

SQL Server jest wyposażony w kilka zgrabnych funkcje, które ułatwiają przechwytywanie planu realizacji, po prostu upewnij się, że element menu "Dołącz rzeczywisty Plan realizacji" (znajdujący się w menu "zapytanie") jest zaznaczony i uruchom zapytanie normalnie.

Dołącz pozycję menu planu wykonania akcji

Jeśli próbujesz uzyskać plan wykonania instrukcji w procedurze składowanej, powinieneś wykonać procedurę składowaną w następujący sposób:

exec p_Example 42

Po zakończeniu zapytania powinna pojawić się dodatkowa zakładka zatytułowana "plan realizacji" w wynikach pane. Jeśli uruchomiłeś wiele instrukcji, możesz zobaczyć wiele planów wyświetlanych na tej karcie.

Zrzut ekranu planu realizacji

Tutaj możesz sprawdzić plan realizacji w SQL Server Management Studio, lub kliknij prawym przyciskiem myszy plan i wybierz " Zapisz plan realizacji jako..."zapisanie planu do pliku w formacie XML.

Metoda 2-Korzystanie z opcji SHOWPLAN

Ta metoda jest bardzo podobna do metody 1( w rzeczywistości to jest to, co SQL Server Management Studio robi wewnętrznie), jednak uwzględniłem to dla kompletności lub jeśli nie masz SQL Server Management Studio dostępne.

Zanim uruchomisz zapytanie, 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:

SET SHOWPLAN_TEXT ON
SET SHOWPLAN_ALL ON
SET SHOWPLAN_XML ON
SET STATISTICS PROFILE ON
SET STATISTICS XML ON -- The is the recommended option to use

Są to Opcje połączenia, więc musisz je uruchomić tylko raz na każde połączenie. Od tego momentu na wszystkich poleceniach uruchamianych będzie dołączony dodatkowy resultset zawierający plan realizacji w żądanym formacie - po prostu uruchom zapytanie tak, jak zwykle, aby zobaczyć plan.

Po zakończeniu możesz wyłączyć tę opcję za pomocą następującej instrukcji:

SET <<option>> OFF

Porównanie formatów planu realizacji

Jeśli nie masz silnych preferencji, rekomenduję skorzystanie z opcji STATISTICS XML. Ta opcja jest równoznaczna z opcją "Include Actual Execution Plan" w SQL Server Management Studio i dostarcza najwięcej informacji w najbardziej wygodny format.

  • SHOWPLAN_TEXT - wyświetla podstawowy plan wykonania oparty na tekście, bez wykonywania zapytania
  • SHOWPLAN_ALL - wyświetla szacunkowy plan realizacji oparty na tekście z szacunkami kosztów, bez wykonywania zapytania
  • SHOWPLAN_XML - wyświetla szacunkowy plan realizacji oparty na XML z szacunkami kosztów, bez wykonywania zapytania. Jest to równoważne z " Wyświetl szacowany plan realizacji..."opcja w SQL Server Management Studio.
  • STATISTICS PROFILE - Wykonuje zapytanie i wyświetla rzeczywisty plan wykonania oparty na tekście.
  • STATISTICS XML - wykonuje zapytanie i wyświetla rzeczywisty plan wykonania oparty na XML. Jest to równoważne opcji "Include Actual Execution Plan" w SQL Server Management Studio.

Metoda 3-Korzystanie z SQL Server Profiler

Jeśli nie możesz uruchomić zapytania bezpośrednio (lub Twoje zapytanie nie działa powoli, gdy wykonujesz je bezpośrednio-pamiętaj, że chcemy planu zapytania wykonującego się źle), możesz przechwytywanie planu za pomocą śledzenia profilera SQL Server. Chodzi o to, aby uruchomić zapytanie, podczas gdy ślad, który przechwytuje jedno ze zdarzeń "Showplan" jest uruchomiony.

Należy pamiętać, że w zależności od obciążenia można używać tej metody w środowisku produkcyjnym, jednak należy oczywiście zachować ostrożność. Mechanizmy profilowania SQL Server mają na celu zminimalizowanie wpływu na bazę danych, ale nie oznacza to, że nie będzie żadnego wpływu na wydajność. Możesz również mieć problemy filtrowanie i identyfikowanie prawidłowego planu w śledzeniu, jeśli baza danych jest intensywnie używana. Powinieneś oczywiście sprawdzić w swoim DBA, aby sprawdzić, czy są zadowoleni z tego, że robisz to w ich cennej bazie danych!

  1. Otwórz SQL Server Profiler i utwórz nowy ślad łączący się z żądaną bazą danych, na podstawie której chcesz nagrać ślad.
  2. w zakładce "wybór zdarzeń" zaznacz "Pokaż wszystkie zdarzenia", zaznacz wiersz" wydajność "- > "Showplan XML" i uruchom trace.
  3. gdy ślad jest uruchomiony, zrób wszystko, co musisz zrobić, aby uruchomić powolne zapytanie.
  4. poczekaj na zakończenie zapytania i Zatrzymaj śledzenie.
  5. Aby zapisać ślad kliknij prawym przyciskiem myszy Plan xml w SQL Server Profiler i wybierz " Wyodrębnij dane zdarzeń..."aby zapisać plan do pliku w formacie XML.

Otrzymany plan jest odpowiednikiem opcji "Include Actual Execution Plan" w SQL Server Management Studio.

Metoda 4 - Sprawdzanie pamięci podręcznej zapytań

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 pamięć podręczną planu poprzez zapytanie 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 musisz również dodać dodatkowe klauzule filtrujące, aby filtrować wyniki do tylko plany, które Cię interesują.

SELECT UseCounts, Cacheobjtype, Objtype, TEXT, query_plan
FROM sys.dm_exec_cached_plans 
CROSS APPLY sys.dm_exec_sql_text(plan_handle)
CROSS APPLY sys.dm_exec_query_plan(plan_handle)

Wykonaj to zapytanie i kliknij plan XML, aby otworzyć plan w nowym oknie-kliknij prawym przyciskiem myszy i wybierz " Zapisz plan realizacji jako..."aby zapisać plan do pliku w formacie XML.

Uwagi:

Ponieważ istnieje tak wiele czynników (począwszy od schematu tabeli i indeksu, aż po zapisane dane i statystyki tabeli), powinieneś zawsze starać się uzyskać plan wykonania z interesującej Cię bazy danych w (Zwykle ten, który ma problem z wydajnością).

Nie można przechwycić planu wykonania dla zaszyfrowanych procedur składowanych.

"rzeczywiste" vs "szacowane" plany realizacji

ANactual execution plan to taki, w którym SQL Server faktycznie uruchamia zapytanie, podczas gdyestimated execution plan SQL Server pracuje nad tym, co zrobiłby bez wykonywania zapytania. Chociaż logicznie równoważny, rzeczywisty plan realizacji jest znacznie bardziej przydatne, ponieważ zawiera dodatkowe szczegóły i statystyki dotyczące tego, co faktycznie się stało podczas wykonywania zapytania. Jest to niezbędne przy diagnozowaniu problemów, w których szacunki serwerów SQL są wyłączone (np. gdy Statystyki są nieaktualne).

Jak interpretować plan wykonania zapytania?

Jest to temat na tyle godny (za darmo) książki w sobie.

Zobacz także:

 450
Author: Justin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-01-17 11:38:28

Oprócz wyczerpującej odpowiedzi już zamieszczonej czasami przydatna jest możliwość programowego dostępu do planu wykonania w celu wyodrębnienia informacji. Przykładowy kod jest poniżej.

DECLARE @TraceID INT
EXEC StartCapture @@SPID, @TraceID OUTPUT
EXEC sp_help 'sys.objects' /*<-- Call your stored proc of interest here.*/
EXEC StopCapture @TraceID

Przykład StartCapture Definicja

CREATE PROCEDURE StartCapture
@Spid INT,
@TraceID INT OUTPUT
AS
DECLARE @maxfilesize BIGINT = 5
DECLARE @filepath NVARCHAR(200) = N'C:\trace_' + LEFT(NEWID(),36)

EXEC sp_trace_create @TraceID OUTPUT, 0, @filepath, @maxfilesize, NULL 

exec sp_trace_setevent @TraceID, 122, 1, 1
exec sp_trace_setevent @TraceID, 122, 22, 1
exec sp_trace_setevent @TraceID, 122, 34, 1
exec sp_trace_setevent @TraceID, 122, 51, 1
exec sp_trace_setevent @TraceID, 122, 12, 1
-- filter for spid
EXEC sp_trace_setfilter @TraceID, 12, 0, 0, @Spid
-- start the trace
EXEC sp_trace_setstatus @TraceID, 1

Przykład StopCapture Definicja

CREATE  PROCEDURE StopCapture
@TraceID INT
AS
WITH  XMLNAMESPACES ('http://schemas.microsoft.com/sqlserver/2004/07/showplan' as sql), 
      CTE
     as (SELECT CAST(TextData AS VARCHAR(MAX)) AS TextData,
                ObjectID,
                ObjectName,
                EventSequence,
                /*costs accumulate up the tree so the MAX should be the root*/
                MAX(EstimatedTotalSubtreeCost) AS EstimatedTotalSubtreeCost
         FROM   fn_trace_getinfo(@TraceID) fn
                CROSS APPLY fn_trace_gettable(CAST(value AS NVARCHAR(200)), 1)
                CROSS APPLY (SELECT CAST(TextData AS XML) AS xPlan) x
                CROSS APPLY (SELECT T.relop.value('@EstimatedTotalSubtreeCost',
                                            'float') AS EstimatedTotalSubtreeCost
                             FROM   xPlan.nodes('//sql:RelOp') T(relop)) ca
         WHERE  property = 2
                AND TextData IS NOT NULL
                AND ObjectName not in ( 'StopCapture', 'fn_trace_getinfo' )
         GROUP  BY CAST(TextData AS VARCHAR(MAX)),
                   ObjectID,
                   ObjectName,
                   EventSequence)
SELECT ObjectName,
       SUM(EstimatedTotalSubtreeCost) AS EstimatedTotalSubtreeCost
FROM   CTE
GROUP  BY ObjectID,
          ObjectName  

-- Stop the trace
EXEC sp_trace_setstatus @TraceID, 0
-- Close and delete the trace
EXEC sp_trace_setstatus @TraceID, 2
GO
 37
Author: Martin Smith,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-09-09 09:43:15

Zakładając, że używasz Microsoft SQL Server Management Studio

  • dla szacunkowy Plan zapytań możesz nacisnąć Ctrl + L lub następujący przycisk.

Tutaj wpisz opis obrazka

  • dla rzeczywistego planu zapytań , możesz nacisnąć Ctrl + M lub poniższy przycisk przed wykonaniem zapytania.

Tutaj wpisz opis obrazka

  • dla Live Query Plan , (tylko w SSMS 2016) użyj następującego przycisku przed wykonuję zapytanie.

Tutaj wpisz opis obrazka

 15
Author: Tigerjz32,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-09-15 12:11:59

Oprócz metod opisanych w poprzednich odpowiedziach, możesz również użyć darmowej przeglądarki planu wykonania i narzędzia optymalizacji zapytań ApexSQL Plan (na które ostatnio wpadłem).

Możesz zainstalować i zintegrować Plan ApexSQL z SQL Server Management Studio, dzięki czemu plany realizacji można przeglądać bezpośrednio z SSMS.

Przeglądanie szacunkowych planów realizacji w planie ApexSQL

  1. kliknij przycisk New Query w SSMS i wklej tekst zapytania w okno tekstowe zapytania. Kliknij prawym przyciskiem myszy i wybierz opcję "Wyświetl szacowany plan realizacji" z menu kontekstowego.

Nowy przycisk zapytania w SSMS

  1. diagramy planu realizacji zostaną wyświetlone na karcie Plan realizacji w sekcji wyniki. Następnie kliknij prawym przyciskiem myszy plan realizacji i w menu kontekstowym wybierz opcję "Otwórz w planie ApexSQL".

Plan Realizacji

  1. szacunkowy plan realizacji zostanie otwarty w planie ApexSQL i może być analizowany pod kątem optymalizacja zapytań.

Szacunkowy plan realizacji

Przeglądanie rzeczywistych planów realizacji w planie ApexSQL

Aby wyświetlić rzeczywisty plan wykonania zapytania, kontynuuj od 2. kroku wspomnianego wcześniej, ale teraz, po wyświetleniu szacunkowego planu, kliknij przycisk "rzeczywisty" na głównym pasku wstążki w planie ApexSQL.

kliknij przycisk "rzeczywisty" na głównym pasku wstążki

Po kliknięciu przycisku "rzeczywisty" zostanie wyświetlony rzeczywisty plan realizacji ze szczegółowym podglądem kosztów parametry wraz z innymi danymi planu wykonania.

Rzeczywisty plan realizacji

Więcej informacji na temat przeglądania planów realizacji można znaleźć pod adresem ten link .

 12
Author: Marcin Czyz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-07-17 12:51:36

Moim ulubionym narzędziem do uzyskiwania i dogłębnej analizy planów wykonania zapytań jest SQL Sentry Plan Explorer. Jest znacznie bardziej przyjazny dla użytkownika, wygodny i wszechstronny do analizy szczegółów i wizualizacji planów wykonawczych niż SSM.

Oto przykładowy zrzut ekranu, aby dowiedzieć się, jaka funkcjonalność jest oferowana przez narzędzie:

SQL Sentry Plan Explorer zrzut ekranu okna

To tylko jeden z widoków dostępnych w narzędziu. Zwróć uwagę na zestaw zakładek na dole okno aplikacji, które pozwala uzyskać różne rodzaje reprezentacji planu realizacji oraz przydatne dodatkowe informacje.

Ponadto nie zauważyłem żadnych ograniczeń jego darmowej edycji, które uniemożliwiają korzystanie z niego na co dzień lub zmuszają do zakupu wersji Pro w końcu. Tak więc, jeśli wolisz trzymać się darmowej edycji, nic nie zabrania ci tego robić.

Aktualizacja: (dzięki Martin Smith ) Plan Explorer jest teraz wolny! Zobacz też http://www.sqlsentry.com/products/plan-explorer/sql-server-query-view Po szczegóły.

 10
Author: Alexander Abakumov,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-09-11 17:53:13

Plany zapytań można uzyskać z rozszerzonej sesji zdarzeń za pomocą zdarzenia query_post_execution_showplan. Oto przykładowa sesja XEvent:

/*
    Generated via "Query Detail Tracking" template.
*/
CREATE EVENT SESSION [GetExecutionPlan] ON SERVER 
ADD EVENT sqlserver.query_post_execution_showplan(
    ACTION(package0.event_sequence,sqlserver.plan_handle,sqlserver.query_hash,sqlserver.query_plan_hash,sqlserver.session_id,sqlserver.sql_text,sqlserver.tsql_frame,sqlserver.tsql_stack)),

/* Remove any of the following events (or include additional events) as desired. */
ADD EVENT sqlserver.error_reported(
    ACTION(package0.event_sequence,sqlserver.client_app_name,sqlserver.database_id,sqlserver.plan_handle,sqlserver.query_hash,sqlserver.query_plan_hash,sqlserver.session_id,sqlserver.sql_text,sqlserver.tsql_frame,sqlserver.tsql_stack)
    WHERE ([package0].[greater_than_uint64]([sqlserver].[database_id],(4)) AND [package0].[equal_boolean]([sqlserver].[is_system],(0)))),
ADD EVENT sqlserver.module_end(SET collect_statement=(1)
    ACTION(package0.event_sequence,sqlserver.client_app_name,sqlserver.database_id,sqlserver.plan_handle,sqlserver.query_hash,sqlserver.query_plan_hash,sqlserver.session_id,sqlserver.sql_text,sqlserver.tsql_frame,sqlserver.tsql_stack)
    WHERE ([package0].[greater_than_uint64]([sqlserver].[database_id],(4)) AND [package0].[equal_boolean]([sqlserver].[is_system],(0)))),
ADD EVENT sqlserver.rpc_completed(
    ACTION(package0.event_sequence,sqlserver.client_app_name,sqlserver.database_id,sqlserver.plan_handle,sqlserver.query_hash,sqlserver.query_plan_hash,sqlserver.session_id,sqlserver.sql_text,sqlserver.tsql_frame,sqlserver.tsql_stack)
    WHERE ([package0].[greater_than_uint64]([sqlserver].[database_id],(4)) AND [package0].[equal_boolean]([sqlserver].[is_system],(0)))),
ADD EVENT sqlserver.sp_statement_completed(SET collect_object_name=(1)
    ACTION(package0.event_sequence,sqlserver.client_app_name,sqlserver.database_id,sqlserver.plan_handle,sqlserver.query_hash,sqlserver.query_plan_hash,sqlserver.session_id,sqlserver.sql_text,sqlserver.tsql_frame,sqlserver.tsql_stack)
    WHERE ([package0].[greater_than_uint64]([sqlserver].[database_id],(4)) AND [package0].[equal_boolean]([sqlserver].[is_system],(0)))),
ADD EVENT sqlserver.sql_batch_completed(
    ACTION(package0.event_sequence,sqlserver.client_app_name,sqlserver.database_id,sqlserver.plan_handle,sqlserver.query_hash,sqlserver.query_plan_hash,sqlserver.session_id,sqlserver.sql_text,sqlserver.tsql_frame,sqlserver.tsql_stack)
    WHERE ([package0].[greater_than_uint64]([sqlserver].[database_id],(4)) AND [package0].[equal_boolean]([sqlserver].[is_system],(0)))),
ADD EVENT sqlserver.sql_statement_completed(
    ACTION(package0.event_sequence,sqlserver.client_app_name,sqlserver.database_id,sqlserver.plan_handle,sqlserver.query_hash,sqlserver.query_plan_hash,sqlserver.session_id,sqlserver.sql_text,sqlserver.tsql_frame,sqlserver.tsql_stack)
    WHERE ([package0].[greater_than_uint64]([sqlserver].[database_id],(4)) AND [package0].[equal_boolean]([sqlserver].[is_system],(0)))) 
ADD TARGET package0.ring_buffer
WITH (MAX_MEMORY=4096 KB,EVENT_RETENTION_MODE=ALLOW_SINGLE_EVENT_LOSS,MAX_DISPATCH_LATENCY=30 SECONDS,MAX_EVENT_SIZE=0 KB,MEMORY_PARTITION_MODE=NONE,TRACK_CAUSALITY=ON,STARTUP_STATE=OFF)
GO

Po utworzeniu sesji, (w SSMS) przejdź do Eksploratora obiektów i zagłęb się w zarządzanie / rozszerzone zdarzenia / sesje. Kliknij prawym przyciskiem myszy sesję "GetExecutionPlan" i rozpocznij ją. Kliknij prawym przyciskiem myszy ponownie i wybierz "Watch Live Data".

Następnie otwórz nowe okno zapytań i uruchom jedno lub więcej zapytań. Oto jeden dla AdventureWorks:

USE AdventureWorks;
GO

SELECT p.Name AS ProductName, 
    NonDiscountSales = (OrderQty * UnitPrice),
    Discounts = ((OrderQty * UnitPrice) * UnitPriceDiscount)
FROM Production.Product AS p 
INNER JOIN Sales.SalesOrderDetail AS sod
    ON p.ProductID = sod.ProductID 
ORDER BY ProductName DESC;
GO

Po chwili lub dwóch powinieneś zobaczyć niektóre wyniki w zakładce "GetExecutionPlan: dane na żywo". Kliknij jedno z zdarzeń query_post_execution_showplan w siatce, a następnie kliknij kartę "Plan zapytań" poniżej siatki. Powinno wyglądać podobnie do tego:

Tutaj wpisz opis obrazka

EDIT : kod XEvent i zrzut ekranu zostały wygenerowane z SQL / SSMS 2012 w / SP2. Jeśli używasz SQL 2008/ R2, możesz być w stanie dostosować skrypt żeby go uruchomić. Ale ta wersja nie ma GUI, więc musisz wyodrębnić XML showplan, zapisać go jako *.plik sqlplan i otwórz go w SSMS. To uciążliwe. XEvents nie istniał w SQL 2005 lub wcześniej. Tak więc, jeśli nie jesteś na SQL 2012 lub później, zdecydowanie sugeruję jedną z innych odpowiedzi zamieszczonych tutaj.

 5
Author: Dave Mason,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-11-11 20:01:21

Począwszy od SQL Server 2016+ wprowadzono funkcję sklepu zapytań w celu monitorowania wydajności. Zapewnia wgląd w wybór planu zapytań i wydajność. Nie jest to całkowite zastąpienie zdarzeń trace lub extended, ale ponieważ ewoluuje z wersji na wersję, możemy uzyskać w pełni funkcjonalny magazyn zapytań w przyszłych wydaniach z SQL Server. Główny przepływ zapytania Store

  1. istniejące komponenty SQL Server współdziałają ze sklepem zapytań poprzez wykorzystanie sklepu zapytań Manager.
  2. Menedżer zapytań określa, który sklep ma być używany, a następnie przekazuje wykonanie do tego sklepu (Plan lub statystyki Runtime lub statystyki oczekiwania na zapytanie)
    • Plan Store-utrzymywanie informacji o planie wykonania
    • Runtime Stats Store - utrzymywanie informacji o statystykach wykonania
    • Query Wait Stats Store-utrzymujące się informacje o statystykach oczekiwania.
  3. Plan, Runtime Stats I Wait store używa Query Store jako rozszerzenia do SQL Serwer.

Tutaj wpisz opis obrazka

  1. Włączenie sklepu zapytań: Sklep zapytań działa na poziomie bazy danych na serwerze.

    • Query Store domyślnie nie jest aktywny dla nowych baz danych.
    • nie można włączyć magazynu zapytań dla bazy danych master lub tempdb.
    • Dostępny DMV

      sys.database_query_store_options (Transact-SQL)

  2. Zbieramy informacje w sklepie zapytań : zbieramy wszystkie dostępne informacje z trzech sklepów za pomocą sklepu zapytań DMV (widoki zarządzania danymi).

    • Skład Planu Zapytania: Utrzymywanie informacji o planie wykonania i jest odpowiedzialne za przechwytywanie wszystkich informacji związanych z kompilacją zapytań.

      sys.query_store_query (Transact-SQL) sys.query_store_plan (Transact-SQL) sys.query_store_query_text (Transact-SQL)

    • Sklep Statystyki Runtime: Uporczywe statystyki wykonania i jest to prawdopodobnie najczęściej aktualizowany sklep. Statystyki te reprezentują dane wykonania zapytania.

      sys.query_store_runtime_stats (Transact-SQL)

    • Query Wait Stats Store: Utrzymywanie i przechwytywanie informacji o statystykach oczekiwania.

      sys.query_store_wait_stats (Transact-SQL)

Uwaga: Query Wait Stats Store jest dostępny tylko w SQL Server 2017+

 3
Author: vCillusion,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-25 15:26:03

Oto jedna ważna rzecz, o której warto wiedzieć, oprócz wszystkiego, co zostało powiedziane wcześniej.

Plany zapytań są często zbyt złożone, aby mogły być reprezentowane przez wbudowany typ kolumny XML, który ma ograniczenie 127 poziomów zagnieżdżonych elementów. Jest to jeden z powodów, dla których sys.dm_exec_query_plan może zwracać NULLlub nawet wyrzucać błąd we wcześniejszych wersjach MS SQL, więc ogólnie bezpieczniej jest użyć sys.dm_exec_text_query_plan. Ten ostatni ma również przydatną funkcję bonusową wyboru planu dla konkretnej deklaracji , a nie całej partii. Oto jak go używasz do wyświetlania planów dla aktualnie uruchomionych instrukcji:
SELECT p.query_plan
FROM sys.dm_exec_requests AS r
OUTER APPLY sys.dm_exec_text_query_plan(
                r.plan_handle,
                r.statement_start_offset,
                r.statement_end_offset) AS p

Kolumna tekstowa w wynikowej tabeli nie jest jednak zbyt przydatna w porównaniu z kolumną XML. Aby móc kliknąć wynik, który ma być otwarty w oddzielnej karcie jako diagram, bez konieczności zapisywania jego Zawartości w pliku, możesz użyć małej sztuczki (pamiętaj, że nie możesz użyć tylko CAST(... AS XML)), chociaż będzie to działać tylko dla jednego rząd:

SELECT Tag = 1, Parent = NULL, [ShowPlanXML!1!!XMLTEXT] = query_plan
FROM sys.dm_exec_text_query_plan(
                -- set these variables or copy values
                -- from the results of the above query
                @plan_handle,
                @statement_start_offset,
                @statement_end_offset)
FOR XML EXPLICIT
 0
Author: alkoln,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-06-05 02:22:51

Podobnie jak w przypadku SQL Server Management Studio (już wyjaśniono), jest to również możliwe z Datagrip, jak wyjaśniono tutaj .

  1. Kliknij prawym przyciskiem myszy polecenie SQL i wybierz opcję wyjaśnij plan.
  2. w okienku wyjście kliknij Plan.
  3. domyślnie wyświetlana jest reprezentacja drzewa zapytania. Aby zobaczyć kliknij ikonę Pokaż wizualizację lub naciśnij Ctrl+Shift+Alt + U
 0
Author: Daan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-25 11:03:56