Trong SQL Server, bạn có thể sử dụng SET SHOWPLAN_ALL
để trả về thông tin chi tiết về cách một câu lệnh T-SQL được thực thi, cũng như các ước tính về yêu cầu tài nguyên cho các câu lệnh.
SHOWPLAN_ALL
trả về thông tin dưới dạng một tập hợp các hàng tạo thành cây phân cấp đại diện cho các bước được thực hiện bởi bộ xử lý truy vấn SQL Server khi nó thực thi mỗi câu lệnh. Nó tương tự như SHOWPLAN_TEXT
, ngoại trừ SHOWPLAN_ALL
trả về thông tin chi tiết hơn (và được sử dụng với các ứng dụng có thể xử lý đầu ra của nó).
Bạn có thể đặt SHOWPLAN_ALL
thành ON
hoặc OFF
.
Khi SHOWPLAN_ALL
ON
, tất cả các câu lệnh T-SQL tiếp theo không được thực thi. Thay vào đó, SQL Server trả về thông tin thực thi cho câu lệnh (mà không thực thi nó).
Điều quan trọng cần lưu ý là SHOWPLAN_ALL
cung cấp ước tính của các yêu cầu về tài nguyên và các yêu cầu về tài nguyên thực tế đó có thể khác khi câu lệnh được thực thi trên thực tế.
Ví dụ
Đây là một ví dụ để chứng minh.
SET SHOWPLAN_ALL ON;
GO
SELECT * FROM Cats;
GO
Lưu ý rằng SET SHOWPLAN_ALL
không thể được chỉ định bên trong một thủ tục được lưu trữ và nó phải là câu lệnh duy nhất trong một lô.
Đây là kết quả trong Azure Data Studio:
Và đây là giao diện trong mssql-cli (giao diện dòng lệnh) khi sử dụng đầu ra dọc:
LệnhCommands 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.
Có rất nhiều cột, vì vậy tôi đã sử dụng đầu ra theo chiều dọc ở đây để giúp dễ đọc hơn.
Nếu truy vấn của tôi phức tạp hơn, sẽ có nhiều hàng hơn được trả về.
Dưới đây là một ví dụ về truy vấn phức tạp hơn (một chút).
SELECT * FROM Cats c
INNER JOIN Dogs d
ON c.CatName = d.DogName;
Kết quả:
Cách tắt tính năng này
Bạn có thể tắt nó bằng cách sử dụng SET SHOWPLAN_ALL OFF
.
Sau khi bạn thực hiện xong việc này, các câu lệnh tiếp theo sẽ thực thi như bình thường.
SET SHOWPLAN_ALL OFF;
GO
SELECT * FROM Cats;
GO
Kết quả:
Các lệnhCommands completed successfully. +---------+-----------+ | CatId | CatName | |---------+-----------| | 1 | Meow | | 2 | Fluffy | | 3 | Scratch | +---------+-----------+ (3 rows affected) Commands completed successfully.
Không được dùng nữa hay Không?
Theo bài viết MSDN cũ này, SET SHOWPLAN_ALL
đã được lên lịch để không dùng nữa trong các phiên bản showplan trong tương lai và bạn nên sử dụng SET SHOWPLAN_XML
thay vào đó.
Tuy nhiên, bài viết MSDN đó dành cho SQL Server 2008 R2 và khi tôi viết bài này, nó có vẻ như không được chấp nhận trong SQL Server 2019. Trên thực tế, tài liệu hiện tại không đề cập đến việc không dùng nữa và nó không được bao gồm khi tôi chạy danh sách các mục không dùng nữa trong SQL Server.
Dù bằng cách nào, nó có thể trả tiền để ghi nhớ điều này trước khi sử dụng nó trong các bản phát hành trong tương lai.
Kế hoạch thực thi đồ họa
Nếu đang sử dụng công cụ đồ họa như SSMS hoặc Azure Data Studio, bạn có thể có tùy chọn để xem kế hoạch thực thi truy vấn đồ họa ước tính cho truy vấn hiện tại.
- Trong SSMS, bạn có thể sử dụng Ctrl + L để làm điều này. Hoặc bạn có thể nhấp vào Hiển thị kế hoạch thực hiện ước tính hoặc nhấp chuột phải vào cửa sổ truy vấn và chọn Hiển thị kế hoạch thực hiện ước tính .
- Trong Azure Data Studio, bạn có thể nhấp vào nút Giải thích phía trên cửa sổ truy vấn.
Bạn cũng có thể sử dụng SET SHOWPLAN_XML ON
để kích hoạt nó và SET SHOWPLAN_XML OFF
để vô hiệu hóa nó.