Skip to content

¿Qué es un Plan de Ejecución en SQL Server?

  • by

Hola 👋

Bienvenidos a un nuevo post, en esta ocasión les voy a platicar un poco sobre qué es un Plan de Ejecución en SQL Server y por qué debería importarnos al momento de hacer nuestros queries, para cualquier tarea que estemos desarrollando, llámese extracción, limpieza, exploración de datos o lo que sea.

Les había comentado en mi último post que el performance o rendimiento de nuestros queries es bien importante, sobre todo si estamos trabajando en alguna aplicación que nuestros clientes ven y necesitan tener la información de manera rápida y eficiente en su pantalla.

BUENO, ¿QUÉ ES UN PLAN DE EJECUCIÓN?

Básicamente un plan de ejecución (o execution plan, o explain plan) es el resultado de los cálculos que hizo el Query Optimizer para ejecutar de la manera más eficiente nuestro query.

Los planes de ejecución le dicen a SQL Server cómo ejecutar un query o cómo se ejecutó un query, siendo estos los principales métodos para resolver nuestros problemas de performance, en lugar de estar adivinando por qué nuestro query hace miles de escaneos completos a la tabla. Con el plan de ejcución del query podemos ver exactamente qué parte de nuestra consulta está dando problemas.

Por ejemplo, tu consulta podría estar leyendo toda una tabla completa cuando podrías quitar una función en tu condición WHERE y traer solamente las filas que necesitas. El plan de ejecución puede mostrar esto y más.

PLAN DE EJECUCIÓN REAL Y ESTIMADO

Existen dos tipos de planes de ejecución en SQL Server, el real (Actual Execution Plan) y el estimado (Estimated Execution Plan).

En el Estimated Execution Plan, el query optimizer genera un plan de forma gráfica sin ejecutar el query, este nos puede servir para cuando tenemos una consulta que toma mucho tiempo y queremos darnos una idea de los pasos que va a realizar para ejecutarla, lo único que vemos en este caso es el plan de ejecución sin ninguna otra información.

El Actual Execution Plan es la representación real de la ejecución de nuestro query, aquí podemos ver los pasos tomados cuando se ejecutó nuestro query. Si tenemos un stored procedure con distintos queries dentro, SQL Server va a crear un plan de ejecución para cada una de ellos, el problema aquí es que tenemos que esperar a que termine nuestro query o stored procedure para poder verlo.

A partir de SQL Server Management Studio 13, se implementó una función llamada Live Query Statistics, esto nos da un plan de ejecución en vivo en el cual podemos ver en tiempo real información sobre la ejecución de nuestro query.

¿DÓNDE VEO LOS PLANES DE EJECUCIÓN?

Hay varias formas de ver los planes de ejecución de nuestros queries. Como por ejemplo:

En la imagen de arriba te muestro dónde encuentras los botones para ver los planes de ejecución, se encuentran en la barra de herramientas casi al lado del boton Execute, son tres botones diferentes. El de la izquierda, si lo presionas vas a ver el plan de ejecución estimado, el de en medio es el real, y en mi caso el de la derecha, las estadísticas de mi query en vivo. Recuerda que esto es para SSMS 13.x, yo estoy usando la versión más reciente que es la 18.7.

Además de la barra de herramientas, puedes encontrar los planes de ejecución si vas al menú Query.

Si te das cuenta, también hay tenemos atajos del teclado para mostrar los planes de ejecución. Para ver el estimado, presionas Contrl + L y te lo va a desplegar en tu pantalla. Si quieres ver el real, presionas Control + M, este va a incluir el plan de ejecución la siguiente vez que ejecutes tu query.

AJÁ, Y ¿CÓMO SE VE UN PLAN DE EJECUCIÓN?

Bueno, ya les platiqué como mostrar los planes y así… ahora vamos un par de ejemplos. De hecho vamos a ver el mismo pero como estimado y el real, a ver si hay alguna diferencia.

SELECT 
    t.EmployeeName
,	t.ShiftName
,	t.ShiftDate
,	(
        SELECT TOP 1 
            ShiftDate 
        FROM EmployeeShift AS tlead
        WHERE 
            tlead.EmployeeName = t.EmployeeName
        AND t.ShiftName = tlead.ShiftName
        AND tlead.ShiftDate > t.ShiftDate
        ORDER BY 
            ShiftDate
    ) AS NextShift
FROM
    EmployeeShift AS t
WHERE
    t.ShiftName = 'Night'
AND	t.ShiftDate = '2015-03-01'
ORDER BY
    t.EmployeeName ASC;

Aquí podemos ver los planes de ejecución del query de arriba. El primero es el estimado y el segundo el actual o real. Si ven, son muy parecidos, pero si miramos más de cerca podemos ver que difieren un poco. Pero eso es para otro post 😛.

Estimated Execution Plan
Estimated Execution Plan
Actual Execution Plan
Actual Execution Plan

Todos esos iconitos que se ven en los planes, son operaciones físicas que SQL Server tuvo qué hacer para ejecutar nuestro query, cada uno de ellos significa algo y tienen su tarea específica.

Pues ahí está, estos son los fundamentos de los planes de ejecución, obviamente hay mucho más por atrás de esto pero no los quiero llenar de información y quería dejar este post lo más resumido posible.

Hablo más sobre planes de ejecución en mis cursos, si quieren ver los que tengo disponibles, pueden ir aquí. Y me pueden contactar por aquí o me pueden mandar un correo a beno@learningsql.com.mx si necesitan más información.

En fin, espero les haya gustado. Gracias por leerme, los veo luego!

Cheers! 🍻


Discover more from Ben Rodríguez

Subscribe to get the latest posts sent to your email.

Discover more from Ben Rodríguez

Subscribe now to keep reading and get access to the full archive.

Continue reading