Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Применимо к:SQL Server
Azure SQL База данных
Azure SQL Управляемый экземпляр
SQL База данных в Microsoft Fabric
В этой статье описывается фактор заполнения и как указать значение коэффициента заполнения для индекса с помощью SQL Server Management Studio или Transact-SQL.
Параметр fill factor предоставляется для оптимальной настройки производительности и управления хранением данных индексов. При создании или перестроении индекса значение коэффициента заполнения определяет процент пространства на каждой странице конечного уровня для заполнения данными, резервируя оставшуюся часть на каждой странице как свободное место для будущего роста. Например, указание значения коэффициента заполнения 80 означает, что 20 процентов каждой страницы конечного уровня останутся пустыми, предоставляя место для роста данных. Пустое пространство зарезервировано на каждой странице индекса, а не в конце индекса.
Значение коэффициента заполнения является процентом от 1 до 100, причем значение по умолчанию на уровне сервера — 0, что означает, что страницы конечного уровня заполняются до предела.
Note
Значения коэффициентов заполнения 0 и 100 идентичны.
В этом разделе
Перед началом:
Указание коэффициента заполнения для индекса с помощью следующих средств:
Перед началом
Рекомендации по производительности
Разделение страниц
При добавлении новой строки на полную страницу индекса ядро СУБД перемещает примерно половину строк на новую страницу, чтобы освободить место для новой строки. Такая реорганизация называется разбиением страницы. Разделение страниц делает место для новых строк, но если оно происходит в середине индекса, это может занять некоторое время и является ресурсоемкой операцией. Кроме того, это может привести к фрагментации, которая снижает эффективность предварительного чтения страниц во время сканирования больших индексов.
Правильно выбранное значение коэффициента заполнения может сократить разбиение страниц, предоставив достаточно места для расширения индекса при добавлении данных в середине индекса. Если разделение страниц влияет на производительность, индекс можно перестроить с помощью нового или существующего коэффициента заполнения в диапазоне от 70 до 95 процентов. Однако не уменьшайте коэффициент заполнения ненужно или не устанавливайте его слишком низко. Дополнительные сведения см. в статье "Оптимизация обслуживания индекса", чтобы повысить производительность запросов и сократить потребление ресурсов.
Большинство рабочих нагрузок выполняются оптимально с коэффициентом заполнения по умолчанию (100 процентов). При сниженном коэффициенте заполнения индекс требует больше места в хранилище, памяти и операций ввода-вывода диска, что может снизить производительность. Даже для рабочей нагрузки с интенсивной записью операции чтения базы данных обычно превышают количество операций записи в пять-десять раз. Поэтому указание коэффициента заполнения, отличного от значения по умолчанию, может увеличить использование ресурсов обратно пропорционально параметру коэффициента заполнения.
Например, значение коэффициента заполнения 50 удвоит объем операций ввода-вывода и памяти диска, необходимых для чтения и кэширования одного объема данных.
Данные, добавленные в конец таблицы
Более низкий коэффициент заполнения может уменьшить разбиение страниц и повысить производительность, если новые данные равномерно распределяются по индексу. Однако если новые данные добавляются в конец индекса, пустое пространство на страницах индекса может быть не заполнено. Например, если ключевой столбец индекса является столбцом IDENTITY , ключ для новых строк всегда увеличивается, и строки индекса логически добавляются в конец индекса.
Security
Permissions
Требуется разрешение ALTER для таблицы или представления. Пользователь должен быть членом фиксированной роли сервера sysadmin или db_ddladmin и db_owner фиксированных ролей базы данных.
Использование среды SQL Server Management Studio
Указание коэффициента заполнения с помощью конструктора таблиц
В обозревателе объектов щелкните значок плюса, чтобы развернуть базу данных, содержащую таблицу, в которой необходимо указать коэффициент заполнения индекса.
Чтобы развернуть папку Таблицы , щелкните значок «плюс».
Щелкните правой кнопкой мыши на таблице, для которой хотите указать коэффициент заполнения индекса, и выберите Конструктор.
В меню Конструктор таблиц выберите пункт Индексы и ключи.
Выберите индекс с коэффициентом заполнения, который необходимо указать.
Разверните Характеристики заполнения, выберите строку Коэффициент заполнения и введите в строке необходимый коэффициент заполнения.
Нажмите кнопку Закрыть.
В меню Файл выберите пункт Сохранитьимя_таблицы.
Указание коэффициента заполнения для индекса с помощью обозревателя объектов:
В обозревателе объектов щелкните значок плюса, чтобы развернуть базу данных, содержащую таблицу, в которой необходимо указать коэффициент заполнения индекса.
Чтобы развернуть папку Таблицы , щелкните значок «плюс».
Щелкните знак плюса (+), чтобы развернуть таблицу, для которой необходимо указать коэффициент заполнения индекса.
Чтобы развернуть папку Индексы , щелкните знак «плюс» (+).
Щелкните правой кнопкой мыши индекс с коэффициентом заполнения, который нужно указать, и выберите пункт Свойства.
В разделе Выбор страницыщелкните Параметры.
В строке Коэффициент заполнения введите нужный коэффициент заполнения.
Нажмите кнопку ОК.
Использование Transact-SQL
Указание коэффициента заполнения для существующего индекса
В обозревателе объектов подключитесь к экземпляру ядра СУБД.
На стандартной панели выберите пункт Создать запрос.
Скопируйте следующий пример в окно запроса и нажмите кнопку Выполнить. В примере существующий индекс перестраивается, и во время операции перестроения применяется указанный коэффициент заполнения.
USE AdventureWorks2022; GO -- Rebuilds the IX_Employee_OrganizationLevel_OrganizationNode index -- with a fill factor of 80 on the HumanResources.Employee table. ALTER INDEX IX_Employee_OrganizationLevel_OrganizationNode ON HumanResources.Employee REBUILD WITH (FILLFACTOR = 80); GO
Другой способ указания коэффициента заполнения в индексе
В обозревателе объектов подключитесь к экземпляру ядра СУБД.
На стандартной панели выберите пункт Создать запрос.
Скопируйте следующий пример в окно запроса и нажмите кнопку Выполнить.
USE AdventureWorks2022; GO -- Drops and re-creates the IX_Employee_OrganizationLevel_OrganizationNode index -- on the HumanResources.Employee table with a fill factor of 80. CREATE INDEX IX_Employee_OrganizationLevel_OrganizationNode ON HumanResources.Employee (OrganizationLevel, OrganizationNode) WITH (DROP_EXISTING = ON, FILLFACTOR = 80); GO
Дополнительные сведения см. в разделе ALTER INDEX (Transact-SQL).