Wyświetlanie planów zapytań w Server Management Studio

9

Kolejne pytanie dotyczące serwera SQL: mam proste zapytanie, które daje mi najbardziej obciążający procesor SQL od czasu zresetowania liczników:

select top 10  
    sum(qs.total_worker_time) as total_cpu_time,  
    sum(qs.execution_count) as total_execution_count, 

    qs.plan_handle, st.text  
from  
    sys.dm_exec_query_stats qs 
cross apply sys.dm_exec_sql_text(qs.plan_handle) as st
group by qs.plan_handle, st.text 
order by sum(qs.total_worker_time) desc

Pytanie 1: Czym dokładnie jest plan_handle? Nie wydaje się to być skrótem planu, tak jak w Oracle. Pytam, bo chcę być w stanie wykryć sytuację, w której zmienia się plan wyciągu.

Pytanie 2: Gdy mam już plan_handle, interesuje mnie faktyczny plan. Tak więc na przykład:

select * from sys.dm_exec_query_plan (0x060006001F176406B8413043000000000000000000000000)

W kolumnie query_plan otrzymuję link, który po kliknięciu wyświetla dokument XML. Jeśli zapiszę go na dysku jako cokolwiek.sqlplan, mogę go dwukrotnie kliknąć w systemie Windows i wyświetla się poprawnie w Management Studio. Z pewnością musi istnieć sposób na uniknięcie tego kroku ?!

Pytanie 3: Czy istnieje sposób na konwersję XML z powrotem do formatu tekstowego, jak w dawnych czasach SET SHOWPLAN_TEXT? Chcę móc je wyświetlać graficznie, ale także automatyzować różnicowanie ich w znaczący sposób.

Dzięki!

Gajusz
źródło

Odpowiedzi:

7

Znalazłem następującą wskazówkę w książce SQL Server 2008 Wewnętrzne i rozwiązywanie problemów autorstwa Wrox Press:

Jeśli korzystasz z SQL 2008 SSMS połączonego z SQL 2005 Server, kliknięcie planu zapytań XML spowoduje automatyczne załadowanie graficznego planu zapytań.

Sprawdziłem, czy zadziałało, używając następującego zapytania z tej samej książki:

select session_id, text, query_plan
from sys.dm_exec_requests
cross apply sys.dm_exec_sql_text(sql_handle)
cross apply sys.dm_exec_query_plan(plan_handle)

Ponadto, jeśli jeszcze na to nie spojrzałeś, sprawdź darmowy Eksplorator planów SQL Sentry. Najpierw musisz zapisać plik XML na dysku jako .sqlplan, ale oferuje on znacznie łatwiejszy w użyciu widok planu wykonania SQL. Mam nadzieję, że kiedyś ktoś wymyśli narzędzie Różnice w planie wykonania wizualnego. :RE

Jeff
źródło
9

A1: Uchwyt_planu jest skrótem dla grupy instrukcji lub partii.

A2: Nie, dm_exec_query_plan zwraca plan zapytań w formacie XML, więc musisz go kliknąć, aby zobaczyć wykres.

A3 Spróbuj tego:

SELECT query_plan 
FROM sys.dm_exec_text_query_plan (0x06000100A27E7C1FA821B10600,0,-1);
SQLRockstar
źródło
1
Wracam, <ShowPlanXML xmlns="http://schemas.microsoft.com...ale nadal nie ma możliwości wyświetlenia go bezpośrednio - .sqlplannajpierw muszę zapisać go na dysku jako plik. Dziwne. Dzięki tho :)
Gajusz