Mostrar planes de consulta en Server Management Studio

9

Otra pregunta del servidor SQL: tengo una consulta simple que me da el SQL más intensivo de CPU desde que se restablecieron los contadores:

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

Pregunta 1: ¿Qué es exactamente el plan_handle? No parece ser un hash del plan, como lo es en Oracle. Pregunto porque quiero poder detectar la situación en la que el plan de una declaración tiene cambios.

Pregunta 2: Una vez que tengo un plan_handle, estoy interesado en el plan real. Así lo hago, por ejemplo:

select * from sys.dm_exec_query_plan (0x060006001F176406B8413043000000000000000000000000)

En la columna query_plan obtengo un enlace que cuando hago clic muestra un documento XML. Si lo guardo en el disco como whatever.sqlplan, puedo hacer doble clic en Windows y se muestra correctamente en Management Studio. ¿Seguramente debe haber una manera de evitar este paso?

Pregunta 3: ¿Hay alguna forma de volver a convertir el XML a un formato de texto, como en los viejos tiempos de SET SHOWPLAN_TEXT? Quiero poder verlos gráficamente, pero también automatizar la diferenciación de alguna manera significativa.

¡Gracias!

Gayo
fuente

Respuestas:

7

Encontré el siguiente consejo en el libro interno de SQL Server 2008 y solución de problemas de Wrox Press:

Si utiliza SQL 2008 SSMS conectado a un servidor SQL 2005, cuando hace clic en el plan de consulta XML, cargará el plan de consulta gráfico automáticamente.

Verifiqué que funcionó usando la siguiente consulta del mismo libro:

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)

Además, si aún no lo ha visto, consulte el Explorador de planes gratuito de SQL Sentry. Primero tendrá que guardar el XML en el disco como .sqlplan, pero ofrece una vista mucho más fácil de usar de un Plan de ejecución de SQL. Esperemos que alguien presente alguna vez una herramienta Diff del Plan de ejecución visual. :RE

Jeff
fuente
9

A1: plan_handle es un hash para un grupo de declaraciones o lotes.

A2: No, dm_exec_query_plan devuelve el plan de consulta en formato XML, por lo que debe hacer clic en él para ver el gráfico.

A3. Prueba esto:

SELECT query_plan 
FROM sys.dm_exec_text_query_plan (0x06000100A27E7C1FA821B10600,0,-1);
SQLRockstar
fuente
1
Regreso <ShowPlanXML xmlns="http://schemas.microsoft.com...pero todavía no hay forma de mostrarlo directamente; .sqlplanprimero necesito guardarlo en el disco como un archivo. Extraño. Gracias ':)
Gaius