Trong PostgreSQL, cơ chế MVCC concurrency control nói rằng: ổ khóaTại sao MVCC yêu cầu khóa cho DML tuyên bố
MVCC mua cho các truy vấn (đọc) dữ liệu không mâu thuẫn với khóa mua cho dữ liệu văn bản, và vì vậy đọc không bao giờ khối văn bản và viết không bao giờ khối đọc
vì vậy, even for READ_COMMITTED, một câu lệnh UPDATE sẽ khóa các hàng hiện đang bị ảnh hưởng nên không có giao dịch nào khác có thể thay đổi chúng, cho đến khi giao dịch vãng lai cam kết hoặc cuộn lại.
Nếu một giao dịch đồng thời phát hành CẬP NHẬT trên các hàng bị khóa, giao dịch thứ hai sẽ chặn cho đến khi giao dịch đầu tiên phát hành khóa.
Đây có phải là hành vi trying to prevent the write-write conflicts không?
Cập nhật bị mất vẫn có thể xảy ra trong READ_COMMITTED, sau khi giao dịch đầu tiên cam kết, lệnh thứ hai sẽ ghi đè hàng (ngay cả khi cơ sở dữ liệu đã thay đổi giữa bắt đầu truy vấn UPDATE và kết thúc truy vấn). Vì vậy, nếu mất cập nhật vẫn còn có thể, tại sao giao dịch thứ hai phải đợi? Không thể các ảnh chụp nhanh cấp hàng được sử dụng để lưu trữ các thay đổi giao dịch không được cam kết để tránh các giao dịch phải chờ các khóa ghi được phát hành?
Nhưng số lần đọc không thể xảy ra, vì chúng tôi đang ở trên READ_COMMITTED. Tôi wad tự hỏi tại sao không cập nhật các bản sao bị cô lập và chỉ tuôn ra chúng tại thời gian cam kết. Ngay bây giờ, trong PostgreSQL, tx thứ 2 chỉ đơn giản là ghi đè lên phiên bản đầu tiên, nhưng cũng có một sự ngăn chặn đang diễn ra. Tại sao không chỉ sử dụng ảnh chụp nhanh theo phạm vi phiên và không chặn ở mức cô lập này. –
Tôi nghĩ ý bạn là "cập nhật các bản sao bị cô lập" sẽ tương ứng với "lần thắng đầu tiên". Và hệ thống có thể thực hiện điều đó - nhưng mô hình lập trình là lẻ, bởi vì mọi giao dịch phải được chuẩn bị để xử lý trường hợp mọi sửa đổi "làm việc" (nghĩa là nó đã hoàn thành và không trả về lỗi) nhưng giao dịch không thể được cam kết . –
Tôi cho rằng mô hình khóa dễ chấp nhận hơn, bởi vì mọi cơ sở dữ liệu đã có một hệ thống phân cấp khóa. Như bạn đã đề cập trước đây, nó không chỉ là dữ liệu hàng mà còn tất cả các chỉ mục. –