Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

SQL Server SHOWPLAN_ALL

В SQL Server можете да използвате SET SHOWPLAN_ALL оператор за връщане на подробна информация за това как се изпълнява T-SQL оператор, както и оценки на изискванията за ресурси за изразите.

SHOWPLAN_ALL връща информация като набор от редове, които образуват йерархично дърво, представящо стъпките, предприети от процесора на заявки на SQL Server, докато изпълнява всеки израз. Подобно е на SHOWPLAN_TEXT , с изключение на това SHOWPLAN_ALL връща по-подробна информация (и е предназначена да се използва с приложения, които могат да обработват нейния изход).

Можете да зададете SHOWPLAN_ALL до ON или OFF .

Когато SHOWPLAN_ALL е ON , всички следващи T-SQL оператори не се изпълняват. Вместо това SQL Server връща информация за изпълнение на израза (без да го изпълнява).

Важно е да се отбележи, че SHOWPLAN_ALL предоставя приблизителни оценки на изискванията за ресурси и че действителните изисквания за ресурси може да се различават, когато операторът действително се изпълнява.

Пример

Ето пример за демонстрация.

SET SHOWPLAN_ALL ON;
GO

SELECT * FROM Cats;
GO

Обърнете внимание, че SET SHOWPLAN_ALL не може да бъде посочен в съхранена процедура и трябва да бъде единственият израз в пакет.

Ето как изглежда резултатът в Azure Data Studio:

И ето как изглежда в mssql-cli (интерфейс на командния ред), когато се използва вертикален изход:

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.

Има много колони, така че използвах вертикално извеждане тук, така че да се чете по-лесно.

Ако заявката ми беше по-сложна, щяха да бъдат върнати повече редове.

Ето пример за (малко) по-сложна заявка.

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

Резултат:

Как да го изключим

Можете да го изключите, като използвате SET SHOWPLAN_ALL OFF .

След като направите това, следващите оператори ще се изпълняват нормално.

SET SHOWPLAN_ALL OFF;
GO

SELECT * FROM Cats;
GO

Резултат:

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

Остаряло или не?

Според тази стара статия в MSDN, SET SHOWPLAN_ALL е насрочено за оттегляне в бъдещи версии на showplan и се препоръчва да използвате SET SHOWPLAN_XML вместо това.

Тази статия в MSDN обаче е за SQL Server 2008 R2 и докато пиша това, изглежда, че не е отхвърлена в SQL Server 2019. Всъщност текущата документация не споменава оттеглянето и не е включена когато стартирам списък с отхвърлени елементи в SQL Server.

Така или иначе, вероятно си струва да имате това предвид, преди да го използвате в бъдещи издания.

Графичен план за изпълнение

Ако използвате графичен инструмент като SSMS или Azure Data Studio, може да имате опцията да видите прогнозния план за изпълнение на графична заявка за текущата заявка.

  • В SSMS можете да използвате Ctrl + L да го направя. Или можете да кликнете върху Показване на прогнозния план за изпълнение икона или щракнете с десния бутон в прозореца на заявката и изберете Показване на приблизителен план за изпълнение .
  • В Azure Data Studio можете да щракнете върху Обяснение бутон над прозореца на заявката.

Можете също да използвате SET SHOWPLAN_XML ON за да го активирате и SET SHOWPLAN_XML OFF за да го деактивирате.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Драйверът Go with SQL Server не може да се свърже успешно, неуспешно влизане

  2. SYSUTCDATETIME() Примери в SQL Server (T-SQL)

  3. Добавяне на идентичност към съществуваща колона

  4. Структурата на обекта се зарежда много бавно за първи път след всяка компилация

  5. Нови функции в SQL Server 2017 (Database Engine)