Tại sao chỉ mục REBUILD không làm giảm phân mảnh chỉ mục?


30

Tôi đã sử dụng ALTER INDEX REBUILD để loại bỏ phân mảnh chỉ mục. Trong một số trường hợp, REBUILD dường như không loại bỏ sự phân mảnh này. Các lý do tại sao REBUILD không loại bỏ phân mảnh là gì? Có vẻ như điều này xảy ra đặc biệt với các chỉ số nhỏ.


Câu trả lời:


39

Nếu một chỉ mục rất nhỏ (tôi tin rằng ít hơn 8 trang), nó sẽ sử dụng các phạm vi hỗn hợp. Do đó, nó sẽ xuất hiện như thể vẫn còn phân mảnh, vì phạm vi nhà ở sẽ chứa các trang từ nhiều chỉ mục.

Bởi vì điều này, và thực tế là trong một chỉ mục nhỏ như vậy mà sự phân mảnh thường không đáng kể, bạn thực sự chỉ nên xây dựng lại các chỉ mục với một ngưỡng trang nhất định. Đó là cách thực hành tốt nhất để xây dựng lại các chỉ mục phân mảnh tối thiểu 1000 trang .


34

Điều này cũng có thể xảy ra với các chỉ số rất LỚN.

Tôi đã có một số chỉ mục trên một bảng với khoảng 700m hàng mà tôi không thể chống phân mảnh dưới 30%. Vấn đề không đủ không gian trống liền kề bên trong cơ sở dữ liệu để sắp xếp chỉ mục liên tiếp.

Để làm việc xung quanh một chỉ mục rất lớn không bị phân mảnh, giải pháp TỐT NHẤT là định cỡ trước một cơ sở dữ liệu mới và di chuyển tất cả các đối tượng của bạn đến DB đó, sau đó tạo lại các chỉ mục của bạn ở đó.


1

Tôi đã đấu tranh với điều này đôi khi và giống như JNK tôi mặc dù vấn đề vẫn tiếp tục là không gian trống và sự phân mảnh vật lý trên đĩa. Tuy nhiên, bạn sẽ làm gì với điều đó trên SSD SAN?

Bây giờ tôi đã phát hiện ra rằng có thể chỉ nên bao gồm index_level = 0. Đây là cách nó được thực hiện trong kịch bản của Ola Hallengren.

Một cải tiến khác là làm

 REBUILD With (maxdop = 1)

Bằng cách này bạn đảm bảo cải thiện tối đa.

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.