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

TABLOCK so với TABLOCKX

Sự khác biệt lớn, TABLOCK sẽ cố gắng lấy các ổ khóa "được chia sẻ" và TABLOCKX ổ khóa độc quyền.

Nếu bạn đang tham gia một giao dịch và bạn lấy một chiếc khóa độc quyền trên bàn, EG:

SELECT 1 FROM TABLE WITH (TABLOCKX)

Không có quy trình nào khác có thể lấy bất kỳ ổ khóa trên bàn, nghĩa là tất cả các truy vấn cố gắng trao đổi với bàn sẽ bị chặn cho đến khi giao dịch được thực hiện.

TABLOCK chỉ lấy một khóa chia sẻ, các khóa chia sẻ được phát hành sau khi một câu lệnh được thực thi nếu cách ly giao dịch của bạn là READ COMMITTED (mặc định). Nếu mức độ cô lập của bạn cao hơn, ví dụ:SERIALIZABLE , các khóa dùng chung được giữ cho đến khi kết thúc giao dịch.

Khóa dùng chung được, hmmm, được chia sẻ. Có nghĩa là 2 giao dịch đều có thể đọc dữ liệu từ bảng cùng một lúc nếu cả hai đều giữ khóa S hoặc IS trên bảng (thông qua TABLOCK ). Tuy nhiên, nếu transaction A giữ khóa dùng chung trên bàn, transaction B sẽ không thể lấy một khóa độc quyền cho đến khi tất cả các khóa dùng chung được giải phóng. Đọc về ổ khóa nào tương thích với ổ khóa nào tại msdn.

Cả hai gợi ý đều khiến db bỏ qua việc sử dụng các khóa chi tiết hơn (như khóa cấp hàng hoặc cấp trang). Về nguyên tắc, các khóa chi tiết hơn cho phép bạn đồng thời tốt hơn. Vì vậy, ví dụ:một giao dịch có thể đang cập nhật hàng 100 trong bảng của bạn và một hàng 1000 khác, đồng thời từ hai giao dịch (nó trở nên phức tạp với việc khóa trang, nhưng hãy bỏ qua điều đó).

Nói chung, các khóa chi tiết là những gì bạn muốn, nhưng đôi khi bạn có thể muốn giảm sự đồng thời db để tăng hiệu suất của một hoạt động cụ thể và loại bỏ nguy cơ bị khóa.

Nói chung, bạn sẽ không sử dụng TABLOCK hoặc TABLOCKX trừ khi bạn thực sự cần nó cho một số trường hợp phức tạp.



  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ó sự khác biệt về hiệu suất giữa CTE, Truy vấn phụ, Bảng tạm thời hoặc Biến bảng không?

  2. Cơ sở dữ liệu hệ thống SQL Server - Khái niệm cơ bản

  3. Khi nào thì sắp xếp lại máy chủ SQL?

  4. STATISTICS XML trong SQL Server là gì?

  5. Cách CAST () hoạt động trong SQL Server