sql >> Base de Datos >  >> RDS >> Sqlserver

Servidor SQL SHOWPLAN_ALL

En SQL Server, puede usar el SET SHOWPLAN_ALL declaración para devolver información detallada sobre cómo se ejecuta una declaración T-SQL, así como estimaciones de los requisitos de recursos para las declaraciones.

SHOWPLAN_ALL devuelve información como un conjunto de filas que forman un árbol jerárquico que representa los pasos realizados por el procesador de consultas de SQL Server al ejecutar cada declaración. Es similar a SHOWPLAN_TEXT , excepto que SHOWPLAN_ALL devuelve información más detallada (y está diseñado para usarse con aplicaciones que pueden manejar su salida).

Puede configurar SHOWPLAN_ALL a ON o OFF .

Cuando SHOWPLAN_ALL está ON , no se ejecutan todas las sentencias T-SQL posteriores. En su lugar, SQL Server devuelve información de ejecución para la instrucción (sin ejecutarla).

Es importante tener en cuenta que SHOWPLAN_ALL proporciona estimaciones de los requisitos de recursos, y que los requisitos de recursos reales pueden diferir cuando la declaración se ejecuta de hecho.

Ejemplo

Aquí hay un ejemplo para demostrarlo.

SET SHOWPLAN_ALL ON;
GO

SELECT * FROM Cats;
GO

Tenga en cuenta que SET SHOWPLAN_ALL no se puede especificar dentro de un procedimiento almacenado y debe ser la única declaración en un lote.

Así es como se ve el resultado en Azure Data Studio:

Y así es como se ve en mssql-cli (interfaz de línea de comandos) cuando se usa la salida vertical:

Commands completed successfully.
-[ RECORD 1 ]-------------------------
StmtText           | 
SELECT * FROM Cats;
StmtId             | 1
NodeId             | 1
Parent             | 0
PhysicalOp         | NULL
LogicalOp          | NULL
Argument           | 1
DefinedValues      | NULL
EstimateRows       | 3
EstimateIO         | NULL
EstimateCPU        | NULL
AvgRowSize         | NULL
TotalSubtreeCost   | 0.0032853
OutputList         | NULL
Warnings           | NULL
Type               | SELECT
Parallel           | 0
EstimateExecutions | NULL
-[ RECORD 2 ]-------------------------
StmtText           |   |--Clustered Index Scan(OBJECT:([Test].[dbo].[Cats].[PK__Cats__6A1C8AFAB3EF1A8F]))
StmtId             | 1
NodeId             | 2
Parent             | 1
PhysicalOp         | Clustered Index Scan
LogicalOp          | Clustered Index Scan
Argument           | OBJECT:([Test].[dbo].[Cats].[PK__Cats__6A1C8AFAB3EF1A8F])
DefinedValues      | [Test].[dbo].[Cats].[CatId], [Test].[dbo].[Cats].[CatName]
EstimateRows       | 3
EstimateIO         | 0.003125
EstimateCPU        | 0.0001603
AvgRowSize         | 142
TotalSubtreeCost   | 0.0032853
OutputList         | [Test].[dbo].[Cats].[CatId], [Test].[dbo].[Cats].[CatName]
Warnings           | NULL
Type               | PLAN_ROW
Parallel           | 0
EstimateExecutions | 1
(2 rows affected)
Commands completed successfully.

Hay muchas columnas, así que usé salida vertical aquí para que sea más fácil de leer.

Si mi consulta fuera más compleja, se devolverían más filas.

Este es un ejemplo de una consulta (ligeramente) más compleja.

SELECT * FROM Cats c
INNER JOIN Dogs d
ON c.CatName = d.DogName;

Resultado:

Cómo apagarlo

Puedes apagarlo usando SET SHOWPLAN_ALL OFF .

Una vez que haya hecho esto, las declaraciones subsiguientes se ejecutarán normalmente.

SET SHOWPLAN_ALL OFF;
GO

SELECT * FROM Cats;
GO

Resultado:

Commands completed successfully.
+---------+-----------+
| CatId   | CatName   |
|---------+-----------|
| 1       | Meow      |
| 2       | Fluffy    |
| 3       | Scratch   |
+---------+-----------+
(3 rows affected)
Commands completed successfully.

¿Obsoleto o no?

Según este antiguo artículo de MSDN, SET SHOWPLAN_ALL está programado para quedar obsoleto en futuras versiones del plan de presentación y se recomienda que use SET SHOWPLAN_XML en su lugar.

Sin embargo, ese artículo de MSDN es para SQL Server 2008 R2, y mientras escribo esto, no parece haber quedado obsoleto en SQL Server 2019. De hecho, la documentación actual no menciona la obsolescencia y no está incluida. cuando ejecuto una lista de elementos obsoletos en SQL Server.

De cualquier manera, probablemente valga la pena tener esto en cuenta antes de usarlo en versiones futuras.

Plan de Ejecución Gráfico

Si usa una herramienta gráfica como SSMS o Azure Data Studio, es posible que tenga la opción de ver el plan de ejecución de consulta gráfico estimado para la consulta actual.

  • En SSMS puede usar Ctrl + L para hacer esto. O puede hacer clic en Mostrar plan de ejecución estimado o haga clic con el botón derecho en la ventana de consulta y seleccione Mostrar plan de ejecución estimado .
  • En Azure Data Studio, puede hacer clic en Explicar sobre la ventana de consulta.

También puede usar SET SHOWPLAN_XML ON para habilitarlo, y SET SHOWPLAN_XML OFF para desactivarlo.