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

Cách đọc và phân tích kế hoạch thực thi SQL Server

Các kế hoạch thực thi SQL Server là một cổng cho trình tối ưu hóa truy vấn và thực thi truy vấn cho các chuyên gia cơ sở dữ liệu. Chúng tiết lộ quá trình xử lý truy vấn và các giai đoạn liên quan như bảng bị ảnh hưởng, chỉ mục, thống kê, loại liên kết, số lượng hàng bị ảnh hưởng, xử lý truy vấn, sắp xếp dữ liệu và truy xuất dữ liệu.

Trong một bài viết trước đây, Kế hoạch thực thi SQL Server - Nó là gì và nó giúp gì cho các vấn đề về hiệu suất? chúng tôi đã khám phá quy trình thực thi truy vấn cấp cao, các loại kế hoạch thực thi khác nhau (đồ họa, XML và văn bản), cùng với các kế hoạch thực thi ước tính và thực tế.

Bây giờ, chúng ta sẽ khám phá những điều bạn cần biết khi đánh giá kế hoạch thực thi SQL Server và cách diễn giải thông tin tốt nhất.

Đọc kế hoạch thực thi SQL Server đồ họa

Nói chung, chúng tôi đọc các kế hoạch thực hiện từ phải sang trái. Bạn bắt đầu với toán tử kế hoạch thực hiện trên cùng bên phải và di chuyển về phía bên trái. Nó giúp bạn tuân theo luồng dữ liệu logic trong truy vấn.

Giả sử bạn thực hiện truy vấn sau trong cơ sở dữ liệu mẫu [AdventureWorks2019] và xem kế hoạch thực thi thực tế.

SELECT TOP (10) [SalesOrderID] [SalesOrderDetailID] [CarrierTrackingNumber] [OrderQty] [ProductID] [SpecialOfferID] [ModifiedDate] FROM [AdventureWorks2019].[Sales].[SalesOrderDetail] where [UnitPrice]>1000

Truy vấn lấy dữ liệu từ bảng [Sales]. [SalesOrderDetail] cho các đơn đặt hàng có đơn giá lớn hơn 1.000.

Nếu chúng ta đọc kế hoạch thực hiện từ phải sang trái, chúng ta sẽ lưu ý những điều sau:

  • Toán tử đầu tiên là Quét chỉ mục theo cụm đọc dữ liệu từ bảng [Bán hàng]. [SalesOrderDetail]. Khi bạn đưa con trỏ chuột tới mũi tên kết nối Toán tử quét chỉ mục theo cụm và trên cùng, nó sẽ trả về số lượng hàng ước tính và thực tế cũng như kích thước dữ liệu ước tính.

  • Nó chuyển dữ liệu từ toán tử Quét chỉ mục theo cụm đến toán tử Top chuyển 10 hàng cho toán tử CHỌN.

Trong nội bộ, SQL Server thực thi kế hoạch từ trái sang phải. Nếu bạn quan tâm đến đơn đặt hàng thực của nhà điều hành, bạn nên đọc kế hoạch thực hiện từ trái sang phải. Mỗi nhà điều hành yêu cầu dữ liệu từ nhà điều hành tiếp theo. Ví dụ, trong trường hợp trên, toán tử Hàng đầu yêu cầu dữ liệu từ Quét chỉ mục theo cụm. Quét chỉ mục theo cụm trả về các hàng từ bảng [Sales]. [SalesOrderDetail] đáp ứng Ở đâu điều kiện mệnh đề.

Trong trường hợp nhiều nhánh hợp nhất trong một kế hoạch thực thi, bạn nên thực hiện theo cách tiếp cận từ phải sang trái, từ trên xuống dưới.

Chi phí vận hành

Mỗi toán tử trong một kế hoạch thực thi SQL Server được liên kết với một chi phí. Chi phí vận hành là tương đối so với các chi phí khác trong kế hoạch thực hiện. Thông thường, chúng ta cần tập trung vào toán tử tốn kém và điều chỉnh truy vấn xung quanh nó.

Trong trường hợp có một kế hoạch thực hiện phức tạp, việc xác định người vận hành tốn kém có thể là một thách thức. Trong trường hợp này, bạn có thể sử dụng SET SHOWPLAN_ALL ON, và nó sẽ cung cấp thông tin ở định dạng bảng.

Bạn cũng có thể sử dụng [Stmt text] để chia nhỏ kế hoạch thực thi ở mỗi cấp toán tử và cấp câu lệnh.

SQL Server Management Studio (SSMS) cũng cung cấp tính linh hoạt để tìm toán tử dựa trên tiêu chí tìm kiếm. Để thực hiện việc này, hãy nhấp chuột phải vào kế hoạch thực thi và chọn Tìm nút. Thao tác này sẽ mở ra một cửa sổ với các điều kiện tìm kiếm khác nhau. Chỉ định yêu cầu của bạn và nó sẽ trỏ đến nút cụ thể, như được hiển thị bên dưới.

Ngoài ra, bạn có thể sử dụng Azure Data Studio và điều hướng đến Chạy truy vấn hiện tại với gói thực tế dưới bảng lệnh. Điều này cung cấp một kế hoạch thực hiện thực tế ở dạng nhỏ gọn, cùng với các hoạt động Hàng đầu để nhanh chóng xác định các toán tử tốn kém.

Phân tích kế hoạch

Bạn có thể xác định Ước tính số lượng không chính xác để điều tra các kế hoạch thực hiện có vấn đề. Điều này sẽ cung cấp cho bạn thông tin ngắn gọn về việc tìm một toán tử cụ thể và các đề xuất trong tab Phân tích ShowPlan. Bạn có thể sắp xếp kết quả trong các cột chênh lệch, thực tế và ước tính để tìm ra vấn đề và đề xuất cho nhà điều hành cụ thể trong kế hoạch thực thi. Điều này có sẵn từ SSMS 17.4.

