CHỈNH SỬA TÓM TẮT Theo yêu cầu từ Damien_The_Un Believer
Mục đích là để có được thông tin tốt nhất / hầu hết về giá trị biến cho SQL TRƯỚC KHI kế hoạch được tạo, nói chung tính năng đánh hơi tham số thực hiện điều này. Có thể có một lý do khiến tính năng dò tìm tham số bị 'vô hiệu hóa' trong trường hợp này. Nếu không nhìn thấy sự trình bày tốt hơn của mã thực, chúng tôi không thể thực sự nói giải pháp là gì hoặc tại sao vấn đề tồn tại. Hãy thử những điều dưới đây để buộc các khu vực bị ảnh hưởng tạo kế hoạch bằng cách sử dụng các giá trị thực tế.
* PHIÊN BẢN DÀI VỚI THÊM CHI TIẾT *
Đây có phải là proc được lưu trữ thực tế của bạn không? Bạn có các giá trị mặc định cho các tham số của mình không? Nếu vậy, chúng là gì?
Đánh giá tham số có thể hữu ích - nhưng nó phải có các giá trị tham số điển hình để tạo kế hoạch tốt và nếu không, sẽ không thực sự hữu ích hoặc sẽ tạo ra một kế hoạch xấu dựa trên giá trị tham số không điển hình. Vì vậy, nếu một biến có giá trị mặc định là null hoặc một giá trị không phải là giá trị điển hình trong lần đầu tiên nó được chạy và kế hoạch được biên dịch - nó sẽ tạo ra một kế hoạch tồi.
Nếu ai đó đã viết đoạn mã này - họ có thể đã cố tình 'vô hiệu hóa' tính năng dò tìm tham số với các biến cục bộ vì một lý do nào đó. Các quy tắc kinh doanh có thể yêu cầu các cấu trúc biến đổi này.
Mục đích là để có được thông tin tốt nhất / hầu hết về giá trị biến cho SQL TRƯỚC KHI tạo kế hoạch và nói chung Parameter Sniffing thực hiện điều này. Nhưng có những điều có thể làm cho nó ảnh hưởng tiêu cực đến hiệu suất và đó có thể là lý do tại sao nó bị 'vô hiệu hóa'. Có vẻ như kế hoạch vẫn đang được tạo với các giá trị không điển hình cho các tham số hoặc vẫn chưa đủ thông tin - có sử dụng tính năng dò tìm tham số hay không.
Hãy thử gọi truy vấn bên trong mầm bằng Sử dụng sp_executesql để thực thi các truy vấn bị ảnh hưởng, buộc nó phải tạo một kế hoạch cho khu vực đó với các biến thực tế và xem liệu nó có tốt hơn không. Đây có thể là giải pháp của bạn nếu bạn phải có loại giá trị tham số bất thường này - tạo các procs được lưu trữ chạy các phần bị ảnh hưởng và gọi chúng sau từ bên trong thủ tục được lưu trữ - sau khi biến đã nhận được một giá trị điển hình.
Nếu không thấy đoạn mã thực tế được trình bày tốt hơn, thật khó để biết được vấn đề là gì. Hy vọng rằng thông tin này sẽ giúp ích -