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

Các cải tiến của chương trình cho UDF

Microsoft đã cải tiến nội dung của đầu ra ShowplanXML cho SQL Server trong một vài bản phát hành gần đây và trong SQL Server 2017 CU3, họ đã giới thiệu thống kê thực thi chức năng do người dùng xác định (UDF) vào nút QueryTimeStats của đầu ra XML. Điều này cũng đã được chuyển trở lại SQL Server 2016 trong Gói Dịch vụ 2 cho các kế hoạch thực thi thực tế. Tính năng này cho phép bạn biết rõ ràng tác động của việc thực thi UDF vô hướng như là một phần của các đặc tính hiệu suất của một truy vấn. Tuy nhiên, có một điểm thú vị liên quan đến việc sử dụng tính năng này; bạn phải thu thập kế hoạch thực thi thực tế bằng cách sử dụng phiên bản cập nhật của SQL Server Management Studio hoặc sử dụng SentryOne Plan Explorer, nếu không thông tin sẽ bị xóa khỏi kế hoạch thực thi.

So sánh các gói trong các phiên bản SSMS khác nhau

Gần đây, tôi đã trình bày một phiên nhóm người dùng ở Chicago về điều chỉnh hiệu suất truy vấn bằng cách sử dụng bộ nhớ cache của gói và trong phiên, tôi đã sử dụng phiên bản mới nhất của SQL Server Management Studio tại thời điểm đó, phiên bản 17.5. Vào thời điểm đó, tôi cũng vừa cập nhật máy ảo của mình lên SQL Server 2016 Service Pack 2, vì vậy tôi đã trình bày thông tin UdfElapsedTime và UdfCpuTime mới trong chương trình thực tế QueryTimeStats và ghi chú cho bản thân để viết một bài báo về thm. Khi tôi quay lại để thực sự bắt đầu bài viết này, bằng cách sử dụng cùng một truy vấn chính xác trên cùng một máy ảo, tôi không thể tạo một kế hoạch thực thi thực tế có chứa thông tin UdfElapsedTime hoặc UdfCpuTime mặc dù đã cố gắng lặp lại. Tôi không thể tìm ra mình đã làm sai điều gì và hóa ra gốc rễ của vấn đề là do tôi đã vô tình khởi chạy SQL Server Management Studio 2016 thay vì SQL Server Management Studio 17.5. Khi tôi chạy cùng một truy vấn trong SSMS 17.5, tôi đột nhiên nhận được thông tin UdfElapsedTime và UdfCpuTime. Xem bên dưới để biết các ví dụ về XML được trả về từ cả hai phiên bản SSMS:

Trình chiếu XML từ SSMS 17,5

Hiển thị XML từ SSMS 2016 - WaitStats và QueryTimeStats đã bị xóa hoàn toàn

Tôi đã sử dụng Microsoft Message Analyzer để tạo ra một dấu vết TCP của lưu lượng mạng trên cổng 1433 giữa một máy khách đang chạy SSMS 2016 với phiên bản SQL Server 2016 SP2 để nắm bắt các gói TDS đang được gửi từ máy chủ đến máy khách. Điều này tiết lộ rằng ShowPlanXML do máy chủ trả về bao gồm thông tin QueryTimeStats mặc dù nó không xuất hiện trong ShowPlanXML trong SSMS 2016, vì vậy máy khách thực sự loại bỏ bất kỳ trường nào không có trong định nghĩa lược đồ được vận chuyển cùng với máy khách.

Chênh lệch tin nhắn:1635
<.Q.u.e.r.y.T.i.m.e.S.t.a.t.s. .E.l.a.p.s.e.d.T.i.m.e. =. ". 2.6.7.". .C.p.u.T.i.m.e. =. ". 2.6.7.". .U.d.f.E.l.a.p.s.e.d.T.i.m.e. =. ". 2.1.5.". .U.d.f.C.p.u.T.i.m.e. =. ". 2.1.5.".>. <./. Q.u.e.r.y.T.i.m.e.S.t.a.t.s.>

Đây là điều cần chú ý với các tệp .sqlplan được tạo bằng các phiên bản máy khách cũ hơn của SSMS và / hoặc kế hoạch thực thi được lưu hoặc sao chép từ phiên bản SSMS cũ hơn, đây là điều thường xảy ra khi tôi làm việc với máy khách bằng cách e-mail.

Trong SSMS, việc xem xét kế hoạch thực thi đồ họa không cung cấp cho bạn bất kỳ dấu hiệu nào về tác động hiệu suất của việc thực thi chức năng vô hướng do người dùng xác định trong truy vấn:

