sql >> Base de Datos >  >> RDS >> Sqlserver

¿Cómo obtengo un plan de ejecución de consultas en SQL Server?

Hay una serie de métodos para obtener un plan de ejecución, cuál usar dependerá de sus circunstancias. Por lo general, puede usar SQL Server Management Studio para obtener un plan; sin embargo, si por algún motivo no puede ejecutar su consulta en SQL Server Management Studio, puede resultarle útil poder obtener un plan a través de SQL Server Profiler o inspeccionando la caché del plan.

Método 1:uso de SQL Server Management Studio

SQL Server viene con un par de características interesantes que hacen que sea muy fácil capturar un plan de ejecución, simplemente asegúrese de que el elemento de menú "Incluir plan de ejecución real" (que se encuentra en el menú "Consulta") esté marcado y ejecute su consulta normalmente. .

Si está tratando de obtener el plan de ejecución para declaraciones en un procedimiento almacenado, debe ejecutar el procedimiento almacenado, así:

exec p_Example 42

Cuando se complete su consulta, debería ver una pestaña adicional titulada "Plan de ejecución" en el panel de resultados. Si ejecutó muchas declaraciones, es posible que vea muchos planes en esta pestaña.

Desde aquí puede inspeccionar el plan de ejecución en SQL Server Management Studio, o hacer clic con el botón derecho en el plan y seleccionar "Guardar plan de ejecución como..." para guardar el plan en un archivo en formato XML.

Método 2:usar las opciones de SHOWPLAN

Este método es muy similar al método 1 (de hecho, esto es lo que SQL Server Management Studio hace internamente), sin embargo, lo he incluido para completar o si no tiene SQL Server Management Studio disponible.

Antes de ejecutar su consulta, ejecute uno de las siguientes afirmaciones. La declaración debe ser la única declaración en el lote, es decir, no puede ejecutar otra declaración al mismo tiempo:

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

Estas son opciones de conexión, por lo que solo necesita ejecutar esto una vez por conexión. A partir de este momento, todas las sentencias que se ejecuten estarán acompañadas de un conjunto de resultados adicional. que contiene su plan de ejecución en el formato deseado:simplemente ejecute su consulta como lo haría normalmente para ver el plan.

Una vez que haya terminado, puede desactivar esta opción con la siguiente declaración:

SET <<option>> OFF

Comparación de formatos de planes de ejecución

A menos que tenga una fuerte preferencia, mi recomendación es usar el STATISTICS XML opción. Esta opción es equivalente a la opción "Incluir plan de ejecución real" en SQL Server Management Studio y proporciona la mayor cantidad de información en el formato más conveniente.

  • SHOWPLAN_TEXT - Muestra un plan de ejecución estimado basado en texto básico, sin ejecutar la consulta
  • SHOWPLAN_ALL - Muestra un plan de ejecución estimado basado en texto con estimaciones de costos, sin ejecutar la consulta
  • SHOWPLAN_XML - Muestra un plan de ejecución estimado basado en XML con estimaciones de costos, sin ejecutar la consulta. Esto es equivalente a la opción "Mostrar plan de ejecución estimado..." en SQL Server Management Studio.
  • STATISTICS PROFILE - Ejecuta la consulta y muestra un plan de ejecución real basado en texto.
  • STATISTICS XML - Ejecuta la consulta y muestra un plan de ejecución real basado en XML. Esto es equivalente a la opción "Incluir plan de ejecución real" en SQL Server Management Studio.

Método 3:uso del analizador de SQL Server

Si no puede ejecutar su consulta directamente (o su consulta no se ejecuta lentamente cuando la ejecuta directamente; recuerde que queremos un plan de la consulta que funciona mal), entonces puede capturar un plan usando un seguimiento de SQL Server Profiler. La idea es ejecutar su consulta mientras se ejecuta un seguimiento que captura uno de los eventos "Showplan".

Tenga en cuenta que dependiendo de la carga puede use este método en un entorno de producción, sin embargo, obviamente debe tener cuidado. Los mecanismos de generación de perfiles de SQL Server están diseñados para minimizar el impacto en la base de datos, pero esto no significa que no habrá ningún impacto en el rendimiento. También puede tener problemas para filtrar e identificar el plan correcto en su seguimiento si su base de datos está bajo un uso intensivo. ¡Obviamente, debe consultar con su DBA para ver si están contentos con que haga esto en su preciosa base de datos!

  1. Abra SQL Server Profiler y cree un nuevo seguimiento que se conecte a la base de datos deseada en la que desea registrar el seguimiento.
  2. En la pestaña "Selección de eventos", marque "Mostrar todos los eventos", marque la fila "Rendimiento" -> "Showplan XML" y ejecute el seguimiento.
  3. Mientras se ejecuta el seguimiento, haga lo que sea necesario para que se ejecute la consulta de ejecución lenta.
  4. Espere a que se complete la consulta y detenga el seguimiento.
  5. Para guardar el seguimiento, haga clic con el botón derecho en el xml del plan en SQL Server Profiler y seleccione "Extraer datos de eventos..." para guardar el plan en un archivo en formato XML.

El plan que obtiene es equivalente a la opción "Incluir plan de ejecución real" en SQL Server Management Studio.

Método 4:inspección de la caché de consultas

Si no puede ejecutar su consulta directamente y tampoco puede capturar un seguimiento del generador de perfiles, aún puede obtener un plan estimado al inspeccionar el caché del plan de consultas SQL.

Inspeccionamos el caché del plan consultando los DMV de SQL Server. La siguiente es una consulta básica que enumerará todos los planes de consulta almacenados en caché (como xml) junto con su texto SQL. En la mayoría de las bases de datos, también deberá agregar cláusulas de filtrado adicionales para filtrar los resultados solo a los planes que le interesan.

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)

Ejecute esta consulta y haga clic en el plan XML para abrir el plan en una nueva ventana; haga clic con el botón derecho y seleccione "Guardar plan de ejecución como..." para guardar el plan en un archivo en formato XML.

Notas:

Debido a que hay tantos factores involucrados (que van desde la tabla y el esquema del índice hasta los datos almacenados y las estadísticas de la tabla), debe siempre intente obtener un plan de ejecución de la base de datos que le interesa (normalmente la que está experimentando un problema de rendimiento).

No puede capturar un plan de ejecución para procedimientos almacenados cifrados.

Planes de ejecución "reales" frente a "estimados"

Un real plan de ejecución es aquel en el que SQL Server realmente ejecuta la consulta, mientras que un plan estimado plan de ejecución SQL Server resuelve lo que sería hacer sin ejecutar la consulta. Aunque es lógicamente equivalente, un plan de ejecución real es mucho más útil, ya que contiene detalles y estadísticas adicionales sobre lo que sucedió realmente al ejecutar la consulta. Esto es esencial cuando se diagnostican problemas en los que las estimaciones de SQL Server están mal (como cuando las estadísticas no están actualizadas).

  • Plan de ejecución real y estimado revisado

¿Cómo interpreto un plan de ejecución de consultas?

Este es un tema lo suficientemente digno de un libro (gratuito) por derecho propio.

Véase también:

  • Conceptos básicos del plan de ejecución
  • Permiso SHOWPLAN y lotes de Transact-SQL
  • SQL Server 2008:uso de hash de consulta y hash de plan de consulta
  • Análisis de la caché del plan de SQL Server