Vấn đề phân mảnh chỉ mục sau khi vô hiệu hóa khóa cấp trang cho Chỉ mục


7

Tôi có một Chỉ mục bị khóa cấp độ trang bị vô hiệu hóa và bây giờ tôi có vấn đề phân mảnh chỉ mục cho chỉ mục đó.

Tôi đã nhận thức được rằng tôi sẽ không thể Reorganizelập chỉ mục, nhưng tôi tin rằng tôi sẽ có thể rebuildlập chỉ mục.

Bây giờ tôi nghĩ xây dựng lại cũng không hiệu quả. Tôi đang sử dụng hệ số lấp đầy mặc định là 100. Cơ sở dữ liệu của tôi rất lớn vì vậy tôi không muốn kích thước bảng / db được tăng lên bằng cách đưa ra hệ số lấp đầy từ 80% trở xuống. Bằng cách không hoạt động, tôi có nghĩa là Phân mảnh trung bình vẫn giữ nguyên sau khi chạy tập lệnh của Ola vào đêm hôm trước.

Một chút nền tảng về lý do tại sao khóa cấp độ trang bị vô hiệu hóa.

Tôi đã nhận được rất nhiều giao dịch deadlocksvề chỉ số này trong bảng cụ thể đó. Chiếc bàn này là một loại bàn thực tế insert, update and deleteđang diễn ra mọi lúc. Và có một số foreign keymối quan hệ với một vài bảng khác với CASCADE deletes. Vì vậy, tôi đã nhận được rất nhiều khóa / khóa chết và sau khi vô hiệu hóa khóa cấp độ trang, tôi đã có thể thoát khỏi tất cả những bế tắc đó.

Tôi bắt đầu sử dụng tập lệnh của Ola Hallengren cho Index maintenancevà tôi đã áp dụng Index Rebuild cho tất cả các chỉ mục mà Index sắp xếp lại không hoạt động. Nhưng tôi nhận thấy rằng Index Rebuild cũng không hoạt động.

Bây giờ, tôi thấy AveragePageFragmentaiton là 95,9413 và số trang là 1196826 cho chỉ mục, điều này không tốt.

Thông tin bổ sung:

Tôi đang sử dụng kịch bản của Ola Hall như hình bên dưới.

 EXECUTE dbo.IndexOptimize
    @Databases = 'DB_NAME',
    @FragmentationLow = NULL,
    @FragmentationMedium = 'INDEX_REORGANIZE,INDEX_REBUILD_ONLINE',
    @FragmentationHigh = ''INDEX_REORGANIZE,INDEX_REBUILD_ONLINE'',
    @FragmentationLevel1 = 5,
    @FragmentationLevel2 = 30,
    @SortInTempdb = 'Y',
    @MaxDOP = 0,
    @WaitAtLowPriorityMaxDuration = 0,
    @WaitAtLowPriorityAbortAfterWait= 'NONE',
    @Indexes = 'DB_NAME.[dbo].TB1,DB_NAME.[dbo].TB2'

Câu hỏi của tôi là làm thế nào để giảm sự phân mảnh trong một chỉ mục nếu khóa cấp độ trang bị vô hiệu hóa cho chỉ mục đó?


Có một varbinary(max)cột là LOB, nhưng nó không phải là một phần của chỉ mục.
dùng9516827

Câu trả lời:


13

Câu trả lời cho truy vấn của bạn được chôn trong một số tài liệu :

Xây dựng lại chỉ mục trực tuyến có thể tăng phân mảnh khi được phép chạy với các tùy chọn MAX DOP> 1 và ALLOW_PAGE_LOCKS = OFF.

Những lý do cho điều này được giải thích chi tiết trong bài đăng trên blog MSDN sau đây:

Cách thức hoạt động: Tái tạo chỉ mục trực tuyến - Có thể gây ra sự phân mảnh gia tăng

Một số tùy chọn để giải quyết vấn đề trong tình huống của bạn, nơi khóa trang bị vô hiệu hóa cho chỉ mục, là:

  • xây dựng lại ngoại tuyến
  • xây dựng lại tại MAXDOP 1
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.