SQL Server: ĐỌC Mức cách ly COMMITTED với tùy chọn READ_COMMITTED_SNAPSHOT

2022-07-05 19:42:51

Trong bài đăng này, tôi sẽ chia sẻ một lưu ý quan trọng về mức cách ly READ COMMITTED và cách nó hoạt động với tùy chọn READ_COMMITTED_SNAPSHOT của SQL Server.

READ COMMITTED là mức cách ly mặc định của SQL Server và nó ngăn chặn việc đọc bẩn.
Câu lệnh SELECT của bạn luôn trả về dữ liệu đã cam kết.

Nó phát hành khóa chia sẻ đối với dữ liệu nơi dữ liệu đang cập nhật hoặc có khóa độc quyền, do đó, để chọn những dữ liệu đó, bạn phải đợi để hoàn thành giao dịch đó.

Bây giờ hãy kiểm tra mức cách ly READ COMMITTED:

Đầu tiên, tạo một bảng với dữ liệu mẫu:

Mở cửa sổ hoặc phiên truy vấn mới và thực thi tập lệnh này:

Trong thời gian trễ 15 giây, hãy mở một cửa sổ hoặc phiên truy vấn mới và cố gắng CHỌN bảng đó:

Kết quả là, bạn không thể CHỌN dữ liệu của mình cho đến khi CẬP NHẬT chưa hoàn thành. Vì chúng tôi đã đặt độ trễ là 15 giây, vì vậy bạn phải đợi trong 15 giây.

Tùy chọn READ_COMMITTED_SNAPSHOT là gì?

Mức cách ly READ COMMITTED phụ thuộc vào cài đặt BẬT / TẮT tùy chọn.
Theo mặc định, nó là TẮT.

Lệnh ALTER để chuyển nó sang ON / OFF:

READ_COMMITTED_SNAPSHOT TẮT:

Đây là cài đặt mặc định và đưa ra các khóa chia sẻ để ngăn giao dịch khác khi chúng tôi đang đọc hoặc cập nhật dữ liệu bảng.
Phần minh họa nhỏ ở trên đại diện cho hoạt động của cài đặt mặc định này.

READ_COMMITTED_SNAPSHOT BẬT:

Khi tùy chọn cơ sở dữ liệu READ_COMMITTED_SNAPSHOT được BẬT, tính năng phân lập đã cam kết đọc sử dụng lập phiên bản hàng.

ĐỌC CAM KẾT SNAPSHOT đọc lạc quan và viết bi quan. Khi dữ liệu đang cập nhật, bạn vẫn có thể đọc phiên bản cũ của dữ liệu và không có bất kỳ khóa chia sẻ nào, nhưng bạn không thể cập nhật cùng dữ liệu đó cho đến khi bản cập nhật đang chạy chưa kết thúc.

Điều này rất khác so với cấp độ Cách ly Ảnh chụp nhanh.
Nó tiêu thụ ít không gian tempdb hơn so với cách ly ảnh chụp nhanh.
Ở cấp Cách ly Ảnh chụp nhanh, cùng một dữ liệu gây ra xung đột cập nhật vì hai giao dịch khác nhau có thể cập nhật cùng một phiên bản của hàng.

Now, test the READ_COMMITTED_SNAPSHOT BẬT:

Lệnh ALTER để BẬT READ_COMMITTED_SNAPSHOT:

Mở cửa sổ hoặc phiên truy vấn mới và thực thi tập lệnh bên dưới:

Trong thời gian trễ 15 giây, hãy mở một cửa sổ hoặc phiên truy vấn mới và cố gắng CHỌN bảng này:

Kết quả là, Bạn có thể CHỌN phiên bản cũ của dữ liệu.

Trong thời gian trễ 15 giây, hãy mở một cửa sổ hoặc phiên truy vấn mới và cố gắng CẬP NHẬT cùng một hàng:

Kết quả là, bạn không thể thực hiện CẬP NHẬT trên cùng một dữ liệu.

Xem thêm:


Chia sẻ: