"Lock Escalation" là cách SQL xử lý khóa cho các bản cập nhật lớn. Khi SQL sắp thay đổi nhiều hàng, công cụ cơ sở dữ liệu sẽ mất ít hơn, khóa lớn hơn (ví dụ: toàn bộ bảng) thay vì khóa nhiều thứ nhỏ hơn (ví dụ: khóa hàng).
Nhưng điều này có thể có vấn đề khi bạn có một bảng lớn, bởi vì lấy một khóa trên toàn bộ bảng có thể khóa các truy vấn khác trong một thời gian dài. Đó là sự cân bằng: nhiều khóa nhỏ chi tiết chậm hơn ít hơn (hoặc một) khóa thô, và có nhiều truy vấn khóa các phần khác nhau của bảng tạo ra khả năng bế tắc nếu một tiến trình đang chờ đợi.
Có tùy chọn cấp bảng, LOCK_ESCALATION
, mới trong SQL 2008, cho phép kiểm soát khóa leo thang. Mặc định, "TABLE" cho phép khóa leo thang tất cả các cách đến mức bảng. DISABLE ngăn khóa leo thang lên toàn bộ bảng trong hầu hết các trường hợp. AUTO cho phép khóa bảng ngoại trừ nếu bảng được phân vùng, trong trường hợp khóa chỉ được tạo lên đến mức phân vùng. Xem this blog post để biết thêm thông tin. Tôi nghi ngờ rằng IDE thêm cài đặt này khi tạo lại bảng vì TABLE là mặc định trong SQL 2008. Lưu ý rằng LOCK_ESCALATION không được hỗ trợ trong SQL 2005, vì vậy bạn sẽ cần phải loại bỏ nó nếu cố gắng chạy tập lệnh trên phiên bản 2005. Ngoài ra, vì TABLE là mặc định, bạn có thể xóa một cách an toàn dòng đó khi chạy lại tập lệnh của mình.
Cũng lưu ý rằng, trong SQL 2005 trước khi thiết lập này đã có mặt, tất cả các ổ khóa có thể leo thang để bàn level-- nói cách khác, "TABLE" là bối cảnh chỉ trên SQL 2005.
Nguồn
2009-11-09 20:52:56
Bài đăng trùng lặp trên Diễn đàn MSDN: http://social.msdn.microsoft.com/Forums/en-US/sqldatabaseengine/thread/e96aa19e-d72c-46af-b2e8-4bf54de09440 –
@JustinGrant: Biểu thức này có thể được kết hợp với câu lệnh 'CREATE TABLE'? –
@dma_k - Tùy chọn này không liên quan đến 'TẠO TẠO' vì bảng không tồn tại nên không có gì để khóa. –