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?
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:
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.
Đâ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 và ở đâ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.
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ô.
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