SET SHOWPLAN_ALL (Transact-SQL)

 

**ESTE TEMA SE APLICA A:** ![](../Image/Applies%20to/yes.png)SQL Server \(a partir de 2008\) ![](../Image/Applies%20to/yes.png)Base de datos SQL de Azure ![](../Image/Applies%20to/no.png)Almacenamiento de datos SQL de Azure ![](../Image/Applies%20to/no.png)Almacenamiento de datos paralelos

Hace que Microsoft SQL Server no ejecute instrucciones Transact-SQL. En su lugar, SQL Server devuelve información detallada sobre la forma en que se ejecutan las instrucciones y proporciona estimaciones de los recursos que requieren.

Se aplica a: de SQL Server (SQL Server 2008 a la versión actual), Base de datos SQL de Azure.

Topic link icon Convenciones de sintaxis de Transact-SQL

  
SET SHOWPLAN_ALL { ON | OFF }  

La opción SET SHOWPLAN_ALL se establece en tiempo de ejecución, no en tiempo de análisis.

Cuando SET SHOWPLAN_ALL está establecida en ON, SQL Server devuelve información acerca de la ejecución de cada instrucción sin ejecutarla y no se ejecutan las instrucciones Transact-SQL. Cuando esta opción está establecida en ON, se devuelve información acerca de todas las instrucciones Transact-SQL siguientes hasta que se vuelve a establecer en OFF. Por ejemplo, si se ejecuta una instrucción CREATE TABLE cuando SET SHOWPLAN_ALL es ON y después se ejecuta una instrucción SELECT en la que se especifica la tabla creada, SQL Server devuelve un mensaje de error en el que se indica que la tabla no existe. Por ello, las referencias posteriores que se hagan a la tabla generarán un error. Cuando SET SHOWPLAN_ALL está establecida en OFF, SQL Server ejecuta las instrucciones sin generar ningún informe.

Solo deben utilizar SET SHOWPLAN_ALL las aplicaciones escritas para controlar su salida. Puede usar SET SHOWPLAN_TEXT para obtener una salida legible para las aplicaciones Microsoft Win32 del símbolo del sistema, como la utilidad osql.

No es posible especificar SET SHOWPLAN_TEXT y SET SHOWPLAN_ALL en un procedimiento almacenado; deben ser las únicas instrucciones en un lote.

SET SHOWPLAN_ALL devuelve la información como un conjunto de filas en forma de árbol jerárquico que representa los pasos que sigue el procesador de consultas de SQL Server al ejecutar cada instrucción. Cada instrucción reflejada en la salida contiene una fila con el texto de la instrucción, seguida de varias filas con los detalles de los pasos de su ejecución. La tabla muestra las columnas que contiene la salida.

Nombre de columnaDescripción
StmtTextEn las filas que no sean de tipo PLAN_ROW, esta columna contiene el texto de la instrucción Transact-SQL. En las filas de tipo PLAN_ROW, esta columna contiene una descripción de la operación. Esta columna contiene el operador físico y, opcionalmente, puede contener también el operador lógico. También puede ir seguida de una descripción determinada por el operador físico. Para obtener más información, consulte Referencia de operadores lógicos y físicos del plan de presentación.
StmtIdNúmero de la instrucción en el lote actual.
NodeIdId. del nodo en la consulta actual.
ParentId. del nodo del paso primario.
PhysicalOpAlgoritmo de implementación física del nodo. Solo para filas de tipo PLAN_ROWS.
LogicalOpOperador algebraico relacional que representa este nodo. Solo para filas de tipo PLAN_ROWS.
ArgumentoProporciona información adicional acerca de la operación que se realiza. El contenido de esta columna depende del operador físico.
DefinedValuesContiene una lista separada por comas con los valores introducidos por este operador. Estos valores pueden ser expresiones calculadas presentes en la consulta actual (por ejemplo, en la lista SELECT o en la cláusula WHERE) o valores internos introducidos por el procesador de consultas para procesar esta consulta. Posteriormente se podrá hacer referencia a estos valores en cualquier punto de la consulta. Solo para filas de tipo PLAN_ROWS.
EstimateRowsNúmero estimado de filas de salida que produce este operador. Solo para filas de tipo PLAN_ROWS.
EstimateIOCoste* de E/S estimado para este operador. Solo para filas de tipo PLAN_ROWS.
EstimateCPUCoste* de CPU estimado para este operador. Solo para filas de tipo PLAN_ROWS.
AvgRowSizeTamaño medio estimado (en bytes) de la fila que pasa a través de este operador.
TotalSubtreeCostCoste* estimado (acumulado) de esta operación y todas sus operaciones secundarias.
OutputListContiene una lista separada por comas de las columnas proyectadas por la operación actual.
AdvertenciasContiene una lista separada por comas con los mensajes de advertencia relacionados con la operación actual. Es posible que los mensajes de advertencia incluyan la cadena "NO STATS:()" con una lista de columnas. Este mensaje de advertencia significa que el optimizador de consultas intentó tomar una decisión basada en las estadísticas de la columna, pero no había estadísticas disponibles. En consecuencia, el optimizador de consultas ha tenido que elegir al azar, lo que puede haber provocado la selección de un plan de consulta poco eficiente. Para obtener más información acerca de la creación o actualización de estadísticas de columna (que ayudan al optimizador de consultas a elegir un plan de consulta más eficiente), vea UPDATE STATISTICS. Opcionalmente, esta columna puede incluir la cadena "MISSING JOIN PREDICATE", que significa que tiene lugar una combinación (de tablas) sin que haya un predicado de combinación. La pérdida accidental de un predicado de combinación puede provocar que la consulta tarde mucho más de lo esperado y que devuelva un conjunto de resultados de gran tamaño. Si aparece esta advertencia, compruebe que la ausencia de predicado de combinación es intencionada.
TipoTipo de nodo. En el nodo primario de cada consulta, éste es el tipo de instrucción Transact-SQL (por ejemplo, SELECT, INSERT, EXECUTE, etcétera). En los subnodos que representan planes de ejecución, el tipo es PLAN_ROW.
Parallel0 = El operador no se ejecuta en paralelo.

 1 = El operador se ejecuta en paralelo.
