Các khóa được chia sẻ được thực hiện trong phần Đọc cách ly Snapshot (RCSI)


9

Tôi đang thấy chờ đợi cho các khóa được chia sẻ ( LCK_M_S) khi sử dụng RCSI. Tôi hiểu rằng điều này không xảy ra vì SELECTskhông yêu cầu khóa chung khi sử dụng RCSI.

Làm thế nào tôi có thể nhìn thấy ổ khóa được chia sẻ? Có phải vì chìa khóa nước ngoài?


Tôi cũng có thể hỏi, máy chủ sql có khóa chia sẻ trên các bản ghi nếu không có chỉ mục ngay cả khi read_commned_snapshot được bật không?
grassbl8d

Câu trả lời:


13

Làm thế nào tôi có thể nhìn thấy ổ khóa được chia sẻ? Có phải vì chìa khóa nước ngoài?

Đúng. SQL Server hoàn nguyên về việc thực hiện khóa mức cô lập đã cam kết đọc khi truy cập vào bảng nhằm mục đích xác nhận các ràng buộc khóa ngoài. Điều này là cần thiết cho tính chính xác và không thể bị vô hiệu hóa.

Hành vi chỉ áp dụng cho các báo cáo sửa đổi dữ liệu. Khóa chung chỉ được thực hiện khi kiểm tra dữ liệu liên quan đến khóa ngoài. Truy cập dữ liệu khác trong cùng một kế hoạch thực hiện có thể tiếp tục sử dụng phiên bản hàng.

Nếu SQL Server không làm điều này, các câu lệnh sửa đổi dữ liệu theo RCSIcó thể sẽ vi phạm ràng buộc khóa ngoại vì kiểm tra tính toàn vẹn đã sử dụng dữ liệu lỗi thời (đã được phiên bản).

Thật không may, hiện tại không có cách nào được hỗ trợ để thấy sự thay đổi này trong hành vi khóa trong kế hoạch thực hiện. Có thể thấy các gợi ý khóa bên trong khi cờ theo dõi 8607 đang hoạt động.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.