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:
Í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.
1 |
EXEC dbo.testprocedure |
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.
1 2 3 |
DELETE FROM [Person].[Address] WHERE [AddressID]= 1 |
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
1 2 3 4 5 6 7 8 9 10 |
IF (SELECT COUNT(*) FROM [Person].[Address] WHERE City LIKE 'Bothell' ) > 0 (SELECT COUNT(*) FROM [Person].[Address] WHERE City LIKE 'Bothell') Else (SELECT COUNT(*) FROM [Person].[Address] WHERE AddressLine2 is null) |
Los operadores relacionales, como escaneos de tablas, agregados y enlaces son representados en el árbol como nodos.
1 2 3 4 |
SELECT PrV.Standardprice, V.Name, V.CreditRating FROM Purchasing.ProductVendor AS PrV JOIN Purchasing.Vendor AS V ON (PrV.BusinessEntityID = V.BusinessEntityID) |
La sentencia DECLARE CURSOR es mostrada como la raíz del árbol. La sentencia a la que se refiere es mostrada como un hijo.
1 2 3 4 |
DECLARE vend_cursor CURSOR FOR SELECT * FROM Purchasing.Vendor OPEN vend_cursor FETCH NEXT FROM vend_cursor; |
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
- Mostrar el Plan de Ejecución Estimado
- Mostrar los Planes de Ejecución Gráficos (SQL Server Management Studio)
- Íconos del Plan de Ejecución Gráfico (SQL Server Management Studio)
- ApexSQL Plan 2017 – tour de capturas de pantalla
- Una guía de DBA para la solución de problemas de rendimiento de SQL Server – parte 2 – utilización de la supervisión - May 7, 2019
- Planes de ejecución de consultas – Entendiendo y leyendo los planes - April 19, 2018
- Mala indexación de base de datos – El asesino de las consultas SQL – recomendaciones - April 18, 2018