EstimateExecutionsNúmero estimado de veces que se va a ejecutar este operador durante la ejecución de la consulta actual.

*Las unidades de coste están basadas en una medición interna de tiempo, no en tiempo de reloj. Se usan para determinar el coste relativo de un plan en comparación con otros planes.

Para utilizar SET SHOWPLAN_ALL, debe disponer de permisos suficientes para ejecutar las instrucciones en las que se ejecuta SET SHOWPLAN_ALL, y debe tener el permiso SHOWPLAN para todas las bases de datos que contengan objetos a los que se hace referencia.

En el caso de las instrucciones SELECT, INSERT, UPDATE, DELETE, EXEC stored_procedure y EXEC user_defined_function, para producir un plan de presentación, el usuario debe:

  • Tener los permisos correspondientes para ejecutar las instrucciones Transact-SQL.

  • Tener el permiso SHOWPLAN en todas las bases de datos que contengan objetos a los que hacen referencia las instrucciones Transact-SQL, como tablas, vistas, etc.

Para las demás instrucciones, como DDL, USE database_name, SET, DECLARE, SQL dinámico, etc., solo son necesarios los permisos apropiados para ejecutar las instrucciones Transact-SQL.

Las dos instrucciones siguientes utilizan la opción SET SHOWPLAN_ALL para mostrar la forma en que SQL Server analiza y optimiza el uso de índices en las consultas.

La primera consulta utiliza el operador de comparación Es igual a (=) en la cláusula WHERE de una columna indizada. Esto da lugar al valor Clustered Index Seek en la columna LogicalOp y al nombre del índice en la columna Argument.

La segunda consulta utiliza el operador LIKE en la cláusula WHERE. De este modo, SQL Server debe utilizar un recorrido de índice no clúster para encontrar los datos que satisfacen la condición de la cláusula WHERE. Esto da lugar al valor Clustered Index Scan en la columna LogicalOp con el nombre del índice en la columna Argument y el valor Filter en la columna LogicalOp con la condición de la cláusula WHERE en la columna Argument.

Los valores de las columnas EstimateRows y TotalSubtreeCost son inferiores en la primera consulta indizada, lo que indica que se procesa mucho más rápidamente y que utiliza menos recursos que la no indizada.

USE AdventureWorks2012;  
GO  
SET SHOWPLAN_ALL ON;  
GO  
-- First query.  
SELECT BusinessEntityID   
FROM HumanResources.Employee  
WHERE NationalIDNumber = '509647174';  
GO  
-- Second query.  
SELECT BusinessEntityID, EmergencyContactID   
FROM HumanResources.Employee  
WHERE EmergencyContactID LIKE '1%';  
GO  
SET SHOWPLAN_ALL OFF;  
GO  

Instrucciones SET (Transact-SQL)
SET SHOWPLAN_TEXT (Transact-SQL)
SET SHOWPLAN_XML (Transact-SQL)

Adiciones de comunidad

Mostrar: