SET SHOWPLAN_ALL (Transact-SQL)SET SHOWPLAN_ALL (Transact-SQL)

ESTE TEMA SE APLICA A:síSQL Server (a partir de 2008)síAzure SQL DatabasenoAzure SQL Data Warehouse noAlmacenamiento de datos paralelos THIS TOPIC APPLIES TO:yesSQL Server (starting with 2008)yesAzure SQL DatabasenoAzure SQL Data Warehouse noParallel Data Warehouse

Hace que Microsoft SQL ServerSQL Server no ejecute instrucciones Transact-SQLTransact-SQL.Causes Microsoft SQL ServerSQL Server not to execute Transact-SQLTransact-SQL statements. En su lugar, SQL ServerSQL Server devuelve información detallada sobre la forma en que se ejecutan las instrucciones y proporciona estimaciones de los recursos que requieren.Instead, SQL ServerSQL Server returns detailed information about how the statements are executed and provides estimates of the resource requirements for the statements.

Icono de vínculo de tema Convenciones de sintaxis de Transact-SQLTopic link icon Transact-SQL Syntax Conventions

SintaxisSyntax


SET SHOWPLAN_ALL { ON | OFF }  

ComentariosRemarks

La opción SET SHOWPLAN_ALL se establece en tiempo de ejecución, no en tiempo de análisis.The setting of SET SHOWPLAN_ALL is set at execute or run time and not at parse time.

Cuando SET SHOWPLAN_ALL está establecida en ON, SQL ServerSQL Server devuelve información acerca de la ejecución de cada instrucción sin ejecutarla y no se ejecutan las instrucciones Transact-SQLTransact-SQL.When SET SHOWPLAN_ALL is ON, SQL ServerSQL Server returns execution information for each statement without executing it, and Transact-SQLTransact-SQL statements are not executed. Después de que esta opción se establece en ON, información todas las posteriores Transact-SQLTransact-SQL se devuelven las instrucciones hasta que la opción está establecida en OFF.After this option is set ON, information about all subsequent Transact-SQLTransact-SQL statements are returned until the option is set 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 ServerSQL Server devuelve un mensaje de error en el que se indica que la tabla no existe.For example, if a CREATE TABLE statement is executed while SET SHOWPLAN_ALL is ON, SQL ServerSQL Server returns an error message from a subsequent SELECT statement involving that same table, informing users that the specified table does not exist. Por ello, las referencias posteriores que se hagan a la tabla generarán un error.Therefore, subsequent references to this table fail. Cuando SET SHOWPLAN_ALL está establecida en OFF, SQL ServerSQL Server ejecuta las instrucciones sin generar ningún informe.When SET SHOWPLAN_ALL is OFF, SQL ServerSQL Server executes the statements without generating a report.

Solo deben utilizar SET SHOWPLAN_ALL las aplicaciones escritas para controlar su salida.SET SHOWPLAN_ALL is intended to be used by applications written to handle its output. Puede usar SET SHOWPLAN_TEXT para obtener una salida legible para las aplicaciones Microsoft Win32 del símbolo del sistema, como el osql utilidad.Use SET SHOWPLAN_TEXT to return readable output for Microsoft Win32 command prompt applications, such as the osql utility.

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_TEXT and SET SHOWPLAN_ALL cannot be specified inside a stored procedure; they must be the only statements in a batch.

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 ServerSQL Server al ejecutar cada instrucción.SET SHOWPLAN_ALL returns information as a set of rows that form a hierarchical tree representing the steps taken by the SQL ServerSQL Server query processor as it executes each statement. 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.Each statement reflected in the output contains a single row with the text of the statement, followed by several rows with the details of the execution steps. La tabla muestra las columnas que contiene la salida.The table shows the columns that the output contains.

Nombre de columnaColumn name DescriptionDescription
StmtTextStmtText En las filas que no sean de tipo PLAN_ROW, esta columna contiene el texto de la instrucción Transact-SQLTransact-SQL.For rows that are not of type PLAN_ROW, this column contains the text of the Transact-SQLTransact-SQL statement. En las filas de tipo PLAN_ROW, esta columna contiene una descripción de la operación.For rows of type PLAN_ROW, this column contains a description of the operation. Esta columna contiene el operador físico y, opcionalmente, puede contener también el operador lógico.This column contains the physical operator and may optionally also contain the logical operator. También puede ir seguida de una descripción determinada por el operador físico.This column may also be followed by a description that is determined by the physical operator. Para obtener más información, consulte Showplan lógicos y físicos de los operadores de referencia.For more information, see Showplan Logical and Physical Operators Reference.
StmtIdStmtId Número de la instrucción en el lote actual.Number of the statement in the current batch.
NodeIdNodeId Id. del nodo en la consulta actual.ID of the node in the current query.
ParentParent Id. del nodo del paso primario.Node ID of the parent step.
PhysicalOpPhysicalOp Algoritmo de implementación física del nodo.Physical implementation algorithm for the node. Solo para filas de tipo PLAN_ROWS.For rows of type PLAN_ROWS only.
LogicalOpLogicalOp Operador algebraico relacional que representa este nodo.Relational algebraic operator this node represents. Solo para filas de tipo PLAN_ROWS.For rows of type PLAN_ROWS only.
ArgumentoArgument Proporciona información adicional acerca de la operación que se realiza.Provides supplemental information about the operation being performed. El contenido de esta columna depende del operador físico.The contents of this column depend on the physical operator.
DefinedValuesDefinedValues Contiene una lista separada por comas con los valores introducidos por este operador.Contains a comma-separated list of values introduced by this operator. 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.These values may be computed expressions which were present in the current query (for example, in the SELECT list or WHERE clause), or internal values introduced by the query processor in order to process this query. Posteriormente se podrá hacer referencia a estos valores en cualquier punto de la consulta.These defined values may then be referenced elsewhere within this query. Solo para filas de tipo PLAN_ROWS.For rows of type PLAN_ROWS only.
EstimateRowsEstimateRows Número estimado de filas de salida que produce este operador.Estimated number of rows of output produced by this operator. Solo para filas de tipo PLAN_ROWS.For rows of type PLAN_ROWS only.
EstimateIOEstimateIO Coste* de E/S estimado para este operador.Estimated I/O cost* for this operator. Solo para filas de tipo PLAN_ROWS.For rows of type PLAN_ROWS only.
EstimateCPUEstimateCPU Coste* de CPU estimado para este operador.Estimated CPU cost* for this operator. Solo para filas de tipo PLAN_ROWS.For rows of type PLAN_ROWS only.
AvgRowSizeAvgRowSize Tamaño medio estimado (en bytes) de la fila que pasa a través de este operador.Estimated average row size (in bytes) of the row being passed through this operator.
TotalSubtreeCostTotalSubtreeCost Coste* estimado (acumulado) de esta operación y todas sus operaciones secundarias.Estimated (cumulative) cost* of this operation and all child operations.
OutputListOutputList Contiene una lista separada por comas de las columnas proyectadas por la operación actual.Contains a comma-separated list of columns being projected by the current operation.
AdvertenciasWarnings Contiene una lista separada por comas con los mensajes de advertencia relacionados con la operación actual.Contains a comma-separated list of warning messages relating to the current operation. Los mensajes de advertencia pueden incluir la cadena "NO STATS:()" con una lista de columnas.Warning messages may include the string "NO STATS:()" with a list of columns. 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.This warning message means that the query optimizer attempted to make a decision based on the statistics for this column, but none were available. 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.Consequently, the query optimizer had to make a guess, which may have resulted in the selection of an inefficient query plan. Para obtener más información sobre cómo crear o actualizar las estadísticas de columna (que ayudan al optimizador de consultas elija un plan de consulta más eficaz), consulte UPDATE STATISTICS.For more information about creating or updating column statistics (which help the query optimizer choose a more efficient query plan), see 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.This column may optionally include the string "MISSING JOIN PREDICATE", which means that a join (involving tables) is taking place without a join predicate. 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.Accidentally dropping a join predicate may result in a query which takes much longer to run than expected, and returns a huge result set. Si aparece esta advertencia, compruebe que la ausencia de predicado de combinación es intencionada.If this warning is present, verify that the absence of a join predicate is intentional.
TipoType Tipo de nodo.Node type. En el nodo primario de cada consulta, éste es el tipo de instrucción Transact-SQLTransact-SQL (por ejemplo, SELECT, INSERT, EXECUTE, etcétera).For the parent node of each query, this is the Transact-SQLTransact-SQL statement type (for example, SELECT, INSERT, EXECUTE, and so on). En los subnodos que representan planes de ejecución, el tipo es PLAN_ROW.For subnodes representing execution plans, the type is PLAN_ROW.
ParallelParallel 0 = operador no se está ejecutando en paralelo.0 = Operator is not running in parallel.

1 = operador se ejecuta en paralelo.1 = Operator is running in parallel.
EstimateExecutionsEstimateExecutions Número estimado de veces que se va a ejecutar este operador durante la ejecución de la consulta actual.Estimated number of times this operator will be executed while running the current query.

Las unidades de coste están basadas en una medición interna de tiempo, no en tiempo de reloj.Cost units are based on an internal measurement of time, not wall-clock time. Se usan para determinar el coste relativo de un plan en comparación con otros planes.They are used for determining the relative cost of a plan in comparison to other plans.

PermissionsPermissions

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.In order to use SET SHOWPLAN_ALL, you must have sufficient permissions to execute the statements on which SET SHOWPLAN_ALL is executed, and you must have SHOWPLAN permission for all databases containing referenced objects.

Para SELECT, INSERT, UPDATE, DELETE, EXEC stored_procedurey EXEC user_defined_function instrucciones para generar un plan de presentación que el usuario debe:For SELECT, INSERT, UPDATE, DELETE, EXEC stored_procedure, and EXEC user_defined_function statements, to produce a Showplan the user must:

  • Tener los permisos correspondientes para ejecutar las instrucciones Transact-SQLTransact-SQL.Have the appropriate permissions to execute the Transact-SQLTransact-SQL statements.

  • Tener el permiso SHOWPLAN en todas las bases de datos que contengan objetos a los que hacen referencia las instrucciones Transact-SQLTransact-SQL, como tablas, vistas, etc.Have SHOWPLAN permission on all databases containing objects referenced by the Transact-SQLTransact-SQL statements, such as tables, views, and so on.

    Para todas las demás instrucciones, como DDL, USE database_name, conjunto, DECLARE, SQL dinámica y así sucesivamente, solo los permisos adecuados para ejecutar el Transact-SQLTransact-SQL son necesarias las instrucciones.For all other statements, such as DDL, USE database_name, SET, DECLARE, dynamic SQL, and so on, only the appropriate permissions to execute the Transact-SQLTransact-SQL statements are needed.

EjemplosExamples

Las dos instrucciones siguientes utilizan la opción SET SHOWPLAN_ALL para mostrar la forma en que SQL ServerSQL Server analiza y optimiza el uso de índices en las consultas.The two statements that follow use the SET SHOWPLAN_ALL settings to show the way SQL ServerSQL Server analyzes and optimizes the use of indexes in queries.

La primera consulta utiliza el operador de comparación es igual a (=) en la cláusula WHERE de una columna indizada.The first query uses the Equals comparison operator (=) in the WHERE clause on an indexed column. Esto da como resultado el valor Clustered Index Seek en la LogicalOp columna y el nombre del índice en el argumento columna.This results in the Clustered Index Seek value in the LogicalOp column and the name of the index in the Argument column.

La segunda consulta utiliza el operador LIKE en la cláusula WHERE.The second query uses the LIKE operator in the WHERE clause. De este modo, SQL ServerSQL Server debe utilizar un recorrido de índice no clúster para encontrar los datos que satisfacen la condición de la cláusula WHERE.This forces SQL ServerSQL Server to use a clustered index scan and find the data that satisfies the WHERE clause condition. Esto da como resultado el valor Clustered Index Scan en el LogicalOp columna con el nombre del índice en el argumento columna y el valor de filtro en el LogicalOp columna con la condición de la cláusula WHERE en la argumento columna.This results in the Clustered Index Scan value in the LogicalOp column with the name of the index in the Argument column, and the Filter value in the LogicalOp column with the WHERE clause condition in the Argument column.

Los valores de la EstimateRows y TotalSubtreeCost columnas son inferiores en la primera consulta indizada, lo que indica que se procesan mucho más rápidamente y consume menos recursos que la consulta no indizada .The values in the EstimateRows and the TotalSubtreeCost columns are smaller for the first indexed query, indicating that it is processed much faster and uses fewer resources than the nonindexed query.

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  

Vea tambiénSee Also

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