Làm cách nào để đọc Chi phí truy vấn và luôn luôn là phần trăm?


34

Tôi hiện đang học SQL 70-433 (kỳ thi Chứng chỉ Microsoft) và tôi đang rất bối rối về chỉ số hiệu suất "chi phí truy vấn".

Theo bất kỳ tài liệu nào tôi có thể tìm thấy thông qua Google, chi phí truy vấn là một tỷ lệ phần trăm và biểu thị tỷ lệ phần trăm của toàn bộ lô được thực hiện bởi bất kỳ một phần nào của nó. Điều này có vẻ hơi kỳ lạ đối với tôi, vì tôi quan tâm đến giá trị tuyệt đối của một truy vấn cụ thể, thay vì giá trị của nó so với các truy vấn khác xuất hiện cùng với nó.

Nhưng sau đó tôi nghĩ, có lẽ, những gì bạn dự kiến ​​sẽ làm là đặt hai truy vấn thay thế cạnh nhau, chạy chúng thành "một đợt", và sau đó, ai có chi phí ít hơn 50% là người chiến thắng.

Nhưng cuộc thảo luận về chi phí truy vấn trong chương 6, bài học về Bộ công cụ đào tạo SQL 70-433 của Microsoft dường như không có bất kỳ liên quan nào đến vấn đề này.

Dưới đây là một ví dụ: Chúng hiển thị một truy vấn có chứa hai truy vấn phụ tương quan và sau đó cải thiện nó bằng cách thay thế các truy vấn phụ bằng ỨNG DỤNG NGOÀI. Kết quả: "Truy vấn này có chi phí khoảng 76, trong khi chi phí của truy vấn đầu tiên gấp đôi, khoảng 151." Sau đó, họ cải thiện truy vấn hơn nữa và giảm chi phí từ 76 xuống 3,6. Chúng không ngụ ý những số liệu này là tỷ lệ phần trăm, trong khi chúng ngụ ý rằng chúng là những số liệu tuyệt đối liên quan đến truy vấn như một đối tượng độc lập, không tham chiếu đến bất kỳ truy vấn nào khác. Và dù sao, làm thế nào truy vấn đầu tiên có thể có chi phí 151%?

Sau đó trong chương này, họ cho thấy một ảnh chụp màn hình của một kế hoạch thực hiện có ba phần. Cái đầu tiên nói "Chi phí: 0%", cái thứ hai nói "Chi phí: 1%" và cái cuối cùng nói "Chi phí: 99%" nhưng văn bản (của chính cuốn sách) bên dưới ảnh chụp màn hình "Chi phí của truy vấn này là 0,56" . Tôi đoán rằng chúng có nghĩa là một số loại chi phí khác, nhưng tôi không thể tìm thấy tài liệu tham khảo ở nơi khác.

Ai đó có thể giúp gì không? Tôi hoàn toàn bối rối.


PS Giả sử họ đang đề cập đến một cái gì đó khác với tỷ lệ phần trăm được hiển thị trong kế hoạch thực hiện ... làm cách nào để SSMS hiển thị cho tôi các số liệu họ đang trích dẫn? Tôi có cần một cái gì đó như THIẾT LẬP THỐNG KÊ THỜI GIAN, nhưng với một số lệnh khác sẽ hiển thị cho tôi con số "chi phí" trên tab Tin nhắn không?

Câu trả lời:


43

Chi phí truy vấn được báo cáo trong các kế hoạch thực hiện là "chi phí phụ ước tính". Đây là một con số tuyệt đối như 1.5. Conor Cickyham đã đề cập trong một bản trình bày SQLBits rằng ban đầu nó đề cập đến số giây được thực hiện trên máy của một nhân viên Microsoft cụ thể ( "Máy của Nick" ) trong SQL Server 7 ngày

nhập mô tả hình ảnh ở đây

nhưng bây giờ nên được hiểu là một thước đo đơn vị của tổng chi phí.

Kế hoạch thực hiện là một cái cây. Mỗi iterator trong cây được cung cấp một chi phí CPU ước tính và chi phí IO ước tính và chúng được cộng lại với nhau để có được chi phí tổng thể (trọng số tương đối có thể được điều chỉnh bằng một vài lệnh DBCC không có giấy tờ ). Chi phí cây con ước tính bao gồm chi phí cho chính trình lặp và tất cả các hậu duệ của nó. Để xem một ví dụ về các công thức chi phí được sử dụng, bạn có thể xem bài viết này .

Để xác định chi phí ước tính cho toàn bộ truy vấn trong SSMS, hãy chọn trình lặp gốc (ví dụ: SELECTtrình lặp) ở bên trái của gói đồ họa và xem số liệu này trong cửa sổ thuộc tính SSMS.

Khi chạy nhiều truy vấn (cho dù trong cùng một đợt hay không), tỷ lệ phần trăm được tính bằng cách cộng tất cả các giá trị này và tính tỷ lệ phần trăm như bạn mong đợi.

Bạn nên lưu ý rằng ngay cả trong các kế hoạch thực hiện thực tế, con số chi phí này dựa trên ước tính và sử dụng điều này để so sánh giá trị tương đối của hai truy vấn khác nhau có thể sai lầm trong trường hợp ước tính không chính xác.


Cảm ơn, điều đó thực sự hữu ích. Và hoàn toàn không rõ ràng! Tôi tự hỏi tại sao con số đó không được gắn cờ rõ ràng hơn?

4
Tôi luôn băn khoăn về đơn vị đo lường, vui mừng vì cuối cùng cũng tìm ra. Tôi đã giải thích cho mọi người (về mặt hài hước) rằng đó là "Đô la SQL". Nếu chi phí truy vấn là 1,0, thì giống như trả 1 đô la cho một tách cà phê. Một mức giá không tồi. Bạn sẽ trả $ 300 cho một cốc? Không đời nào!
datagod
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.