коефіцієнт заповнення

Коефіцієнт заповнення (параметр fill factor) служить для точної настройки зберігання і продуктивності індексу. При створенні або перестроювання індексу коефіцієнт заповнення відображає відсоток заповнення простору кожної сторінки кінцевого рівня, що дозволяє зарезервувати для майбутнього розширення залишився на кожній сторінці простір як вільний. Наприклад, при вказівці для коефіцієнта заповнення значення 80 на кожній сторінці кінцевого рівня буде зарезервовано 20 відсотків займаного нею дискового простору. Дане дисковий простір буде використано для розширення індексу при додаванні в базову таблицю нових даних. Пусте місце резервується не в кінці індексу, а між рядками індексу.

Коефіцієнт заповнення - це значення у відсотках від 1 до 100; значення за замовчуванням на сервері - 0, що означає повне заповнення сторінок кінцевого рівня.

Значення коефіцієнта заповнення 0 і 100 рівнозначні.

Змінити коефіцієнт заповнення можна тільки при створенні та перешикування індексу. Компонент SQL Server Database Engine не зберігається динамічно вказаний процентний обсяг вільного місця на сторінках. Спроба виділення додаткового дискового простору для сторінок даних призводить до неефективного застосування коефіцієнта заповнення, так як при додаванні даних на сторінку компонент Database Engine виконує розбиття її вільного простору відповідно до заданого значення коефіцієнта заповнення.

розбиття сторінок

Правильний вибір значення коефіцієнта заповнення зменшує потенційний поділ сторінок, надаючи досить місця для збільшення індексу при додаванні даних в базову таблицю. При додаванні нового рядка на повністю заповнену сторінку компонент Database Engine переміщує половину наявних на ній даних на нову сторінку, таким чином звільняючи простір для нового рядка. Така реорганізація називається розбиттям сторінки. Операція розбиття статті дозволяє виділити простір для розміщення нових записів, проте є ресурсномісткої і може виконуватися тривалий час. Також зазначена операція може викликати фрагментацію, що призводить до збільшення кількості операцій введення-виведення. Для запобігання занадто частого розбиття сторінок необхідно перерозподілити дані, перебудувавши індекс за допомогою нового або вже існуючого коефіцієнта заповнення. Додаткові відомості див. У розділі Реорганізація і перестроювання індексів.

Хоча низьке значення коефіцієнта заповнення (відмінне від 0) може знизити необхідність у поділі сторінок при розширенні індексу, для його зберігання потрібно більший обсяг пам'яті, що призводить до зниження продуктивності. Навіть для додатків, орієнтованих на виконання безлічі операцій вставки і оновлення, кількість операцій зчитування зазвичай в 5-10 разів перевищує кількість операцій запису. Тому при завданні значення коефіцієнта заповнення, відмінного від значення за замовчуванням, продуктивність операцій зчитування знижується обернено пропорційно значенню коефіцієнта заповнення. Наприклад, значення коефіцієнта заповнення, рівне 50, може знизити продуктивність операцій читання в два рази. Продуктивність операцій читання знижується через те, що в індексі міститься більша кількість сторінок, що збільшує кількість операцій введення-виведення, що проводяться для вилучення даних.

Додавання даних в кінець таблиці

Ненульовий коефіцієнт заповнення, відмінний від 0 і 100, може підвищити продуктивність, якщо нові дані рівномірно розподіляються по таблиці. Однак, якщо дані додаються в кінець таблиці, порожнє місце на сторінках індексу заповнюватися не буде. Наприклад, якщо ключовим стовпцем індексу є стовпець IDENTITY, ключ для нових рядків буде постійно збільшуватися і рядки індексу будуть логічно додаватися в кінець індексу. Якщо існуючі рядки будуть оновлюватися даними, що збільшують розмір рядків, слід використовувати коефіцієнт заповнення менше 100. Додаткові байти на кожній сторінці допоможуть знизити до мінімуму розбиття сторінок за допомогою збільшення довжини рядків.

Схожі статті