Planes de ejecución estimados y reales de Microsoft SQL Server

Supongamos que está construyendo una nueva casa y tiene un contrato con un constructor. Después de un cuidadoso examen del área, la altura y los materiales necesarios, estima que tomará 120 días construir una nueva casa. Después de construir la casa, en realidad tomó 200 días construirla.

Hay una diferencia entre su estimación y el resultado real. Esto se aplica también a los planes de ejecución de consultas en el servidor SQL, específicamente los planes de ejecución estimados frente a los reales.

Este tutorial contiene un Plan de ejecución estimado así como un Plan de ejecución actual en SQL Server.

Planes de ejecución estimados vs. reales: ¿Qué es un plan de ejecución?

El plan de ejecución es un intento del optimizador de consultas para encontrar la forma menos rentable y eficiente de ejecutar una consulta T-SQL. Para producir un plan de ejecución, el servidor SQL utiliza diferentes algoritmos, estadísticas, permutaciones y combinaciones de uniones e índices para generar un plan de ejecución eficiente para una consulta.

El optimizador de consultas siempre intenta generar un plan de ejecución que ayudará a ejecutar la consulta más rápidamente con menos CPU y la utilización de E / S.

Puede mostrar que una tabla está realizando una exploración de tabla debido a un índice faltante. Para comenzar con los problemas de rendimiento, la mayoría de las veces debemos analizar el plan de ejecución para obtener una idea general de dónde se está quedando atrás la consulta.

Plan de Ejecución Estimado

1. Se genera un plan de ejecución estimado sin ejecutar realmente la consulta. Se basa en las estadísticas disponibles sobre índices.

2. Los planes de ejecución estimados salen del optimizador de consultas. Por lo tanto, se considera como un plan lógico.

3. El plan de ejecución estimado es siempre el mismo que el plan de ejecución real, pero puede diferir debido a las estadísticas que no se actualizan, a los cambios en la estructura de la tabla subyacente, a las grandes operaciones de inserción / eliminación / actualización, a los índices faltantes ya otros factores.

4. Es posible que no se genere un plan de ejecución estimado si un procedimiento implica la creación de tablas temporales o variables de tabla. Debido a que no se ejecuta una consulta del plan estimado, las tablas temporales no se consideran cuando se produce un plan de ejecución estimado.

Plan de ejecución real

1. Se genera un plan de ejecución real después de ejecutar la consulta. Es más informativo y confiable, ya que se basa en la ejecución real y no en las estadísticas estimadas.

2. Un plan de ejecución real puede tardar más tiempo en generarse si su consulta es compleja, ya que tiene que ejecutar la consulta para generar un plan. Si tiene una consulta compleja, es mejor verificar primero el plan estimado.

3. Trabajar con un plan de ejecución real es confiable mientras se resuelven problemas relacionados con el rendimiento, ya que nos proporciona la información correcta y real.

Obtener un plan de ejecución estimado

Varias opciones están disponibles para generar un plan de ejecución estimado.

1. Seleccione una consulta. Haga clic con el botón derecho en una ventana de consulta y seleccione Mostrar el plan de ejecución estimado.

2. Haga clic en el Mostrar plan de ejecución estimado Opción en la barra de herramientas principal.

3. Seleccione una consulta y presione CTRL + L combinación de teclas del teclado.

Obtener un plan de ejecución real

1. Haga clic en el Plan de ejecución estimado real Opción en la barra de herramientas principal.

2. Seleccione una consulta y presione CTRL + M combinación de teclas del teclado.

Ejemplo:

No se puede obtener un plan estimado para consultas que involucran tablas temporales, ya que una consulta es ejecutada por el motor de consulta para obtener el plan de ejecución estimado.

Seleccione la consulta. Haga clic en Mostrar el plan de ejecución estimado y obtendrá un error.

Nombre de objeto inválido '#TempTable'.

USE master SELECT * INTO #TempTable FROM master ... spt_values; seleccione * de #TempTable; 

Lea más sobre la base de datos y la programación SQL publicada en Tech-Recipes.