Nếu chúng tôi dựa trên phân tích của chúng tôi về hiệu suất một cách chặt chẽ dựa trên chi phí của từng nhà điều hành, thì Phạm vi tính toán cho việc thực thi chức năng có vẻ như không có tác động đáng kể đến hiệu suất. Các mẹo công cụ dành cho người vận hành cũng không hiện thực hóa thông tin hoặc chứa bất kỳ cảnh báo nào về tác động của chức năng do người dùng xác định. Nơi duy nhất chúng tôi thấy rằng thông tin trong SSMS hiện tại là trong XML của kế hoạch hoặc trong Cửa sổ Thuộc tính dành cho toán tử gốc SELECT của kế hoạch, như được hiển thị bên dưới:

Tuy nhiên, sử dụng thông tin ở đây, chúng ta có thể thấy rằng UdfCpuTime là 85,79% tổng số CpuTime và UdfElapsedTime là 64,44% tổng số ElapsedTime để thực hiện truy vấn (thực hiện phép toán để tính toán tỷ lệ phần trăm bằng cách sử dụng QueryTimeStats CpuTime và UdfCpuTime (được đánh dấu trong màu xanh lam ở trên), và Thời gian đã qua và Thời gian UdfElapsedTime).

Sử dụng SentryOne Plan Explorer để truy xuất các kế hoạch

Một trong những công cụ miễn phí yêu thích của tôi để giúp điều chỉnh hiệu suất SQL Server là SentryOne Plan Explorer và một trong những tính năng của Plan Explorer trong một thời gian dài là khả năng tạo một kế hoạch thực thi thực tế bằng cách dán văn bản lệnh vào một cửa sổ mới và nhấp vào nút Nhận Kế hoạch Thực tế, như được hiển thị bên dưới.

Vì Plan Explorer đọc ShowplanXML khi nó được cung cấp bởi công cụ SQL Server, nó cũng sẽ chứa thông tin nâng cao trong QueryTimeStats. Tuy nhiên, nếu bạn mở một kế hoạch thực thi đã được lưu từ phiên bản cũ hơn của Management Studio hoặc nếu bạn sử dụng Plan Explorer Addin cho SSMS trong phiên bản cũ hơn để xem kế hoạch trong Plan Explorer, thì thông tin nâng cao sẽ không được hiển thị.

Lưới tuyên bố của tab Kết quả trong Plan Explorer có thể được cập nhật bằng cách sử dụng Trình chọn cột để thêm các cột Thời lượng UDF và UDF CPU cùng với các cột hiện có trong lưới, giúp bạn dễ dàng biết được vị trí tác động của việc thực thi chức năng do người dùng xác định. cho các lô nhiều câu lệnh lớn. Plan Explorer cũng cung cấp đánh dấu của các cột này khi chúng là một phần quan trọng của CPU và / hoặc thời lượng tổng thể như được hiển thị bên dưới.

Thông tin sơ đồ kế hoạch trong Plan Explorer cũng đã được nâng cao. Dưới đây là sơ đồ sử dụng Chi phí theo CPU + I / O và sau đó là Chi phí theo CPU:

Sơ đồ kế hoạch sử dụng Chi phí bởi CPU + I / O

Sơ đồ kế hoạch sử dụng Chi phí bằng CPU

Có các cảnh báo bổ sung trên toán tử CHỌN gốc khi thống kê thực thi cho các chức năng do người dùng xác định cho thấy chúng là một phần đáng kể của CPU tổng thể và / hoặc thời lượng tổng thể:

Chú giải công cụ cho gốc CHỌN toán tử

Toán tử Compute Scalar cũng có cảnh báo trong Plan Explorer dựa trên số lượng hàng đang được xử lý bởi hoạt động, ngay cả đối với các gói không bao gồm các cải tiến cho ShowplanXML:

Chú giải công cụ cho Máy tính Toán tử vô hướng

Hiển thị chi phí theo CPU có thể giúp xác định các nhà khai thác có chi phí CPU ẩn có thể bị I / O lấn át. Khả năng thay đổi chế độ xem một chút để tự khắc phục sự cố CPU hoặc I / O là một trong nhiều điểm khác biệt giữa Plan Explorer và SSMS. Đây là trình đơn ngữ cảnh của sơ đồ nơi bạn có thể thay đổi chế độ xem này:

Kết luận

Những cải tiến đối với Showplan XML trong SQL Server giúp dễ dàng hơn nhiều trong việc xác định tác động tổng thể của các hàm vô hướng do người dùng xác định đối với hiệu suất truy vấn trong SQL Server 2016 Service Pack 2 và SQL Server 2017 Cum Cum Update 3, miễn là bạn đang sử dụng thêm phiên bản gần đây của các công cụ máy khách hoặc Plan Explorer để truy xuất kế hoạch thực thi.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách xóa khóa chính trong SQL

  2. Xử lý ngày và giờ thay vì datetime

  3. Kết nối PowerShell với Salesforce.com

  4. AWS RDS là gì

  5. Tạo một cụm Docker Swarm trên Dịch vụ vùng chứa Azure