KHẮC PHỤC: Hiếm khi xảy ra kết quả không chính xác khi bạn sử dụng Option(Biên dịch lại) cho các truy vấn bên trong một thủ tục trong SQL Server 2014 hoặc SQL Server 2012

Áp dụng cho
SQL Server 2014 Developer - duplicate (do not use) SQL Server 2014 Developer - duplicate (do not use) SQL Server 2014 Enterprise - duplicate (do not use) SQL Server 2014 Enterprise - duplicate (do not use) SQL Server 2014 Standard - duplicate (do not use) SQL Server 2014 Standard - duplicate (do not use) SQL Server 2012 Enterprise SQL Server 2012 Developer SQL Server 2012 Express SQL Server 2012 Standard SQL Server 2012 Web SQL Server 2012 Business Intelligence SQL Server 2012 Analysis Services SQL Server 2012 Developer SQL Server 2012 Enterprise SQL Server 2012 Standard

Triệu chứng

Hãy cân nhắc các trường hợp sau:

  • Bạn chạy quy trình trong Microsoft SQL Server 2014 hoặc SQL Server 2012.

  • Thủ tục chứa truy vấn có các điều kiện sau đây:

    • Nó nối một bảng được cập nhật rất thường xuyên.
    • Nó có mệnh đề WHERE có chứa tham số.
    • Nó sử dụng Option(Biên dịch lại).
  • Quy trình này được chạy trên nhiều kết nối đồng thời có bộ giá trị tham số khác nhau.

  • Máy chủ của bạn đang chịu tải nặng khiến từng quy trình này mất nhiều thời gian hơn bình thường.

Trong tình huống này, bạn có thể nhận được kết quả không chính xác từ thủ tục được chạy trên kết nối của bạn nếu các điều kiện bổ sung sau đây được đáp ứng trong khoảng thời gian diễn ra từ khi kết thúc quá trình biên dịch truy vấn cho đến khi bắt đầu thực thi truy vấn trên kết nối của bạn:

  • Điều kiện 1: Một kết nối đồng thời khác thực hiện cập nhật cho bảng được nối đủ lớn để kích hoạt một quá trình biên dịch lại truy vấn trên kết nối của bạn.
  • Điều kiện 2: Cùng một truy vấn đã được biên dịch lại từ một kết nối khác và sau đó đưa vào bộ đệm ẩn.

Quan trọng Vấn đề về định giờ này cực kỳ hiếm gặp.

Nguyên nhân

Sự cố này xảy ra vì các giá trị tham số của truy vấn bị thay đổi thành giá trị không chính xác sau khi bạn chạy truy vấn trên kết nối của mình. Điều này xảy ra do vấn đề về thời gian cực kỳ hiếm gặp tồn tại giữa các biên dịch đồng thời.

Giải pháp

Sự cố này được khắc phục lần đầu tiên trong bản cập nhật tích lũy tiếp theo của SQL Server.

Cập nhật Tích lũy 4 cho SQL Server 2014 /en-us/help/2999197

Cập nhật tích lũy 2 cho SQL Server 2012 SP2 /en-us/help/2983175

Cập nhật tích lũy 11 cho SQL Server 2012 SP1 /en-us/help/2975396

Giới thiệu về các bản cập nhật tích lũy cho SQL Server

Mỗi bản cập nhật tích lũy mới dành cho SQL Server chứa tất cả các bản sửa lỗi nóng và bản sửa lỗi bảo mật được tích hợp trong bản cập nhật tích lũy trước đó. Xem các bản cập nhật tích lũy mới nhất cho SQL Server:

      

Trạng thái

Microsoft đã xác nhận rằng đây là sự cố trong các sản phẩm của Microsoft được liệt kê trong mục "áp dụng cho".