Khóa leo thang là gì?


47

Tôi đã được hỏi câu hỏi này tại một cuộc phỏng vấn và không có câu trả lời. Có ai ở đây có thể giải thích?

Câu trả lời:


45

Khóa DB có thể tồn tại trên các hàng, trang hoặc toàn bộ bảng hoặc chỉ mục. Khi một giao dịch đang được tiến hành, các khóa được giữ bởi giao dịch sẽ chiếm tài nguyên. Khóa leo thang là nơi hệ thống hợp nhất nhiều khóa thành cấp cao hơn (ví dụ: hợp nhất nhiều khóa hàng vào một trang hoặc nhiều trang cho toàn bộ bảng) thường để phục hồi tài nguyên được lấy bởi số lượng lớn các khóa hạt mịn.

Nó sẽ tự động thực hiện việc này, mặc dù bạn có thể đặt cờ trên các bảng (xem ALTER TABLE trong sách trên mạng) để kiểm soát chính sách cho việc leo thang khóa trên bảng cụ thể đó. Cụ thể, leo thang khóa quá sớm hoặc quá háo hức từng là một vấn đề trên các phiên bản cũ hơn của Sybase và SQL Server khi bạn có hai quy trình viết các hàng riêng biệt vào cùng một trang. Nếu bạn quay lại đủ xa (IIRC SQL Server 6.5) Máy chủ SQL thực sự không có khóa hàng mà chỉ có thể khóa bảng hoặc trang. Khi điều này xảy ra, bạn có thể có sự tranh chấp giữa các lần chèn các bản ghi trong cùng một trang; thông thường, bạn sẽ đặt một chỉ mục được nhóm trên bảng để chèn mới vào các trang khác nhau.


3
Cũng cần lưu ý rằng chúng tôi không có quyền kiểm soát khi máy chủ leo thang.

Chúng tôi làm ngay bây giờ. Nó gọi T1211.
Joshua

@Joshua, cờ theo dõi 1211 được sử dụng để vô hiệu hóa leo thang khóa. Không có cách nào để chúng tôi bảo SQL Server leo thang tại một thời điểm cụ thể.
Chỉ là người học

10
Khóa hàng không được chuyển đến Khóa trang, mà trực tiếp đến Khóa bảng.
Manoj Pandey

Đó là sự thật những gì Manoj đã nêu. Bạn nên sửa phần đó trong câu trả lời của mình để tránh gây hiểu lầm cho người dùng SQL Server ít kinh nghiệm hơn
NikolaD

20

Đây là một phương pháp để giảm chi phí hệ thống, bằng cách chuyển đổi nhiều khóa hạt mịn thành ít khóa hạt thô hơn. Thông tin chi tiết có thể được tìm thấy ở đâyở đây .

Ví dụ: nếu bạn có nhiều khóa (thường là hàng trăm hoặc nhiều hơn) trên các hàng cụ thể trong một bảng, một khi bạn vượt quá số lượng khóa được phép tối đa của mình, chúng có thể được đổi thành một khóa trên toàn bộ bảng.


11

SQL Server thực hiện Khóa Escalation để giảm chi phí bộ nhớ , bằng cách chuyển đổi một số khóa cấp thấp hạt mịn thành khóa cấp cao cấp hạt thô.

  • Khóa hàng luôn được chuyển đến Khóa bảng và
  • Khóa trang cũng được chuyển đến Khóa bảng.

Có một huyền thoại rằng các khóa Row được chuyển đến các khóa Trang , cùng được đề cập ở trên bởi @ConcernedOfTunbridgeWells là sai.

Nếu một bảng có rất ít cập nhật hàng, công cụ SQL sẽ cố lấy Khóa hàng trên các hàng đó hoặc Khóa trang trên các trang đó. Hãy nói rằng nó đã lấy Row-Lock. Nhưng nếu các bản cập nhật hàng tăng ngưỡng (~ 5k khóa) thì thay vì lấy một số Khóa hàng, bạn chỉ cần một Khóa bảng. Do đó, điều này làm giảm chi phí bộ nhớ bằng cách phát hành một số Khóa hàng và lấy một Khóa bảng duy nhất, nhưng làm tăng tính đồng thời. Điều tương tự cũng xảy ra với khóa Trang.

Ngưỡng khóa Escalation ít nhất là 5000 khóa và tùy thuộc vào một số yếu tố, một lời giải thích chi tiết về Khóa thang đã được đề cập ở đây trong MSDN BoL: https://technet.microsoft.com/en-us/l Library / ms184286 (v = sql.105) .aspx


5

Khóa leo thang có nghĩa là chuyển đổi khóa sang chế độ hạn chế hơn. Điều này thường thấy nhất trong cơ sở dữ liệu. Một truy vấn có thể bị khóa tài nguyên cho "chia sẻ" và chuyển nó thành "độc quyền" để thực hiện cập nhật.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.