Làm thế nào để SQL Server giảm phân mảnh chỉ mục?


7

Nếu người dùng không bao giờ chạy REBUILDhoặc REORGANIZEtrên cơ sở dữ liệu của họ, SQL Server vẫn bằng cách nào đó chống phân mảnh các chỉ mục?

MSDN gợi ý rằng nếu một chỉ mục bị phân mảnh trên 30%, thì nên chạy REBUILDthay vì REORGANIZE. Sẽ chạy REORGANIZEnhiều lần làm những điều tương tự như REBUILD?

Tôi tự hỏi về điều này bởi vì tôi có một khách hàng có chỉ số phân mảnh cao. Họ chạy đua REORGANIZEvới chỉ số đó mỗi cuối tuần, và theo thời gian có vẻ như chỉ số của họ trở nên phân mảnh.

Điều này có nghĩa không?

Câu trả lời:


11

Không, không có tự động chống phân mảnh chỉ số. Nếu bạn có phân mảnh, bạn cần REBUILDhoặc REORGANIZE.

Sắp xếp lại một chỉ mục chống phân mảnh cấp độ lá của một chỉ mục bằng cách sắp xếp lại các trang vật lý để phù hợp với thứ tự hợp lý. Thời lượng khóa là ngắn và sẽ gây ra chặn truy vấn tối thiểu.

Rebuild giảm một chỉ mục và xây dựng một chỉ số mới. Với phiên bản Enterprise, điều này có thể được thực hiện như một thao tác trực tuyến nếu chỉ mục không bao gồm bất kỳ loại LOB nào. Với phiên bản Tiêu chuẩn hoặc nơi tồn tại các loại LOB, nó sẽ gây ra chặn. Xem cách thức hoạt động của chỉ mục trực tuyến hoạt động để biết giải thích về cách xây dựng lại trực tuyến có thể xảy ra đồng thời với hoạt động của người dùng.

Đề xuất sắp xếp lại so với tái tạo gần như là ngưỡng mà số lượng công việc cần thiết để chống phân mảnh bằng cách sắp xếp lại có thể so sánh với việc xây dựng lại, tức là ở mức phân mảnh> 30%, nó sẽ đòi hỏi nhiều tài nguyên hơn và thời gian trôi qua nhiều hơn để hoàn thành việc sắp xếp lại.

Nhiều lần tổ chức lại các lần chạy sẽ không tiếp tục phân mảnh chỉ mục.


6

Nếu người dùng không bao giờ chạy REBUILD hoặc REORGANIZE trên cơ sở dữ liệu, liệu công cụ SqlServer có chống phân mảnh các chỉ mục không?

Không.

Sẽ chạy REORGANIZE nhiều lần để làm những việc tương tự như REBUILD

Cũng không.

A REORGANIZEsắp xếp lại các trang lá (các trang chứa dữ liệu chỉ mục thực tế) theo đúng thứ tự theo thông số kỹ thuật của chỉ mục. Các trang cũng có thể được hợp nhất và các trang trống bị bỏ, nhưng không có trang mới nào được phân bổ và cấu trúc và thống kê btree sẽ không được xây dựng lại.

A làm REBUILDgiảm chỉ số cũ và làm cho nó từ đầu. Điều này cập nhật tất cả các cấu trúc cây b, loại bỏ không gian chùng không cần thiết và đặt phân mảnh về 0 (hoặc gần bằng 0 khi tính liên tục của các trang miễn phí trong cơ sở dữ liệu cho phép).


5

Không có SQL Server nào không thực hiện bất kỳ loại bảo trì tự động nào.

Chạy REORGANIZEnhiều lần sẽ không có hiệu lực sau lần chạy thành công đầu tiên (bỏ qua các trang được sửa đổi kể từ khi được sắp xếp lại hoặc những trang không thể khóa và do đó bỏ qua lần thử đầu tiên).

Nó hoán đổi các trang theo thứ tự theo đúng thứ tự để một khi nó đã thực hiện điều đó và tất cả chúng đều theo đúng thứ tự các lần chạy bổ sung sẽ không có hiệu lực. Nó không thể loại bỏ sự phân mảnh phát sinh do phân bổ không liền kề. Cho rằng bạn cần phải xây dựng lại.


4

Tôi chỉ muốn thêm một số điểm vào câu trả lời hiện có:

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.