Có một số cách để đảm bảo biên dịch lại quy trình được lưu trữ:
- sử dụng
WITH RECOMPILE
, - làm cho thủ tục được lưu trữ trở nên động (nghĩ
exec()
) - đánh dấu proc để biên dịch lại bằng
sp_recompile
. - thay đổi lược đồ mà một kế hoạch truy vấn đã lưu trong bộ nhớ đệm dựa vào
- đang gọi
DBCC FREEPROCCACHE
- Ở cấp độ truy vấn, một câu lệnh riêng lẻ trong một chương trình có thể được biên dịch lại với gợi ý truy vấn RECOMPILE (SQL 2008).
Các yếu tố trong biên dịch
Bên cạnh các yếu tố khó được liệt kê ở trên, nguyên nhân nào dẫn đến việc biên dịch lại thủ tục được lưu trữ? Chà, rất nhiều thứ. Một số trong số này đan xen với danh sách trên, nhưng tôi muốn trình bày lại chúng b / c nó có thể không rõ ràng.
- Chèn hoặc xóa nhiều dữ liệu (mật độ dữ liệu trong chỉ mục và bảng thường kiểm soát các kế hoạch truy vấn)
- Xây dựng lại chỉ mục (thay đổi đối với các đối tượng cơ bản)
- Tạo / xóa bảng tạm thời (một lần nữa, các thay đổi cơ bản của DML).
- kế hoạch truy vấn đã cũ (nghĩ rằng không được sử dụng gần đây và sql muốn dọn dẹp việc sử dụng bộ nhớ)
Đây không phải là một danh sách đầy đủ. Trình tối ưu hóa truy vấn phát triển và bất ngờ cho dù bạn đã sử dụng SQL Server bao lâu. Nhưng đây là một số tài nguyên có thể được sử dụng:
- Khắc phục sự cố biên dịch lại thủ tục được lưu trữ (một cái cũ, nhưng một cái tốt)
- So sánh lại Quy trình đã Lưu trữ
- Tối ưu hóa các thủ tục được lưu trữ của SQL Server để tránh biên dịch lại
- Lưu và Sử dụng lại Kế hoạch Thực thi (phải đọc)
NHƯNG CHỜ-ANH HƠN NỮA!
Như đã nói, giả định trong câu hỏi của bạn là các bản biên dịch lại luôn không tốt cho hiệu suất. Trên thực tế, việc biên dịch lại thường là tốt.
Vậy khi nào bạn muốn nó được biên dịch lại? Hãy xem một ví dụ về proc tìm kiếm theo họ. Các thủ tục được lưu trữ thực hiện ' đánh giá tham số
'đó là một phước lành (nếu nó hiệu quả với bạn) và một lời nguyền (nếu nó có hiệu quả với bạn). Đầu tiên vượt qua tìm kiếm ai đó trên Zebr%
cho zerbrowski. Chỉ mục tên họ nhận ra điều này rất cụ thể và sẽ trả về, giả sử, 3 hàng từ một triệu - vì vậy một kế hoạch thực thi được xây dựng. Với proc được biên dịch để có kết quả hàng thấp, tìm kiếm tiếp theo là cho S%
. Chà, S là tên thông dụng nhất của bạn và khớp với 93.543 hàng trong số 1 triệu.