Thông số đánh hơi xung quanh công việc


8

Tôi đã sử dụng hai phương pháp để giải quyết các vấn đề đánh hơi thông số trong quá khứ:

1) Sử dụng WITH RECOMPILE
2) Xác định lại các giá trị tham số cho các biến cục bộ và sử dụng các giá trị thay vì tham số

Theo những gì tôi hiểu, kết quả cuối cùng của cả hai đều giống nhau - một kế hoạch thực hiện mới được tối ưu hóa cho truy vấn / params hiện tại được tạo và sử dụng.

Nếu điều này là đúng, có sự khác biệt nào giữa hai phương pháp này hay về cơ bản chúng giống nhau không? Là cái này thích hơn cái kia?

Câu trả lời:


3

Nếu bạn có thể dự đoán các giá trị tiêu biểu, hãy chạy thủ tục được lưu trữ của bạn với các giá trị đó bất cứ khi nào bạn (lại) tạo nó. Một kế hoạch thực hiện sẽ được tạo ra dựa trên các giá trị này và được lưu trữ để sử dụng trong tương lai. Hầu hết các .sqltệp thủ tục được lưu trữ của tôi kết thúc bằng một EXEClệnh có giá trị hợp lý, chính xác cho mục đích này (đó và để xác định các lỗi cơ bản trong mã).

Tất nhiên điều này sẽ không hữu ích nếu quy trình được lưu trữ của bạn chạy rất lâu, đủ để bạn không thể thực hiện nó một cách hợp lý trong giờ sản xuất. Lưu ý rằng nó không đủ để bắt đầu công việc, nó phải hoàn thành thành công cho một kế hoạch được lưu trữ.


4
  1. WITH RECOMPILE

Đây là một chút của một búa tạ. Nó biên dịch lại mọi câu lệnh trong mô-đun. Sử dụng OPTION (RECOMPILE)trên các câu lệnh nhạy cảm với tham số là một giải pháp được nhắm mục tiêu nhiều hơn.

  1. Tái chỉ định các giá trị tham số cho các biến cục bộ và sử dụng các giá trị thay vì tham số

Điều này có tác dụng tương tự như OPTIMIZE FOR UNKNOWNmột kế hoạch được tạo ra dựa trên các giá trị trung bình. Kế hoạch không biên dịch lại trên mỗi lần thực hiện.

Để biết thêm thông tin, vui lòng xem bài viết của tôi Thông số Đánh hơi, Nhúng và Tùy chọn RECOMPILE .

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.