Milena Petrovic

Planes de ejecución de consultas – Entendiendo y leyendo los planes

April 19, 2018 by

En las partes previas de esta serie, explicamos qué son los planes de ejecución de consultas de SQL Server, por qué deberían ser usados, y presentamos varios métodos para mostrarlos. En esta parte, explicaremos los símbolos usados, cómo leer los planes, y cómo usar estos planes en el análisis del desempeño y la resolución de problemas.

La ejecución de consultas y sentencias en un plan de ejecución de consultas gráfico es mostrada por íconos. Cada ícono tiene un color específico y representa una acción específica. Como se muestra en Viendo los planes, los planes de ejecución de consultas también pueden ser mostrados como XML. La presentación gráfica provee un entendimiento rápido de las características y estructura básicas del plan, por lo tanto, es útil para el análisis del desempeño. También provee suficiente información para un análisis más profundo.

Líneas generales para leer un plan de ejecución de consultas SQL Server

  • El plan de ejecución de consultas gráfico tiene la forma de un árbol. La estructura de árbol depende de las sentencias en la consulta
  • Cada consulta en un lote es mostrada en el plan
  • Cada ícono presenta un operador
  • Los íconos son leídos de derecha a izquierda, de arriba abajo
  • El árbol muestra nodos a nivel de padres e hijos
  • Cada nodo hijo está conectado a un nodo padre por flechas
  • El costo de cada consulta está presentado como un porcentaje del costo total del lote. El costo es el tiempo necesario para ejecutar un/a sentencia/consulta/lote. El costo total de cada lote, por ejemplo, la suma de los costos individuales de las consultas debería ser 100%. De todas maneras, es posible que incluso en los planes de ejecución de consultas actuales para consultas costosas, estos costos son mal calculados y la suma es mayor a 100%.

    Estas capturas de pantalla son de ApexSQL Plan, un visualizador de planes de ejecución de consultas SQL Server gratis

  • Los hijos de los mismos padres son emplazados en la misma columna. Esto no significa que todos los operadores en la misma columna tienen el mismo padre.

  • El ancho de la flecha depende del número real/estimado de filas. Las flechas que representan un gran número de filas son más gruesas.

  • Si una consulta tiene múltiples sentencias, los planes de ejecución de consultas son mostrados en sentencias separadas una debajo de la otra. El costo relativo de cada consulta es presentado como un porcentaje del costo total de todas las sentencias. La suma de todas las consultas es 100%.

Los operadores muestran cómo las consultas y las sentencias son ejecutadas. Ellos pueden ser físicos y lógicos. Los operadores lógicos presentan una operación en un nivel conceptual, mientras que los operadores físicos implementan la operación definida por el operador lógico usando un método específico. En otras palabras, un operador físico es un objeto o rutina que ejecuta una operación. Los operadores físicos acceden columnas y filas en tablas y vistas, calculan expresiones, crean enlaces, etc.

Si hay cualquier tipo de alerta, será indicada por un triángulo amarillo en el ícono. El texto de la alerta es mostrado en el cuadro emergente del operador.

Operadores más comúnmente usados y sus íconos de planes de ejecución gráficos

Hay más de 70 íconos de planes de ejecución gráficos usados en planes de ejecución de consultas. Los más comúnmente usados son:

El operador Language Element Catchall, mostrado cuando el ícono adecuado para el operador usado no puede ser encontrado. No indica un error
El operador Resultado, muestra los resultados retornados
El operador de bucle anidado, muestra operadores inne join, left semi join y left anti semi join
El operador Non-clustered Index Delete elimina filas desde un índice no agrupado
El operador Non-clustered Index Insert, inserta filas en el índice no agrupado
El operador Non-clustered Index Scan, lee todas las filas desde el índice no agrupado
El operador Non-clustered Index Seek no escanea toda la tabla/vista para leer los registros necesarios, sino que usa los índices para buscar datos específicos

Íconos de planes de ejecución gráficos similares existen para operadores de índices agrupados.

Basado en el tipo de sentencia, los árboles de planes de ejecución de consultas tienen diferente estructura.

Las sentencias T-SQL y procedimientos almacenados son presentados como raíces de los árboles. Las sentencias llamadas por el procedimiento almacenado son presentadas como hijos en el árbol.


Las sentencias de Lenguaje de Manipulación de Datos (Data Manipulation language, DML) SELECT, INSERT, DELETE y UPDATE también son presentadas como raíces del árbol. El primer hijo representa el plan de ejecución para la sentencia. Si la sentencia activa un desencadenador, es representada como el segundo hijo.


Las sentencias condicionales, como IF…THEN…ELSE son presentadas con 3 hijos. Las sentencias WHILE y DO-UNTIL son representadas de manera similar.

Plan de ejecución estimado


Los operadores relacionales, como escaneos de tablas, agregados y enlaces son representados en el árbol como nodos.


La sentencia DECLARE CURSOR es mostrada como la raíz del árbol. La sentencia a la que se refiere es mostrada como un hijo.


Como se muestra en los ejemplos arriba, el color del ícono es diferente – los íconos para los elementos del lenguaje (SELECT, Condiciones con consultas, Delete, etc.) son verdes, los operadores lógicos y físicos son azules, y los íconos de cursor son amarillos.

Cuadros de información de los operadores

Aparte de la información presentada por los íconos y nodos, los planes de ejecución de consultas de SQL Server proveen muchos más detalles en los cuadros de información de los íconos. Para ver los cuadros, coloque el cursor sobre el ícono en el plan de ejecución e incluya o excluya la propiedad deseada haciendo clic en la estrella.

La información mostrada en los cuadros es variada y depende del tipo de operador. Los elementos mostrados en los cuadros son diferentes para los planes reales y estimados. El cuadro en la izquierda es para el plan real y el de la derecha para el plan estimado para el mismo operador.

Los valores estimado y actual para los mismos parámetros pueden no ser iguales en algunos escenarios.

La información disponible en un cuadro es:

Costo estimado del operador – el costo de la operación, presentado como un porcentaje del costo total del lote.

Costo estimado de I/O, costo estimado de CPU – el analizador de consultas crea muchos planes de ejecución, calcula el costo de cada uno (cuántos recursos de I/O y procesador son necesarios para completar la operación) y determina el más eficiente.

Tamaño de fila estimado – el número de filas que se cree que será afectado por la operación, útil para determinar cuánta memoria es necesaria.

Número de filas real y estimado – incluso si hay una discrepancia significativa entre estos dos valores, esto no indica un problema. Es usualmente causado por estadísticas desactualizadas.

Modo de ejecución real y estimado – fila o lote, muestra si las filas son procesadas una a la vez, o en lotes.

En este artículo, presentamos los elementos básicos de los planes de ejecución y las estructuras de árboles, los íconos de planes de ejecución gráficos comúnmente usados y la información más importante mostrada en los cuadros de información. En la siguiente parte de esta serie, mostraremos ejemplos de planes de ejecución de consultas con código T-SQL, explicaremos su estructura, los elementos y el costo.

Vea más

Para aprender más acerca de los planes de ejecución de consultas y cómo usarlos para solucionar problemas de consultas lentas, vea Cómo identificar y solucionar problemas de consultas lentas en SQL Server

Para ver y analizar los planes de ejecución de consultas SQL Server gratis, vea ApexSQL Plan.

Recursos


Milena Petrovic
168 Views