Để thực hiện việc này, chỉ cần nhấp chuột phải vào kế hoạch thực thi và sau đó nhấp vào Phân tích kế hoạch thực thi thực tế.

Sau đó, nhấp vào siêu liên kết trong Tìm chi tiết . Điều này sẽ giải thích các tình huống có thể xảy ra đối với việc ước tính không chính xác và các giải pháp thay thế để cải thiện các ước tính này. Đó là một điểm khởi đầu tốt cho các vấn đề ước tính bản số.

So sánh kế hoạch trưng bày

Giả sử bạn đã xác định được một vấn đề trong kế hoạch thực hiện và bạn đã triển khai một giải pháp để khắc phục nó. Nhưng, bạn sẽ so sánh kế hoạch thực hiện trước đó như thế nào (trước khi thực hiện giải pháp) và kế hoạch thực hiện hiện tại như thế nào? Kế hoạch so sánh SSMS tính năng này cung cấp cho bạn sự linh hoạt để so sánh hai kế hoạch thực hiện. Nó nêu bật những điểm giống và khác nhau giữa các kế hoạch này.

Thông thường, các DBA nhận được cuộc gọi từ các nhà phát triển rằng một truy vấn cụ thể đang hoạt động tốt trong quá trình sản xuất nhưng mất nhiều thời gian trong môi trường QA với cùng các tham số. Một trường hợp sử dụng khác đang chuyển sang phiên bản SQL Server mới hơn. Giả sử sau khi di chuyển, bạn gặp phải sự cố với một truy vấn hoạt động tốt trong phiên bản SQL thấp hơn. Bạn cũng có thể sử dụng công cụ này để so sánh các kế hoạch thực thi của các phiên bản SQL khác nhau và các mức vá lỗi.

Lưu kế hoạch thực thi trong SQLPlan sự mở rộng. Sau đó, bạn có thể nhấp chuột phải vào một kế hoạch thực thi khác và chọn So sánh Showplan .

Các kế hoạch thực thi trực tiếp trong SSMS

Bạn có thể kích hoạt một kế hoạch thực thi trực tiếp của một truy vấn đang hoạt động. Điều này sẽ cung cấp cho bạn số liệu thống kê thời gian thực về luồng dữ liệu cho các nhà khai thác khác nhau. Trong thống kê thực hiện thời gian chạy, bạn có thể theo dõi thời gian đã trôi qua và số hàng. Đây là một tính năng tuyệt vời để khắc phục sự cố và gỡ lỗi các vấn đề về hiệu suất. Bạn có thể sử dụng thống kê truy vấn trực tiếp từ SQL Server 2016 trở lên.

Lưu ý:Bạn nên sử dụng SSMS phiên bản mới nhất. Tham khảo tài liệu của Microsoft để tải xuống phiên bản SSMS mới nhất.

  • Phiên bản mới nhất hiện tại:SSMS 18.7.1

Đối với thống kê truy vấn trực tiếp, hãy bật Bao gồm thống kê truy vấn trực tiếp sử dụng thanh công cụ SSMS.

Bạn cũng có thể xem kế hoạch thực hiện trực tiếp từ Trình theo dõi hoạt động . Trong Trình theo dõi hoạt động, chọn quy trình mong muốn, nhấp chuột phải vào quy trình đó để xem trình đơn và chọn Hiển thị kế hoạch thực hiện trực tiếp.

Điều này cung cấp cho bạn các ước tính truy vấn trực tiếp cùng với luồng dữ liệu và tỷ lệ phần trăm hoàn thành của các toán tử riêng lẻ. Thông thường, chúng tôi đợi quá trình thực thi truy vấn kết thúc và xem kế hoạch thực thi thực tế. Tuy nhiên, giả sử truy vấn của bạn mất hơn 30 phút để tạo ra kết quả. Trong trường hợp này, bạn có thể sử dụng thống kê truy vấn trực tiếp để theo dõi từng toán tử, luồng dữ liệu và chỉ ra toán tử nào đang mất thời gian để hoàn thành truy vấn. Ví dụ, như được hiển thị bên dưới, truy vấn đang chạy trong 12 phút 48 giây và truy vấn ước tính đã hoàn thành 20%. Ở cấp độ người vận hành, quá trình quét chỉ mục và cuộn đếm hàng đã hoàn thành 41%. Các đường chấm chấm hiển thị chuyển động của dữ liệu.

Xem xét việc sử dụng kế hoạch thực thi SQL Server

Các kế hoạch thực thi SQL Server cực kỳ hữu ích trong việc khắc phục sự cố và tối ưu hóa các truy vấn chậm. Mọi chuyên gia cơ sở dữ liệu cần biết cách phân tích và hiểu thông tin khi kế hoạch thực thi có sẵn. Như đã đề cập trước đó, có nhiều công cụ khác nhau trong SSMS và Azure Data Studio để giúp bạn xem xét và giải quyết các vấn đề về hiệu suất — đặc biệt là tính năng So sánh kế hoạch là một công cụ nên tận dụng khi bạn bắt đầu thực hiện các thay đổi và đánh giá hiệu suất.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm thế nào để kiểm tra kết quả công việc gói SSIS sau khi nó đã hoàn thành việc thực thi?

  2. Cách tốt nhất để chọn giá trị nhỏ nhất từ ​​một số cột là gì?

  3. Lấy tên của một cột từ ID của nó trong SQL Server:COL_NAME ()

  4. Một số cách truy cập Microsoft SQL Server từ Linux là gì?

  5. Làm cách nào để thoát chuỗi trong SQL Server bằng PHP?