Cómo se organiza el XML Showplan
El plan gráfico de SSMS se construye a partir de un documento XML. El gráfico facilita la orientación; el XML conserva la estructura completa, los atributos de cada operador y, cuando se trata de un plan real, las métricas observadas durante la ejecución.
Cómo abrir el XML que corresponde al plan
Activa Include Actual Execution Plan con Ctrl+M, ejecuta la consulta y abre Execution plan. Haz clic derecho en una zona vacía del lienzo y selecciona Show Execution Plan XML. SSMS abre otra pestaña con el documento del mismo plan; conserva abierta la pestaña gráfica para relacionar los nodos.
Para volver desde un operador concreto, selecciónalo en el gráfico y presiona F4. Node ID en Properties corresponde con el atributo NodeId de un elemento RelOp dentro del XML. Abrir el XML desde otro plan o desde otra ejecución puede producir identificadores y métricas diferentes.
Esta consulta produce el plan utilizado en las capturas:
SELECT
p.IdPedido,
p.IdCliente,
p.FechaPedido,
p.Total
FROM dbo.PedidoLaboratorio AS p
WHERE p.IdPedido BETWEEN 100 AND 200
OPTION (MAXDOP 1);
El gráfico y el XML describen el mismo plan
- 1Resultado de la instrucción
SELECTrecibe las filas producidas por el árbol y representa el punto de salida del plan. - 2Operador de acceso
Clustered Index Seeklocaliza el intervalo solicitado dentro del índice clustered.
El XML no añade un segundo plan. Describe estos mismos nodos mediante elementos anidados. Un elemento XML es una sección delimitada por una etiqueta, como <RelOp>. Un atributo es un dato escrito dentro de la etiqueta de apertura, como NodeId="0".
La jerarquía conduce desde el documento hasta cada operador
- 1
ShowPlanXMLEs el elemento raíz. Declara el formato Showplan y la versión utilizada para describir el documento.
- 2
BatchSequenceAgrupa los lotes incluidos en el plan. Un lote es el conjunto de instrucciones enviado conjuntamente a SQL Server.
- 3
StatementsContiene las instrucciones compiladas dentro del lote. Cada instrucción conserva sus propios datos y su plan.
- 4
QueryPlanReúne el árbol, la información de compilación, memoria, estadísticas utilizadas y otros datos que corresponden al plan de esa instrucción.
La jerarquía se lee de afuera hacia adentro:
ShowPlanXML
└── BatchSequence
└── Batch
└── Statements
└── StmtSimple
└── QueryPlan
└── RelOp
No todos los planes tienen una sola instrucción ni un solo operador. Un lote puede contener varias instrucciones y cada árbol puede anidar tantos RelOp como requiera la estrategia elegida.
El elemento RelOp se observa con mayor detalle en la captura dedicada al operador, más adelante en esta entrada.
StmtSimple identifica la instrucción compilada
StmtSimple conserva datos de una instrucción individual. En la captura aparecen, entre otros:
StatementText: el texto enviado a SQL Server;StatementEstRows: las filas estimadas para la salida de la instrucción;StatementSubTreeCost: el costo estimado del árbol completo;StatementOptmLevel: el nivel de optimización aplicado;QueryHashyQueryPlanHash: identificadores calculados que ayudan a agrupar consultas o planes comparables.
Un hash es un valor calculado a partir de otra información. Sirve como identificador práctico para comparar o agrupar, pero no sustituye el texto, el contexto ni las métricas del plan.
StatementText puede incluir nombres de objetos, literales y parámetros. Por eso un archivo .sqlplan debe revisarse antes de compartirse, aunque solamente vayamos a estudiar su estructura.
NodeId relaciona el operador con sus propiedades
Al seleccionar un nodo del plan gráfico, el panel Properties expone los valores del operador:
- 1
Node IDIdentifica el nodo dentro de este plan. El valor permite localizar el mismo operador en el XML.
- 2Operación lógica
Describe la tarea relacional solicitada, como localizar filas mediante un índice.
- 3Operación física
Indica el algoritmo utilizado por SQL Server para realizar esa tarea.
El identificador pertenece al documento abierto. No debe tratarse como un número permanente de la consulta: otra compilación puede producir un árbol distinto y asignar otros identificadores.
RelOp reúne la identidad y las estimaciones del nodo
- 1Elemento
RelOpLa etiqueta de apertura reúne estimaciones de filas, CPU, entrada y salida, ejecuciones y costo del subárbol.
- 2Identidad del operador
LogicalOp,NodeIdyPhysicalOppermiten reconocer qué tarea representa el nodo y cómo se implementa. - 3
OutputListEnumera las columnas que el operador entrega a su consumidor. No representa todas las columnas disponibles en el objeto leído.
Dentro de RelOp aparecen elementos específicos del operador. En este caso, IndexScan describe el acceso al índice aunque la operación física visible sea Clustered Index Seek; sus elementos hijos conservan el objeto, las columnas definidas y el predicado utilizado para localizar el intervalo.
El plan real agrega métricas observadas
- 1
RunTimeInformationAgrupa la evidencia producida durante la ejecución. Este elemento no aparece en el plan estimado de la misma consulta.
- 2
RunTimeCountersPerThreadConserva filas observadas, ejecuciones, lecturas y tiempos para un trabajador. Un operador paralelo puede incluir más de una entrada.
En esta ejecución, ActualRows="101" indica que el operador entregó 101 filas y ActualRowsRead="101" que leyó 101. Esos valores describen esta ejecución concreta. No demuestran por sí solos que la consulta mantendrá el mismo comportamiento con otros parámetros, datos o condiciones de carga.
Un trabajador es el contexto que ejecuta una parte del plan. En un plan serial suele aparecer una sola entrada con Thread="0"; en un plan paralelo puede haber varias, y el total del operador debe entenderse a partir del conjunto.
Algunos elementos solamente aparecen cuando existe la condición
El XML puede incluir Warnings, parámetros compilados y ejecutados, concesiones de memoria, sugerencias MissingIndex y otras secciones. Su ausencia también es información: significa que ese documento no registró esa condición, no que la condición sea imposible en cualquier ejecución.
No agregamos esos elementos a esta consulta para completar una lista. Las advertencias se estudian con planes que realmente las producen; las sugerencias de índices y sus límites se revisan más adelante con una prueba preparada para ese propósito.
Qué podemos concluir
Podemos recorrer el XML desde la instrucción hasta un operador, relacionar NodeId con el panel Properties y distinguir las estimaciones de las métricas que solamente aporta un plan real.
No necesitamos memorizar todo el esquema Showplan. La lectura empieza con una pregunta concreta: localizar una instrucción, un nodo, una propiedad o una diferencia entre lo estimado y lo observado.
Siguiente comprobación razonable
La siguiente entrada recorre Analyze Actual Execution Plan: cómo seleccionar una instrucción, leer sus escenarios y conservar cada propuesta como hipótesis pendiente de comprobación.
Relacionado con
- Acciones disponibles en el plan gráfico de SSMS: abre Properties, XML, guardado y comparación desde el lugar correcto.
- Plan estimado, plan real y estadísticas en vivo: distingue qué evidencia puede contener cada modalidad.
- Flechas, propiedades y número de ejecuciones: relaciona filas, ejecuciones y flujo.
- Advertencias del plan que requieren investigación: interpreta señales sin convertirlas en conclusiones.




