Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Sự khác biệt giữa đọc được cam kết và đọc có thể lặp lại

Đã cam kết đọc là một mức cách ly đảm bảo rằng mọi dữ liệu đã đọc đều được cam kết tại thời điểm này được đọc. Nó chỉ đơn giản là hạn chế người đọc nhìn thấy bất kỳ bài đọc trung gian, không cam kết, 'bẩn' nào. Không có lời hứa nào rằng nếu giao dịch phát hành lại tài liệu đã đọc, sẽ tìm thấy Tương tự dữ liệu, dữ liệu có thể tự do thay đổi sau khi được đọc.

Đọc lặp lại là cấp độ cách ly cao hơn, ngoài những đảm bảo về cấp độ đã cam kết đã đọc, nó cũng đảm bảo rằng mọi dữ liệu đọc đều không thể thay đổi , nếu giao dịch đọc lại cùng một dữ liệu, nó sẽ tìm dữ liệu đã đọc trước đó tại chỗ, không thay đổi và có sẵn để đọc.

Mức cách ly tiếp theo, có thể nối tiếp hóa, đảm bảo thậm chí còn mạnh mẽ hơn:ngoài mọi thứ đảm bảo đọc lặp lại, nó cũng đảm bảo rằng không có mới dữ liệu có thể được nhìn thấy trong lần đọc tiếp theo.

Giả sử bạn có một bảng T với một cột C có một hàng trong đó, giả sử nó có giá trị '1'. Và coi như bạn có một nhiệm vụ đơn giản như sau:

BEGIN TRANSACTION;
SELECT * FROM T;
WAITFOR DELAY '00:01:00'
SELECT * FROM T;
COMMIT;

Đó là một nhiệm vụ đơn giản thực hiện hai lần đọc từ bảng T, với độ trễ giữa chúng là 1 phút.

  • trong READ COMMITTED, lựa chọn thứ hai có thể trả về bất kỳ dữ liệu. Một giao dịch đồng thời có thể cập nhật bản ghi, xóa nó, chèn bản ghi mới. Lựa chọn thứ hai sẽ luôn nhìn thấy mới dữ liệu.
  • trong REPEATABLE READ, SELECT thứ hai được đảm bảo hiển thị ít nhất các hàng được trả về từ SELECT đầu tiên không thay đổi . Giao dịch đồng thời có thể thêm hàng mới trong một phút đó, nhưng không thể xóa cũng như thay đổi các hàng hiện có.
  • trong SERIALIZABLE đọc, lựa chọn thứ hai được đảm bảo nhìn thấy chính xác các hàng giống như hàng đầu tiên. Không có hàng nào có thể thay đổi, cũng không bị xóa, cũng như không thể chèn các hàng mới bằng một giao dịch đồng thời.

Nếu bạn làm theo logic ở trên, bạn có thể nhanh chóng nhận ra rằng các giao dịch CÓ THỂ KHOẢNG CÁCH, mặc dù chúng có thể giúp cuộc sống của bạn trở nên dễ dàng, nhưng luôn bị chặn hoàn toàn mọi thao tác đồng thời có thể có, vì chúng yêu cầu không ai có thể sửa đổi, xóa hoặc chèn bất kỳ hàng nào. Mức cách ly giao dịch mặc định của .Net System.Transactions phạm vi có thể tuần tự hóa và điều này thường giải thích hiệu suất tối đa dẫn đến kết quả.

Và cuối cùng, đó là mức cô lập SNAPSHOT. Mức cách ly SNAPSHOT đảm bảo giống như khả năng tuần tự hóa, nhưng không bằng cách yêu cầu rằng không có giao dịch đồng thời nào có thể sửa đổi dữ liệu. Thay vào đó, nó buộc mọi người đọc phải nhìn thấy phiên bản thế giới của riêng mình (đó là 'ảnh chụp nhanh' của riêng mình). Điều này làm cho nó rất dễ lập trình cũng như rất có thể mở rộng vì nó không chặn các bản cập nhật đồng thời. Tuy nhiên, lợi ích đó đi kèm với một cái giá:tiêu tốn thêm tài nguyên máy chủ.

Bài đọc bổ sung:

  • Các mức cô lập trong Công cụ cơ sở dữ liệu
  • Hiệu ứng Đồng thời
  • Chọn mức độ cách ly dựa trên lập phiên bản hàng


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách trả lại các khóa trùng lặp từ tài liệu JSON trong SQL Server

  2. Làm cách nào để lấy tập lệnh của dữ liệu SQL Server?

  3. Giới thiệu về Storage Spaces Direct cho SQL Server

  4. SQL Server Management Studio (SSMS) là gì?

  5. Trả lại tất cả các nhóm tệp cho cơ sở dữ liệu hiện tại trong SQL Server