Các câu trả lời khác là chính xác về lý do để không chạy DBCC FREEPROCCACHE
. Tuy nhiên, cũng có một vài lý do để làm như vậy:
- Tính nhất quán
Nếu bạn muốn so sánh hai truy vấn hoặc quy trình khác nhau đang cố gắng thực hiện cùng một cách theo những cách khác nhau, thì có khả năng chúng sẽ truy cập cùng một trang. Nếu bạn ngây thơ chạy truy vấn # 1 rồi truy vấn # 2, thì lần thứ hai có thể nhanh hơn nhiều chỉ vì các trang đó được lưu trữ bởi truy vấn đầu tiên. Nếu bạn xóa bộ đệm trước mỗi lần thực hiện, chúng sẽ bắt đầu ngay cả.
Nếu bạn muốn kiểm tra hiệu năng bộ đệm nóng, hãy nhớ chạy các truy vấn nhiều lần, xen kẽ và loại bỏ vài lần chạy đầu tiên. Trung bình kết quả.
- Trường hợp xấu nhất
Giả sử bạn có một truy vấn mất một giây đối với bộ đệm nóng nhưng một phút đối với bộ đệm lạnh. Tối ưu hóa làm cho truy vấn trong bộ nhớ chậm hơn 20% nhưng truy vấn ràng buộc IO nhanh hơn 20% có thể là một chiến thắng lớn: trong các hoạt động bình thường, không ai sẽ nhận thấy thêm 200 ms trong các trường hợp thông thường, nhưng nếu có điều gì đó buộc truy vấn chạy với đĩa, mất 48 giây thay vì 60 có thể tiết kiệm được doanh số.
Đây không phải là vấn đề đáng lo ngại trên các hệ thống hiện đại với bộ nhớ hàng chục gigabyte và bộ lưu trữ SAN và SSD tương đối nhanh, nhưng nó vẫn còn quan trọng. Nếu một số nhà phân tích chạy một truy vấn quét bảng lớn đối với cơ sở dữ liệu OLTP của bạn, nó sẽ xóa sạch một nửa bộ đệm của bộ đệm, các truy vấn hiệu quả về lưu trữ sẽ giúp bạn quay lại tốc độ sớm hơn.
DBCC FLUSHPROCINDB
: Một số tham số không chính xác đã được đưa ra cho câu lệnh DBCC.