Máy chủ SQL đã đọc CAM KẾT SNAPSHOT so với SNAPSHOT


23

Tôi đã nghiên cứu sự khác biệt giữa các cấp độ SQL Server READ COMMITTED SNAPSHOTSNAPSHOTcách ly và tìm thấy tài nguyên sau:

Chọn các mức cô lập dựa trên phiên bản hàng

Đối với hầu hết các ứng dụng, đọc cách ly cam kết sử dụng phiên bản hàng được khuyến nghị so với cách ly ảnh chụp nhanh vì các lý do sau:

  • Nó tiêu thụ ít không gian tempdb hơn so với cách ly ảnh chụp.

  • Cách ly ảnh chụp dễ bị tổn thương khi cập nhật các xung đột không thể áp dụng để đọc cách ly đã cam kết bằng cách sử dụng phiên bản hàng. Khi một giao dịch chạy trong sự cô lập ảnh chụp nhanh đọc dữ liệu sau đó được sửa đổi bởi một giao dịch khác, một bản cập nhật của giao dịch ảnh chụp nhanh đến cùng một dữ liệu sẽ gây ra xung đột cập nhật và giao dịch chấm dứt và quay trở lại. Đây không phải là vấn đề với cách ly cam kết đọc bằng cách sử dụng phiên bản hàng.

Tôi hơi mới đối với những chủ đề này, nhưng dường như tôi không thể hiểu hai điểm gạch đầu từ liên kết ở trên.

  1. Tại sao không gian tempdb sẽ khác nhau cho các chế độ này? Có một cửa hàng phiên bản chi tiết hơn so với cái khác?

  2. Tại sao cách ly ảnh chụp dễ bị tổn thương hơn để cập nhật xung đột?

Câu trả lời:


18
  1. READ COMMITTED SNAPSHOTsử dụng ảnh chụp nhanh mới sau mỗi câu lệnh. Điều đó có nghĩa là các phiên bản ít hàng hơn đang được giữ sống. (Tuyên bố bạn trích dẫn từ các tài liệu hơi sai lệch vì nó cho thấy điều này luôn đúng - nó chỉ đúng trong trường hợp SNAPSHOTgiao dịch dài hạn .) Phiên bản hàng chụp nhanh được tạo trên ghi. Việc đọc không ảnh hưởng đến những gì được đưa vào tempdb. Nhà văn không thể biết trước những gì sẽ được đọc trong tương lai. Độc giả chỉ ảnh hưởng đến những gì có thể bị thanh trừng.
  2. Khi một SNAPSHOTgiao dịch T1ghi vào một hàng đã được sửa đổi bởi một giao dịch khác T2trong khoảng thời gian giữa lúc T1bắt đầu và T1thử ghi, câu lệnh thất bại với lỗi xung đột cập nhật. Đây là một mô hình tương tranh lạc quan. Với READ COMMITTED SNAPSHOT T1sẽ chờ T2phát hành khóa X trên hàng và tiếp tục bình thường.

1
Đối với # 2, có an toàn không khi nói rằng SNAPSHOT không khóa riêng cho các bản cập nhật - nó chỉ dựa vào phiên bản hàng?
John Russell

1
@JohnRussell nó khóa riêng để hỗ trợ rollback. Tất cả ghi phải khóa X để đảm bảo rằng hàng có thể được khôi phục trong trường hợp quay ngược lại.
usr

0

Thêm một sự khác biệt giữa ảnh chụp nhanh và đọc ảnh chụp đã cam kết là như sau.

  1. Ảnh chụp nhanh

Trong phiên đầu tiên

THIẾT LẬP CẤP PHÂN PHỐI CẤP SNAPSHOT BEGIN TRẦN CHỌN * TỪ TB1 ..... .....

Trong phiên thứ hai

Cập nhật TB1 SET NAME = NAME + 'test' Trong đó id = 1

Trong phiên đầu tiên

CHỌN * TỪ TB1 - NÀY S return trả lại tên giá trị cho ID = 1, không phải tên + 'test' CAM KẾT TRAN

Trong ảnh chụp nhanh đã cam kết, lựa chọn đầu tiên trong phiên 1 sẽ trả về tên cho id = 1 và lựa chọn thứ hai sẽ trả về tên + 'test'.

Vì vậy, trong cách ly ảnh chụp nhanh, SQL SERVER thực hiện một ảnh chụp nhanh khi bắt đầu giao dịch và đọc từ ảnh chụp nhanh đó trong toàn bộ giao dịch.

Trong ảnh chụp đã cam kết đã đọc, ảnh chụp nhanh được thực hiện cho mọi câu lệnh CHỌN trong quá trình giao dịch.

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.