В 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
за да го деактивирате.