Sự khác biệt giữa cấp độ hàng và khóa trang và hậu quả


10

Khi thử chạy Gói bảo trì của tôi, tôi nhận được lỗi sau:

Thực hiện truy vấn "" không thành công với lỗi sau: "Chỉ mục" "(phân vùng 1) trên bảng" "không thể được tổ chức lại vì khóa cấp độ trang bị vô hiệu hóa."

Chúng tôi hiện có khóa Cấp độ được bật trên Chỉ mục này. Tôi có thể kích hoạt khóa Cấp độ Trang, nhưng tôi không chắc tác động của nó là gì.

Câu hỏi của tôi là: sự khác biệt giữa hai phương án khóa và hậu quả trong thế giới thực (trong sản xuất) của chúng là gì?

Câu trả lời:


14

Thực hiện truy vấn "" không thành công với lỗi sau: "Chỉ mục" "(phân vùng 1) trên bảng" "không thể được tổ chức lại vì khóa cấp độ trang bị vô hiệu hóa."

Kế hoạch bảo trì phải được thử ALTER INDEX REORGANIZE, đây là một hoạt động trực tuyến. Để xóa phân mảnh (các trang không theo thứ tự), các trang phải được khóa và di chuyển, điều này là không thể nếu khóa trang đã bị vô hiệu hóa. Cách duy nhất để chống phân mảnh mà không cần khóa trang là khóa toàn bộ phân vùng, điều này là không thể đối với REORGANIZE vì nó chỉ trực tuyến.

Sự khác biệt giữa hai chương trình khóa và hậu quả trong thế giới thực (trong sản xuất) của chúng là gì?

Bạn cần nắm được bản ghi và trang là gì để đánh giá tác động của việc không cho phép một loại khóa cụ thể. Nếu bạn không quen thuộc với các bộ lưu trữ SQL Server, hãy bắt đầu với Anatomy of a Record and Anatomy of a Page . Đặt rất đơn giản:

  • hàng = hồ sơ
  • hàng được lưu trữ trong các trang 8kb

Nếu bạn đã thay đổi các loại khóa được phép:

  • Vô hiệu hóa khóa trang = Chỉ khóa hàng và bảng
  • Vô hiệu hóa khóa hàng = Chỉ khóa trang và bảng
  • Vô hiệu hóa cả hai = Chỉ khóa bảng

Có hai kịch bản tôi biết nơi nào có thể có ích khi không cho phép loại khóa. Không có nghĩa là không có người khác, hy vọng người khác sẽ bước vào với các ví dụ.

Bảng tra cứu được truy cập thường xuyên, thay đổi không thường xuyên - Bằng cách vô hiệu hóa cả khóa cấp độ trang và hàng, tất cả người đọc sẽ thực hiện khóa bảng chia sẻ. Điều này nhanh hơn / rẻ hơn thay vì chia sẻ ý định thông thường trên bàn, theo sau là chia sẻ ý định trên một trang và cuối cùng là khóa chia sẻ trên một hàng hoặc hàng cụ thể.

Ngăn chặn một kịch bản bế tắc cụ thể - Nếu bạn gặp phải các bế tắc gây ra bởi các quy trình đồng thời có được các khóa thường xuyên trên cùng một trang, việc không cho phép khóa hàng dẫn đến việc khóa trang được thực hiện thay thế. Chỉ một quá trình sau đó có thể truy cập trang tại một thời điểm, quá trình khác phải chờ.

Ví dụ đầu tiên là tối ưu hóa vi mô và không có khả năng mang lại lợi ích có thể đo lường được trên một hệ thống điển hình. Thứ hai sẽ giải quyết tình huống bế tắc cụ thể đó nhưng có thể gây ra các tác dụng phụ không mong muốn, ví dụ như tiêu diệt đồng thời trong một phần khác của mã. Khó đánh giá tác động đầy đủ, tiếp cận thận trọng!

Mặc định là cho cả hai được kích hoạt và điều này không nên thay đổi mà không có lý do chính đáng.


9

Có lẽ không có gì. Tôi chắc rằng MS biết rõ hơn bạn hoặc tôi

Tôi đã làm việc trên các hệ thống OLTP khối lượng lớn và chưa bao giờ cảm thấy cần phải thay đổi cài đặt. Một bế tắc nên được thử lại bởi vì dù sao chúng sẽ xảy ra

Trích dẫn từ blog Công cụ lưu trữ SQL Server, "Khóa nâng cấp trong SQL2005" n đáng để đọc hoàn toàn.

Theo mặc định, chúng tôi đã bật cả khóa ROW và PAGE ... SQL Server chọn độ chi tiết khóa ROW cho hầu hết các trường hợp nhưng có thể chọn khóa PAGE khi thích hợp. Vì vậy, đối với trường hợp bạn đã chỉ định, khóa ROW có khả năng. Không có cách nào để tắt khóa PAGE ở mức cơ sở dữ liệu hoặc thể hiện. Bạn đang gặp phải chặn do khóa PAGE?

Tôi nghĩ rằng nếu bạn chỉ ép buộc chèo thì bạn sẽ tiêu thụ tài nguyên có thể được sử dụng hiệu quả hơn ở nơi khác. Nếu tải của bạn đủ cao đến mức nó quan trọng, thì tại sao lại tiêu thụ bộ nhớ? Bài viết blog đi sâu vào vấn đề này

Tôi nghi ngờ có một số mê tín đằng sau điều này, giống như thế này:


+1 nhưng: có thể ngăn chặn các bế tắc trong hệ thống OLTP; hệ thống của tôi chạy bế tắc trong nhiều tháng, mặc dù chúng tôi triển khai 2-3 lần một tuần.
AK
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.