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

SQL Server:ngăn chặn các lần đọc bẩn trong một quy trình được lưu trữ

Bạn không thể ngăn chặn việc đọc bẩn. Các nhà văn có những khóa độc quyền để ngăn chặn sự trung thực, đọc cam kết, đọc. Nhưng không có gì không có gì bạn có thể làm để ngăn chặn việc đọc bẩn. Trình đọc bẩn phải ngừng đọc bẩn, chấm thời gian.

Giả sử rằng mã thăm dò bảng Khách hàng nằm trong tầm kiểm soát của bạn, giải pháp là xóa gợi ý đọc bẩn khỏi truy vấn. Điều này có thể sẽ gây ra tranh cãi, vì cuộc thăm dò bây giờ sẽ chặn các bài viết. Giải pháp tốt nhất cho điều đó là bật lập phiên bản hàng :

ALTER DATABASE [<DBNAME>] SET ALLOW_SNAPSHOT_ISOLATION ON; 
ALTER DATABASE [<DBNAME>] SET READ_COMMITTED_SNAPSHOT ON;

Sau đó, chỉ cần thăm dò ý kiến ​​từ Khách hàng như một truy vấn thông thường, có bất kỳ gợi ý nào. Cuộc thăm dò ý kiến ​​của bạn sẽ không chặn sau khi ghi vì tính năng lập phiên bản hàng sẽ bắt đầu và chuyển hướng quét truy vấn đến phiên bản cập nhật trước, không bị khóa của hàng.

Thêm một lưu ý:bỏ phiếu mỗi 500ms? Có lẽ bạn nên sử dụng cơ chế Thông báo truy vấn để làm mất hiệu lực bộ nhớ đệm của mình, xem The Mysterious Thông báo .



  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ác phương pháp tốt nhất để chạy tổng - được cập nhật cho SQL Server 2012

  2. Tại sao checksum () trả về cùng một giá trị cho chuỗi khác nhau

  3. Chọn câu lệnh để tìm các bản sao trên các trường nhất định

  4. SQL Server 2008 thay đổi dữ liệu Capture, ai đã thực hiện thay đổi?

  5. Kết hợp hai bảng trong một