Triệu chứng
Hãy xem xét tình huống sau:
-
Bạn có cơ sở dữ liệu Microsoft SQL Server 2012 có các tùy chọn ALLOW_SNAPSHOT_ISOLATION và READ_COMMITTED_SNAPSHOT đã bật.
-
Bạn có ít nhất ba truy vấn đồng thời chạy với cùng một bảng.
-
Các truy vấn sử dụng gợi ý truy vấn (Tablock, UPDLOCK) .
-
Mỗi truy vấn được bọc trong một câu lệnh trần rõ ràng, nhưng câu lệnh cam kết sẽ không được thực thi.
Khi truy vấn đầu tiên cam kết trong kịch bản này, một trong các truy vấn khác sẽ được bế tắc. Khi READ_COMMITTED_SNAPSHOT được bật cùng với các gợi ý truy vấn Tablock và UPDLOCK , các phiên sẽ mất IX khóa trên bảng. Bế tắc sẽ xảy ra khi hai phiên đồng thời tìm cách chuyển đổi khóa IX thành X khóa cùng một lúc. Nếu READ_COMMITTED_SNAPSHOT bị vô hiệu hóa, các phiên sẽ nhận được sáu ổ khóa sẽ không được bế tắc khi chúng được chuyển đổi thành X khóa. Các địa chỉ hotfix hành vi này bằng cách cấp các khóa LCK_M_SCH_S thay vì IX sẽ khóa khi READ_COMMITTED_SNAPSHOT được dùng với các gợi ý Tablock và UPDLOCK .Lưu ý Vấn đề này cũng xảy ra trong Microsoft SQL Server 2008 R2. Một hotfix cho SQL Server 2008 R2 sẽ sớm được phát hành.
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.
Cập Nhật tích lũy 8 cho SQL Server 2012 SP1 /en-us/help/2917531
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".