Giá trị đúng cho hệ số điền cho các chỉ mục được nhóm với các khóa nhận dạng thay thế


8

Tôi có một bảng lớn có chỉ mục được nhóm với khóa chính nhận dạng. Tôi đang quyết định giá trị chính xác cho hệ số điền cho bảng này để giảm thiểu việc chia trang. Chúng tôi duy trì các chỉ mục bằng cách sử dụng tập lệnh chạy hàng ngày để đo lường sự phân mảnh và thực hiện hành động thích hợp. Bảng chứa các cột có chiều dài thay đổi.

Suy nghĩ đầu tiên của tôi là đặt nó ở mức 100 (vì các bản ghi chỉ nên được ghi vào cuối bảng) nhưng tôi cho rằng các thay đổi đối với các cột có chiều dài thay đổi cũng có thể gây ra sự phân tách trang, vì vậy tôi hiện đang hướng tới 90.

Mọi lời khuyên đánh giá cao.

Câu trả lời:


6

Nó phụ thuộc

Đó là một hành động cân bằng. Nếu bảng của bạn được đọc chuyên sâu, không có nhiều cập nhật hoặc xóa thì mặc định (là 100) sẽ ổn.

Nếu bảng của bạn rất chuyên sâu, với nhiều cập nhật, thì giá trị dưới 80 có thể phù hợp hơn.

Không có công thức kỳ diệu cho công cụ này. (AFAIK, nếu có xin vui lòng cho tôi biết) Điều tốt nhất để làm là có một môi trường thử nghiệm, có một số khối lượng công việc để kiểm tra. Thực hiện các thay đổi và xem cách cơ sở dữ liệu của bạn thực hiện với khối lượng công việc.


8

Nick khá đúng.

Nếu bạn thực hiện các cập nhật làm tăng kích thước của bản ghi trên các trang được đóng gói, thì bạn sẽ gây ra sự chia tách trang, nhưng ngoài điều đó, với khóa chính danh tính, sẽ không có gì gây ra sự phân tách trang trong chỉ mục được nhóm.

(Mặc dù nói rằng, có 5 loại phân chia trang mà Công cụ lưu trữ có thể thực hiện và không phải tất cả chúng đều gây ra sự phân mảnh và di chuyển dữ liệu - loại bạn nhận được khi chèn các giá trị nhận dạng tăng dần theo cách đơn lẻ là phân chia cuối trang. Tôi lạc đề ...)

Tôi đã giúp nhiều khách hàng với điều này và tôi đã viết BOL xung quanh tất cả - nếu bạn chỉ muốn chọn một giá trị là cổ phần, 70% đã thấy thành công nhất. Như Nick nói, theo dõi và điều chỉnh khi thích hợp.

Chọn một fillfactor cho bất kỳ chỉ mục nào là một hành động cân bằng về mức độ hoạt động xảy ra, đẩy mức độ đầy đủ của trang lên 100% và tần suất bạn có thể thực hiện hành động khắc phục để đặt lại fillfactor. Bạn cần suy nghĩ về việc ban đầu sẽ bị lãng phí bao nhiêu dung lượng trên các trang nếu bạn đặt fillfactor thực sự thấp, như 50%, nhưng một lần nữa tôi lại thấy điều này phù hợp trong một số trường hợp.

Bạn cũng nên xem xét cách sử dụng chỉ mục. Nếu nó chỉ dành cho tra cứu đơn lẻ, bạn có thể thoát khỏi trình bổ sung thấp hơn và có nhiều thời gian hơn giữa việc xây dựng lại / phân mảnh vì bạn sẽ không lãng phí quá nhiều IO / bộ nhớ do có nhiều chỉ số được phân cụm thưa thớt trong bộ nhớ. Để thực hiện quét phạm vi lớn, bạn muốn có fillfactor cao hơn một chút, để tăng hiệu quả IO và bộ nhớ.

Ngoài ra còn có câu hỏi OLTP vs DW - thường thì DW không thay đổi nên các chỉ mục sẽ có fillfactor 100%. OLTP là phần khó.

Sau khi bạn đã sắp xếp chỉ mục được nhóm, hãy nhớ rằng những người không độc quyền cũng sẽ cần chú ý vì rất có thể họ sẽ bị phân mảnh.

Khi đặt lại fillfactor, hãy nhớ rằng bạn có lựa chọn giữa xây dựng lại và chống phân mảnh. DBCC INDEXDEFRAG / ALTER INDEX ... REORGANIZE có thể đặt lại fillfactor trong một số trường hợp cho các chỉ mục không bị phân mảnh xấu.

Hi vọng điêu nay co ich!

(Xin lỗi vì 'câu trả lời quá mức' - một trong những nút nóng của tôi, đã viết mã :-)

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.