Fill Factor (фактор заполнения) — это параметр, определяющий, насколько процентов будет заполнена каждая страница индекса при его создании или перестроении. Оставшееся пространство резервируется для будущих вставок.
-- Создание индекса с fill factor 80%
CREATE INDEX idx_customer_name ON customers(last_name)
WITH (FILLFACTOR = 80);
Разделение страницы — это процесс, при котором SQL Server разделяет переполненную страницу на две, когда необходимо вставить новую запись, а свободного места не хватает.
-- Мониторинг page splits
SELECT cntr_value AS page_splits_per_sec
FROM sys.dm_os_performance_counters
WHERE counter_name = 'Page Splits/sec'
AND object_name LIKE '%Buffer Manager%';
Высокий Fill Factor (90-100%):
Низкий Fill Factor (50-70%):
Высокий Fill Factor:
Низкий Fill Factor:
Мониторинг через DMV:
SELECT
object_name(object_id) AS table_name,
index_id,
leaf_allocation_count AS page_splits
FROM sys.dm_db_index_operational_stats(
DB_ID(), NULL, NULL, NULL);
Рекомендации:
Для таблицы с частыми вставками:
-- Перестроение индекса с оптимальным fill factor
ALTER INDEX idx_orders_date ON orders REBUILD
WITH (FILLFACTOR = 70, ONLINE = ON);
Резюмируем: Fill Factor — это важный параметр настройки производительности, который балансирует между эффективностью хранения данных и стоимостью операций модификации. Разделение страниц — неизбежный процесс при работе с индексами, но правильная настройка fill factor помогает минимизировать его негативное влияние.