Отображение планов запросов в Server Management Studio

9

Другой вопрос о сервере SQL: у меня есть простой запрос, который дает мне наиболее интенсивно использующий процессор SQL, так как счетчики были сброшены:

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

Вопрос 1: Что именно plan_handle? Похоже, это не хэш плана, как в Oracle. Я спрашиваю, потому что я хочу быть в состоянии обнаружить ситуацию, в которой изменяется план заявления.

Вопрос 2: Как только у меня есть plan_handle, меня интересует фактический план. Так я делаю, например:

select * from sys.dm_exec_query_plan (0x060006001F176406B8413043000000000000000000000000)

В столбце query_plan я получаю ссылку, которая при нажатии отображает документ XML. Если я сохраню его на диске как what.sqlplan, я могу дважды щелкнуть по нему в Windows, и он правильно отобразится в Management Studio. Наверняка должен быть способ избежать этого шага ?!

Вопрос 3: Есть ли способ конвертировать XML обратно в текстовый формат, как в старые времена SET SHOWPLAN_TEXT? Я хочу иметь возможность просматривать их графически, а также автоматизировать их отображение каким-либо значимым способом.

Спасибо!

Gaius
источник

Ответы:

7

Я нашел следующий совет в книге по внутренним компонентам и устранению неполадок SQL Server 2008 от Wrox Press:

Если вы используете SSMS SQL 2008, подключенную к серверу SQL 2005, при нажатии на план запроса XML он автоматически загрузит план графического запроса.

Я подтвердил, что это работает, используя следующий запрос из той же книги:

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)

Кроме того, если вы еще не посмотрели его, ознакомьтесь с бесплатным обозревателем планов SQL Sentry. Сначала вам придется сохранить XML на диск как .sqlplan, но он предлагает гораздо более простое представление плана выполнения SQL. Надеемся, что кто-нибудь когда-нибудь придумает инструмент Различия в плане выполнения. : D

Джефф
источник
9

A1: plan_handle - это хеш для группы операторов или пакета.

A2: Нет, dm_exec_query_plan возвращает план запроса в формате XML, поэтому вам нужно щелкнуть по нему, чтобы увидеть график.

A3. Попробуй это:

SELECT query_plan 
FROM sys.dm_exec_text_query_plan (0x06000100A27E7C1FA821B10600,0,-1);
SQLRockstar
источник
1
Я возвращаюсь, <ShowPlanXML xmlns="http://schemas.microsoft.com...но до сих пор нет способа отобразить его напрямую - мне нужно .sqlplanсначала сохранить его на диск в виде файла. Weird. Спасибо, что :)
Гай