Triệu chứng
Hãy xem xét tình huống sau:
-
Bạn có một cơ sở dữ liệu có các tùy chọn ALLOW_SNAPSHOT_ISOLATION và READ_COMMITTED_SNAPSHOT được kích hoạt trong Microsoft SQL Server 2008 R2.
-
Bạn chạy một câu lệnh Select có chứa Tablock và UPDLOCK gợi ý đối với một bảng trong cơ sở dữ liệu.
-
Câu lệnh Select được bọc trong một Tran bắt đầurõ ràng nhưng cam kết không được thực thi.
-
Hai phần khác của cùng một truy vấn được bắt đầu với cùng một gợi ý truy vấn nằm trong giao dịch rõ ràng.
Trong trường hợp này, khi truy vấn đầu tiên cam kết, một trong các truy vấn khác sẽ được bế tắc.
Nguyên nhân
Sự cố xảy ra vì SQL Server không đúng báo cáo được bế tắc trong một trong những tình huống sau đây:
-
Khi ALLOW_SNAPSHOT_ISOLATION và READ_COMMITTED_SNAPSHOT được kích hoạt cho một cơ sở dữ liệu, nhiều truy vấn so với cùng giao dịch có thể được báo cáo là bị khóa không đúng cách khi một trong số đó đã hoàn thành.
-
Khi ALLOW_SNAPSHOT_ISOTION được bật và các gợi ý Tablock và UPDLOCK được sử dụng, câu lệnh Select thứ hai và thứ ba sẽ thực hiện IX khóa với mục đích chuyển đổi thành X. Hàm IX sẽ khóa deadlocking khi tìm cách chuyển đổi thành X được thực hiện.
-
Khi ALLOW_SNAPSHOT_ISOLATION bị vô hiệu hóa, các truy vấn thứ hai và thứ ba sẽ có được sáu khóa. Trong trường hợp này, khi sáu khóa được chuyển đổi thành X, nó chỉ là một kịch bản chặn, chứ không phải là một bế tắc.
Giải pháp
Vấn đề lần đầu tiên được khắc phục trong bản Cập Nhật tích lũy SQL Server sau đây. Sau khi bạn áp dụng các hotfix, SQL Server sẽ giải quyết sự cố bằng cách ghi nếu có gợi ý đã xem qua các gợi ý hoặc thông báo lỗi đã gặp phải cho cơ sở dữ liệu và truy vấn. Thông tin này được sử dụng để chọn kiểu khóa chính xác để xử lý tình huống đúng cách, thay vì bế tắc báo cáo không đúng.
Bản Cập Nhật tích lũy 11 cho SQL Server 2008 R2 SP2 /en-us/help/2926028
Mỗi bản Cập Nhật tích lũy mới cho SQL Server chứa tất cả các hotfix và tất cả các bản sửa lỗi bảo mật đã được đưa vào bản Cập Nhật tích lũy trước đó. Kiểm tra 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 đây là sự cố trong các sản phẩm của Microsoft được liệt kê trong phần "Áp dụng cho".