Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Máy chủ SQL SHOWPLAN_ALL

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ệnh
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.

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ệnh
Commands 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ó.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tách các giá trị được phân tách bằng dấu phẩy trong các cột thành nhiều hàng trong Sql Server

  2. Nhận giá trị trả lại từ JDBC MSSQL

  3. ExecuteNonQuery trả về -1 khi sử dụng sql COUNT bất chấp chuỗi truy vấn

  4. Kết nối RStudio với SQL Server

  5. Làm cách nào để tạo bảng bằng cách sử dụng truy vấn chọn trong SQL Server?