Làm thế nào để tôi đo lường hiệu suất truy vấn tốt nhất?


19

Tôi có 2 thủ tục được lưu trữ, trong đó thủ tục lưu trữ thứ hai là một cải tiến của quy trình đầu tiên.

Tôi đang cố gắng đo lường chính xác mức độ cải thiện.

1 / Đo lường clock timedường như không phải là một lựa chọn vì tôi có thời gian thực hiện khác nhau. Thậm chí tệ hơn, đôi khi (hiếm khi, nhưng nó xảy ra) thời gian thực hiện của thủ tục được lưu trữ thứ hai lớn hơn thời gian thực hiện của thủ tục đầu tiên (tôi đoán do khối lượng công việc của máy chủ tại thời điểm đó).

2 / Include client statisticscũng cung cấp kết quả khác nhau.

3 / DBCC DROPCLEANBUFFERS, DBCC FREEPROCCACHElà tốt, nhưng cùng một câu chuyện ...

4 / SET STATISTICS IO ONcó thể là một tùy chọn, nhưng làm thế nào tôi có thể đạt được điểm tổng thể vì tôi có nhiều bảng liên quan đến các thủ tục được lưu trữ của mình?

5 / Include actual execution plancũng có thể là một lựa chọn. Tôi nhận được estimated subtreecost0,3253 cho thủ tục được lưu trữ đầu tiên và 0,3079 cho quy trình thứ hai. Tôi có thể nói thủ tục lưu trữ thứ hai nhanh hơn 6% (= 0,3253 / 0,3079) không?

6 / Sử dụng trường "Đọc" từ SQL Server Profiler?

Vậy làm thế nào tôi có thể nói rằng thủ tục được lưu trữ thứ hai nhanh hơn x% so với thủ tục đầu tiên, bất kể điều kiện thực hiện (khối lượng công việc của máy chủ, máy chủ nơi các thủ tục được lưu trữ này được thực thi, v.v.)?

Nếu không thể, làm thế nào tôi có thể chứng minh thủ tục được lưu trữ thứ hai có thời gian thực hiện tốt hơn thủ tục được lưu trữ đầu tiên?

Câu trả lời:


17

Tôi thích sử dụng công cụ miễn phí SQLQueryStress khi so sánh kịch bản trước và sau. Với SQLQueryStress, bạn có thể thực hiện từng thủ tục được lưu trữ bao nhiêu lần tùy thích và nhận tổng số liệu thống kê trung bình cho tất cả các lần thực hiện.

Ví dụ: bạn có thể thực hiện mỗi quy trình được lưu trữ 100 lần và sau đó sử dụng số liệu thống kê để sao lưu các cải tiến của mình. "Hơn 100 lần thực hiện, các cải tiến của tôi tiết kiệm được tổng cộng 30 giây và Proc được lưu trữ sẽ giảm 1500 lần đọc mỗi lần thực hiện." Tôi nghĩ rằng bạn có được ý tưởng.

Nếu có các tham số trong Proc được lưu trữ, bạn nên kiểm tra kỹ xem các cải tiến của bạn có hoạt động với nhiều bộ thông số khác nhau hay không. SQLQueryStress thực hiện một số nội dung thú vị bằng cách cho phép bạn thay thế các tham số trong truy vấn của mình để có được bức tranh tổng thể tốt hơn về cách thức hoạt động của Proc được lưu trữ.

Tài liệu SQLQueryStress: http://www.datamanipulation.net/sqlquerystress/documentation/documentation.asp

SQLQueryStress



3

Khi bạn đã thu thập thời gian thực hiện trong một vài ngày cho hai thủ tục được lưu trữ của mình, tôi sẽ khuyên bạn nên sử dụng trang chủ này

http://www.evanmiller.org/ab-testing/t-test.html

để xem nếu chúng thực sự khác nhau.

Sự khác biệt 6% không có vẻ nhiều, khi nói đến việc cải thiện các thủ tục được lưu trữ. Tôi đã đến để mong đợi hai bậc độ lớn từ đồng nghiệp của tôi và tôi giả vờ thất vọng nếu anh ta chỉ đạt được một bậc độ lớn ...

Anh ta không phải sử dụng trang chủ EvanMiller để chứng minh rằng giải pháp của mình hoạt động nhanh hơn.

Tôi cũng sẽ cài đặt SQLSentrys (chỉnh sửa :) Plan Explorer từ http://www.sqlsentry.com/ vì đây là một công cụ cải tiến hơn nhiều để so sánh các kế hoạch thực hiện.

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.