Sự nhầm lẫn phân chia trang MS SQL


7

Tôi hơi bối rối về việc chia trang trong MS SQL và tôi đang tìm kiếm một câu trả lời dứt khoát. Dường như có hai phiên bản của câu chuyện:

1 - Fillfactor chỉ ảnh hưởng đến mức độ đầy đủ của các trang tại thời điểm chỉ mục được tạo / xây dựng lại. Chia tách trang luôn là 50/50

2 - Fillfactor cũng ảnh hưởng đến cách chia trang. Vì vậy, nếu có 70% fillfactor và một trang bị tràn, nó sẽ chia 70/30

Cảm ơn rất nhiều


1
Tài liệu này hỗ trợ phiên bản 1 ( msdn.microsoft.com/en-us/l Library / ms177459.aspx ), trong đó nêu khoảng một nửa số hàng được di chuyển.
Dan Guzman

Câu trả lời:


9

Từ Sách trực tuyến (nhấn mạnh của tôi):

FILLFACTOR = fillfactor Áp dụng cho: SQL Server 2008 đến SQL Server 2016, SQL Database V12.

Chỉ định tỷ lệ phần trăm cho biết mức độ đầy đủ của Công cụ cơ sở dữ liệu để tạo mức lá của mỗi trang chỉ mục trong khi tạo hoặc xây dựng lại chỉ mục . fillfactor phải là một giá trị nguyên từ 1 đến 100. Nếu fillfactor là 100, Công cụ cơ sở dữ liệu sẽ tạo các chỉ mục với các trang lá được điền vào dung lượng.

Cài đặt FILLFACTOR chỉ áp dụng khi chỉ mục được tạo hoặc xây dựng lại . Công cụ cơ sở dữ liệu không tự động giữ tỷ lệ phần trăm trống được chỉ định trong các trang. Để xem cài đặt hệ số điền, sử dụng chế độ xem danh mục sys.indexes.

Yếu tố điền vào áp dụng cho các trang lá. PAD_INDEX sẽ xác định điều gì xảy ra với các trang không có lá. Từ cùng một trang BoL:

PAD_INDEX = {BẬT | TẮT }

ON Tỷ lệ phần trăm không gian trống được chỉ định bởi fillfactor được áp dụng cho các trang cấp trung gian của chỉ mục.

TẮT hoặc fillfactor không được chỉ định Các trang cấp trung gian được điền đến gần dung lượng

Việc chia trang có thể xảy ra ở tất cả các cấp của BTree, bao gồm cả cấp gốc. Tuy nhiên, do fan-out, tần suất phân chia các trang trung gian (thường) là một thứ tự cường độ nhỏ hơn tần số mà tại đó lá bị tách ra. Ngoài ra có rất nhiều trang không lá ít hơn trang lá. Do đó, PAD_INDEX ít liên quan hơn FILLFACTOR. Vẫn đáng suy nghĩ, đặc biệt là về các chỉ mục được chèn ngẫu nhiên.

Trong quá trình viết, các trang sẽ được lấp đầy tới 100%. Sau đó, họ sẽ chia 50/50 hoặc càng gần càng tốt để đảm bảo mỗi hàng được chứa hoàn toàn trên một trang. Tôi tin rằng sự phân chia luôn là 50/50. Tuy nhiên, việc viết tiếp theo có thể bị sai lệch, do đó, một trong những trang mới điền nhanh hơn nhiều so với trang kia.


Cảm ơn bạn vì câu trả lời. Tôi đoán có thể có những tình huống trong cuộc sống thực, nơi sự chia tách không ở đâu gần 50/50. Xin làm rõ một điều: làm như vậy chỉ thực sự áp dụng cho các trang lá? Tôi nghĩ rằng việc chia trang cũng liên quan đến các cấp độ trung gian và fillfactor cũng áp dụng cho chúng.
Mashchax

@Mashchax Chia tách trang có thể không phải luôn luôn là 50/50, chúng có thể bị lởm chởm. Yếu tố điền chỉ áp dụng cho các trang lá như Michael đã nói.
Sean Gallardy - Người dùng đã nghỉ hưu

Giải thích tuyệt vời, đặc biệt là việc làm rõ rằng nó chỉ áp dụng cho việc tạo / xây dựng lại chỉ mục; đó là một điều dễ bỏ lỡ
Bruno Guardia

@SeanGallardy Trong trường hợp nào thì sự chia tách sẽ không đồng đều? Bất kỳ liên kết bên ngoài nào bạn có thể chia sẻ?
Michael Green

@MichaelGreen "Nó phụ thuộc" :) và không, không được ghi nhận công khai.
Sean Gallardy - Người dùng đã nghỉ hưu
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.